{"id":450,"date":"2021-06-22T10:14:41","date_gmt":"2021-06-22T08:14:41","guid":{"rendered":"http:\/\/www.digiliv.de\/?p=450"},"modified":"2021-06-22T10:14:41","modified_gmt":"2021-06-22T08:14:41","slug":"ansible-einfache-playbooks","status":"publish","type":"post","link":"http:\/\/www.digiliv.de\/index.php\/2021\/06\/22\/ansible-einfache-playbooks\/","title":{"rendered":"Ansible: Einfache Playbooks"},"content":{"rendered":"<p><a href=\"http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-443 size-medium alignleft\" src=\"http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo-244x300.png\" alt=\"\" width=\"244\" height=\"300\" srcset=\"http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo-244x300.png 244w, http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo.png 360w\" sizes=\"auto, (max-width: 244px) 100vw, 244px\" \/><\/a>Um Tasks nicht nur interaktiv in einzelnen Schritten sondern auch gr\u00f6\u00dfere Aufgaben mit mehreren Schritten ausf\u00fchren zu k\u00f6nnen gibt es die sog. Playbooks. Diese werden mittels des Befehls ansible-playbook ausgef\u00fchrt. Playbooks sind einfache yaml-Files und k\u00f6nnen einfach mittels eines Editors (z.B. nano) erstellt werden.<br \/>\nAlso warum nicht nano mittels Ansible installieren?<\/p>\n<p>Los geht es als root auf dem zu installierenden Rechner. Um mitels Ansible Aufgaben wie eine Paketinstallation ausf\u00fchren zu k\u00f6nnen, muss der Ansible-User nat\u00fcrlich angelegt und auch in der Gruppe sudoers hinterlegt sein. Dazu legt man den User mittels <em>useradd ansible<\/em> an, um das Password anzupassen passwd ansible.<br \/>\nDamit ist der User angelegt und man kann ihn der Gruppe der sudoers zuf\u00fcgen. Dazu f\u00fchrt man bei RedHat basierten Systemen als root das Kommando <em>visudo<\/em> aus und erg\u00e4nzt am Ende der Datei die Zeile<\/p>\n<p>ansible \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ALL=(ALL) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ALL<\/p>\n<p>&nbsp;<\/p>\n<p>Bei Debian-Systemen muss nat\u00fcrlich sudo installiert sein, dann kann die Zeile auch direkt in \/etc\/sudoers erg\u00e4nzt werden<\/p>\n<p>Damit kann der User ansible uneingeschr\u00e4nkt privilegierte Aktionen ausf\u00fchren. Auf dem zu steuernden Computer ist damit alles ok und man wechselt zur\u00fcck zum Ansible-Host.<\/p>\n<p>Hier wird in \/etc\/ansible\/hosts gepr\u00fcft ob der Zielhost eingetragen und die entsprechenden Variablen vorhanden sind<\/p>\n<pre>[TEST]\r\n172.16.199.222\r\n172.16.199.223\r\n\r\n[TEST:vars]\r\nansible_user=ansible\r\nansible_password=AnSiBLE3210\r\nansible_sudo_pass=AnSiBLE3210<\/pre>\n<p>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 &#8230; Passworte im Klartext in einer Konfigurationsdatei geht gar nicht.<br \/>\nHier sind sie trotzdem zur Verdeutlichung hinterlegt.<br \/>\nAnsible meldet sich also an den Rechner 172.16.199.222 und 223 als User ansible mit dem Passwort AnSiBLE3210 an. F\u00fcr privilegierte Aktionen wird sudo und das zugeh\u00f6rige sudo_pass verwendet.<br \/>\nDamit sind die Aktionen als root beendet und die weiteren Kommandos k\u00f6nnen auch als &#8216;normaler&#8217; User ausgef\u00fchrt werden.<br \/>\nNun zu Erstellung eines Playbooks mit einem Texteditor freier Wahl.<\/p>\n<pre>- name: InstallNANO\r\n               hosts: TEST\r\n               become: true\r\n               tasks:\r\n                         - name: Check for nano\r\n                           apt: name=nano update_cache=yes<\/pre>\n<p>Dieses einfache Playbook hei\u00dft InstallNANO, wird auf die Gruppe TEST angewandt und installiert \u00fcber apt das Paket nano. Um die aktuellste Version zu installieren wird auch der Paket-Cache aktualisiert. Von den Tasks k\u00f6nnen durchaus noch mehrere Eintr\u00e4ge folgen.<br \/>\nDie Datei wird gespeichert und mittels ansible-playbook ausgef\u00fchrt.<\/p>\n<pre>[user1@ansible playbooks]$ ansible-playbook test2.yml\r\n\r\nPLAY [InstallNANO] ************************************************************************************************************************************************************** \r\n\r\nTASK [Gathering Facts] ********************************************************************************************************************************************************** \r\n[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 \r\nchange this. See https:\/\/docs.ansible.com\/ansible\/2.9\/reference_appendices\/interpreter_discovery.html for more information. \r\nok: [172.16.199.223] \r\n[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 \u00a0\r\nreleases. A future Ansible release will default to using the discovered platform python for this host. See \u00a0\r\nhttps:\/\/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 \u00a0\r\ncan be disabled by setting deprecation_warnings=False in ansible.cfg. \r\nok: [172.16.199.222] \r\n\r\nTASK [Check for nano] *********************************************************************************************************************************************************** \r\n[WARNING]: Updating cache and auto-installing missing dependency: python3-apt \r\nfatal: [172.16.199.222]: FAILED! =&gt; {\"changed\": false, \"cmd\": \"apt-get update\", \"msg\": \"[Errno 2] No such file or directory: b'apt-get'\", \"rc\": 2} \r\n[WARNING]: Updating cache and auto-installing missing dependency: python-apt \r\nok: [172.16.199.223] \r\n\r\nPLAY RECAP ********************************************************************************************************************************************************************** \r\n172.16.199.222 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0: ok=1 \u00a0\u00a0\u00a0changed=0 \u00a0\u00a0\u00a0unreachable=0 \u00a0\u00a0\u00a0failed=1 \u00a0\u00a0\u00a0skipped=0 \u00a0\u00a0\u00a0rescued=0 \u00a0\u00a0\u00a0ignored=0 \u00a0\u00a0\u00a0\r\n172.16.199.223 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0: ok=2 \u00a0\u00a0\u00a0changed=0 \u00a0\u00a0\u00a0unreachable=0 \u00a0\u00a0\u00a0failed=0 \u00a0\u00a0\u00a0skipped=0 \u00a0\u00a0\u00a0rescued=0 \u00a0\u00a0\u00a0ignored=0 \r\n\r\n<\/pre>\n<p>Die Ausgabe zeigt was im Einzelnen passiert, die Zusammenfassung findet sich als PLAY RECAP.<br \/>\nMan 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.<\/p>\n<p>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:<\/p>\n<pre>PLAY RECAP ********************************************************************************************************************************************************************** \r\n172.16.199.222 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0: ok=1 \u00a0\u00a0\u00a0changed=0 \u00a0\u00a0\u00a0unreachable=0 \u00a0\u00a0\u00a0failed=1 \u00a0\u00a0\u00a0skipped=0 \u00a0\u00a0\u00a0rescued=0 \u00a0\u00a0\u00a0ignored=0 \u00a0\u00a0\u00a0\r\n172.16.199.223 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0: ok=2 \u00a0\u00a0\u00a0changed=1 \u00a0\u00a0\u00a0unreachable=0 \u00a0\u00a0\u00a0failed=0 \u00a0\u00a0\u00a0skipped=0 \u00a0\u00a0\u00a0rescued=0 \u00a0\u00a0\u00a0ignored=0<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um Tasks nicht nur interaktiv in einzelnen Schritten sondern auch gr\u00f6\u00dfere Aufgaben mit mehreren Schritten ausf\u00fchren zu k\u00f6nnen gibt es die sog. Playbooks. Diese werden mittels des Befehls ansible-playbook ausgef\u00fchrt. Playbooks sind einfache yaml-Files und k\u00f6nnen einfach mittels eines Editors (z.B. nano) erstellt werden. Also warum nicht nano mittels Ansible installieren? Los geht es als [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":443,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75,32,4],"tags":[76,77],"class_list":["post-450","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automation","category-linux","category-netzwerk","tag-ansible","tag-automation"],"_links":{"self":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts\/450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/comments?post=450"}],"version-history":[{"count":3,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts\/450\/revisions"}],"predecessor-version":[{"id":453,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts\/450\/revisions\/453"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/media\/443"}],"wp:attachment":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/media?parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/categories?post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/tags?post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}