Ansible. Porządkowanie ewidencji.

Środowisko IT łatwiej zarządzać gdy uporządkujemy je w logiczny a przede wszystkim wygodny dla nas sposób. Ansible daje tu kilka możliwości jak ogarnąć wszystkie nasze podległe hosty, cały nasz inwentarz. 

Podstawowym sposobem jest grupowanie hostów. Jest to bardzo prosty a zarazem czytelny sposób aby uporządkować inwentarz. Nasze serwery można podzielić ze względu na ich rolę w infrastrukturze, lokalizacje czy rodzaj serwisu.
Popatrzmy na poniższy przykład.

[nazwa_grupy]
nazwa_servera1
nazwa_serwera2
nazwa_serwera100

Widzimy tu liste serwerów w jednej grupie.

Co charakterystyczne, często w środowiskach występują serwery bazy danych, aplikacji czy plików. To jeden z najpopularniejszych sposobów grupowania. Oczywiście możemy je dowolnie ułożyć, tak by zarządzenie nimi i wykonywanie receptur (playbooków) było wygodne i efektywne. Gdy chcemy wykonać operacje tylko na naszych serwerach bazodanowych to wystarczy że wskażemy ta grupe przy wykonywaniu playbooka za pomoca parametry -l lub –limit

ansible-playbook -i nazwa_inwentarza nazwa_playbooka.yml  -l nazwa_grupy

Kolejnym poziomem uporządkowania naszego inwentarza jest tworzenie grup grup. Brzmi zawile, no to może tak – czyli grupy nadrzędnej która zawiera w sobie inne grupy. Na przykładzie bedzie prosciej. 

[nazwa_grupy_nadrzędnej:children]
nazwa_grupyA
nazwa_grupyB

Tu w składni wymagane jest właśnie słowo :children dzięki temu Ansible wie że to grupa grup.

Przykład pliku inwentarza.

[webservers]
web01
web02

[databases]
db01
db02
db03

[production:children]
webservers
databases

[MQ]
mq01
mq02

[development]
test01
test02
utst01
utst02

[network]
lb01
lb02
ad01
ad02
ad03

[preprod:children]
development
databases

Na powyższym przykładziemy mamy hosty w kilku grupach a także dwie grupy grup.

Jeśli chcesz wylistować grupę hostów wykonaj polecenie
ansible --lists-hosts nazwa_grupy

Możesz też użyć szablonu nazwy aby wyświetlać im odpowiadające
ansible --list-hosts web*

Aby wyświetlić serwery z kilku grup użyj : lub ,
ansible --lists-hosts nazwa_grupy1,nazwa_grupy2

W większych środowiskach często serwery mają nazwy według tego pewnego wzorca – różnią się tylko kolejnym numerem. Zakładając że masz dziesięć kolejno oznaczonych serwerów dla aplikacji webowej, to już nie musisz wypisywać wszystkich po kolei. Wystarczy po prostu napisac web[01:10].firma.com To dla ansible bedzie oznaczalo dziesiec kolejnych hostów w pliku ewidencji. Proste, tym sposobem już mamy nieco dynamiki w naszym pliku.

Kolejnym sposobem grupowania naszych hostów jest tworzenie oddzielnych plików inwentarza (hostfile). Ten sposób sprawdza się na przykład  dla różnych projektów, gdzie mamy całkowicie oddzielnie środowiska i zbiory serwerów. W tym przypadku należy przy uruchamianiu playbooka wskazać dodatkowy plik z inwentarzem podając parametr -i bo bez tego zostanie użyty domyślny plik inwentarza.

ansible-playbook nazwa_playbooka1 -i plik_inwentarza2

Oczywiście wszystkie opisane sposoby grupowania i filtrowania można zastosować w każdym pliku inwentarza.

Plik ewidencji może zawierać zmienne które budują dynamicznie nasz inwentarz jednak na razie skupmy się na jego statycznej formie. Później omówimy bardziej zaawansowane opecje.

Tags: