Wie erstellen Sie ein Verzeichnis www
an /srv
auf einem Debian-basiertes System ein ansible Textbuch mit?
Wie erstellen Sie ein Verzeichnis www
an /srv
auf einem Debian-basiertes System ein ansible Textbuch mit?
Antworten:
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
all immediate subdirectories
ist verwirrend, könnten Sie das definieren und ein Beispiel geben?
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.
recursive
Argument ähnelt der Verwendung mkdir -p
(für diejenigen, die ansible mkdir -p googeln ).
recurse
Parameter 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.
=
Zeichen, wäre großartig, um sie mit der :
Syntax mit jedem Attribut in einer neuen Zeile zu aktualisieren
chmod -R
. Das heißt, wenn es path
bereits als Verzeichnis vorhanden ist und Dateien darin enthalten sind, recurse
wendet die Option (manchmal leider) dieselben Berechtigungen auch auf die Dateien an. Dies ist beabsichtigt , zum Guten oder Schlechten.
Sie können erstellen mit:
- name: Create Folder
file:
path: /srv/www/
owner: user
group: user
mode: 0755
state: directory
- name: Create Folder
file:
path=/srv/www/
owner=user
group=user
mode=0755
state=directory
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
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 .
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
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'
Wenn Sie ein Verzeichnis in Windows erstellen möchten:
- Name: Verzeichnisstruktur erstellen
win_file:
Pfad: C: \ Temp \ Ordner \ Unterordner>
Status: Verzeichnis
Wir haben Module zur Verfügung, um Verzeichnis, Datei in ansible zu erstellen
Beispiel
- name: Creates directory
file:
path: /src/www
state: directory
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
---
- 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.
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.
Wennfile
die Datei NICHT erstellt wird, wenn sie nicht vorhanden ist, lesen Sie das Modul [Kopieren] oder [Vorlage], wenn Sie dieses Verhalten wünschen.
Wennlink
, wird der symbolische Link erstellt oder geändert. Verwenden Siehard
für Hardlinks.
Inabsent
diesem Fall werden Verzeichnisse rekursiv gelöscht und Dateien oder Symlinks werden nicht mehr verknüpft.Beachten Sie, dass dies
file
nicht 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 intouch
der Befehlszeile).
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 !!!
Einfachste Möglichkeit , ein Verzeichnis in Ansible zu erstellen.
ODER
Sie möchten diesem Verzeichnis Sudo-Berechtigungen erteilen .
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)
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
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
Sie möchten das file
Modul. Um ein Verzeichnis zu erstellen, müssen Sie die folgende Option angeben state: directory
:
- name: Creates directory
file:
path: /src/www
state: directory
state=directory
, werden alle unmittelbaren Unterverzeichnisse erstellt, wenn sie nicht vorhanden sind, da 1.7 sie mit den angegebenen Berechtigungen erstellt werden.