Ansible Inventory

Das Ansible Inventory habe ich schon im ersten Teil des Tutorials erwähnt. In ihm werden die Managed Nodes in erster Linie verwaltet.

Ansible Logo Inventory  (Quelle: Von Ansible/Red Hat - Wikipedia)
Ansible Logo (Quelle: Von Ansible/Red Hat – Wikipedia)

Das Ansible Inventory ist nach dem Einstieg der zweite Teil dieser Tutorial Reihe.

1Einführung
2Das Inventory
3Über Rollen und Tasks
4Die Module
5Playbooks
6Konfiguration
7gather_facts
8eigene Module

Ansible Inventory

Im Inventory verwaltet Ansible alle Managed Nodes. Das Inventory ist eine Datei im YAML oder .ini Format innerhalb deines Ansible Verzeichnisses. Standardmäßig heißt es inventory.yml, du kannst den Namen aber frei wählen. Nur Managed Nodes, die im Inventory aufgelistet sind, werden von Ansible überhaupt betrachtet. Es ist möglich, mehrere Managed Nodes zu Gruppen zusammen zu schließen was ich nur empfehlen kann.,

Meine vier Nodes (quimby, willie, kirk und brandine) müssen also in der inventory.yml irgendwo auftauchen, hier ein Beispiel:

stack4:
  hosts:
   quimby:
   willie:
   kirk:
   brandine:

Für extern gehostete Serversystem würdest du statt des Hostname den FQDN eintragen.

Meine vier Raspis sind hier der Gruppe stack4 zugeordnet. Ob du die Managed Nodes mit ihren Hostnamen oder ihren IP-Adressen einträgst, bleibt völlig dir überlassen. Falls du dich für die IP-Adressen entscheidest, solltest du allerdings in deinem DHCP Server sicherstellen, dass jeder Node immer dieselbe IP zugewiesen bekommt. Da ich mir den Hostnamen besser merken kann als die IP, benutze ich die Hostnamen.

In einer Serverfarm könnten die einzelnen Nodes durchnummeriert sein. Statt jetzt für jeden Node eine eigene Zeile ins Inventar aufzunehmen, bietet Ansible eine sehr viel elegantere Möglichkeit. Nehmen wir mal an, wir haben Nodes mit den Namen web00 bis web09. Dazu reicht uns eine Zeile, in der wir einen Zahlenbereich an den Hostnamen hängen können:

webs:
  hosts:
    web[00:09]:

Der Gruppe webs werden mit einer einzigen Zeile die Nodes web00, web01, web02, web03, web04, web05, web06, web07, web08 und web09 zugeordnet. Das macht die inventory.yml sehr viel übersichtlicher.

Das erste AD HOC Kommando

Wir haben jetzt schon Möglichkeit, das erste Modul als AD HOC Kommando abzusetzen, indem wir die definierten Managed Nodes anpingen.

ansible stack4 -m ping -i inventory.yml  --private-key ~/.ssh/id_rsa

Ansible erwartet als Parameter

  • den Namen einer Groups von Managed Nodes oder den Namen eines Nodes, hier könnte auch der Name eines Managed Nodes oder mehrere Nodes kommasepariert stehen.
  • -m definiert das Modul, dass ausgeführt werden soll.
  • mit -i gibst du dein Inventoryfile an und
  • –private-key übergibt den Namen deines privaten Schlüssels.

Die Ausgabe sollte in etwa wie folgt aussehen:

Ausgabe des Pingmoduls mit Warnungen bzgl. des Python Interpreters
Olli Graf -raspithek.de
first-ad-hoc-pingCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ausgabe des Pingmoduls mit Warnungen bzgl. des Python Interpreters

Die grünen Zeilen sind die Ergebnisse der vier Pings auf die Managed Nodes, mit den violetten Zeilen warnt uns Ansible, dass es den Pfad auf den Python Interpreter selbstständig ermittelt hat und der sich ggf. durch ein Update später mal änder können. Diese Warnungen sind nicht schlimm, aber unschön, daher zeig ich dir jetzt, wie du sie los wirst.

Variablen

An unser bestehendes Inventory können wir eine vars: Sektion anhängen, in der wir den Pfad des zu verwendenden Python Interpreters festlegen

vars:
      ansible_python_interpreter: /usr/bin/python3

Da ich weiß, dass der Interpreter bei allen Managed Nodes unter diesem Pfad zu erreichen ist, kann ich ihn hier fest mit der Variable ansible_python_interpreter: übergeben. Dieser Variablen Block ist nur für die Gruppe stack4 zuständig. Eine weitere Gruppe hat ihren eigenen Konfigurationsblock.

Ein erneuter Aufruf des Ping Moduls liefert jetzt ein besser lesbares Ergebnis.

Ausgaben des Ping Moduls ohne die Warnungen
Olli Graf -raspithek.de
second-ad-hoc-pingCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ausgaben des Ping Moduls ohne die Warnungen

Für jeden Managed Node erhältst du einen derartigen Ergebnisblock mit zwei Zeilen:

quimby | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Nach dem Hostnamen steht das Ergebnis, das das Modul liefert dies kann SUCCESS = Erfolg, FAILED = Fehlschlag oder SKIPPED = Übersprungen sein.

Bei einem erfolgreichen Ping liefert der Node ein „Pong“ zurück. Es gibt Module, die Änderungen am Node vornehmen (bspw. apt), dann wird „changed“ mit true zurückgeliefert. Bei einem AD HOC Kommando musst du das Ergebnis selber auswerten. Bei einem Playbook erhältst du nach dem Durchlauf eine tabellarische Übersicht aller Ergebnisse.

inventory.ini

Der Vollständigkeit halber hier noch das Inventory im .ini Format:

[stack4]
quimby
willie
kirk
brandine

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Du findest alle Beispieldateien im GIT-Repository

Da wir jetzt erfolgreich unser Inventar aufgebaut haben, beschäftigen wir uns im nächsten Teil mit Rollen und Tasks.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner