So erstellen Sie ein Verzeichnis mit Ansible

Antworten:

637

Sie möchten das Dateimodul. Um ein Verzeichnis zu erstellen, müssen Sie die folgende Option angeben state=directory:

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

Weitere Optionen finden Sie unter http://docs.ansible.com/file_module.html

Leukos
quelle
36
Wenn state=directory, werden alle unmittelbaren Unterverzeichnisse erstellt, wenn sie nicht vorhanden sind, da 1.7 sie mit den angegebenen Berechtigungen erstellt werden.
Alex
1
@Alex all immediate subdirectoriesist verwirrend, könnten Sie das definieren und ein Beispiel geben?
Jamie Jackson
8
@JamieJackson Es liegt ein Fehler vor, sollte "alle Zwischenunterverzeichnisse" sein.
Alex
203

Sie können das Dateimodul sogar erweitern und sogar den Eigentümer, die Gruppe und die Berechtigung festlegen. (Ref: Ansible Dateidokumentation )

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

Sie können die Verzeichnisse auch rekursiv erstellen:

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

Auf diese Weise werden beide Verzeichnisse erstellt, sofern sie nicht vorhanden waren.

Arbab Nazar
quelle
38
Das recursiveArgument ähnelt der Verwendung mkdir -p(für diejenigen, die ansible mkdir -p googeln ).
Micah Elliott
2
Ich fand, dass es auch die Berechtigungen für untergeordnete Dateien ändert ... fast wie mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. hat jemand anderes dies mit Ansible 2.0.0.2
ThePracticalOne
5
Der recurseParameter mag nicht mkdir -p. Die angegebenen Dateiattribute werden rekursiv festgelegt (gilt nur für state = directory). Wenn state=directory, werden alle unmittelbaren Unterverzeichnisse erstellt, wenn sie nicht vorhanden sind, da 1.7 sie mit den angegebenen Berechtigungen erstellt werden.
Alex
1
Dies verwendet die alte Syntax mit =Zeichen, wäre großartig, um sie mit der :Syntax mit jedem Attribut in einer neuen Zeile zu aktualisieren
ympostor
@ThePracticalOne - Ja ... mit "recurse" verhält es sich genauso chmod -R. Das heißt, wenn es pathbereits als Verzeichnis vorhanden ist und Dateien darin enthalten sind, recursewendet die Option (manchmal leider) dieselben Berechtigungen auch auf die Dateien an. Dies ist beabsichtigt , zum Guten oder Schlechten.
Dale Anderson
14

Sie können erstellen mit:

Neueste Version 2 <

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

Ältere Version

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

Siehe - http://docs.ansible.com/ansible/file_module.html

Chathuranga Abeyrathna
quelle
14

Das Verzeichnis kann nur mit dem Dateimodul erstellt werden, da das Verzeichnis nichts anderes als eine Datei ist.

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

Auf diese Weise können Sie auch die Berechtigungen, den Eigentümer und die Gruppe festlegen. Die letzten drei Parameter sind nicht obligatorisch.

qubsup
quelle
7

Sie können ein Verzeichnis erstellen. mit

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

Weitere Informationen zum Verzeichnis und zum Dateisystem finden Sie auch unter http://docs.ansible.com/ansible/file_module.html .

Ali Warrich
quelle
7

Zusätzlich zu allen Antworten gibt es viele Situationen, in denen Sie mehr als ein Verzeichnis erstellen müssen. Daher empfiehlt es sich, Schleifen zu verwenden, anstatt für jedes Verzeichnis eine eigene Aufgabe zu erstellen.

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

Sie müssen nur eine Bedingung stellen, um die Aufgabe für eine bestimmte Verteilung auszuführen

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

Sie können die Anweisung verwenden

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

Wenn Sie ein Verzeichnis in Windows erstellen möchten:

  • Name: Verzeichnisstruktur erstellen
    win_file:
    Pfad: C: \ Temp \ Ordner \ Unterordner>
    Status: Verzeichnis

Alexandru Muica
quelle
2

Wir haben Module zur Verfügung, um Verzeichnis, Datei in ansible zu erstellen

Beispiel

- name: Creates directory
  file:
    path: /src/www
    state: directory
Mohd Umar Mubeen
quelle
1

Sie können den Befehl direkt ausführen und direkt mit ansible erstellen

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

ODER

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser
RegexCracker
quelle
1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

Über dem Playbook wird das Verzeichnis www im Pfad / src erstellt.

Bevor Sie über dem Playbook laufen. Bitte stellen Sie sicher, dass Ihre ansible Host-Verbindung eingestellt ist.

"localhost ansible_connection = local"

sollte in / etc / ansible / hosts vorhanden sein

Für weitere Informationen lassen Sie es mich bitte wissen.

Saurabh
quelle
Datei: Pfad = / src / www state = Verzeichnis
Saurabh
1

Verzeichnis erstellen

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

Verwenden Sie das Dateimodul, um ein Verzeichnis zu erstellen und die Details zum Dateimodul mit dem Befehl "ansible-doc file" abzurufen.

Hier ist eine Option "Zustand", die erklärt:

Wenn directory, werden alle unmittelbaren Unterverzeichnisse erstellt, wenn sie nicht vorhanden sind, da 1.7 sie mit den angegebenen Berechtigungen erstellt werden.
Wenn filedie Datei NICHT erstellt wird, wenn sie nicht vorhanden ist, lesen Sie das Modul [Kopieren] oder [Vorlage], wenn Sie dieses Verhalten wünschen.
Wenn link, wird der symbolische Link erstellt oder geändert. Verwenden Sie hardfür Hardlinks.
In absentdiesem Fall werden Verzeichnisse rekursiv gelöscht und Dateien oder Symlinks werden nicht mehr verknüpft.

Beachten Sie, dass dies filenicht fehlschlägt, wenn der Pfad nicht vorhanden ist, da sich der Status nicht geändert hat.

Wenn touch(neu in 1.4), wird eine leere Datei erstellt, wenn der Pfad nicht vorhanden ist, während eine vorhandene Datei oder ein vorhandenes Verzeichnis aktualisierte Dateizugriffs- und Änderungszeiten erhält (ähnlich wie in touchder Befehlszeile).

Priyanka Bhardwaj
quelle
1

In diesem Fall können Sie das Modul "Datei" verwenden. Es gibt so viele Argumente, die Sie für ein neu erstelltes Verzeichnis wie Eigentümer, Gruppe, Speicherort, Modus usw. übergeben können.

In diesem Dokument finden Sie ausführliche Erläuterungen zum Dateimodul ...

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

Denken Sie daran, dieses Modul dient nicht nur zum Erstellen des Verzeichnisses !!!

user11345576
quelle
1

Einfachste Möglichkeit , ein Verzeichnis in Ansible zu erstellen.

  • name: Erstellen Sie Ihr_Verzeichnis, falls es nicht vorhanden ist. file: path: / etc / your_directory

ODER

Sie möchten diesem Verzeichnis Sudo-Berechtigungen erteilen .

  • name: Erstellen Sie Ihr_Verzeichnis, falls es nicht vorhanden ist. file: path: / etc / your_directory mode: '777'
Muhammad Ahmad
quelle
0

Ich sehe viele Beispiele für Playbooks und möchte das Beispiel für Adhoc-Befehle erwähnen.

$ ansible -i Inventar -m Datei -a "Pfad = / tmp / Verzeichnisstatus = Verzeichnis (anstelle des Verzeichnisses können wir touch zum Erstellen von Dateien erwähnen)

Kandasamy Murugan
quelle
0

Für diesen Fall müssen Sie das Dateimodul verwenden. Unterhalb des Spielbuchs können Sie als Referenz verwenden.

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

Gehen Sie wie folgt vor, um zu überprüfen, ob ein Verzeichnis vorhanden ist, und führen Sie dann eine Aufgabe aus (z. B. Verzeichnis erstellen)

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

Sie möchten das fileModul. Um ein Verzeichnis zu erstellen, müssen Sie die folgende Option angeben state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory
Devang Radadiya
quelle
-5

Hier ist der Weg einfacher.

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

Ender Wan
quelle
2
das ist nicht idempotent.
qubsup