Czy istnieje prosty sposób na wdrożenie folderu pełnego folderu .j2 szablonu w polu linux, używając tej samej nazwy co szablon, ale bez rozszerzenia .j2, zamiast używać modułu szablonu dla każdego pliku?
W tej chwili mam długą listę:
- name: create x template
template:
src=files/x.conf.j2
dest=/tmp/x.conf
owner=root
group=root
mode=0755
notify:
- restart myService
with_fileglob
zawsze działa odfiles/
, możesz dostać się do szablonów za pomocą../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680regex_replace
powinna pasować na końcu linii\.j2$
w przypadkach, w których wzorzec może istnieć w nazwie pliku.Michael DeHaan (twórca Ansible) napisał post na CoderWall, który mówi o bardzo podobnym problemie. Możesz go dostosować i rozszerzyć zgodnie z własnymi potrzebami (takimi jak uprawnienia i własność). Odpowiednia część postu znajduje się tutaj:
Można to uprościć, używając „
with_items
” i pojedynczejnotify
instrukcji. Jeśli którekolwiek z zadań ulegnie zmianie, usługa zostanie o tym powiadomiona dokładnie tak samo, jak musi zostać uruchomiona ponownie na końcu uruchomienia playbooka.Zauważ, że ponieważ mamy zadania, które wymagają więcej niż jednego unikalnego argumentu, nie mówimy tylko „
item
” wtemplate:
wierszu „ ”, ale używamywith_items
ze zmienną hash (słownik). Jeśli chcesz, możesz też nieco go skrócić, używając list. To jest preferencja stylistyczna:Oczywiście możemy również zdefiniować listę, w której chodziłeś w innym pliku, np. Plik „
groupvars/webservers
” do zdefiniowania wszystkich zmiennych potrzebnych dlawebservers
grupy, lub plik YAML załadowany zvarsfiles
dyrektywy „ ” wewnątrz podręcznika. Zobacz, jak możemy to wyczyścić, jeśli to zrobimy.źródło
template: src=templates/{{item}}.j2 dest=/etc/splat/{{item}}.conf
, a następnie użycie prostej listy pozycji:with_items: - foo - bar
template: src={{item.src}} dest={{item.dest}}
(tj. Nie,${var}
ale raczej{{var}}
)Odpowiedź Russela działa, ale wymaga poprawy
Najpierw trzeba odejść od wszystkich $, ponieważ był to zły regex w regex_replace. Po drugie, wszystkie pliki powinny znajdować się w katalogu plików, a nie w katalogu szablonów
źródło
Napisałem wtyczkę do wyszukiwania plików, która może pomóc w działaniach na drzewach plików.
Możesz rekursować pliki w drzewie plików i na podstawie właściwości pliku wykonywać działania (np. Szablon lub kopiować). Ponieważ zwracana jest ścieżka względna, możesz z łatwością odtworzyć drzewo plików w systemie docelowym.
To sprawia, że bardziej czytelne podręczniki.
źródło
Poniższe polecenie pomogło mi przeprowadzić rekurencyjne wyszukiwanie plików j2 w szablonach i przenieść je do miejsca docelowego. Mam nadzieję, że pomoże to komuś, kto szuka rekurencyjnej kopii szablonów do miejsca docelowego.
źródło
Istnieje możliwość automatycznego pobrania listy rzeczywistych plików z katalogu, a następnie ich iteracji.
źródło
print0
, takie jakfind
, a następnie dzieli\u0000
.