Das Ansible Inventory habe ich schon im ersten Teil des Tutorials erwähnt. In ihm werden die Managed Nodes in erster Linie verwaltet.
Das Ansible Inventory ist nach dem Einstieg der zweite Teil dieser Tutorial Reihe.
1 | Einführung |
---|---|
2 | Das Inventory |
3 | Über Rollen und Tasks |
4 | Die Module |
5 | Playbooks |
6 | Konfiguration |
7 | gather_facts |
8 | eigene 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:
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.
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.