Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
linux:ansible:playbook_example_12 [01.12.2023 16:51. ] – [Ansible Stdout Compact Logger] django | linux:ansible:playbook_example_12 [17.03.2024 15:00. ] (aktuell) – django |
---|
====== Ansible cowsay: Die sprechende Kuh, oder auch mehr Getier oder doch nur puristisch mit dem Stdout Compact Logger? ====== | {{htmlmetatags>metatag-robots=() |
| metatag-keywords=(Ansible,Arch Linux,Ansible Stdout Compact Logger,logging ansible output,ansible log output) |
| metatag-description=(Ansible cowsay: Die sprechende Kuh, oder auch mehr Getier oder doch nur puristisch mit dem Ansible Stdout Compact Logger?) |
| }} |
| ====== Ansible cowsay: Die sprechende Kuh, oder auch mehr Getier oder doch nur puristisch mit dem Ansible Stdout Compact Logger? ====== |
{{:centos:ansible:ansible_logo.png?nolink&125|Bild: Ansible Logo}} \\ \\ | {{:centos:ansible:ansible_logo.png?nolink&125|Bild: Ansible Logo}} \\ \\ |
===== cowsay ===== | ===== cowsay ===== |
Dass Admins zuweilen einen besonderen Humor haben und sich an doch sonderlichen Dingen erfreuen können, hat auch beim Thema Ansible seinen Platz gefunden: **cowsay**, die sprechende Kuh. | Dass Admins zuweilen einen besonderen Humor haben und sich an doch sonderlichen Dingen erfreuen können, hat auch beim Thema Ansible seinen Platz gefunden: **cowsay**, die sprechende Kuh. |
| |
Der ein oder andere wird sich nun vielleicht fragen: //Was? Noch nie davon gehört noch nie gesehen.// | Der ein oder andere wird sich nun vielleicht fragen: //**Was? Noch nie davon gehört, noch nie gesehen!**// |
| |
Nun, die Ausgabe bei einem Ansible-Playbook lauf kennen wir ja nun schon zu genüge, die Ausgabe hier ist altbekannt: | Nun, die Ausgabe bei einem Ansible-Playbook lauf kennen wir ja nun schon zu genüge, die Ausgabe hier ist altbekannt: |
</pre> | </pre> |
</html> | </html> |
Besonders bei doch sehr umfangreichen Playbooks wünscht man sich dann doch eine stark gestraffte Ausgabe, wie z.B. die folgende hier | |
| Besonders bei doch sehr umfangreichen Playbooks wünscht man sich dann doch eine stark gestraffte Ausgabe, wie z.B. die das nachfolgende Beispiel zeigt. \\ |
<html><pre class="code"> | <html><pre class="code"> |
<font style="color: rgb(25, 100, 5)">✔ </font><font style="color: rgb(196, 160, 0)">~/ansible </font><font style="color: rgb(0, 0, 0)">[</font><font style="color: rgb(116, 80, 123)">main</font><font style="color: rgb(25, 100, 5)">✔</font><font style="color: rgb(0, 0, 0)">] | <font style="color: rgb(25, 100, 5)">✔ </font><font style="color: rgb(196, 160, 0)">~/ansible </font><font style="color: rgb(0, 0, 0)">[</font><font style="color: rgb(116, 80, 123)">main</font><font style="color: rgb(25, 100, 5)">✔</font><font style="color: rgb(0, 0, 0)">] |
</html> | </html> |
| |
| Für dieses kompakte Ausgabeformat nutzt man den **[[https://github.com/octplane/ansible_stdout_compact_logger|Ansible Stdout Compact Logger]]**. |
| ==== Installation ==== |
| Die Installation ist relativ schnell erledigt, da wir uns hierzu lediglich das Python-Script von der [[https://github.com/octplane/ansible_stdout_compact_logger/blob/main/callbacks/anstomlog.py|GitHub-Seite]] herunterladen und im Verzeichnis **''~/.ansible/plugins/callback''** ablegen müssen. |
| Legen wir uns als erstes das betreffende Unterverzeichnis an. |
| $ mkdir -p ~/.ansible/plugins/callback |
| |
| Anschließend holen wir uns das Python-Script und speicher es direkt in gerade angelegten Plugin-Verzeichnis unserer Ansible-Installation. |
| $ curl https://raw.githubusercontent.com/octplane/ansible_stdout_compact_logger/main/callbacks/anstomlog.py \ |
| -o ~/.ansible/plugins/callback/anstomlog.py |
| |
| ==== Konfiguration ==== |
| Die Konfiguration für die kompakte Ausgabe des **Ansible Stdout Compact Logger** nehmen wir in der lokalen Userbezognen AnsibleKonfigurationsdatei **''~/.ansible.cfg''** vor. Hier aktivieren wir die beiden Einträge **''stdout_callback=anstomlog''** sowie **''callback_plugins = ~/.ansible/plugins/callback''**. |
| $ vim ~/.ansible.cfg |
| <code bash >... |
| |
| # change the default callback, you can only have one 'stdout' type enabled at a time. |
| #stdout_callback = skippy |
| stdout_callback=anstomlog |
| |
| ... |
| |
| ... |
| |
| # set plugin path directories here, separate with colons |
| #action_plugins = /usr/share/ansible/plugins/action |
| #become_plugins = /usr/share/ansible/plugins/become |
| #cache_plugins = /usr/share/ansible/plugins/cache |
| #callback_plugins = /usr/share/ansible/plugins/callback |
| callback_plugins = ~/.ansible/plugins/callback |
| #connection_plugins = /usr/share/ansible/plugins/connection |
| #lookup_plugins = /usr/share/ansible/plugins/lookup |
| #inventory_plugins = /usr/share/ansible/plugins/inventory |
| #vars_plugins = /usr/share/ansible/plugins/vars |
| #filter_plugins = /usr/share/ansible/plugins/filter |
| #test_plugins = /usr/share/ansible/plugins/test |
| #terminal_plugins = /usr/share/ansible/plugins/terminal |
| #strategy_plugins = /usr/share/ansible/plugins/strategy |
| |
| ... |
| </code> |
| |
| Zum Schluss können wir uns noch vergewissern, ob die Installation und Konfiguration auch erfolgreich war. Hierzu rufen wir das Pythonscript **''anstomlog.py''** ohne weitere Parameter direkt auf. |
| $ python3 ~/.ansible/plugins/callback/anstomlog.py |
| <code>............ |
| ---------------------------------------------------------------------- |
| Ran 12 tests in 0.000s |
| |
| OK</code> |
| |
| ==== Ausgabe ==== |
| Rufen wir nun ein doch etwas umfangreicheres Playbook auf, haben wir nun eine kompakte Zusammenfassung aller relevanten Vorgänge und kein doch eher aufgeblähtes Ausgabe mit vielen **%%***%%**- und **Leer**-Zeilen. |
| <html><pre class="code"> |
| <font style="color: rgb(25, 100, 5)">✔ </font><font style="color: rgb(196, 160, 0)">~/ansible </font><font style="color: rgb(0, 0, 0)">[</font><font style="color: rgb(116, 80, 123)">main</font><font style="color: rgb(25, 100, 5)">✔</font><font style="color: rgb(0, 0, 0)">] |
| 18:23 $ ansible-playbook playbooks/kvm_arch_iso.yml</font><br></pre> |
| </html> |
| <html><pre class="code"> |
| <font style="color: rgb(0, 0, 0)">[18:23:34] ↳ arch_iso: Keyring orgdnungsgemäß initialisieren.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 1.12s</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:35] ↳ arch_iso: Default Schlüssel neu laden.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 4.44s</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:39] ↳ arch_iso: System aktualisieren.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 1.38s</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:41] ↳ arch_iso: ggf. vorhandene Altlasten beseitigen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 | CHANGED | 6.09s</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:47] ↳ arch_iso: Installation des Paketes archiso.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 2.24s</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:49] ↳ arch_iso: Verzeichnis releng kopieren.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 497ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:50] ↳ arch_iso: Verzeichnis für den systemd autostart des sshd anlegen.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 484ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:50] ↳ arch_iso: symbolic-link für den Autostart des SSHD setzen.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 500ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:51] ↳ arch_iso: Tage berechnen die seit dem 01.01.1970 vergangen sind.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 523ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:51] ↳ arch_iso: Ergebnis in einer Variable zur weiteren Bearbeitung vorhalten.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 31ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:51] ↳ arch_iso: Root-Passwort in der /etc/shadow Datei ablegen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 | CHANGED | 1.10s</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:52] ↳ arch_iso: Verzeichnis für den ssh-key beim User Root anlegen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 | CHANGED | 537ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:53] ↳ arch_iso: SSH-Key für den Zugriff für root hinterlegen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 | CHANGED | 917ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:54] ↳ arch_iso: Autologin des Users root deaktivieren.</font> |
| <font style="color: rgb(25, 100, 5">↳ vml000202 | SUCCESS | 518ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:54] ↳ arch_iso: broadcom-wl aus der zu installierenden Pakete löschen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 | CHANGED | 576ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:23:55] ↳ arch_iso: ISO erstellen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 | SUCCESS | 8m12s</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:07] ↳ arch_iso: Installation des Paketes apache.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 2.13s</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:09] ↳ arch_iso: http.conf anpassen.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 997ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:10] ↳ arch_iso: Sicherstellen, dass der HTTP-Daemon startet.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 942ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:11] ↳ arch_iso: Datum ermitteln.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 466ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:12] ↳ arch_iso: Ergebnis in einer Variable zur weiteren Bearbeitung vorhalten.</font> |
| <font style="color: rgb(25, 100, 5)">↳ vml000202 | SUCCESS | 24ms</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:12] ↳ arch_iso: ISO auf dem KVM-Wirt I holen.</font> |
| <font style="color: rgb(196, 160, 0)">↳ vml000202 -> kvm | CHANGED | 17.35s</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:29] ↳ arch_iso: ISO auf dem KVM-Wirt II holen.</font> |
| <font style="color: rgb(43, 100, 164)">vml000202 | UNREACHABLE!: Failed to connect to the host via ssh: django@pml010102.intra.nausch.org: Permission denied (publickey,password).</font> |
| <font style="color: rgb(0, 0, 0)">[18:32:29] system</font> |
| <font style="color: rgb(25, 100, 5)">-- Play recap --</font> |
| <font style="color: rgb(255, 0, 0)">vml000202 </font><font style="color: rgb(0, 0, 0)">: </font><font style="color: rgb(25, 100, 5)">ok=22 </font><font style="color: rgb(196, 160, 0)">changed=6 </font><font style="color: rgb(255, 0, 0)"><b>unreachable=1</b></font><font style="color: rgb(0, 0, 0)"> failed=0 skipped=0 rescued=0 ignored=0</font> |
| </pre> |
| </html> |
| |
| Ohne die kompakte Ausgabe mit Hilfe des **[[https://github.com/octplane/ansible_stdout_compact_logger|Ansible Stdout Compact Logger]]** würde die Ausgabe des obigen Beispiels mehrere Bildschirmseiten füllen! |
===== Fazit und Ausblick ===== | ===== Fazit und Ausblick ===== |
| |
<WRAP center round info 80%> | <WRAP center round info 80%> |
O.K., warum gibt es das überhaupt? | O.K., **''cowsay''** - warum gibt es das überhaupt? |
| |
Warum nicht? **''cowsay''** ist ein bisschen Spass in einer Umgebung, die normalerweise ziemlich "trocken" und langweilig ist. Die Option **''ANSIBLE_COW_SELECTION=random''** bringt wie der Namen schon sagt, zufällige ASCII-Geschöpfe auf den Bildschirm - Langeweile kommt so nicht auf - O.K. beim Ausmachen eines grossen Mehrwerts wird man sich vermutlich auch schwer tun. Aber ein wenig Spass muss auch ab und an sein, oder? :-P | Warum nicht? **''cowsay''** ist ein bisschen Spass in einer Umgebung, die normalerweise ziemlich "trocken" und langweilig ist. Die Option **''ANSIBLE_COW_SELECTION=random''** bringt wie der Namen schon sagt, zufällige ASCII-Geschöpfe auf den Bildschirm - Langeweile kommt so nicht auf - O.K. beim Ausmachen eines grossen Mehrwerts wird man sich vermutlich auch schwer tun. Aber ein wenig Spass muss auch ab und an sein, oder? :-P |
| \\ \\ |
| Natürlich wird man bei grossen und umfangreichen Orchestrierungsaufgaben eher auf die Verwendung des **''[[https://github.com/octplane/ansible_stdout_compact_logger|Ansible Stdout Compact Logger]]''** zurück greifen. Hat man so doch schneller einen Überblick über den kompletten Anlauf einer Orchestrierungsaufgabe - Spass hin oder her, aber im Zweifels- und Debugging-Fall ist in aller Regel doch eher schnell Schluss mit lustig! :UP: |
</WRAP> | </WRAP> |
| |