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

leucos
la source
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.

Arbab Nazar
la source
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

vous pouvez créer en utilisant:

Dernière version 2 <

- name: Create Folder
  file: 
    path: /srv/www/
    owner: user 
    group: user 
    mode: 0755 
    state: directory

Ancienne version

- name: Create Folder
  file: 
   path=/srv/www/
   owner=user 
   group=user 
   mode=0755 
   state=directory

Référer - http://docs.ansible.com/ansible/file_module.html

Chathuranga Abeyrathna
la source
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
user3004224
la source
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.

qubsup
la source
7

Vous pouvez créer un répertoire. en utilisant

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755

Vous pouvez également consulter http://docs.ansible.com/ansible/file_module.html pour plus de détails sur le répertoire et le système de fichiers regaridng.

Ali Warrich
la source
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
Andrey Bistrinin
la source
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'
Bhavesh Vasoya
la source
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`
Mazi
la source
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

Alexandru Muica
la source
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
Mohd Umar Mubeen
la source
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
RegexCracker
la source
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.

Saurabh
la source
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"
sachin_ur
la source
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).

Priyanka Bhardwaj
la source
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 !!!

user11345576
la source
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'
Muhammad Ahmad
la source
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)

Kandasamy Murugan
la source
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 
S.MANDAL
la source
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
Levon
la source
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
Devang Radadiya
la source
-5

ici est plus facile.

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

Ender Wan
la source
2
ce n'est pas idempotent.
qubsup