Inhaltsverzeichnis

Was es kann/ist

Begriffe

Begriff Beschreibung
ControllerDer Rechner auf dem Ansible läuft
Managed Hosts/Inventory HostsDie Rechner auf denen Aktionen ausgeführt werden
PluginsErweiterungen von Ansible
InventoryListe von Maschinen, fix als Datei oder dynamisch erstellt
PlaybookEine Sammlung von Plays aka. Scripten
PlaysEinzelne Scripte
TasksEinzelne Aufgaben innerhalb eines Plays
ModulesEine Aufgabe die im Rahmen eines Tasks ausgeführt wird
Praktisch handelt es sich um parametrisierte Scripte in Python, oder PowerShell oder einer anderen Sprache geschrieben

Aufbau

Dateien

ansible.cfg

[defaults]
inventory = ./inventory
remote_user = myuser
ask_pass = false

[privilege_escalation]
become = True
become_ask_pass = False
become_user = root
become_method = sudo

inventory

Als ini-Datei:

10.1.55.13

[Mailserver]
mail1.somewhere.de
mail2.somewhere.de

[DNSServer]
ns1.somewhere.de
ns2.somewhere.de


[webserver]
web[1:10].somweher.de

[production:children]
DNSServer
Mailserver

[debianserver]
mail1.somewhere.de
10.1.53.13

Als yaml-File:

ungrouped:
  hosts:
    10.1.55.13:

Mailserver:
  hosts:
    mail1.somewhere.de:
    mail2.somewhere.de:

DNSServer:
  hosts:
    ns1.somewhere.de:
    ns2.somewhere.de:

webserver:
  hosts:
    web[1:10].somweher.de:

production:
  children:
    DNSServer:
    Mailserver:

debianserver:
  hosts:
    mail1.somewhere.de:
    10.1.53.13:

mixed:
  children:
    DNSServer:
  hosts:
    10.1.35.55

ansible-inventory ist das zu den Inventories gehörende Werkzeug.

ansible-inventory -i <Inventory-File/Directory> <Option> <Action>

Actions:

Option Beschreibung
–yaml | –toml Gibt die Daten wahlweise im Yaml- oder TOML-Format aus.
JSON ist das Format wenn nichts angegeben wird.

Dadurch lassen sich Dateien auch konvertieren

playbook

- name: Name of play 1
  hosts: group_or_name_of_hosts
  tasks:
    - name: NameofTask1
      modulename1:
        parameter1: value1
        parameter2: value2
    - name: NameofTask2
      modulename2:
         parameter1: value1
         parameter2: value2
- name: Name of play2
  hosts: group_or_name_of_hosts
  tasks:
    - name: NameofTask1
      modulename2:
        parameter1: value1
        parameter2: value2

ansible-playbook

ansible-playbook <Option> <Playbookfile>

Führt das entsprechende Playbook aus

ansible-playbook <Playbookfile>

Option Beschreibung
–check-syntaxPrüft die Syntax des Playbooks

Handlers

- 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:

When

- name: My first play
  tasks:
    - name: First task
      hosts: hostA
      when: ansible_facts['os_family'] == "Debian"
      ansible.builtin.apt:
        name: neovim
        state: latest

Blocks

- 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: 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
        

Always

- 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

Tags

Folgende Werte sind reserviert/haben eine besondere Bedeutung und können in ansible-Dateien auftauchen:

Tag Beschreibung
neverFü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
--skip-tags always

ist as Parameter angegeben

kein TagWird ausgeführt wenn keine Tags auf der Kommandozeile ausgewählt wurden oder all oder untagged
Benutzerspezifischer Tag

ansible-playbook hat folgende Parameter für Tags:

Folgende Tags gibt es:

Tag Beschreibung
NeverKann in
--tags

angegeben werden um Tags auszuführen die mit „never“ markiert sind

allAlle Tags, inkl. Task die keine Tags haben.
Aber nicht die mit „never“ markiert sind.
taggedAlle Tasks aus die ein tag haben.
Außer mit „never“ getagte
untaggedNur Tasks die keinen Tag haben
Custom-TagEin beliebiges Tag
ohne
--tags
Alles (auch getaggte), außer in der tags-Liste steht „never“ (auch dann nicht wenn noch andere Tags vorkommen

Einfaches Tag

- 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

Task „Install vim“ würde ausgeführt wenn

Tag + never:

- 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

Task „Install vim“ würde ausgeführt wenn

always:

- 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

Task „Install vim“ würde immer ausgeführt (egal welcher Tag, egal ob kein Tag).
Wir nur nicht ausgeführt wenn

--skip-tags always

Modules

Module

Modul Beschreibung
copyKopiert vom ansible-Controller (lokale Maschine) auf einen Managed Host oder innerhalb eines Managed Hosts
fetchKopiert Dateien von einem managed Host auf den Ansible-Controller

ansible-doc

Befehl Beschreibung
<Module>Gibt die Dokumentation (und die Parameter) für ein installiertes Modul aus
-l -t moduleErlaubt die Angabe eines Modul-Typs

Variablen

Im Inventory:

mygroup:
  vars:
    myvar: 5
  hosts:
    85.206.62.161:
      myvar: "Coming from 56.108.82.247 inventory host config"
    57.17.117.156:

In var-Directories:

Inhalt der Datei sind key-Value-Pairs:

<variable>: <Wert>
package: apache2

In Playbooks:

- name: Play-Name
  hosts: myhostlist
  vars:
    myvar: myvalue
  tasks:
    - name: sometaskt
      ansible.builtin.debug:
        msg: "{{myvar}}"

- name: Play-Name
  hosts: myhostlist
  tasks:
    - name: sometask
      vars:
        myvar: someothervalue
      ansible.builtin.debug:
        msg: "{{myvar}}"

Roles

- name: Play-Name
  hosts: myhostlist
  roles:
    - <role-name>

ansible-galaxy

Collections

Roles und Modules sind in Collections zusammengefasst, die heruntergeladen werden können (von ansible oder woanders).

Wenn ein Modul:

ansible.builtin.debug

heißt, dann ist „ansible.builtin“ die Collection.

ansible-galaxy

Befehl Beschreibung
install <Collection-Name>Installiert eine bestimmte Collection

Plugins

ansible-doc

Option Beschreibung
-lListet alle installierten Plugins
-l -t <Type>Listet alle Plugins eines bestimmten Typs.

Zum Beispiel:

  • module → Listet alle Module
  • inventory → alle Inventory-Plugins
  • become → alle Become-Plugins

Befehle

Befehl Beschreibung
ansible-configAlles was mit der ansible.cfg zu tun hat.
  • meisten Befehle kennen -t all
    • listet zustätzlich die Konfigurationsparameter für Plugins (mit all für alle)
Option Beschreibung
ansible-config listListet alle möglichen Konfigurationsparameter + einer kurzen Erklärung auf.
ansible-config dumpDumped die aktuell aktive Konfiguration
ansible-config initGibt ein Config-File mit allen möglichen Konfigurationsoptionen aus.
Per Default auf das Terminal, per > kann es in eine Datei geschrieben werden.

  • -t all → gibt zusätzlich auch alle Konfig-Optionen für die Plugins mit aus|
  • –disabled → gibt alle Optionen kommentiert aus (also deaktiviert)