Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ansible_new [2024/11/10 13:17] root [ansible-galaxy] |
ansible_new [2024/11/13 18:47] (aktuell) root [Rescue] |
||
---|---|---|---|
Zeile 258: | Zeile 258: | ||
+ | ====== Handlers ====== | ||
+ | |||
+ | * ermöglichen Aktionen nur auszuführen wenn ein Task in einer Aktion resultiert | ||
+ | * also wenn der Zustand den der Task erwartet nicht gegeben ist | ||
+ | * werden erst nach dem **alle** Tasks ausgeführt wurden ausgeführt | ||
+ | * Reihenfolge ist wie sie in der handlers-Sektion stehen | ||
+ | * Jeder Handler wird pro System maximal 1 mal ausgeführt | ||
+ | |||
+ | |||
+ | <sxh yaml> | ||
+ | - name: My Play | ||
+ | hosts: hosta | ||
+ | force_handlers: | ||
+ | tasks: | ||
+ | - name: Get kernel | ||
+ | notify: Reboot after kernel installation | ||
+ | ansible.builtin.apt: | ||
+ | name: linux-image-amd64 | ||
+ | state: latest | ||
+ | | ||
+ | handlers: | ||
+ | - name: Reboot after kernel installation | ||
+ | ansible.builtin.reboot: | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Es wird geprüft ob die letztet Version des Paketes linux-image-amd64 installiert ist | ||
+ | * wenn nicht wird er installiert | ||
+ | * Wenn **alle** Tasks abgearbeitet sind wird die Handler-Sektion der Reihe nach abgearbeitet | ||
+ | * der "get Kernel" | ||
+ | |||
+ | |||
+ | * force_handlers -> Wenn true werden handler auch ausgeführt obwohl ein nachfolgender Task im play fehlgeschlagen ist. | ||
+ | * Hat task A ein Notify und Task B schlägt fehl wird normalerweise der Handler von A nicht ausgeführt (trotz Notify). force_handlers sorgt dafür das Handler auch ausgeführt werden (die die eine Notification bis zu dem Zeitpunkt haben) wenn nicht alle Tasks erfolgreich sind | ||
+ | * notify -> sendet eine Nachricht an einen Handler wenn der Task tatsächlich etwas ändert (state changed), die Bedingung die der Task sicherstellen soll also nicht gegeben war | ||
+ | * state: latest stellt sicher das die letzte Version eines Paketes installiert ist | ||
+ | * handlers: Liste von Modulen die aufgerufen werden wenn ein Task eine Notification für sie gesendet hat. | ||
+ | * Die Liste wird erst **nach** dem **alle** Tasks im Task-Attribute des Plays abgearbeitet sind aufgerufen | ||
+ | * Wenn es also 2 Tasks im Play gibt und der erste eine Notification an einen Handler sendet, wird erst noch Task 2 abgearbeitet, | ||
+ | * Handler werden nur für die Hosts aufgerufen wo ein Task " | ||
+ | * Handler werden nach der Reihenfolge abgearbeitet wie sie in der handler-Sektion stehen | ||
+ | * aber jeweils nur einmal pro System (auch wenn mehrere Tasks für das gleiche System und den gleichen Handler Notifies gesendet haben) | ||
+ | |||
+ | |||
+ | ====== When ====== | ||
+ | |||
+ | * Bedingung | ||
+ | * Block oder Task wird nur ausgeführt wenn die Bedingung erfüllt ist | ||
+ | * Bedingung ist ein Jinja-2-Ausdruck, | ||
+ | |||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | tasks: | ||
+ | - name: First task | ||
+ | hosts: hostA | ||
+ | when: ansible_facts[' | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | </ | ||
+ | |||
+ | * Führt den Task nur aus wenn die os_family in den Ansible-Facts Debian ist | ||
+ | * kann Sinn machen wenn man zum Beispiel verschiedene Systeme mit verschiedenen Betriebssystemen hat und deswegen verschiedene Module verwenden muss | ||
+ | |||
+ | |||
+ | ====== Blocks ====== | ||
+ | |||
+ | * gruppieren Tasks | ||
+ | * Statements des Blocks werden vererbt an die Tasks -> z.B. Become | ||
+ | * when-Statements gelten für den gesamten Block usw. | ||
+ | |||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | hosts: myhosts | ||
+ | tasks: | ||
+ | - name: First Block | ||
+ | when: ansible_facts[' | ||
+ | become: true | ||
+ | become_method: | ||
+ | block: | ||
+ | - name: First task | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | update_cache: | ||
+ | - name: Make a temporary file | ||
+ | ansible.builtin.tempfile: | ||
+ | prefix: myfile | ||
+ | </ | ||
+ | |||
+ | * die Tasks im Block werden nur ausgeführt wenn die os_family==" | ||
+ | * when-Statement auf Block-Level | ||
+ | * Alle Tasks im Block werden mit root-Rechten ausgeführt | ||
+ | * become: true und become_method: | ||
+ | * Tasks in einem Block erben die Statements auf Blockebene | ||
+ | |||
+ | |||
+ | ===== Rescue ===== | ||
+ | |||
+ | * Wird ausgeführt wenn einer der Tasks im Block fehlschlägt | ||
+ | * wenn ein Task fehlschlägt werden die nachfolgenden Task normalerweise nicht mehr ausgeführt | ||
+ | * dient zum Beispiel um Aktionen rückgängig zu machen und das System nicht halbkonfiguriert zurückzulassen | ||
+ | * rescue-Attribute enthält Liste von Tasks | ||
+ | |||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | hosts: myhosts | ||
+ | tasks: | ||
+ | - name: First Block | ||
+ | when: ansible_facts[' | ||
+ | become: true | ||
+ | become_method: | ||
+ | block: | ||
+ | - name: First task | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | update_cache: | ||
+ | - name: Make a temporary file | ||
+ | ansible.builtin.tempfile: | ||
+ | prefix: myfile | ||
+ | rescue: | ||
+ | - name: Remove the vim package | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: absent | ||
+ | purg: true | ||
+ | | ||
+ | </ | ||
+ | |||
+ | * Im Falle eines Fehlers in block: würde das vim-Paket in rescue-Attribut deinstalliert | ||
+ | |||
+ | |||
+ | ===== Always ===== | ||
+ | |||
+ | * wird immer ausgeführt | ||
+ | * egal ob die Tasks im Block fehlschlagen oder erfolgreich sind | ||
+ | |||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | hosts: myhosts | ||
+ | tasks: | ||
+ | - name: First Block | ||
+ | when: ansible_facts[' | ||
+ | become: true | ||
+ | become_method: | ||
+ | block: | ||
+ | - name: First task | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | update_cache: | ||
+ | - name: Make a temporary file | ||
+ | ansible.builtin.tempfile: | ||
+ | prefix: myfile | ||
+ | always: | ||
+ | - name: Clear retrieved packages | ||
+ | ansible.builtin.apt: | ||
+ | clean: true | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Task "Clear retrieved packages" | ||
+ | |||
+ | ====== Tags ====== | ||
+ | |||
+ | * Ermöglichen das ausführen nur bestimmter Teile | ||
+ | * können auf Handler, Blocks, Plays, Tasks, Roles, includes und imports angewendet werden | ||
+ | |||
+ | Folgende Werte sind **reserviert**/ | ||
+ | |||
+ | * Keyword tags | ||
+ | * Wert ist ein einzelnes Keyword oder eine Liste von Keywords | ||
+ | |||
+ | ^Tag ^Beschreibung ^ | ||
+ | |never|Führe die Statements niemals aus. \\ \\Es sei denn " | ||
+ | |always | führt den Statements immer aus. \\ \\ Egal welcher Tag auf der Kommandozeile angegeben wurde. \\ | ||
+ | |kein Tag|Wird ausgeführt wenn keine Tags auf der Kommandozeile ausgewählt wurden oder all oder untagged| | ||
+ | |Benutzerspezifischer Tag|Wird ausgeführt wenn der | ||
+ | |||
+ | |||
+ | **ansible-playbook** hat folgende Parameter für Tags: | ||
+ | |||
+ | * < | ||
+ | * < | ||
+ | * definiert eine Liste von Tags die ausgeführt werden soll | ||
+ | * nur statements die diesen Tag haben werden ausgeführt (oder wenn der Tag " | ||
+ | * < | ||
+ | * < | ||
+ | * definiert eine Liste von Tags die geskipped (übersprungen) werden sollen | ||
+ | * alle Tags (und Tasks die keinen Tag haben) die nicht in der Liste stehen werden ausgeführt | ||
+ | * wird < | ||
+ | * hat ein Task ein Tag welches im tags-Parameter angegeben wurde und ein Tag welches in skip-tags steht wird der Task **nicht** ausgeführt | ||
+ | * -> skip-tags hat Vorrang | ||
+ | |||
+ | Folgende Tags gibt es: | ||
+ | |||
+ | ^Tag ^Beschreibung ^ | ||
+ | |Never|Kann in < | ||
+ | |all|Alle Tags, inkl. Task die keine Tags haben. \\ Aber nicht die mit " | ||
+ | |tagged|Alle Tasks aus die ein tag haben. \\ Außer mit " | ||
+ | |untagged|Nur Tasks die keinen Tag haben| | ||
+ | |Custom-Tag|Ein beliebiges Tag| | ||
+ | |ohne < | ||
+ | |||
+ | |||
+ | **Einfaches Tag** | ||
+ | |||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | hosts: myhosts | ||
+ | tasks | ||
+ | - name: Install vim | ||
+ | tags: | ||
+ | - vim | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | update_cache: | ||
+ | - name: Make a temporary file | ||
+ | ansible.builtin.tempfile: | ||
+ | prefix: myfile | ||
+ | </ | ||
+ | |||
+ | |||
+ | Task " | ||
+ | * kein Tag angegeben wurde | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | |||
+ | |||
+ | ** Tag + never:** | ||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | hosts: myhosts | ||
+ | tasks | ||
+ | - name: Install vim | ||
+ | tags: | ||
+ | - vim | ||
+ | - never | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | update_cache: | ||
+ | - name: Make a temporary file | ||
+ | ansible.builtin.tempfile: | ||
+ | prefix: myfile | ||
+ | </ | ||
+ | |||
+ | |||
+ | Task " | ||
+ | * < | ||
+ | * wegen " | ||
+ | * wenn kein tag-Option angegeben wurde | ||
+ | * wenn " | ||
+ | * wenn " | ||
+ | |||
+ | |||
+ | |||
+ | ** always:** | ||
+ | <sxh yaml> | ||
+ | - name: My first play | ||
+ | hosts: myhosts | ||
+ | tasks | ||
+ | - name: Install vim | ||
+ | tags: | ||
+ | - always | ||
+ | ansible.builtin.apt: | ||
+ | name: neovim | ||
+ | state: latest | ||
+ | update_cache: | ||
+ | - name: Make a temporary file | ||
+ | ansible.builtin.tempfile: | ||
+ | prefix: myfile | ||
+ | </ | ||
+ | |||
+ | Task " | ||
+ | Wir nur nicht ausgeführt wenn < | ||
====== Modules ====== | ====== Modules ====== | ||
Zeile 264: | Zeile 543: | ||
* sie prüfen vorher ob der Status den sie herstellen sollen schon gegeben sind und tun dann nichts | * sie prüfen vorher ob der Status den sie herstellen sollen schon gegeben sind und tun dann nichts | ||
* letzten Endes stellen sie sicher das ein bestimmter Zustand gegeben ist (zum Beispiel ein Dienst gestartet) | * letzten Endes stellen sie sicher das ein bestimmter Zustand gegeben ist (zum Beispiel ein Dienst gestartet) | ||
+ | |||
+ | |||
+ | * können hier gefunden werden https:// | ||
+ | * Dokumentation findet man hier: https:// | ||
+ | * Version in URL beachten | ||
Zeile 409: | Zeile 693: | ||
* Module sind eine Unterkategorie von Plugins | * Module sind eine Unterkategorie von Plugins | ||
* befinden sich in Collections und können über ansible-galaxy installiert werden | * befinden sich in Collections und können über ansible-galaxy installiert werden | ||
+ | |||
+ | * können hier gefunden werden https:// | ||
+ | * Dokumentation findet man hier: https:// | ||
+ | * Version in URL beachten | ||
Zeile 415: | Zeile 703: | ||
* Liefert Dokumentation für installierte Module | * Liefert Dokumentation für installierte Module | ||
- | ^Option ^Beschreibung ^ | + | ^Option ^Beschreibung ^ |
|-l|Listet alle installierten Plugins| | |-l|Listet alle installierten Plugins| | ||
|-l -t < | |-l -t < |