Comment créer un répertoire à l'aide d'Ansible


Réponses:


637

Vous voulez le module de fichiers. Pour créer un répertoire, vous devez spécifier l'option state=directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

Vous pouvez voir d'autres options sur http://docs.ansible.com/file_module.html


36
Si state=directory, tous les sous-répertoires immédiats seront créés s'ils n'existent pas, puisque 1.7 ils seront créés avec les autorisations fournies.
Alex

1
@Alex all immediate subdirectoriesprête à confusion, pourriez-vous définir cela et donner un exemple?
Jamie Jackson

8
@JamieJackson Il y a une erreur, devrait être "tous les sous-répertoires intermédiaires".
Alex

203

Vous pouvez même étendre le module de fichiers et même définir le propriétaire, le groupe et l'autorisation à travers lui. (Réf: documentation du fichier Ansible )

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775

Même, vous pouvez créer les répertoires de manière récursive:

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
    recurse: yes

De cette façon, il créera les deux répertoires, s'ils n'existaient pas.


38
L' recursiveargument en fait un peu comme l'utilisation mkdir -p(pour ceux qui recherchent un google ansible mkdir -p ).
Micah Elliott

2
J'ai trouvé que cela modifiait également les autorisations des fichiers enfants ... presque comme mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. quelqu'un d'autre a-t-il observé cela avec Ansible 2.0.0.2
ThePracticalOne

6
Le recurseparamètre n'aime pas mkdir -p. Il définit de manière récursive les attributs de fichier spécifiés (s'applique uniquement à state = directory). Si state=directory, tous les sous-répertoires immédiats seront créés s'ils n'existent pas, puisque 1.7 ils seront créés avec les autorisations fournies.
Alex

1
cela utilise l'ancienne syntaxe avec les =caractères, serait génial de la mettre à jour avec la :syntaxe avec chaque attribut sur une nouvelle ligne
ympostor

@ThePracticalOne - Oui ... l'utilisation de "recurse" se comporte exactement de la même manière chmod -R. Autrement dit, s'il pathexiste déjà en tant que répertoire et qu'il contient des fichiers, l' recurseoption appliquera (parfois malheureusement) également ces mêmes autorisations aux fichiers. C'est par conception , pour le meilleur ou pour le pire.
Dale Anderson,


14

Le répertoire peut être créé à l'aide du module de fichiers uniquement, car le répertoire n'est rien d'autre qu'un fichier.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo

8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

C'est ainsi que vous pouvez également définir les autorisations, le propriétaire et le groupe. Les trois derniers paramètres ne sont pas obligatoires.



7

Pour toutes les réponses supplémentaires ici, il y a beaucoup de situations où vous devez créer plus d'un répertoire, c'est donc une bonne idée d'utiliser des boucles au lieu de créer une tâche distincte pour chaque répertoire.

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar

3

Il suffit de mettre une condition pour exécuter la tâche pour une distribution spécifique

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'

3

Vous pouvez utiliser la déclaration

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`

3

Si vous souhaitez créer un répertoire sous Windows:

  • nom: créer la structure du répertoire
    fichier_win:
    chemin: C: \ Temp \ dossier \ sous-dossier>
    état: répertoire


2

Nous avons des modules disponibles pour créer un répertoire, un fichier en ansible

Exemple

- name: Creates directory
  file:
    path: /src/www
    state: directory

1

Vous pouvez directement exécuter la commande et créer directement en utilisant ansible

ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser

OU

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser

1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

Le playbook ci-dessus créera le répertoire www dans le chemin / src.

Avant de courir au-dessus du playbook. Veuillez vous assurer que votre connexion hôte ansible doit être définie,

"localhost ansible_connection = local"

doit être présent dans / etc / ansible / hosts

pour plus d'informations, veuillez me le faire savoir.


file: path = / src / www state = directory
Saurabh

1

créer un répertoire

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"

1

Utilisez le module de fichiers pour créer un répertoire et obtenir les détails sur le module de fichiers en utilisant la commande "ansible-doc file"

Voici une option "état" qui explique:

Si directory, tous les sous-répertoires immédiats seront créés s'ils n'existent pas, puisque 1.7 ils seront créés avec les autorisations fournies.
Si file, le fichier ne sera PAS créé s'il n'existe pas, consultez le module [copie] ou [modèle] si vous souhaitez ce comportement.
Si link, le lien symbolique sera créé ou modifié. Utilisez hardpour les liens durs.
Si absent, les répertoires seront supprimés récursivement et les fichiers ou liens symboliques seront dissociés.

Notez que filecela n'échouera pas si le chemin n'existe pas car l'état n'a pas changé.

Si touch(nouveau dans la version 1.4), un fichier vide sera créé si le chemin d'accès n'existe pas, tandis qu'un fichier ou un répertoire existant recevra des temps d'accès et de modification de fichier mis à jour (similaire à la façon dont touchfonctionne à partir de la ligne de commande).


1

vous pouvez utiliser le module "fichier" dans ce cas, il y a tellement d'arguments que vous pouvez passer pour un répertoire nouvellement créé comme le propriétaire, le groupe, l'emplacement, le mode et ainsi de suite .....

veuillez vous référer à ce document pour l'explication détaillée sur le module de fichiers ...

https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

rappelez-vous que ce module n'est pas seulement destiné à créer le répertoire !!!


1

Le moyen le plus simple de créer un répertoire dans Ansible.

  • nom: créez votre_répertoire s'il n'existe pas. fichier: chemin: / etc / votre_répertoire

OU

Vous souhaitez accorder des privilèges sudo à ce répertoire.

  • nom: créez votre_répertoire s'il n'existe pas. fichier: chemin: / etc / votre_répertoire: '777'

0

Je vois beaucoup d'exemples Playbooks et je voudrais mentionner l'exemple des commandes Adhoc.

$ ansible -i inventaire -m fichier -a "path = / tmp / direcory state = répertoire (au lieu du répertoire, nous pouvons mentionner toucher pour créer des fichiers)


0

Vous devez utiliser le module de fichiers pour ce cas. Ci-dessous le playbook, vous pouvez utiliser pour votre référence.

    ---
     - hosts: <Your target host group>
       name: play1
       tasks: 
        - name: Create Directory
          files:
           path=/srv/www/
           owner=<Intended User>
           mode=<Intended permission, e.g.: 0750>
           state=directory 

0

Pour vérifier si le répertoire existe, puis exécuter une tâche (par exemple, créer un répertoire), utilisez ce qui suit

- name: Check if output directory exists
    stat:
    path: /path/to/output
    register: output_folder

- name: Create output directory if not exists
    file:
    path: /path/to/output
    state: directory
    owner: user
    group: user
    mode: 0775
    when: output_folder.stat.exists == false

0

Vous voulez le filemodule. Pour créer un répertoire, vous devez spécifier l'option state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

-5

ici est plus facile.

- name: create dir command: mkdir -p dir dir/a dir/b


2
ce n'est pas idempotent.
qubsup
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.