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.