Einrichtung eines statischen Inventories

Ansible ist ein mächtiges Open-Source-Tool zur Automatisierung von IT-Prozessen, das es ermöglicht, Server zu konfigurieren, Anwendungen zu deployen und viele weitere Aufgaben zu automatisieren. Einer der Kernbestandteile bei der Verwendung von Ansible ist das Inventory. Das Inventory ist eine Liste von Hosts oder Servern, auf denen Ansible operiert, und es kann in verschiedenen Formen vorliegen, wie statisch oder dynamisch. In diesem Blog-Beitrag zeige ich dir, wie du ein statisches Inventory für Ansible erstellst, um eine einfache Serverumgebung zu verwalten.

Was ist ein Ansible Inventory?

Das Inventory in Ansible enthält Informationen über die Systeme, die du verwalten möchtest. Jedes Playbook bezieht sich auf dieses Inventory, um zu wissen, welche Hosts angesprochen werden sollen. Ein statisches Inventory ist eine einfache, manuell gepflegte Datei, die die Liste der Server enthält, die du in deiner Ansible-Infrastruktur verwaltest. Es bietet eine grundlegende Möglichkeit, Hosts zu organisieren und gruppieren.

Einrichten eines statischen Inventories

Ein statisches Inventory wird typischerweise in einer einfachen INI-Datei erstellt. Du kannst es entweder in der Standarddatei /etc/ansible/hosts ablegen oder eine eigene Datei definieren und sie beim Ausführen von Ansible-Befehlen referenzieren.

1. Aufbau eines einfachen statischen Inventories

Erstelle zunächst eine Datei, die dein Inventory enthält, z. B. hosts.ini:

[webserver]
192.168.1.10
192.168.1.11

[dbserver]
192.168.1.20
192.168.1.21

In diesem Beispiel haben wir zwei Gruppen definiert:

  • [webserver]: Enthält zwei Server, die die Webserver-Rolle haben (IP-Adressen 192.168.1.10 und 192.168.1.11).
  • [dbserver]: Enthält zwei Datenbankserver mit den IP-Adressen 192.168.1.20 und 192.168.1.21.

Mit diesem Setup kannst du Ansible-Aufgaben gezielt auf eine Gruppe von Servern anwenden, indem du die Gruppennamen in deinen Playbooks verwendest.

2. Hosts mit Aliasnamen versehen

Um deine Hosts leichter lesbar zu machen, kannst du ihnen Aliasnamen geben:

[webserver]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[dbserver]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21

Hier haben die Hosts Aliase (web1, web2, db1, db2), die du in Playbooks verwenden kannst, anstatt der IP-Adressen. Der Schlüssel ansible_host gibt die tatsächliche IP-Adresse des Hosts an.

3. Definieren von Variablen für Hosts und Gruppen

Ansible erlaubt es dir, Variablen auf Host- oder Gruppenebene festzulegen, um spezifische Konfigurationen für verschiedene Server zu definieren.

Host-spezifische Variablen:
[webserver]
web1 ansible_host=192.168.1.10 ansible_user=root ansible_port=22
web2 ansible_host=192.168.1.11 ansible_user=root ansible_port=22

Hier wird ansible_user und ansible_port explizit für jeden Host festgelegt. Du kannst auch andere Variablen hinzufügen, wie z. B. spezifische Pfade, Umgebungsvariablen oder Konfigurationsdetails.

Gruppen-spezifische Variablen:

Du kannst auch Variablen für ganze Gruppen von Servern definieren. Dazu erstellst du einen speziellen Abschnitt mit dem Namen group_name:vars:

[webserver]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[webserver:vars]
ansible_user=root
ansible_port=22

In diesem Beispiel gilt ansible_user=root und ansible_port=22 für alle Hosts in der Gruppe webserver.

4. Verschachtelte Gruppen

Du kannst Gruppen auch hierarchisch organisieren, um komplexere Umgebungen zu verwalten:

[frontend:children]
webserver

[backend:children]
dbserver

Hier wird die Gruppe frontend als eine „übergeordnete“ Gruppe definiert, die alle Hosts der Gruppe webserver enthält. Ebenso enthält die Gruppe backend alle Hosts der Gruppe dbserver. Dies kann nützlich sein, um deine Infrastruktur zu strukturieren und Playbooks auf mehreren Gruppen gleichzeitig anzuwenden.

5. Inventardatei verwenden

Um Ansible mitzuteilen, dass es ein bestimmtes Inventory verwenden soll, kannst du den -i Parameter verwenden:

ansible-playbook -i hosts.ini dein_playbook.yml

Falls du kein eigenes Inventory angibst, verwendet Ansible die Standard-Inventory-Datei, die sich in /etc/ansible/hosts befindet.

Beispiel für ein einfaches Playbook mit statischem Inventory

Schauen wir uns ein Beispiel-Playbook an, das einen Webserver installiert und sicherstellt, dass er läuft:

---
- name: Webserver installieren und starten
  hosts: webserver
  become: true
  tasks:
    - name: Installiere Apache
      ansible.builtin.yum:
        name: httpd
        state: present

    - name: Starte und aktiviere Apache
      ansible.builtin.systemd:
        name: httpd
        state: started
        enabled: true

Hier:

  • Verwenden wir die Hostgruppe webserver aus unserem Inventory.
  • Installieren den Apache-Webserver auf jedem Host in der Gruppe.
  • Stellen sicher, dass der Dienst gestartet und aktiviert ist.

Das Playbook kann nun wie folgt ausgeführt werden:

ansible-playbook -i hosts.ini webserver.yml

Fazit

Die Einrichtung eines statischen Inventories in Ansible ist eine einfache und effektive Möglichkeit, Server und Gruppen zu organisieren. Obwohl es für kleinere und weniger dynamische Umgebungen gut geeignet ist, ermöglicht es dir dennoch, verschiedene Hosts zu verwalten, Variablen zu definieren und Playbooks auf spezifische Servergruppen anzuwenden.

Falls du eine dynamischere Umgebung mit Cloud-Providern oder wechselnden Servern verwalten musst, bietet Ansible auch dynamische Inventories, die Hosts automatisch erkennen und einbinden. Für den Einstieg und für kleinere Projekte ist jedoch das statische Inventory ein einfacher und zuverlässiger Ansatz, der dir eine solide Grundlage bietet, um mit Ansible durchzustarten.

Schreibe einen Kommentar

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