W moim playbooku Ansible wiele razy muszę tam utworzyć plik
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
teraz wiele razy conf
reż. nie ma. Następnie muszę utworzyć więcej zadań, aby najpierw utworzyć ten katalog.
Czy jest jakiś łatwy sposób na automatyczne tworzenie katalogu, jeśli nie istnieje z jakąś opcją
Odpowiedzi:
W tej chwili to jedyny sposób
źródło
recurse=yes
dofile
połączenia, aby uzyskaćmkdir -p
zachowanie typudirname
dla ansibla, który pobiera katalog zawierający plik.Aby zapewnić sukces z pełną ścieżką, użyj recurse = yes
źródło
recurse=yes
przyznają uprawnienia tylko rekurencyjnie. Jednak dokumentacja stwierdza, że dzieje się to automatycznie od wersji 1.7, więcrecurse
może być przestarzałe.Jeśli używasz Ansible> = 2.0, istnieje również filtr dirname, którego możesz użyć do wyodrębnienia części katalogu ze ścieżki. W ten sposób możesz po prostu użyć jednej zmiennej do przechowywania całej ścieżki, aby upewnić się, że oba zadania nigdy nie stracą synchronizacji.
Na przykład, jeśli masz Playbook ze
dest_path
zdefiniowaną w zmiennej takiej jak ta, możesz ponownie użyć tej samej zmiennej:źródło
AFAIK, jedynym sposobem, w jaki można to zrobić, jest użycie
state=directory
opcji. Chociażtemplate
moduł obsługuje większośćcopy
opcji, co z kolei obsługuje większośćfile
opcji, nie możnastate=directory
z nim używać czegoś podobnego . Co więcej, byłoby to dość zagmatwane (czy oznaczałoby to, że{{project_root}}/conf/code.conf
jest to katalog?), Czy też oznaczałoby, że{{project_root}}/conf/
powinien zostać utworzony jako pierwszy.Więc myślę, że nie jest to teraz możliwe bez dodania poprzedniego
file
zadania.źródło
Zgodnie z najnowszym dokumentem, gdy stan jest ustawiony na katalog, nie trzeba używać parametru recurse do tworzenia katalogów nadrzędnych, zajmie się tym moduł plików.
jest to wystarczające, aby utworzyć dane katalogów nadrzędnych i przetestować je za pomocą foo
proszę zapoznać się z opisem parametru - „ stan ” http://docs.ansible.com/ansible/latest/modules/file_module.html
źródło
możesz utworzyć folder, korzystając z poniższych, w zależności od wersji ansible.
Najnowsza wersja 2 <
Starsza wersja:
Zobacz - http://docs.ansible.com/ansible/latest/file_module.html
źródło
Moduł copy tworzy katalog, jeśli go tam nie ma. W tym przypadku utworzył katalog resolved.conf.d
źródło