Na co dzień mam do czynienia z nienadzorowaną instalacją stacji roboczych i serwerów opartych o system Windows. Do realizacji zadań wykorzystuję Microsoft Deployment Toolkit oraz PDQ Deploy.
Pewnego dnia postanowiłem nauczyć się wykonywania deploymentu dla serwerów opartych o system Linux. Przeglądając internet w poszukiwaniu rozwiązań wspierających zarządzanie oprogramowaniem/usługami trafiłem na różne rozwiązania, takie jak: Puppet, Chef, SaltStack oraz Ansible. Po odrzuceniu rozwiązań, które potrzebowały do działania zainstalowanego agenta po stronie stacji klienckiej i z tego powodu nie nadawały się do tego typu przedsięwzięcia. Ostatecznie wybrałem rozwiązanie, które miało dla mnie najlepszą dokumentacją- Ansible.
Czym jest…
Ansible jest narzędziem do automatyzacji wdrażania aplikacji i zarządzania konfiguracją. Głównie wykorzystywane jest jako narzędzie typu push, krótko mówiąc wydajemy nim komendy, które wykonywane są na stacjach zarządzanych (klient). Nie korzysta z żadnych agentów i nie wymaga dodatkowych niestandardowych infrastruktur bezpieczeństwa, więc jest łatwy w obsłudze. Używa bardzo prostego języka YAML, który służy do pisania przejrzystych playbook’ów. By zacząć pracę nie potrzeba zbyt wiele. Jeżeli mamy program do obsugi terminali (Putty, mRemoteNG), edytor tekstowy (vim, nano) i dodatkowo systemem kontroli wersji (GIT, Subversion), aby śledzić zmiany zawartości to w zasadzie mamy wszystko by zacząć.
Do łączenia stacji zarządzającej z klientami nie są potrzebne hasła roota zapisywane w pliku konfiguracyjnym, wystarczy proste połączenie SSH przy pomocy wygenerowanego wcześniej klucza. Można również użyć innych opcji, takich jak Kerberos lub systemy zarządzania tożsamością.
Jak działa ?
Z maszyny zarządzającej wydajemy komendy, które wykonujemy na pojedynczych hostach bądź grupach hostów, zdefiniowanych wcześniej. Polecenia mogą być wydawane pojedynczo lub jako zbiór komend zdefiniowanych w playbook’u.
Przykład:
Wykonanie komendy ping na grupie serwerów test:
ansible -m ping test
Zwróci:
Wykonanie playbooka main.yml z określoną grupą docelową oraz czynnościami, które ma wykonać:
ansible-playbook main.yml
Zwróci: