Beschreibung der eigenen Infrastruktur (Inventory) und Konfigurationsfile

Ansible ist ein leistungsstarkes Automatisierungswerkzeug, das dir dabei hilft, komplexe IT-Infrastrukturen zu verwalten und zu konfigurieren. Ein zentrales Konzept in Ansible ist das Inventory (Bestandsverzeichnis), welches Informationen über die Systeme (Hosts) enthält, die du verwalten möchtest. Zusätzlich ermöglicht die Konfigurationsdatei von Ansible, Anpassungen und Einstellungen vorzunehmen, um das Verhalten von Ansible an deine Umgebung anzupassen.

In diesem Blogbeitrag schauen wir uns an, wie du dein eigenes Inventory beschreibst, und gehen auf die Konfigurationsdatei von Ansible ein.


Was ist ein Ansible Inventory?

Das Inventory ist eine zentrale Datei in Ansible, die eine Liste der Hosts enthält, die du verwalten möchtest. Es handelt sich um eine einfache Textdatei, die festlegt, welche Server Ansible kontrollieren soll und wie diese gruppiert werden. Diese Hosts können physische Server, virtuelle Maschinen, Cloud-Instanzen oder auch Netzwerkgeräte sein.

Das Standard-Inventory befindet sich unter:

/etc/ansible/hosts

Du kannst aber auch eigene Inventardateien anlegen und sie bei der Ausführung von Ansible-Befehlen explizit angeben. Die Inventardatei kann in zwei Formaten vorliegen: als INI-Format (klassisch) oder als YAML-Format.


Erstellen eines einfachen Inventories im INI-Format

Im INI-Format wird die Inventardatei als einfache Liste von Hosts dargestellt, und die Hosts können in Gruppen organisiert werden.

Hier ein Beispiel für eine typische Inventardatei im INI-Format:

[webserver]
web1.example.com
web2.example.com

[dbserver]
db1.example.com
db2.example.com

[all:vars]
ansible_user=admin
ansible_ssh_private_key_file=/path/to/keyfile

Erklärung des Beispiels:

  • [webserver]: Eine Gruppe namens „webserver“, die zwei Hosts enthält (web1.example.com und web2.example.com).
  • [dbserver]: Eine zweite Gruppe namens „dbserver“, die zwei Datenbank-Hosts enthält.
  • [all:vars]: Eine spezielle Sektion, die Variablen definiert, die für alle Hosts im Inventory gelten. In diesem Fall wird der SSH-Benutzer auf admin gesetzt und der Pfad zur SSH-Schlüsseldatei angegeben.

Gruppen erlauben es dir, ähnliche Hosts zusammenzufassen, sodass du auf mehrere Hosts gleichzeitig zugreifen kannst. Du kannst auch verschachtelte Gruppen erstellen:

[web]
web1.example.com
web2.example.com

[db]
db1.example.com

[production:children]
web
db

Hier haben wir eine übergeordnete Gruppe production, die die Gruppen web und db enthält. Dies ist besonders nützlich, wenn du verschiedene Umgebungen (z.B. Test, Produktion) definieren möchtest.


Erstellen eines Inventories im YAML-Format

Das YAML-Format bietet eine sauberere und strukturiertere Darstellung der Inventardatei. Hier ein Beispiel:

all:
  children:
    webserver:
      hosts:
        web1.example.com:
        web2.example.com:
    dbserver:
      hosts:
        db1.example.com:
        db2.example.com:
  vars:
    ansible_user: admin
    ansible_ssh_private_key_file: /path/to/keyfile

Dieses YAML-Inventory entspricht dem INI-Format-Beispiel, enthält aber eine klarere und strukturierte Hierarchie. Du kannst das YAML-Format verwenden, wenn deine Infrastruktur komplexer wird oder du eine präzisere Steuerung über die Struktur deiner Inventardatei wünschst.


Die Ansible Konfigurationsdatei (ansible.cfg)

Die Konfigurationsdatei von Ansible (ansible.cfg) ermöglicht es dir, globale Parameter für deine Ansible-Umgebung festzulegen. Diese Datei kann entweder in einem zentralen Verzeichnis (wie /etc/ansible/ansible.cfg) oder in deinem Projektverzeichnis liegen. Es wird empfohlen, eine lokale ansible.cfg in deinem Projektverzeichnis zu haben, um projektspezifische Konfigurationen festzulegen.

Beispiel für eine ansible.cfg Datei:

[defaults]
inventory = ./inventory
remote_user = ansible
private_key_file = ~/.ssh/id_rsa
host_key_checking = False
timeout = 30

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

Erklärung der Konfigurationsdatei:

  • inventory: Definiert den Pfad zur Inventardatei. In diesem Fall liegt das Inventory im aktuellen Verzeichnis unter ./inventory.
  • remote_user: Gibt den Standardbenutzer an, der auf den Hosts verwendet wird.
  • private_key_file: Der Pfad zur SSH-Schlüsseldatei für die Authentifizierung.
  • host_key_checking: Wenn auf False gesetzt, wird die SSH-Schlüsselprüfung deaktiviert (ideal für Testumgebungen, sollte aber in Produktionsumgebungen mit Vorsicht verwendet werden).
  • timeout: Die Wartezeit für SSH-Verbindungen in Sekunden.
  • become: Aktiviert die Privilegieneskalation (z.B. um Befehle mit Root-Rechten auszuführen).
  • become_method: Bestimmt, wie die Privilegieneskalation durchgeführt wird (hier über sudo).
  • become_user: Der Benutzer, zu dem gewechselt werden soll (hier root).

Mit der ansible.cfg Datei kannst du zahlreiche Aspekte von Ansible anpassen, wie z.B. das Standard-Inventory, Protokollierungen, Verbindungen und mehr. Diese Einstellungen helfen dir, Ansible genau auf deine Infrastruktur und deine Anforderungen zuzuschneiden.


Verwendung des Inventories und der Konfigurationsdatei

Inventory und Konfiguration nutzen

Wenn du Ansible-Befehle ausführst, kannst du explizit eine Inventardatei und Konfigurationsdatei angeben:

ansible all -m ping -i ./inventory -c ansible.cfg

Fazit

Die Inventardatei und die Ansible Konfigurationsdatei (ansible.cfg) sind zwei essentielle Bestandteile, um deine Ansible-Umgebung an deine Infrastruktur anzupassen. Während die Inventardatei deine Hosts und ihre Gruppierungen beschreibt, ermöglicht es die ansible.cfg, globale Einstellungen vorzunehmen, die dein Arbeiten mit Ansible effizienter gestalten.

Mit einem gut strukturierten Inventory und einer optimierten Konfiguration hast du die volle Kontrolle über deine Systeme und kannst diese effizient und zuverlässig verwalten.


Hast du Fragen oder Anmerkungen zu Inventories oder der Konfigurationsdatei? Teile deine Erfahrungen in den Kommentaren!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert