
Wie wir im ersten Teil über Ansible gelernt haben, verwendet Ansible in der Standardeinstellung eine INI-Datei (/etc/ansible/hosts) für das Inventar. Die Pflege der Datei ist leider ziemlich mühsam. Wechselt man auf das YAML-Format, so wird die Pflege noch komplizierter.
Glücklicherweise existieren diverse Plugins für dynamische Inventarisierung. Hierbei gibt es die Möglichkeit, sich direkt an diverse Hypervisoren oder Inventarisierungssysteme anzuflanschen. Was aber, wenn die Administration ihre Hosts nach wie vor in MS-Excel-Listen pflegt, einfach weil sie es so gewohnt ist?
In diesem Fall bedienen wir uns des Python-Tools motherstarter, welches genau unsere Aufgabe erledigt.
Das Tool unterstützt die Quellformate csv, json und xslx, was in den meisten Fällen ausreichend ist.
Das Inventar definieren wir uns in der Datei inventory.xlsx. Das Tabellenblatt nennen wir hierbei inventory. In der Datei definieren wir unsere Hostliste über die Spalten hostname und mgmt_ip. Die Spalte group definiert die zugehörige Gruppe.
Anschließend benötigen wir noch eine Datei groups.xslx für Gruppenvariablen, welche auch leer sein kann. Allerdings muss es auch hier ein Tabellenblatt groups geben.
Für die Umwandlung unseres Inventars in ein Ansible-kompatibles Format definieren wir uns ein Jinja-Template, das die einzelnen Einträge automatisch in die Gruppen einsortiert.
motherstarter/ansible/hosts.j2
Diese zwei Dateien genügen bereits, um unser Inventar zu erstellen.
Leider lässt sich kein allgemeines Basisverzeichnis für die verschiedenen Optionen angeben, so dass der Befehlsaufruf etwas sperrig wirkt. Aus diesem Grund zeigen wir hier noch einmal die vollständige Verzeichnisstruktur:
Die hosts-Datei kann man anschließend direkt als Ansible-Inventar verwenden.
Im nächsten Teil der Serie geht es darum, wie wir an die Fakten über Systeme kommen, die wir für ein Ansible-Playbook benötigen – und zwar nicht nur statische Fakten, sondern auch dynamische. Denn für letztere müssen wir einen anderen Weg gehen.
Sie möchten Ansible live erleben? Kontaktieren Sie uns für eine Demo.