Come creare una directory usando Ansible


Risposte:


637

Vuoi il modulo file. Per creare una directory, è necessario specificare l'opzione state=directory:

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

Puoi vedere altre opzioni su http://docs.ansible.com/file_module.html


36
Se state=directory, tutte le sottodirectory immediate verranno create se non esistono, dal 1.7 verranno create con le autorizzazioni fornite.
Alex,

1
@Alex all immediate subdirectoriesè confuso, potresti definirlo e fare un esempio?
Jamie Jackson,

8
@JamieJackson C'è un errore, dovrebbero essere "tutte le sottodirectory intermedie".
Alex,

203

Puoi anche estendere il modulo file e persino impostare il proprietario, il gruppo e l'autorizzazione attraverso di esso. (Rif: documentazione file di risposta )

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

Puoi anche creare ricorsivamente le directory:

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

In questo modo, creerà entrambe le directory, se non esistessero.


38
L' recursiveargomento lo rende molto simile all'uso mkdir -p(per chi cerca su Google mkdir -p ).
Micah Elliott il

2
Ho scoperto che cambia anche i permessi dei file figlio ... quasi come mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. Qualcun altro lo ha osservato con Ansible 2.0.0.2
ThePracticalOne

6
Il recurseparametro non piace mkdir -p. Imposta in modo ricorsivo gli attributi del file specificato (si applica solo a state = directory). Se state=directory, tutte le sottodirectory immediate verranno create se non esistono, dal 1.7 verranno create con le autorizzazioni fornite.
Alex,

1
questo utilizza la vecchia sintassi con i =caratteri, sarebbe bello aggiornarla con la :sintassi con ogni attributo su una nuova riga
ympostor

@ThePracticalOne - Sì ... l'uso di "recurse" si comporta esattamente allo stesso modo chmod -R. Cioè, se pathesiste già come dir e ci sono file al suo interno, l' recurseopzione (a volte purtroppo) applicherà anche le stesse autorizzazioni ai file. Questo è di progettazione , nel bene o nel male.
Dale Anderson,


14

La directory può essere creata utilizzando solo il modulo file, poiché la directory non è altro che un file.

# 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

È in questo modo che puoi anche impostare le autorizzazioni, il proprietario e il gruppo. Gli ultimi tre parametri non sono obbligatori.



7

Aggiuntivo per tutte le risposte qui, ci sono molte situazioni in cui è necessario creare più di una directory, quindi è una buona idea usare i loop invece di creare attività separate per ciascuna directory.

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

3

Devo solo mettere le condizioni per eseguire l'attività per una distribuzione specifica

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

3

Puoi usare la dichiarazione

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

3

Se si desidera creare una directory in Windows:

  • nome: Crea struttura directory
    win_file:
    percorso: C: \ Temp \ cartella \ sottocartella>
    stato: directory


2

Abbiamo moduli disponibili per creare directory, file in ansible

Esempio

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

1

È possibile eseguire direttamente il comando e creare direttamente utilizzando ansible

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

O

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

Il playbook sopra creerà la directory www nel percorso / src.

Prima di correre sopra il playbook. Assicurati di impostare la tua connessione host sensibile,

"localhost ansible_connection = local"

dovrebbe essere presente in / etc / ansible / hosts

per ulteriori informazioni per favore fatemi sapere.


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

1

per creare una directory

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

1

Utilizzare il modulo file per creare una directory e ottenere i dettagli sul modulo file utilizzando il comando "file ansible-doc"

Ecco un'opzione "state" che spiega:

Se directory, tutte le sottodirectory immediate verranno create se non esistono, dal 1.7 verranno create con le autorizzazioni fornite.
Se file, il file NON verrà creato se non esiste, vedere il modulo [copia] o [modello] se si desidera quel comportamento.
Se link, il collegamento simbolico verrà creato o modificato. Utilizzare hardper hardlink.
Se absent, le directory verranno eliminate in modo ricorsivo e i file o i collegamenti simbolici verranno scollegati.

Nota che filenon fallirà se il percorso non esiste poiché lo stato non è cambiato.

Se touch(nuovo in 1.4), verrà creato un file vuoto se il percorso non esiste, mentre un file o una directory esistente riceveranno tempi di accesso e modifica dei file aggiornati (simile al modo in cui touchfunziona dalla riga di comando).



1

Il modo più semplice per creare una directory in Ansible.

  • name: crea la tua directory se non esiste. file: percorso: / etc / your_directory

O

Volete dare i privilegi di sudo a quella directory.

  • name: crea la tua directory se non esiste. file: percorso: / etc / modalità your_directory: '777'

0

Vedo molti esempi di Playbook e vorrei menzionare l'esempio dei comandi Adhoc.

$ ansible -i inventario -m file -a "path = / tmp / direcory state = directory (invece della directory possiamo menzionare il tocco per creare file)


0

È necessario utilizzare il modulo file per questo caso. Sotto il playbook puoi usare come riferimento.

    ---
     - 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

Per verificare se esiste una directory e quindi eseguire alcune attività (ad esempio, creare una directory), utilizzare quanto segue

- 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

Vuoi il filemodulo. Per creare una directory, è necessario specificare l'opzione state: directory:

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

-5

qui è il modo più semplice.

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


2
questo non è idempotente.
qubsup
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.