Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:ansible:playbook_example_12 [27.09.2022 13:24. ] – [Links] djangolinux:ansible:playbook_example_12 [17.03.2024 15:00. ] (aktuell) django
Zeile 1: Zeile 1:
-====== Ansible cowsay: Die sprechende Kuh, oder auch mehr Getier ... ======+{{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 =====
 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örtnoch 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:
Zeile 28: Zeile 32:
 </html> </html>
  
-Lassen wir es doch mal von der Kuh erklären, dann sieht sowas schon anders aus. =)+Lassen wir es doch mal von der Kuh erklären, dann sieht so was schon anders aus. =)
  
 <html> <html>
Zeile 86: Zeile 90:
 </html> </html>
  
-===== Installation ===== +==== Installation ==== 
-Wie kommt man nun zu dieser netten und spaßigen Kuh. Nun ganz einfach, wie installieren einfach das Paket **cowsay**.+Wie kommt man nun zu dieser netten und spassigen Kuh. Nun ganz einfach, wie installieren einfach das Paket **cowsay**.
   * **Arch** : <code> $ pacman -S cowsay</code>   * **Arch** : <code> $ pacman -S cowsay</code>
-  * **Fedora / RHEL** : <code> # yum install cowsay</code>+  * **Fedora / RHEL** : <code> # yum install cowsay</code> bzw. <code> # dnf install cowsay</code>
   * **Gentoo** : <code> # emerge -av cowsay</code>   * **Gentoo** : <code> # emerge -av cowsay</code>
   * **openSUSE** : <code> $ sudo zypper in cowsay</code>   * **openSUSE** : <code> $ sudo zypper in cowsay</code>
   * **Ubuntu / Debian** : <code> $ sudo apt-get install cowsay</code>   * **Ubuntu / Debian** : <code> $ sudo apt-get install cowsay</code>
  
-===== Dokumentation =====+==== Dokumentation ====
 Wie es sich natürlich für jedes richtige Programm gehört, verfügt **''cowsay''** selbstverständlich auch über eine entsprechende man-page! Wie es sich natürlich für jedes richtige Programm gehört, verfügt **''cowsay''** selbstverständlich auch über eine entsprechende man-page!
-   $ man cowsay+<accordion collapsed="false"> 
 +<panel title="    $ man cowsay">
 <code>COWSAY(6)                                                Games Manual                                                COWSAY(6) <code>COWSAY(6)                                                Games Manual                                                COWSAY(6)
  
Zeile 171: Zeile 176:
  
                                                  $Date: 1999/11/04 19:50:40 $                                        COWSAY(6)</code>                                                  $Date: 1999/11/04 19:50:40 $                                        COWSAY(6)</code>
 +</panel>
 +</accordion>
  
-===== Ausgabe ===== +==== Ausgabe ==== 
-==== Steuerung ====+=== Steuerung ===
 Will man keine Kuh mehr sehen, dann kann man diese temporär durch Nutzung der Option **ANSIBLE_NOCOWS=1** beim Aufruf eines Playbook unterdrücken. Will man keine Kuh mehr sehen, dann kann man diese temporär durch Nutzung der Option **ANSIBLE_NOCOWS=1** beim Aufruf eines Playbook unterdrücken.
    $ ANSIBLE_NOCOWS=1 ansible-playbook playbooks/ssh_client_config.yml    $ ANSIBLE_NOCOWS=1 ansible-playbook playbooks/ssh_client_config.yml
Zeile 188: Zeile 195:
 </file> </file>
  
-==== Alternative Ausgaben ====+=== Alternative Ausgaben ===
 Ist man der Kuh überdrüssig, kann man sich auch einiges anderes Getier auf den Bildschirm holen. Was es alles gibt findet man mit dem Befehl **''cowsay -l''** heraus. Ist man der Kuh überdrüssig, kann man sich auch einiges anderes Getier auf den Bildschirm holen. Was es alles gibt findet man mit dem Befehl **''cowsay -l''** heraus.
    $ cowsay -l    $ cowsay -l
Zeile 245: Zeile 252:
  ~\_(/-\)'-,_,_,_,-'(_)-(_) </code>  ~\_(/-\)'-,_,_,_,-'(_)-(_) </code>
  
 +===== Ansible Stdout Compact Logger =====
 +Natürlich gibt es auch etwas für die Puristen und ernsthaft arbeitenden Administratoren. Die Standardausgabe von Ansible kennen wir bereits:
 +<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)">]
 +15:26 $ ansible-playbook playbooks/ssh_client_config.yml</font><br></pre>
 +</html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)">PLAY [ssh_client_config.yml] *****************************************************************************************
 +
 +TASK [Gathering Facts] ***********************************************************************************************
 +<font style="color: rgb(25, 100, 5)">ok: [localhost]</font>
 +</font><font style="color: rgb(0, 0, 0)">
 +TASK [ssh_client : include_tasks] ************************************************************************************</font>
 +<font style="color: rgb(43, 100, 164)">included: /home/django/ansible/roles/ssh_client/tasks/config.yml for localhost</font>
 +<font style="color: rgb(0, 0, 0)">
 +TASK [ssh_client : Generieren und kopieren der SSH Client Konfiguration ~/.ssh/config.] ******************************</font>
 +<font style="color: rgb(196, 160, 0)">changed: [localhost]</font>
 +<font style="color: rgb(0, 0, 0)">
 +TASK [ssh_client : include_tasks] ************************************************************************************</font>
 +<font style="color: rgb(43, 100, 164)">included: /home/django/ansible/roles/ssh_client/tasks/known_hosts.yml for localhost</font>
 +<font style="color: rgb(0, 0, 0)">
 +TASK [ssh_client : Generieren und kopieren der /etc/ssh/ssh_known_hosts.] ********************************************</font>
 +<font style="color: rgb(25, 100, 5)">ok: [localhost]</font>
 +<font style="color: rgb(0, 0, 0)">
 +PLAY RECAP ***********************************************************************************************************</font>
 +<font style="color: rgb(196, 160, 0)">localhost                  </font><font style="color: rgb(0, 0, 0)">: </font><font style="color: rgb(25, 100, 5)">ok=5    </font><font style="color: rgb(196, 160, 0)">changed=1    </font>unreachable=0    failed=0    skipped=0    rescued=0    ignored=0</font>
 +</pre>
 +</html>
 +
 +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">
 +<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)">]
 +17:43 $ ansible-playbook playbooks/ssh_client_config.yml</font><br></pre>
 +</html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)">[17:43:22] Gathering Facts</font>
 +<font style="color: rgb(25, 100, 5)">↳  localhost | SUCCESS | 1.73s</font>
 +<font style="color: rgb(0, 0, 0)">[17:43:24] ssh_client : include_tasks</font>
 +<font style="color: rgb(25, 100, 5)">↳  localhost | SUCCESS | 6ms</font>
 +<font style="color: rgb(0, 0, 0)">[17:43:24]     ↳ config: Generieren und kopieren der SSH Client Konfiguration ~/.ssh/config.</font>
 +<font style="color: rgb(196, 160, 0)">↳  localhost | CHANGED | 1.64s</font>
 +<font style="color: rgb(0, 0, 0)">[17:43:26] ssh_client : include_tasks</font>
 +<font style="color: rgb(25, 100, 5)">↳  localhost | SUCCESS | 5ms</font>
 +<font style="color: rgb(0, 0, 0)">[17:43:26]     ↳ known_hosts: Generieren und kopieren der /etc/ssh/ssh_known_hosts.</font>
 +<font style="color: rgb(25, 100, 5)">↳  localhost | SUCCESS | 521ms</font>
 +<font style="color: rgb(0, 0, 0)">[17:43:26] system</font>
 +<font style="color: rgb(25, 100, 5)">-- Play recap --</font>
 +<font style="color: rgb(196, 160, 0)">localhost                  </font><font style="color: rgb(0, 0, 0)">: </font><font style="color: rgb(25, 100, 5)">ok=5    </font><font style="color: rgb(196, 160, 0)">changed=1    </font>unreachable=0    failed=0    skipped=0    rescued=0    ignored=0</font>
 +</pre>
 +</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>
    
  • linux/ansible/playbook_example_12.1664285073.txt.gz
  • Zuletzt geändert: 27.09.2022 13:24.
  • von django