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


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.


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

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

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.



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

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'

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`

3

Wenn Sie ein Verzeichnis in Windows erstellen möchten:

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


2

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

Beispiel

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

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

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.


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

1

Verzeichnis erstellen

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

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



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'

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)


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 

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

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

-5

Hier ist der Weg einfacher.

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


2
das ist nicht idempotent.
qubsup
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.