Jak używać statycznych i dynamicznych inwentarzy w Ansible – część 4

W tej części 4 serii Ansible wyjaśnimy, jak używać statycznych i dynamicznych inwentarzy do definiowania grup hostów w Ansible.

W Ansible zarządzane hosty lub serwery, które są kontrolowane przez węzeł kontrolny Ansible, są zdefiniowane w pliku inwentarza hosta, jak wyjaśniono w. Plik spisu hostów jest plikiem tekstowym, który składa się z nazw hostów lub adresów IP zarządzanych hostów lub serwerów zdalnych.

Zarządzane hosty mogą być wymienione jako indywidualne wpisy lub skategoryzowane pod nazwą grupy, jak zobaczymy później. W Ansible istnieją dwa rodzaje plików inwentaryzacyjnych: Static i Dynamic.

Przyjrzyjrzyjmy się każdemu z nich i zobaczmy, jak możemy nimi zarządzać. Zakładamy, że zainstalowałeś już Ansible na węźle kontrolnym i skonfigurowałeś połączenie SSH bez hasła do zarządzanych hostów.

Statyczny plik inwentaryzacji hostów

W Ansible statyczny plik inwentaryzacji to plik tekstowy zawierający listę zarządzanych hostów zadeklarowanych w ramach grupy hostów przy użyciu nazw hostów lub adresów IP.

Nazwa grupy hostów jest ujęta w nawiasy kwadratowe, np. . Wpisy zarządzanych hostów są później wypisane poniżej nazwy grupy, każdy w osobnej linii. Jak omówiono wcześniej, hosty są wymienione przy użyciu albo nazwy hosta lub adresów IP.

Host A ip_address Host B ip_addressHost c ip_address

Dla celów ilustracyjnych, będziemy tworzyć statyczny plik inwentaryzacji.

# mkdir test_lab && cd test_lab# vim hosts
Statyczny plik inwentaryzacji
173.82.115.165173.82.220.239webserversdatabase_servers

Zapisz plik i wyjść.

Jak widać w pliku inwentaryzacji powyżej, mamy utworzone 2 grupy hostów: webservers i database_servers. Ponadto, stworzyliśmy dodatkową grupę o nazwie datacenter, który zawiera grupę grup hostów oznaczonych przez ': children' sufiks jak widać powyżej.

Ansible pozwala również grupy hostów, aby być umieszczone pod nazwą grupy. W powyższym pliku inwentaryzacji, grupy webservers i database_servers zostały umieszczone pod datacenter.

UWAGA: Nie jest obowiązkowe, aby umieścić zarządzane hosty w grupie hostów. Można je po prostu wymienić, używając na przykład ich nazw hostów lub adresów IP.

173.82.202.239172.82.115.165load_balancer.pnl.com

Użyjmy teraz kilku poleceń Ansible, aby odwołać się do pliku inwentaryzacji hostów. Podstawowa składnia do zarządzania inwentarzem jest taka, jak pokazano.

$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts

Na przykład,

$ ansible all -i /root/test_labs/hosts --list-hosts
List Ansible Hosts

Alternatywnie można użyć znaku wieloznacznego *, aby zastąpić argument 'all'.

$ ansible * -i /root/test_labs/hosts --list-hosts
List Ansible Hosts Using Wildcards

Aby wyświetlić listę hostów w grupie, w miejscu host-pattern należy podać grupę hostów.

$ ansible webservers -i /root/test_labs/hosts --list-hosts
List Ansible Hosts in Group

Dynamiczny plik inwentaryzacji hostów

W konfiguracji – zwłaszcza w chmurze, takiej jak AWS, gdzie plik inwentaryzacji ciągle się zmienia, gdy dodajesz lub usuwasz serwery, utrzymanie kart na hostach zdefiniowanych w pliku inwentaryzacji staje się prawdziwym wyzwaniem. To staje się niewygodne wracając do pliku hosta i aktualizacji listy hostów z ich adresami IP.

I to jest, gdzie dynamiczna inwentaryzacja przychodzi do gry. Więc co to jest dynamiczna inwentaryzacja? Dynamiczna inwentaryzacja jest skrypt napisany w Pythonie, PHP lub innym języku programowania. Przydaje się w środowiskach chmurowych takich jak AWS, gdzie adresy IP zmieniają się po zatrzymaniu i ponownym uruchomieniu serwera wirtualnego.

Ansible ma już opracowane skrypty inwentaryzacyjne dla platform chmury publicznej takich jak Google Compute Engine, Amazon EC2 instance, OpenStack, RackSpace, cobbler, między innymi.

Jakie są zalety dynamicznej inwentaryzacji nad statyczną inwentaryzacją?
  • Dynamiczna inwentaryzacja doskonale redukuje błędy ludzkie, ponieważ informacje są zbierane za pomocą skryptów.
  • Minimalny wysiłek jest wymagany w zarządzaniu inwentaryzacją.

Możesz napisać własną niestandardową dynamiczną inwentaryzację w wybranym języku programowania. Inwentaryzacja powinna zwrócić format JSON, gdy zostaną przekazane odpowiednie opcje.

Utilize an Existing Dynamic Inventory Script

Skrypt, który jest używany do tworzenia dynamicznej inwentaryzacji, musi być wykonywalny, aby Ansible mógł go użyć.

Aby pobrać informacje o hostach wewnątrz skryptu dynamicznej inwentaryzacji, wystarczy uruchomić.

# ./script --list 

Jak wskazano wcześniej, wyjście powinno być w formacie JSON w poniższym formacie.

Słownik składający się z grup (tj.webservers, database_Servers)
  • Lista zarządzanych hostów w każdej grupie
  • Słownik zmiennych
Słownik meta
  • Hosty i hostvars
Przykładowe dane wyjściowe
Podsumowanie

W tym artykule zademonstrowaliśmy jak tworzyć zarówno statyczne jak i dynamiczne inwentaryzacje. Podsumowując, statyczny plik inwentaryzacji jest plik tekstowy zawierający listę zarządzanych hostów lub węzłów zdalnych, których numery i adresy IP pozostają dość stałe.

Z drugiej strony, dynamiczny plik hostów zmienia się w miarę dodawania nowych hostów lub usuwania starych. Adresy IP hostów są również dynamiczne, ponieważ zatrzymujesz i uruchamiasz nowe systemy hostów. Mamy nadzieję, że ten poradnik był dla Ciebie pouczający.