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
und192.168.1.11
). - [dbserver]: Enthält zwei Datenbankserver mit den IP-Adressen
192.168.1.20
und192.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.