W tym artykule pokaże, jak korzystać z Ansible szablon moduł i niektóre podstawy języka szablonu Jinja2. Więc zacznijmy!
Wymagania wstępne
Jeśli chcesz wypróbować przykłady w tym artykule:
1) Musisz mieć zainstalowany na komputerze Ansible.
2) Musisz mieć co najmniej host Ubuntu/Debian lub host CentOS/RHEL 8 skonfigurowany do automatyzacji Ansible.
Istnieje wiele artykułów na temat Linuxhint poświęconych instalacji ansible i konfiguracji hostów do automatyzacji ansible. W razie potrzeby możesz je również sprawdzić, w razie potrzeby.
Konfigurowanie katalogu projektów Ansible
Zanim przejdziemy dalej, dobrym pomysłem jest stworzenie struktury katalogu projektu, aby zachować trochę zorganizowane rzeczy.
Aby utworzyć katalog projektu szablon-demo/ i wszystkie wymagane podkatalog (w bieżącym katalogu roboczym) uruchom następujące polecenie:
$ mkdir -pv szablon -demo/podręczniki/szablony
Po utworzeniu katalogu projektu przejdź do katalogu projektu, w następujący sposób:
$ cd szablon-demo/
Stwórz zastępy niebieskie Plik zapasowy, w następujący sposób:
$ nano gospodarze
Następnie dodaj nazwę IP lub DNS hosta (VM1.Nodekite.com I VM2.Nodekite.com) W pliku ekwipunku.
Po zakończeniu tego kroku zapisz plik, naciskając + X, śledzony przez Y I .
Utwórz plik konfiguracyjny Ansible w katalogu projektu, w następujący sposób:
$ nano ansible.CFG
Następnie wpisz następujące linie w Ansible.CFG plik.
Po zakończeniu tego kroku zapisz plik, naciskając + X, śledzony przez Y I .
W tym momencie katalog projektu powinien wyglądać w następujący sposób:
$ Tree
Jak widać, hosty Ansible są również dostępne. Możemy więc przejść do następnej sekcji tego artykułu.
$ ansible all -u ansible -m ping
Podstawy modułu szablonu Ansible
szablon moduł Ansible akceptuje te same opcje, co Kopiuj Moduł Ansible.
Wspólny ansible szablon Opcje modułu:
src - Ścieżka pliku szablonu jinja2 na komputerze, który zostanie przeanalizowany przez język szablonów Jinja2 i skopiowany na zdalne hosty.
Dest - Ścieżka docelowa na zdalnych hostach, do których plik zostanie skopiowany.
właściciel - Właściciel pliku na zdalnych hostach.
Grupa - Grupa pliku na zdalnych hostach.
tryb - Tryb uprawnienia pliku na zdalnych hostach.
Spójrzmy na przykład.
Najpierw stwórz nowy poradnik Ansible copy_file_template1.Yaml w podręczniki/ katalog, jak następuje:
$ Nano Playbooks/copy_file_template1.YamlNastępnie wpisz następujące linie w copy_file_template1.Yaml podręcznik.
- Gospodarze: WszyscyTen podręcznik skopiuje indeks.Jinja2 plik z podręczniki/szablony/ katalog (w stosunku do katalogu projektu) do hostów zdalnych za pomocą ansible szablon moduł.
Po zakończeniu tego kroku zapisz plik, naciskając + X, śledzony przez Y I .
Utwórz indeks.Jinja2 plik szablonu w Podręczniki/szablony katalog, jak następuje:
$ Nano Playbooki/szablony/indeks.Jinja2
Wpisz następujące wiersze w indeks.Jinja2 Plik szablonu:
To jest zwykły plik HTML. Nie użyłem tutaj żadnej fantazyjnej składni jinja2.
Po zakończeniu tego kroku zapisz plik, naciskając + X, śledzony przez Y I .
Uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlPodręcznik powinien działać pomyślnie.
Jak widać, indeks.Jinja2 Szablon został renderowany za pomocą języka szablonu Jinja2. Renderowana treść powinna być skopiowana do indeks.html plik zdalnych hostów.
Zmienne drukowania w szablonie Jinja2
Możesz użyć faktów, zmiennych i zmiennych zdefiniowanych przez użytkownika w szablonach Jinja2.
Na szablonie Jinja2 możesz wydrukować wartość zmiennej za pomocą variablename składnia. Jeśli zmienna jest obiektem, możesz drukować właściwości poszczególnych obiektów za pomocą ObjectVariable.Nazwa właściwości składnia.
W następnym przykładzie wydrukujemy data własność ansible_date_time obiekt w naszym indeks.Jinja2 szablon.
$ ansible all -u ansible -m konfiguracja | egrep -kolor „data | godzina”
Najpierw otwórz indeks.Jinja2 Plik szablonu z edytorem tekstu Nano, w następujący sposób:
$ Nano Playbooki/szablony/indeks.Jinja2
Dodaj następujący wiersz do indeks.Jinja2 Plik szablonu:
Strona wygenerowana na ansible_date_time.data
Finał indeks.Jinja2 Plik powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po zakończeniu tego kroku zapisz plik, naciskając + X, śledzony przez Y I .
Uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlJak widać, indeks.Jinja2 szablon został przetworzony przez język szablonów jinja2 i zastąpił ansible_date_time.data zmienna z datą w ROYYY-MM-DD format. Wyjście zostało następnie skopiowane do indeks.html Plik na zdalnym hoście.
Warunkowe, jeśli oświadczenie w szablonie Jinja2
Jinja2 Templing Language obsługuje warunkowe Jeśli sprawozdania. Możesz sprawdzić niektóre zmienne przed wydrukowaniem czegokolwiek za pomocą Jeśli oświadczenie.
Jinja2 Jeśli Składnia jest następująca:
% jeśli stan %
Zrób coś, jeśli warunek jest prawdziwy
% endif %
Zobaczmy przykład Jinja2 Jeśli oświadczenie.
W tej sekcji zademonstruję Jinja2 Jeśli stwierdzenie za pomocą ansible_distribution Fakty zmienne.
$ ansible all -u ansible -m konfiguracja | egrep -kolor „dist”
Najpierw otwórz indeks.Jinja2 Szablon jinja2 z nano edytorem tekstu, w następujący sposób:
$ Nano Playbooki/szablony/indeks.Jinja2
Następnie dodaj następujące wiersze w indeks.Jinja2 Plik szablonu:
% if ansible_distribution == „debian” %Prowadzisz Debian Linux
Tutaj sprawdziłem, czy ansible_distribution Jest Debian. Jeśli tak, wydrukuj ciąg Prowadzisz Debian Linux
Wreszcie indeks.Jinja2 Plik szablonu powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Teraz uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlJak widać, na moim zdalnym hoście Debian, indeks.html Plik ma linię Prowadzisz Debian Linux
WARUNKA: Oświadczenie IF-ELSE w szablonie Jinja2
Jinja2 Templing Language obsługuje warunkowe Jeśli inaczej sprawozdania. Możesz wydrukować jedną rzecz, jeśli warunek pasuje i wydrukować coś innego, jeśli nie używa Jeśli inaczej oświadczenie.
Jinja2 Jeśli inaczej Składnia jest następująca:
% jeśli stan %Zobaczmy przykład Jinja2 Jeśli inaczej oświadczenie.
Najpierw otwórz indeks.Jinja2 Szablon jinja2 z nano edytorem tekstu, w następujący sposób:
$ Nano Playbooki/szablony/indeks.Jinja2
Następnie dodaj następujące wiersze w indeks.Jinja2 Plik szablonu:
% if ansible_distribution == „debian” %Prowadzisz Debian Linux
Nie prowadzisz Debian Linux
Tutaj sprawdziłem, czy ansible_distribution Jest Debian. Jeśli tak, wydrukuj ciąg Prowadzisz Debian Linux Nie prowadzisz Debian Linux
Wreszcie indeks.Jinja2 Plik szablonu powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlJak widać, na moim zdalnym hoście Debian, indeks.html Plik ma linię Prowadzisz Debian Linux Nie prowadzisz Debian Linux
WARUNKA: Oświadczenie IF-ELIF w szablonie Jinja2
Jinja2 Templing Language obsługuje warunkowe if-elif sprawozdania.
Jinja2 if-elif Składnia jest następująca:
% if warunek1 %Tutaj % w przeciwnym razie % Sekcja jest opcjonalna, ale jest tam, jeśli jej potrzebujesz.
Zobaczmy przykład Jinja2 if-elif oświadczenie.
Najpierw otwórz indeks.Jinja2 Szablon jinja2 z nano edytorem tekstu, w następujący sposób:
$ Nano Playbooki/szablony/indeks.Jinja2
Następnie dodaj następujące wiersze w indeks.Jinja2 Plik szablonu:
% if ansible_distribution == „debian” %Prowadzisz Debian Linux
Uruchamiasz Centos Linux
Twój system operacyjny nie jest obsługiwany
Tutaj sprawdziłem, czy ansible_distribution Jest Debian. Jeśli tak, wydrukuj ciąg Prowadzisz Debian Linux
Sprawdziłem również, czy ansible_distribution Jest Centos. Jeśli tak, wydrukuj ciąg Uruchamiasz Centos Linux
W przeciwnym razie wydrukuj Twój system operacyjny nie jest obsługiwany
Wreszcie indeks.Jinja2 Plik szablonu powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlJak widać, na moim zdalnym hoście Debian, indeks.html Plik ma linię Prowadzisz Debian Linux
Na moim odległym gospodarza Centos, indeks.html Plik ma linię Uruchamiasz Centos Linux
Gdybym miał innego zdalnego gospodarza z systemem operacyjnym innym niż Debian lub Centos, miałby linię Twój system operacyjny nie jest obsługiwany
Więc Jinja2 if-elif Stan działa.
Pętle w szablonie jinja2
Możesz także drukować tablice i obiekty za pomocą pętli w Jinja2.
Jinja2 Do Składnia pętli jest następująca:
% dla zmiennej nazwy w ArrayName %
Zrób coś z Variablename
% endfor %
Tutaj, w każdej iteracji tablicy ArrayName, Jeden z elementów tablicy (od początku tablicy) jest przypisany do Variablename zmienny. Możesz zrobić coś z tą zmienną w pętli.
Zobaczmy, jak możesz wydrukować elementy tablicy w swoim szablonie Jinja2 w poniższym przykładzie.
Najpierw otwórz copy_file_template1.Yaml Ansible Playbook z edytorem tekstu Nano, w następujący sposób:
$ Nano Playbooks/copy_file_template1.YamlNastępnie dodaj następujące wiersze w copy_file_template1.Yaml Plik podręcznika:
vars:Tutaj dodałem menu tablica w copy_file_template1.Yaml podręcznik. Następnie wydrukuję elementy tablicy za pomocą pętli w moim indeks.Jinja2 Plik szablonu jinja2.
Wreszcie copy_file_template1.Yaml Plik podręcznika powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Teraz otwórz indeks.Jinja2 Szablon jinja2 z nano edytorem tekstu, w następujący sposób:
$ Nano Playbooki/szablony/indeks.Jinja2
Dodaj następujące wiersze w indeks.Jinja2 Plik szablonu:
Tutaj generuję prosty pasek nawigacyjny HTML za pomocą Jinja2 Do pętla. Pętla itera przez menu tablica (którą zdefiniowałem w copy_file_template1.podręcznik YAML) Elementy i generuje menu Pozycja w każdej iteracji.
Wreszcie indeks.Jinja2 Plik szablonu powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlJak widać, Jinja2 Do pętla wygenerowała pasek nawigacyjny HTML (w indeks.html plik).
Możesz również uzyskać dostęp do tablicy obiektów w szablonie Jinja2.
Zobaczmy inny przykład.
Najpierw otwórz copy_file_template1.Yaml Ansible Playbook z edytorem tekstu Nano, w następujący sposób:
$ Nano Playbooks/copy_file_template1.YamlNastępnie dodaj następujące wiersze w copy_file_template1.Yaml Plik podręcznika:
vars:Tutaj dodałem menu tablica obiektu w copy_file_template1.Yaml podręcznik. Każdy z tych obiektów ma dwie właściwości, a nazwa Własność i połączyć nieruchomość.
Wreszcie copy_file_template1.Yaml Plik podręcznika powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Otworzyć indeks.Jinja2 Szablon jinja2 z nano edytorem tekstu, w następujący sposób:
$ Nano Playbooki/szablony/indeks.Jinja2Następnie dodaj następujące wiersze w indeks.Jinja2 Plik szablonu:
Wszystko, co tu widzisz, jest takie samo jak w poprzednim przykładzie. Jedyną różnicą jest to, że drukuję właściwości obiektu nazwa (za pomocą menu.nazwa) I połączyć (za pomocą menu.połączyć) w moim indeks.Jinja2 Szablon jinja2.
Wreszcie indeks.Jinja2 Plik szablonu powinien wyglądać jak pokazano na zrzucie ekranu poniżej.
Po edytowaniu pliku zapisz plik, naciskając + X, śledzony przez Y I .
Teraz uruchom podręcznik copy_file_template1.Yaml następująco:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlJak widać, Jinja2 Do pętla wygenerowała pasek nawigacyjny HTML (w indeks.html plik) z tablicy obiektów.
Co dalej?
W tym artykule pokazałem, jak korzystać z Ansible szablon moduł i opisał niektóre podstawy języka szablonu Jinja2. Odwiedź oficjalną stronę internetową Jinja2, aby dowiedzieć się więcej o języku szablonów Jinja2.