Benutzer-Werkzeuge

Webseiten-Werkzeuge


ansible_new

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
ansible_new [2024/11/10 12:35]
root [galaxy-doc]
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: true
 +  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:
 +</sxh>
 +
 +
 +  * 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" task sendet eine Notification an Handler "Reboot after kernel installation" wenn der Task tatsächlich etwas tun musste (also nicht wenn der Kernel bereits vorhandeln war)
 +
 +
 +  * 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, bevor der Handler aufgerufen wird
 +         * Handler werden nur für die Hosts aufgerufen wo ein Task "changes" vorgenommen hat
 +         * 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, ohne die {}
 +
 +<sxh yaml>
 +- name: My first play
 +  tasks:
 +    - name: First task
 +      hosts: hostA
 +      when: ansible_facts['os_family'] == "Debian"
 +      ansible.builtin.apt:
 +        name: neovim
 +        state: latest
 +</sxh>
 +
 +  * 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['os_family'] == "Debian"
 +      become: true
 +      become_method: sudo
 +      block:
 +        - name: First task
 +          ansible.builtin.apt:
 +            name: neovim
 +            state: latest
 +            update_cache: True
 +        - name: Make a temporary file
 +          ansible.builtin.tempfile:
 +            prefix: myfile
 +</sxh>
 +
 +  * die Tasks im Block werden nur ausgeführt wenn die os_family=="Debian" ist
 +      * when-Statement auf Block-Level
 +  * Alle Tasks im Block werden mit root-Rechten ausgeführt
 +      * become: true und become_method: sudo auf Blocklevel
 +      * 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['os_family'] == "Debian"
 +      become: true
 +      become_method: sudo
 +      block:
 +        - name: First task
 +          ansible.builtin.apt:
 +            name: neovim
 +            state: latest
 +            update_cache: True
 +        - 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
 +        
 +</sxh>
 +
 +  * 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['os_family'] == "Debian"
 +      become: true
 +      become_method: sudo
 +      block:
 +        - name: First task
 +          ansible.builtin.apt:
 +            name: neovim
 +            state: latest
 +            update_cache: True
 +        - name: Make a temporary file
 +          ansible.builtin.tempfile:
 +            prefix: myfile
 +      always:
 +        - name: Clear retrieved packages
 +          ansible.builtin.apt:
 +            clean: true
 +</sxh>
 +
 +
 +  * Task "Clear retrieved packages" wird immer ausgeführt, unabhängig vom Erfolg oder Fehlschlagen der Tasks im block
 +
 +====== 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**/haben eine besondere Bedeutung und können in ansible-Dateien auftauchen:
 +
 +  * Keyword tags
 +      * Wert ist ein einzelnes Keyword oder eine Liste von Keywords
 +
 +^Tag ^Beschreibung ^
 +|never|Führe die Statements niemals aus. \\ \\Es sei denn "never" wird in der tags-Option explizit angegeben oder anderer Tag in der Tag-Liste für dieses Element wurde explizit angegeben. \\ Auch nicht bei Angabe von "all" oder wenn kein Tag beim Aufruf von ansible-playbook angegeben |
 +|always | führt den Statements immer aus. \\ \\ Egal welcher Tag auf der Kommandozeile angegeben wurde. \\     Ausnahme <code>--skip-tags always</code> ist as Parameter angegeben| 
 +|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:
 +
 +  * <code>--tags <Liste von Tags, ohne Leerzeichen></code>
 +      * <code> ansible-playbook --tags Tag1,Tag2 playbook.yml </code>
 +      * definiert eine Liste von Tags die ausgeführt werden soll
 +          * nur statements die diesen Tag haben werden ausgeführt (oder wenn der Tag "always" ist)
 +  * <code>--skip-tags <Liste von Tags, ohne Leerzeichen</code>
 +      * <code> ansible-playbook --skip-tags Tag1,Tag2 playbook.yml </code>
 +      * 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 <code>--tags</code> und <code>--skip-tags</code> kombiniert, hat <code>--skip-tags</code> Vorrang
 +      * 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 <code>--tags</code> angegeben werden um Tags auszuführen die mit "never" markiert sind|
 +|all|Alle Tags, inkl. Task die keine Tags haben. \\ Aber nicht die mit "never" markiert sind. |
 +|tagged|Alle Tasks aus die ein tag haben. \\ Außer mit "never" getagte|
 +|untagged|Nur Tasks die keinen Tag haben|
 +|Custom-Tag|Ein beliebiges Tag|
 +|ohne <code>--tags</code>|Alles (auch getaggte), außer in der tags-Liste steht "never" (auch dann nicht wenn noch andere Tags vorkommen|
 +
 +
 +**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: True
 +    - name: Make a temporary file
 +        ansible.builtin.tempfile:
 +        prefix: myfile
 +</sxh>
 +
 +
 +Task "Install vim" würde ausgeführt wenn
 +  * kein Tag angegeben wurde
 +  * <code>--tags vim</code> angegeben wurde
 +  * <code>--tags tagged</code> angeben wurde
 +  * <code>--tags all</code> angeben 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: True
 +    - name: Make a temporary file
 +        ansible.builtin.tempfile:
 +        prefix: myfile
 +</sxh>
 +
 +
 +Task "Install vim" würde ausgeführt wenn
 +  * <code>--tags vim</code> angegeben wurde
 +  * wegen "never" würde es nicht ausgeführt
 +      * wenn kein tag-Option angegeben wurde
 +      * wenn "all" in der Tag-Option steht
 +      * wenn "tagged" in der Tag-Option steht
 +
 +
 +
 +** always:**
 +<sxh yaml>
 +- name: My first play
 +  hosts: myhosts 
 +  tasks
 +    - name: Install vim
 +      tags:
 +        - always
 +      ansible.builtin.apt:
 +        name: neovim
 +        state: latest
 +        update_cache: True
 +    - name: Make a temporary file
 +        ansible.builtin.tempfile:
 +        prefix: myfile
 +</sxh>
 +
 +Task "Install vim" würde immer ausgeführt (egal welcher Tag, egal ob kein Tag). \\
 +Wir nur nicht ausgeführt wenn <code>--skip-tags always</code>
 ====== 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://galaxy.ansible.com/ui/
 +  * Dokumentation findet man hier: https://docs.ansible.com/ansible/2.8/modules/list_of_all_modules.html
 +      * Version in URL beachten
  
  
Zeile 275: Zeile 559:
  
  
-===== galaxy-doc =====+===== ansible-doc =====
  
   * Dokumentation für installierte Module   * Dokumentation für installierte Module
Zeile 281: Zeile 565:
 ^Befehl ^Beschreibung ^ ^Befehl ^Beschreibung ^
 |<Module>|Gibt die Dokumentation (und die Parameter) für ein installiertes Modul aus| |<Module>|Gibt die Dokumentation (und die Parameter) für ein installiertes Modul aus|
-|-l|Listet die installierten Module| +|-l -t module|Erlaubt die Angabe eines Modul-Typs|
-|-l -t <type>|Erlaubt die Angabe eines Modul-Typs|+
  
  
Zeile 402: Zeile 685:
 ^Befehl ^Beschreibung ^ ^Befehl ^Beschreibung ^
 |install <Collection-Name>|Installiert eine bestimmte Collection| |install <Collection-Name>|Installiert eine bestimmte Collection|
 +
 +
 +
 +====== Plugins ======
 +
 +  * Plugins sind Erweiterungen von Ansible
 +      * Module sind eine Unterkategorie von Plugins
 +  * befinden sich in Collections und können über ansible-galaxy installiert werden
 +
 +  * können hier gefunden werden https://galaxy.ansible.com/ui/
 +  * Dokumentation findet man hier: https://docs.ansible.com/ansible/2.8/modules/list_of_all_modules.html
 +      * Version in URL beachten
 +
 +
 +===== ansible-doc =====
 +
 +  * Liefert Dokumentation für installierte Module
 +
 +^Option ^Beschreibung ^
 +|-l|Listet alle installierten Plugins|
 +|-l -t <Type>|Listet alle Plugins eines bestimmten Typs. \\ \\ <WRAP>
 +Zum Beispiel:
 +
 +  * module -> Listet alle Module
 +  * inventory -> alle Inventory-Plugins
 +  * become -> alle Become-Plugins
 +</WRAP>|
 ====== Befehle ====== ====== Befehle ======
  
ansible_new.1731238552.txt.gz · Zuletzt geändert: 2024/11/10 12:35 von root