Mój przypadek użycia jest następujący:
Mam plik szablonu i chciałbym utworzyć 2 różne pliki z tego szablonu, w których zmienne są wypełniane przez inny zestaw zmiennych dla każdego pliku.
Na przykład, powiedzmy, że chcę utworzyć szablon pliku zawierającego wiersz:
mkdir -p {{myTemplateVariable}}
Chciałbym znaleźć właściwy sposób na wypełnienie tej zmiennej przez „Plik1” i „Plik2”. Coś jak :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
gdzie mógłbym określić dla pierwszego szablonu, że zmienną do użycia jest a = "Plik1", a dla drugiego b = "Plik2".
ansible
ansible-template
Kestemont Max
źródło
źródło
Odpowiedzi:
W przypadku Ansible 2.x:
Dla Ansible 1.x:
Niestety
template
moduł nie obsługuje przekazywania do niego zmiennych, których można użyć wewnątrz szablonu. Pojawiła się prośba o funkcję, ale została odrzucona.Przychodzą mi do głowy dwa obejścia:
1. Uwzględnij
Te
include
podpory rachunku przechodzącą zmienne. Możesz więctemplate
umieścić swoje zadanie w dodatkowym pliku i dołączyć je dwukrotnie z odpowiednimi parametrami:my_include.yml:
main.yml:
2. Ponownie zdefiniuj zmienną myTemplateVariable
Innym sposobem byłoby po prostu ponowne zdefiniowanie zmiennej myTemplateVariable tuż przed każdym
template
zadaniem.źródło
Ansible 2.x umożliwia
vars:
wykonywanie zadań.Szablon
test.j2
:Poradnik:
Spowoduje to przekazanie różnych
myTemplateVariable
wartości do pliku test.j2.źródło
Możesz to zrobić bardzo łatwo, spójrz na mój przepis na przełożonego:
job.conf.j2:
Wynik:
Cieszyć się!
źródło
To jest rozwiązanie / hack, którego używam:
zadania / main.yml:
vars / main.yml
szablony / test.j2:
Po uruchomieniu tego otrzymasz
this is var_a
w / tmp / templateA ithis is var_b
w / tmp / templateB.Zasadniczo nadużywasz
with_items
renderowania szablonu z każdym elementem na liście zawierającej jedną pozycję. To działa, ponieważ możesz kontrolować, jaka jest lista podczas używaniawith_items
.Wadą tego jest to, że musisz użyć
item
nazwy zmiennej w swoim szablonie.Jeśli chcesz przekazać w ten sposób więcej niż jedną zmienną, możesz dyktować jako elementy listy w następujący sposób:
a następnie odnieś się do nich w swoim szablonie w ten sposób:
źródło
with_items: '{{ var_a }}'
Zrobiłem to w ten sposób.
W zadaniach / main.yml
oraz w vars / main.yml
oraz w plikach templates / myTemplateFile.j2
Mam nadzieję, że to rozwiązuje twój problem.
źródło
with_dict
to lepsze rozwiązanie.WAŻNE: Zwróć uwagę, że element nie musi być tylko ciągiem znaków, może to być obiekt z dowolną liczbą właściwości, dzięki czemu możesz przekazać dowolną liczbę zmiennych.
W szablonie mam:
źródło
Miałem podobny problem do rozwiązania, oto proste rozwiązanie jak przekazywać zmienne do plików szablonów, sztuka polega na zapisaniu pliku szablonu z wykorzystaniem zmiennej. Musisz stworzyć słownik (możliwa jest również lista), który zawiera zestaw zmiennych odpowiadających każdemu z plików. Następnie w pliku szablonu uzyskaj do nich dostęp.
patrz poniżej:
poradnik
źródło
Kolejny przykład ze świata rzeczywistego z użyciem listy
wyciąg z szablonu dla php.ini
To jest var
Następnie wdrażam z tym
źródło