Jak tworzyć szablony w Ansible, aby tworzyć konfiguracje w zarządzanych węzłach - Część 7

Jak tworzyć szablony w Ansible, aby tworzyć konfiguracje w zarządzanych węzłach - Część 7

W tym Część 7 z serii Ansible, nauczysz się tworzyć i używać szablonów w Ansible, aby tworzyć niestandardowe konfiguracje na zarządzanych węzłach. Templing in Ansible to łatwy i przyjazny sposób na popychanie niestandardowych konfiguracji do zarządzanych węzłów z różnymi systemami z minimalną edycją plików Playbook.

Co jest szablony w Ansible?

Aby lepiej zrozumieć, czym jest szablon, rozważmy menedżera IT opracowującego e -mail, aby zaprosić swój dział na przyjęcie koktajlowe. E -mail jest wysyłany do każdego z członków i zaprasza ich do oznaczania wraz z małżonkami.

Wiadomość e -mail została dostosowana w taki sposób, aby ciało wiadomości e -mail pozostały takie same, ale adresaci i nazwiska ich małżonków są różne. E -mail staje się szablon, podczas gdy odbiorcy i odpowiednie małżonkowie są zmienne.

To był ogólny przykład. Zastosowania ansible Jinja2 który jest nowoczesnym silnikiem szablonów ramy Python używanych do generowania dynamicznej zawartości lub wyrażeń. Szablony jest niezwykle przydatne podczas tworzenia niestandardowych plików konfiguracyjnych dla wielu serwerów, ale unikalne dla każdego z nich.

Jinja2 używa podwójnych klamrów w celu załączania zdefiniowanej zmiennej. Komentarze, użyj # # a do instrukcji warunkowych użyj %… %.

Załóżmy, że masz model danych Vlany w sieci z systemami hostów, które chcesz nacisnąć do ich odpowiednich Vlany jak pokazano.

VLAN: - Id: 10 Nazwa: LB - Id: 20 Nazwa: WB_01 - Id: 30 Nazwa: WB_02 - ID: 40 Nazwa: DB 

Aby renderować tę konfigurację, odpowiadające Jinja2 Nazwany szablon Vlany.J2 pojawiłby się tak, jak pokazano. Jak widać, zmienne Vlan.ID I Vlan.nazwa zostały zamknięte w kręconych aparatach ortodontycznych.

vlan vlan.id nazwa vlan.nazwa  

Łącząc to wszystko w podręczniku, który umieszcza różne maszyny hosta, wyglądałoby to jak pokazano:

 - Hosty Zadania: - Nazwa: Rendering VLAN Configuration Tomplate: SRC: VLAN.J2 Dest: „VLAN_CONFIGS/Inventory_hostname.konf ” 

Przykład 1: Konfigurowanie serwerów internetowych w różnych dystrybucjach

W tym przykładzie stworzymy indeks.html pliki, które wyświetlą informacje o Nazwa hosta i system operacyjny 2 działających serwerów internetowych Centos i Ubuntu.

Organizować coś

Ubuntu 18 - Adres IP: 173.82.202.239 centrów 7 - Adres IP: 173.82.115.165 

Apache Webserver został już zainstalowany na obu serwerach.

Dla Centos 7

Strona internetowa Apache na Centos 7

Dla Ubuntu 18.04

Strona internetowa Apache na Ubuntu 18.04

Więc stwórzmy podręcznik test_server.yml jak pokazano:

--- - Hosty: Wszystkie stają się: Tak Zadania: - Nazwa: indeks instalacji.Szablon HTML: src: indeks.html.J2 dest:/var/www/html/indeks.Tryb HTML: 0777 

Nasz Jinja Szablon pliku jest indeks.html.J2 które zostaną zepchnięte do indeks.html Plik na każdym serwerze Web. Zawsze pamiętaj, aby umieścić rozszerzenie .J2 Na końcu oznacza, że ​​jest to plik Jinja2.

Utwórzmy teraz plik szablonu indeks.html.J2.

  

Nazwa hosta tego serwera WebServer to ansible_hostname

Działa na systemie ansible_os_family

Ten szablon to podstawowy plik HTML, w którym ansible_hostname I ansible_os_family są wbudowanymi zmiennymi, które zostaną zastąpione odpowiednimi nazwami hosta i systemami operacyjnymi poszczególnych serwisów internetowych w przeglądarce.

Teraz uruchommy podręcznik.

# ansible-playbook test_server.yml 
Utwórz plik szablonu ansible

Teraz ponownie załadujmy strony dla obu Centos 7 I Ubuntu Webservers.

Dla Centos 7

Sprawdź stronę internetową Apache na Centos 7

Dla Ubuntu 18.04

Sprawdź stronę internetową Apache na Ubuntu 18.04

Jak widać, na każdym serwerze wyświetlono różne informacje o nazwie hosta i rodzinie systemu operacyjnego. I tak fajnie Jinja2 Szablon jest!

Filtry:

Czasami możesz zdecydować o zastąpieniu wartości zmiennej za pomocą ciągu, która pojawia się w określony sposób.

PRZYKŁAD 1: Spraw, by sznurki pojawiają się w wielkich/małych literach

Na przykład w poprzednim przykładzie możemy zdecydować, że zmienne ansible pojawiają się w wielkim poziomie. Aby to zrobić, dołącz wartość górną do zmiennej. W ten sposób wartość w zmiennej jest konwertowana na format wieloletnich.

ansible_hostname | Upper => Centos 7 ansible_os_family | Upper => Redhat 
Utwórz wielką część ciągów

Podobnie możesz przekonwertować wyjście ciągów na małe litery, dołączając dolny argument.

ansible_hostname | niższy => Centos 7 ansible_os_family | niższy => Redhat 
Zrób małe litery

Przykład 2: Wymień ciąg innym

Dodatkowo możesz wymienić ciąg innym.

Na przykład:

Tytuł filmu jest Movie_name => Tytuł filmu jest Pierścień.

Aby wymienić wyjście innym ciągiem, użyj argumentu Zamień, jak pokazano:

Tytuł filmu jest Movie_name | zamień („ring”, „napad”) => Tytuł filmu jest Napad.

Przykład 3: Listy i ustawiają filtry

Aby odzyskać najmniejszą wartość w tablicy, użyj min filtr.

[2, 3, 4, 5, 6, 7] | min => 2 

Podobnie, aby odzyskać największą liczbę, użyj Max filtr.

[2, 3, 4, 5, 6, 7] | max => 7 

Aby wyświetlić unikalne wartości, użyj unikalny filtr.

[2, 3, 3, 2, 6, 7] | unikalny => 2, 3 

Użyj losowy Filtr, aby uzyskać liczbę losową między 0 a wartością.

50 | Random => Niektóre liczba losowa 

Pętle:

Podobnie jak w językach programowania, mamy Pętle w Ansible Jinja2.

Na przykład, aby wygenerować plik zawierający listę liczb, użyj dla pętli Jak pokazano w poniższym przykładzie:

Przykład 1:

 % dla liczby w [0, 1, 2, 3, 4, 5, 6, 7] % liczba  % end dla % 

Możesz także połączyć pętlę z Jeśli inaczej stwierdzenia do filtrowania i uzyskania określonych wartości.

Przykład 2:

% dla liczby w [0, 1, 2, 3, 4, 5, 6, 7]% % if liczba == 5% liczba % endif% % endfor% 

I to wszystko dla tego wykładu. Dołącz do nas w następnym temacie, w którym zapuścimy się do pracy ze zmiennymi i faktami Ansible.