Ansible: Einfache Playbooks

Um Tasks nicht nur interaktiv in einzelnen Schritten sondern auch größere Aufgaben mit mehreren Schritten ausführen zu können gibt es die sog. Playbooks. Diese werden mittels des Befehls ansible-playbook ausgeführt. Playbooks sind einfache yaml-Files und können einfach mittels eines Editors (z.B. nano) erstellt werden.
Also warum nicht nano mittels Ansible installieren?

Los geht es als root auf dem zu installierenden Rechner. Um mitels Ansible Aufgaben wie eine Paketinstallation ausführen zu können, muss der Ansible-User natürlich angelegt und auch in der Gruppe sudoers hinterlegt sein. Dazu legt man den User mittels useradd ansible an, um das Password anzupassen passwd ansible.
Damit ist der User angelegt und man kann ihn der Gruppe der sudoers zufügen. Dazu führt man bei RedHat basierten Systemen als root das Kommando visudo aus und ergänzt am Ende der Datei die Zeile

ansible        ALL=(ALL)       ALL

 

Bei Debian-Systemen muss natürlich sudo installiert sein, dann kann die Zeile auch direkt in /etc/sudoers ergänzt werden

Damit kann der User ansible uneingeschränkt privilegierte Aktionen ausführen. Auf dem zu steuernden Computer ist damit alles ok und man wechselt zurück zum Ansible-Host.

Hier wird in /etc/ansible/hosts geprüft ob der Zielhost eingetragen und die entsprechenden Variablen vorhanden sind

[TEST]
172.16.199.222
172.16.199.223

[TEST:vars]
ansible_user=ansible
ansible_password=AnSiBLE3210
ansible_sudo_pass=AnSiBLE3210

Die Host sind vorhanden und die Zugriffskennungen ebenfalls. Hier wird dann auch klar, warum es bei Ansible einen Password-Vault gibt und warum man diesen auch nutzen sollte … Passworte im Klartext in einer Konfigurationsdatei geht gar nicht.
Hier sind sie trotzdem zur Verdeutlichung hinterlegt.
Ansible meldet sich also an den Rechner 172.16.199.222 und 223 als User ansible mit dem Passwort AnSiBLE3210 an. Für privilegierte Aktionen wird sudo und das zugehörige sudo_pass verwendet.
Damit sind die Aktionen als root beendet und die weiteren Kommandos können auch als ‘normaler’ User ausgeführt werden.
Nun zu Erstellung eines Playbooks mit einem Texteditor freier Wahl.

- name: InstallNANO
               hosts: TEST
               become: true
               tasks:
                         - name: Check for nano
                           apt: name=nano update_cache=yes

Dieses einfache Playbook heißt InstallNANO, wird auf die Gruppe TEST angewandt und installiert über apt das Paket nano. Um die aktuellste Version zu installieren wird auch der Paket-Cache aktualisiert. Von den Tasks können durchaus noch mehrere Einträge folgen.
Die Datei wird gespeichert und mittels ansible-playbook ausgeführt.

[user1@ansible playbooks]$ ansible-playbook test2.yml

PLAY [InstallNANO] ************************************************************************************************************************************************************** 

TASK [Gathering Facts] ********************************************************************************************************************************************************** 
[WARNING]: Platform linux on host 172.16.199.223 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could 
change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. 
ok: [172.16.199.223] 
[DEPRECATION WARNING]: Distribution fedora 34 on host 172.16.199.222 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible  
releases. A future Ansible release will default to using the discovered platform python for this host. See  
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings  
can be disabled by setting deprecation_warnings=False in ansible.cfg. 
ok: [172.16.199.222] 

TASK [Check for nano] *********************************************************************************************************************************************************** 
[WARNING]: Updating cache and auto-installing missing dependency: python3-apt 
fatal: [172.16.199.222]: FAILED! => {"changed": false, "cmd": "apt-get update", "msg": "[Errno 2] No such file or directory: b'apt-get'", "rc": 2} 
[WARNING]: Updating cache and auto-installing missing dependency: python-apt 
ok: [172.16.199.223] 

PLAY RECAP ********************************************************************************************************************************************************************** 
172.16.199.222             : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0    
172.16.199.223             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

Die Ausgabe zeigt was im Einzelnen passiert, die Zusammenfassung findet sich als PLAY RECAP.
Man sieht hier, dass ddie Installation auf dem Host mit der IP 172.16.199.222 auf failed gelaufen ist. Das liegt hier daran, dass dies ein Fedora-Host ist und es dort einfach kein apt gibt.

Auf dem zweiten Host ist changed=0 und failed=0, d.h. der Task ist erfolgreich gelaufen, es brauchte aber nichts getan werden, weil nano schon vorhanden war. Wenn nano nicht vorhanden ist sieht das PLAY RECAP wie folgt aus:

PLAY RECAP ********************************************************************************************************************************************************************** 
172.16.199.222             : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0    
172.16.199.223             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0