In meinem Ansible-Playbook muss ich dort oft eine Datei erstellen
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
jetzt ist conf
dir oft nicht da. Dann muss ich zuerst mehr Aufgaben erstellen, um dieses Verzeichnis zu erstellen.
Gibt es eine einfache Möglichkeit, ein Verzeichnis automatisch zu erstellen, wenn es keine Option gibt?
Antworten:
Im Moment ist dies der einzige Weg
quelle
recurse=yes
um denfile
Anruf zu bekommenmkdir -p
Typen Verhaltendirname
Filter , um das Verzeichnis abzurufen , das eine Datei enthält.Um den Erfolg mit einem vollständigen Pfad sicherzustellen, verwenden Sie recurse = yes
quelle
recurse=yes
wenden Berechtigungen nur rekursiv an. In der Dokumentation heißt es jedoch, dass dies seit Version 1.7 automatisch geschieht und daherrecurse
möglicherweise veraltet ist.Wenn Sie Ansible> = 2.0 ausführen, gibt es auch den Verzeichnisnamenfilter, mit dem Sie den Verzeichnisteil eines Pfads extrahieren können. Auf diese Weise können Sie nur eine Variable verwenden, um den gesamten Pfad zu speichern und sicherzustellen, dass beide Aufgaben nie nicht mehr synchron sind.
Wenn Sie beispielsweise ein Playbook mit einer
dest_path
in einer Variablen wie dieser definierten haben, können Sie dieselbe Variable wiederverwenden:quelle
AFAIK, der einzige Weg , dies könnte geschehen ist durch die Verwendung der
state=directory
Option. Während dastemplate
Modul die meistencopy
Optionen unterstützt, was wiederum die meistenfile
Optionen unterstützt , können Sie so etwas nicht verwendenstate=directory
. Darüber hinaus wäre es ziemlich verwirrend (würde es bedeuten, dass{{project_root}}/conf/code.conf
es sich um ein Verzeichnis handelt? Oder würde es bedeuten, dass{{project_root}}/conf/
es zuerst erstellt werden sollte.Daher denke ich nicht, dass dies derzeit möglich ist, ohne eine vorherige
file
Aufgabe hinzuzufügen .quelle
Laut dem neuesten Dokument, wenn der Status als Verzeichnis festgelegt ist, müssen Sie keine Parameterrekursion verwenden , um übergeordnete Verzeichnisse zu erstellen. Das Dateimodul kümmert sich darum.
Dies ist ausreichend, um die Daten der übergeordneten Verzeichnisse zu erstellen und mit foo zu testen
Bitte beziehen Sie sich auf die Parameterbeschreibung - " state " http://docs.ansible.com/ansible/latest/modules/file_module.html
quelle
Sie können den Ordner abhängig von Ihrer Ansible-Version wie folgt erstellen.
Neueste Version 2 <
Ältere Version:
Siehe - http://docs.ansible.com/ansible/latest/file_module.html
quelle
Das Kopiermodul erstellt das Verzeichnis, wenn es nicht vorhanden ist. In diesem Fall wurde das Verzeichnis resolve.conf.d erstellt
quelle