Jak używać modułu szablonu ansible

Jak używać modułu szablonu ansible
Ansible szablon Moduł służy głównie do kopiowania plików z klienta Ansible (gdzie ansible jest zainstalowany) na hostach ansible (zarządzany przez ansible). Korzyść z korzystania z szablon moduł, a nie Kopiuj moduł, jest to, że ansible szablon Moduł może używać języka szablonu Jinja2. Jinja2 jest potężnym językiem szablonów Python, za pomocą którego można generować pliki konfiguracyjne, strony internetowe itp. Możesz także użyć zmiennych, pętli i warunków ansible faktów w szablonach jinja2.

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.Yaml

Następnie wpisz następujące linie w copy_file_template1.Yaml podręcznik.

- Gospodarze: Wszyscy
Użytkownik: Ansible
Zadania:
- Nazwa: indeks kopii.plik HTML na serwerze
szablon:
SRC: Indeks.Jinja2
dest:/home/ansible/index.html
Właściciel: Ansible
Grupa: Ansible
Tryb: 0644

Ten 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:




Demo szablonu Jinja2


Witamy w Linuxhint!



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.Yaml

Podrę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.Yaml

Jak 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


% endif %

Tutaj sprawdziłem, czy ansible_distribution Jest Debian. Jeśli tak, wydrukuj ciąg

Prowadzisz Debian Linux

. W przeciwnym razie nie wydrukuj tego.

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.Yaml

Jak widać, na moim zdalnym hoście Debian, indeks.html Plik ma linię

Prowadzisz Debian Linux

. Jednak na moim zdalnym hoście Centos linia nie jest obecna. Więc Jinja2 Jeśli Stan działa.

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 %
Zrób coś, jeśli warunek jest prawdziwy
% w przeciwnym razie %
Zrób coś, jeśli warunek jest fałszywy
% endif %

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


% w przeciwnym razie %

Nie prowadzisz Debian Linux


% endif %

Tutaj sprawdziłem, czy ansible_distribution Jest Debian. Jeśli tak, wydrukuj ciąg

Prowadzisz Debian Linux

. W przeciwnym razie wydrukuj

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.Yaml

Jak widać, na moim zdalnym hoście Debian, indeks.html Plik ma linię

Prowadzisz Debian Linux

. Ale na moim odległym gospodarza Centos, indeks.html Plik ma linię

Nie prowadzisz Debian Linux

. Więc Jinja2 Jeśli inaczej Stan działa.

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 %
Zrób coś, jeśli warunek 1 jest prawdziwy
% elif warunek2 %
Zrób coś, jeśli warunek2 jest prawdziwy
% elif warunek3 %
Zrób coś, jeśli warunek3 jest prawdziwy

% elif warunki %
Zrób coś, jeśli warunek jest prawdziwy
% w przeciwnym razie %
Zrób coś, jeśli żaden z warunków nie jest prawdziwy
% endif %

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


% elif ansible_distribution == „centos” %

Uruchamiasz Centos Linux


% w przeciwnym razie %

Twój system operacyjny nie jest obsługiwany


% endif %

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.Yaml

Jak 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

w indeks.html plik.

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.Yaml

Następnie dodaj następujące wiersze w copy_file_template1.Yaml Plik podręcznika:

vars:
Menu:
- Dom
- Produkty
- O nas
- Skontaktuj się z nami

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.Yaml

Jak 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.Yaml

Następnie dodaj następujące wiersze w copy_file_template1.Yaml Plik podręcznika:

vars:
Menu:
- Nazwa: Strona główna
Link: /Home
- Nazwa: Produkty
link: /produkty
- Imię: O nas
Link: /About-USA
- Nazwa: skontaktuj się z nami
link: /kontakt-USA

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.Jinja2

Nastę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.Yaml

Jak 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.