Jak pracować ze zmiennymi i faktami Ansible - Część 8

Jak pracować ze zmiennymi i faktami Ansible - Część 8

Wspominaliśmy o zmiennych w tej serii Ansible i po prostu po to, aby trochę pobiegać umysł. A zmienny, Podobnie jak w wielu językach programowania, jest zasadniczo kluczem, który reprezentuje wartość.

Co stanowi poprawną nazwę zmiennej?

Nazwa zmiennej obejmuje litery, liczby, podkreślenia lub mieszankę 2 lub wszystkich. Pamiętaj jednak, że zmienna nazwa musi zawsze zacząć od litery i nie powinna zawierać spacji.

Spójrzmy na kilka przykładów prawidłowych i niedopuszczalnych nazw zmiennych:

Prawidłowe przykłady nazwy zmiennej:

piłka nożna foot_ball football20 stóp_ball20 

Przykłady nazwy zmiennej bez walidów:

piłka stopy 20 stóp 

Omówmy typy zmiennych:

1. Zmienne podręcznika

Podręcznik Zmienne są dość łatwe i proste. Aby zdefiniować zmienną w podręcznik, Po prostu użyj słowa kluczowego vars Przed napisaniem zmiennych z wcięciem.

Aby uzyskać dostęp do wartości zmiennej, umieść ją między podwójnymi klamrami kręconymi zamkniętymi ze znakami cytatowymi.

Oto prosty przykład podręcznika:

- Gospodarze: Wszystkie vars: Powitanie: Witaj świecie! Zadania: - Nazwa: ansible podstawowa zmienna przykładowy debugowanie: msg: " Powitanie  " 

W powyższym podręczniku, Powitanie zmienna jest zastąpiona wartością Witaj świecie! Kiedy podręcznik jest uruchomiony. Podręcznik po prostu drukuje wiadomość Witaj świecie! Po wykonaniu.

Zmienne podręcznika w Ansible

Dodatkowo możesz mieć listę lub tablicę zmiennych, jak pokazano:

Poniższy podręcznik pokazuje zmienną o nazwie kontynenty. Zmienna zawiera 5 różnych wartości - nazwy kontynentu. Każdy z tych wartości można łatwo uzyskać za pomocą za pomocą indeks 0 jako pierwsza zmienna.

Przykład poniższego podręcznika pobiera i wyświetla Azja (indeks 1).

- Gospodarze: All Vars: Kontynenty: - Afryka - Azja - Ameryka Południowa - Ameryka Północna - Zadania Europy: - Nazwa: ANSIBLE LIST Zmienna przykład debugowania: MSG: „Continents [1]” 
Tablica zmiennych w Ansible

Lista zmiennych można podobnie ustrukturyzować, jak pokazano:

Vars: Continents: [Afryka, Azja, Ameryka Południowa, Ameryka Północna, Europa] 

Aby wymienić wszystkie elementy na liście, użyj Z_ITEMS moduł. To zapętla się przez wszystkie wartości w tablicy.

- Gospodarze: All Vars: kontynenty: [Afryka, Azja, Ameryka Południowa, Ameryka Północna, Europa] Zadania: - Nazwa: Ansible tablic Zmienne Przykład debugowania: MSG: " przedmiot  "with_Items: -"  kontynenty  " 
Lista zmiennych tablicowych

Innym rodzajem zmiennej ansible jest słownik zmienny.

Słownik Zmienne są dodatkowo obsługiwane w podręczniku. Aby zdefiniować zmienną słownika, po prostu zidentyfikuj parę wartości kluczowej tuż poniżej nazwy zmiennej słownika.

Hosty: Switch_f01 Vars: http_port: 8080 Default_gateway: 10.200.50.1 VLAN: ID: 10 Port: 2 

W powyższym przykładzie, Vlany jest zmienną słownika ID I Port są parami kluczowymi.

Hosty: switch_f01 vars: http_port: 8080 default_gateway: vlans: id: 10 portów: 20 zadań: Nazwa: konfiguruj domyślną bramę system_configs: default_gateway_ip: „default_gateway„ nazwa: Port etykiety na vlan 10 vlan_configs: vlan: „default_gateway vlans ['id'] „ port_id: 1/1/ vlans ['port'] 

Dla port_id, Ponieważ zaczynamy wartość z tekstem, a nie zmienną, znaki cytatowe nie są konieczne do otaczania kręconych aparatów ortodontycznych.

2. Zmienne specjalne

Ansible zapewnia listę predefiniowanych zmiennych, do których można się odwoływać w szablonach i podręcznikach Jinja2, ale nie mogą być zmieniane ani zdefiniowane przez użytkownika.

Łącznie lista predefiniowanych zmiennych jest określana jako Niezbędne fakty i są zbierane, gdy wykonuje się podręcznik.

Aby uzyskać listę wszystkich zmiennych ansible, użyj organizować coś Moduł w poleceniu Ansible Ad-hoc, jak pokazano poniżej:

# ansible -m konfiguracja nazwa hosta 

To wyświetla wyjście w formacie JSON, jak pokazano:

# ansible -m konfiguracja LocalHost 
Wypisz zmienne ansible

Z wyjścia widać, że niektóre przykłady ansible Special zmienne obejmują:

ansible_architecture ansible_bios_date ansible_bios_version ansible_date_time ansible_machine ansible_memefree_mb ansible_os_family ansible_selinux 

Istnieje wiele innych specjalnych zmiennych, to tylko kilka przykładów.

Te zmienne mogą być używane w Jinja2 szablon, jak pokazano:

  

Nazwa hosta tego serwera jest to ansible_hostname

Działa dalej ansible_os_familysystem

3. Zmienne zapasowe

Na koniec na liście mamy zmienne zapasowe. Inwentaryzacja to plik w Ini format zawierający wszystkich hostów, które należy zarządzać przez Ansible.

W zapasach możesz przypisać zmienną do systemu hosta, a później użyć jej w podręczniku.

[Web_Servers] Web_server_1 ansible_user = Centos http_port = 80 Web_Server_2 Ansible_user = Ubuntu http_port = 8080 

Powyższe mogą być reprezentowane w podręczniku Yaml Plik jak pokazano:

--- Web_servers: Web_server_1: ansible_user = centos http_port = 80 Web_Server_2: ansible_user = Ubuntu http_port = 8080 

Jeśli systemy hosta mają te same zmienne, możesz zdefiniować inną grupę w pliku ekwipunku, aby uczynić ją mniej uciążliwą i uniknąć niepotrzebnego powtórzenia.

Na przykład:

[Web_Servers] Web_server_1 ansible_user = Centos http_port = 80 Web_Server_2 Ansible_user = Centos http_port = 80 

Powyższe można ustrukturyzować jako:

[Web_servers] Web_server_1 Web_Server_2 [Web_Servers: Vars] ansible_user = Centos http_port = 80 

I w podręczniku Yaml Plik, zostanie to zdefiniowane jak pokazano:

--- Web_servers: Hosts: Web_server_1: Web_server_2: Vars: ansible_user = Centos http_port = 80 

Niezbędne fakty

Podczas uruchamiania podręczników pierwszym zadaniem, które robi Ansible, jest wykonanie zadania konfiguracji. Jestem prawie pewien, że musiałeś natknąć się na wyjście:

Zadanie: [Zbieranie faktów] ********* 

Fakty są tylko właściwości systemu lub informacje o zdalnych węzłach, z którymi się podłączyłeś. Informacje te obejmują architekturę systemu, wersję systemu operacyjnego, informacje BIOS, godzinę i datę systemu, czas aktualizacji systemu, adres IP i informacje o sprzęcie, aby wymienić tylko kilka.

Aby uzyskać fakty dotyczące dowolnego systemu, po prostu użyj organizować coś moduł, jak pokazano w poniższym poleceniu:

# ansible -m konfiguracja nazwa hosta 

Na przykład:

# ansible -m setup baza danych_server 

To drukuje duży zestaw danych w JSON format jak pokazano:

Ansible Get System Facts

Fakty dotyczące możliwości są przydatne, pomagając administratorom systemowym, których operacje do przeprowadzania, na przykład, w zależności od systemu operacyjnego, są w stanie wiedzieć, które pakiety oprogramowania należy zainstalować i jak mają być skonfigurowane itp.

Fakty niestandardowe

Czy wiedziałeś również, że możesz stworzyć własne niestandardowe fakty, które można zebrać przez Ansible? Tak, możesz. Więc jak się do tego zaczynasz? Zmieńmy biegi i zobaczmy, jak.

Pierwszym krokiem jest utworzenie /etc/ansible/fakty.D katalog w zarządzanym lub zdalnym węźle.

W tym katalogu utwórz plik (y) z .fakt rozszerzenie. Ten plik (y) zwróci JSON Dane podczas uruchamiania podręcznika w węźle Ansible Control, które obejmują inne fakty, które Ansible pobiera po uruchomieniu podręcznika.

Oto przykład niestandardowego pliku faktów o nazwie date_time.fakt który pobiera datę i godzinę.

# mkdir -p/etc/ansible/fakty.d # vim/etc/ansible/fakty.d/date_time.fakt 

Dodaj w nim następujące wiersze.

#!/bin/bash data = "data" echo "\" data \ "": \"" $ data \ """" 

Zapisz i wyjdź z pliku.

Teraz przypisz uprawnienia do wykonania:

# chmod +x/etc/ansible/fakty.d/date_time.fakt 

Teraz utworzyłem poradnik w nazwie Ansible Control Node Sprawdź datę.yml.

--- - Hosty: WebServers Zadania: - Nazwa: Pobierz niestandardowe fakty: MSG: Fakt niestandardowy to ansible_local.date_time 

Dołącz plik faktów do ansible_local zmienny. ansible_local przechowuje wszystkie niestandardowe fakty.

Teraz uruchom podręcznik i obserwuj informacje o pobieraniu informacji zapisanych w pliku faktu:

# ansible_playbook check_date.yml 
Utwórz niestandardowe fakty
Wniosek

To prowadzi nas do końca tego samouczka na temat pracy ze zmiennymi i faktami Ansible.

"