Jak korzystać z niestandardowych faktów

Jak korzystać z niestandardowych faktów
Fakty są jak zmienne w Ansible. Ansible generuje wiele faktów, w zależności od hosta, który automatyzuje. Jeśli potrzebujesz, możesz również zdefiniować niestandardowe fakty/zmienne w Ansible.

Możesz zdefiniować trzy rodzaje niestandardowych faktów w Ansible.

1) Fakty globalne: Te fakty są dostępne z każdego hosta w pliku ekwipunku.
2) Fakty grupowe: Fakty te są dostępne tylko z określonego zestawu hostów lub grupy hosta.
3) Fakty hosta: Fakty te są dostępne tylko od konkretnego hosta.

W tym artykule pokażę ci, jak pracować z niestandardowymi faktami Ansible. Więc zacznijmy.

Wymagania wstępne:

Jeśli chcesz wypróbować przykłady tego artykułu,

1) Musisz mieć zainstalowany na komputerze Ansible.
2) Musisz mieć co najmniej 6 hostów Linux skonfigurowanych do automatyzacji Ansible.

Istnieje wiele artykułów na temat Linuxhint poświęconych instalacji ansible i konfiguracji hostów do automatyzacji ansible. Możesz je sprawdzić w razie potrzeby.

Konfiguracja katalogu projektu:

Zanim zaczniemy, utwórzmy katalog projektu, abyśmy mogli zorganizować nasze pliki projektu.

Aby utworzyć katalog projektu fakty na zamówienie/ w Twoim DOM Directory, uruchom następujące polecenie:

$ mkdir -pv custom fact/podręczniki, host_vars, grupa_vars

Teraz przejdź do fakty na zamówienie/ katalog w następujący sposób:

$ CD Custom fact/

Utwórz plik konfiguracyjny Ansible Ansible.CFG W katalogu projektu w następujący sposób:

$ nano ansible.CFG

Wpisz w następujących liniach Ansible.CFG plik.

[domyślne]
Inwentaryzacja = hosty
host_key_checking = false

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować Ansible.CFG plik konfiguracyjny.

Teraz utwórz plik zapasowy Ansible zastępy niebieskie W katalogu projektu w następujący sposób:

$ nano gospodarze

Wpisz w następujących wierszach w swoim zastępy niebieskie Plik zapasowy.

VM1.Nodekite.com
VM2.Nodekite.com
[sieć]
VM3.Nodekite.com
VM4.Nodekite.com
[Baza danych]
VM [5: 6].Nodekite.com

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować zastępy niebieskie Plik zapasowy.

Aby wymienić wszystkie dostępne hosty w pliku ekwipunku, uruchom następujące polecenie:

$ ansible all--list-hosts

Jak widać, mam sześć hostów w moim pliku ekwipunku.

Aby wymienić hosty dostępne w sieć Grupa pliku ekwipunku uruchom następujące polecenie:

$ ansible Web--list-hosts

Jak widać, mam dwóch gospodarzy (VM3.Nodekite.com I VM4.Nodekite.com) w sieć grupa mojego pliku zapasów.

Aby wymienić hosty dostępne w Baza danych Grupa pliku ekwipunku uruchom następujące polecenie:

Baza danych $ ansible-hosts-hosts

Jak widać, mam dwóch gospodarzy (VM5.Nodekite.com I VM6.Nodekite.com) w Baza danych grupa mojego pliku zapasów.

Praca z globalnymi faktami:

W tej sekcji pokażę, jak zdefiniować globalne fakty/zmienne w pliku zapasów i uzyskać do nich dostęp z twoich poradników Ansible. Pokażę również, jak zdefiniować globalne fakty/zmienne w osobnym pliku.

Najpierw otwórz zastępy niebieskie plik zapasowy z następującym poleceniem:

$ nano gospodarze

Teraz dodaj oznaczone linie w swoim zastępy niebieskie Plik zapasowy. Po zakończeniu naciśnij + X śledzony przez Y I Aby zapisać plik.

'

Dodajesz globalne fakty w Wszystkie: vars Sekcja. Tutaj dodałem Web_Url Fakt globalny.

Teraz utwórz nowy podręcznik print_global_fact.Yaml w podręczniki/ katalog w następujący sposób:

$ Nano Playbooks/print_global_fact.Yaml

Następnie wpisz następujące wiersze w print_global_fact.Yaml plik.

- Gospodarze: Wszyscy
Użytkownik: Ansible
Zadania:
- Nazwa: Wydrukuj wartość faktu globalnego „Web_Url”
odpluskwić:
MSG: 'Web URL: Web_Url'

Celem tego podręcznika jest wydrukowanie Web_Url Fakt globalny.

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować print_global_fact.Yaml plik.

Teraz uruchom print_global_fact.Yaml Playbook w następujący sposób:

$ Ansible-Playbook Playbooks/print_global_fact.Yaml

Jak widać, wszystkie hosty w moim pliku ekwipunku mogą uzyskać dostęp do globalnego faktu Web_Url.

Możesz także dodać fakty globalne w osobnym pliku. W ten sposób możesz utrzymać plik zapasów w czystości. Zobaczmy, jak to zrobić.

Najpierw usuńmy globalne fakty z zastępy niebieskie Plik zapasowy.

$ nano gospodarze

Teraz usuń zaznaczone linie z pliku inwentaryzacji i naciśnij + X, śledzony przez Y I Aby zapisać plik zapasów.

Następnie utwórz nowy plik Wszystko w grupa_vars/ katalog w następujący sposób:

$ nano grupa_vars/all

Aby dodać globalny fakt Web_Url, Wpisz w następującym wierszu w grupa_vars/all plik.

Web_Url: https: // www.Linuxhint.com

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować grupa_vars/all plik.

Aby sprawdzić, czy możesz uzyskać dostęp do faktu globalnego Web_Url, uruchom print_global_fact.Yaml Playbook ponownie w następujący sposób:

$ Ansible-Playbook Playbooks/print_global_fact.Yaml

Jak widać, wszystkie hosty w moim pliku ekwipunku mogą uzyskać dostęp do globalnego faktu Web_Url.

Praca z faktami grupy Ansible:

W tej sekcji pokażę, jak zdefiniować fakty/zmienne grupy Ansible w pliku ekwipunku i uzyskać do nich dostęp z twoich poradników Ansible. Pokażę również, jak zdefiniować fakty/zmienne grupowe w osobnym pliku.

Najpierw otwórz zastępy niebieskie plik zapasowy z następującym poleceniem:

$ nano gospodarze

Jeśli masz grupę hosta Grupa 1, Następnie dodajesz fakty/zmienne grupowe dla tej grupy hosta w a Grupa 1: VARS sekcja pliku zapasów.

[Grupa 1]

[grupa 1: vars]
Zmienna1 = wartość 1
zmienna2 = wartość2

Na przykład, aby dodać fakty/zmienne grupowe Nazwa domeny I Batabase_backends dla sieć Grupa hosta, możesz wpisać oznaczone linie w pliku ekwipunku.

Po zakończeniu naciśnij + X śledzony przez Y I Aby zapisać plik zapasów.

Aby wydrukować i sprawdzić, czy możemy uzyskać dostęp do faktów grupowych, stwórz nowy podręcznik print_group_facts.Yaml w podręczniki/ katalog w następujący sposób:

$ Nano Playbooks/print_group_facts.Yaml

Wpisz w następujących wierszach w swoim print_group_facts.Yaml plik.

- Hosty: Web
Użytkownik: Ansible
Zadania:
- Nazwa: Drukuj fakty grupowe
odpluskwić:
MSG: 'nazwa domeny: domain_name backend: batabase_backend' '

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować print_group_facts.Yaml plik.

Teraz uruchom print_group_facts.Yaml Playbook w następujący sposób:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Jak widać, gospodarze w sieć Grupa może uzyskać dostęp do Nazwa domeny I Batabase_backend Fakty/zmienne grupowe.

Teraz posprzątajmy plik zapasów i zobaczmy, jak dodać fakty/zmienne grupowe w osobnym pliku.

Najpierw otwórz zastępy niebieskie Plik zapasowy w następujący sposób:

$ nano fakty

Usuń oznaczone linie z zastępy niebieskie Plik zapasowy. Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować zastępy niebieskie Plik zapasowy.

Jak dodajemy zmienne grupowe dla sieć Grupa hosta, utwórz nowy plik sieć (tak samo jak nazwa grupy) w grupa_vars/ katalog w następujący sposób:

$ nano grupa_vars/internet

Aby dodać fakty grupowe Nazwa domeny I Batabase_backend dla sieć grupa hosta, dodaj następujące wiersze w grupa_vars/Web plik.

Domeain_name: Web.Linuxhint.com
Batabase_backend: PGSQL

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować grupa_vars/Web plik.

Aby sprawdzić, czy gospodarze w sieć Grupa może uzyskać dostęp do faktów grupowych, uruchomić print_group_facts.Yaml Playbook w następujący sposób:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Jak widać, gospodarze w sieć Grupa może uzyskać dostęp do Nazwa domeny I Batabase_backend Fakty/zmienne grupowe.

Praca z faktami hosta Ansible:

W tej sekcji pokażę, jak zdefiniować fakty/zmienne hosta ansible w pliku ekwipunku i uzyskać do nich dostęp z twoich poradników Ansible. Pokażę również, jak zdefiniować fakty/zmienne hosta w osobnym pliku.

Najpierw otwórz zastępy niebieskie plik zapasowy z następującym poleceniem:

$ nano gospodarze

Możesz dodać fakty/zmienne hosta po nazwie DNS lub adresie IP hosta w pliku ekwipunku w następujący sposób:

www.domena1.com zmienna 1 = wartość 1 zmienna 2 = wartość2
192.168.22.2 zmienna1 = wartość3 zmienna2 = wartość4

Na przykład możesz dodawać fakty/zmienne hosta Nazwa domeny I Batabase_backend dla gospodarzy VM3.Nodekite.com I VM4.Nodekite.com, jak zaznaczono na zrzucie ekranu poniżej.

Zauważ, że wartość Nazwa domeny I Batabase_backend Fakty/zmienne są różne dla każdego hosta.

Po zakończeniu dodawania faktów/zmiennych hosta naciśnij + X, śledzony przez Y I Aby uratować zastępy niebieskie Plik zapasowy.

Ponieważ dodałem te same fakty/zmienne, co w przykładzie faktów/zmiennych grupowych, możemy użyć print_group_facts.Yaml podręcznik w celu przetestowania dostępności tych faktów/zmiennych.

Uruchom print_group_facts.Yaml Playbook w następujący sposób:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Jak widać, fakty/zmienne hosta są dostępne dla określonego hosta. Wartości są również różne dla każdego hosta.

Ponieważ każdy z hostów znajduje się w osobnej linii w moim pliku ekwipunku, mogę łatwo dodać fakty/zmienne hosta w moim pliku zapasowym. Ale jeśli używasz zakresów do zdefiniowania hostów w pliku ekwipunku, jak zaznaczono na zrzucie ekranu poniżej, nie możesz dodać takich faktów/zmiennych hostów.

Możesz dodać fakty/zmienne hosta w osobnym pliku, tak jak zrobiłeś to dla globalnych i grupowych faktów/zmiennych.

Dodać fakty/zmienne hosta VM5.Nodekite.com host, utwórz nowy plik VM5.Nodekite.com (tak samo jak nazwa DNS hosta) w host_vars/ katalog w następujący sposób:

$ nano host_vars/vm5.Nodekite.com

Możesz dodać fakty/zmienne hosta db_port I db_name dla gospodarza VM5.Nodekite.com z następującymi wierszami.

DB_PORT: 3306
db_name: demo1

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować VM5.Nodekite.com plik.

W ten sam sposób, aby dodać fakty/zmienne hosta dla hosta VM6.Nodekite.com, Utwórz nowy plik VM6.Nodekite.com w host_vars/ katalog w następujący sposób:

$ nano host_vars/vm6.Nodekite.com

Możesz dodać fakty/zmienne hosta db_port I db_name dla gospodarza VM6.Nodekite.com z następującymi wierszami.

DB_PORT: 8877
db_name: app1

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować VM6.Nodekite.com plik.

Aby wydrukować i przetestować, czy możemy uzyskać dostęp do faktów/zmiennych hosta, utwórz nowy podręcznik print_host_facts.Yaml w podręczniki/ katalog w następujący sposób:

$ Nano Playbooks/print_host_facts.Yaml

Teraz wpisz następujące wiersze w print_host_facts.Yaml plik.

- Hosty: baza danych
Użytkownik: Ansible
Zadania:
- Nazwa: Drukuj fakty hosta
odpluskwić:
msg: 'nazwa bazy danych: db_name port bazy danych: db_port'

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować print_host_facts.Yaml plik.

Aby sprawdzić, czy gospodarz VM5.Nodekite.com I VM6.Nodekite.com może uzyskać dostęp do faktów/zmiennych hosta, uruchomić print_host_facts.Yaml Playbook w następujący sposób:

$ Ansible-Playbook Playbooks/print_host_facts.Yaml

Jak widać, gospodarze VM5.Nodekite.com I VM6.Nodekite.com może uzyskać dostęp do db_name I db_port Fakty/zmienne hosta.

Złożenie tego wszystkiego: Ansible Facts Pierwsze

W tej sekcji zamierzam porozmawiać o precedensie o fakcie/zmiennym. Więc zacznijmy.

Zanim zaczniemy, posprzątajmy plik zapasów.

Otworzyć zastępy niebieskie plik zapasowy z następującym poleceniem:

$ nano gospodarze

Usuń oznaczoną sekcję z pliku inwentaryzacji.

W ten sposób Twój plik zapasowy powinien patrzeć w tym momencie.

Teraz dodaj zaznaczoną linię w pliku ekwipunku. Te linie dodają globalne fakty/zmienne fact_scope I Port.

Następnie dodaj zaznaczone linie w pliku ekwipunku. Te linie dodają fact_scope I Port fakty/zmienne dla gospodarzy w Baza danych Grupa.

Na koniec dodaj fact_scope I Port fakty/zmienne hosta dla VM3.Nodekite.com I VM4.Nodekite.com gospodarze, jak zaznaczono na zrzucie ekranu poniżej.

Po zakończeniu naciśnij + X śledzony przez Y I Aby zapisać plik zapasów.

Aby wydrukować wartość faktów/zmiennych globalnych, grupowych i hostów, stwórz nowy podręcznik FACT_PRECENDENCE.Yaml w podręczniki/ katalog w następujący sposób:

$ nano boiska/fact_precedence.Yaml

Wpisz w następujących wierszach w FACT_PRECEDENCE.Yaml plik.

- Gospodarze: Wszyscy
Użytkownik: Ansible
Zadania:
- Nazwa: Wydrukuj wszystkie fakty
odpluskwić:
MSG: „Zakres faktów: fact_scope port: port”

Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować FACT_PRECEDENCE.Yaml plik.

Aby wydrukować fakty/zmienne globalne, grupowe i hosta, uruchom FACT_PRECEDENCE.Yaml Playbook w następujący sposób:

$ Ansible-Playbook Playbooks/fact_precedence.Yaml

Jak widać, fakty/zmienne globalne, grupowe i hosta są drukowane.

Zauważ, że fakty/zmienne grupowe zastąpiły globalne fakty/zmienne (1). Zauważ też, że fakty/zmienne hosta zastąpiły zarówno fakty/zmienne grupy, jak i globalne (2).

Fakt/zmienna pierwszeństwo Ansible jest następujące:

Fakt hosta> fakt grupowy> Fakt globalny

Wniosek:

Po przeczytaniu tego artykułu powinieneś być w stanie wygodnie współpracować z faktami/zmiennymi Ansible Global, Group i Host. Pamiętaj o precedensowaniu niestandardowych faktów. Pomoże ci łatwiej debugować swoje podręczniki Ansible.