Ein statisches Inventory in Ansible ist eine strukturierte Datei, die alle Zielsysteme definiert und organisiert. Es dient als Grundlage für die gezielte Ausführung von Playbooks auf spezifischen Gruppen von Hosts.
Die einfachste Form eines statischen Inventars ist eine INI-Datei mit
Hostnamen oder IP-Adressen. Hosts werden in Gruppen organisiert, indem
der Gruppenname in eckigen Klammern [] vorangestellt
wird.
Einfaches Beispiel:
# Kommentare beginnen mit #
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
# Hosts ohne Gruppe landen automatisch in [ungrouped]
backup.example.comSyntax-Hinweise: - Leerzeilen zwischen Gruppen
verbessern die Lesbarkeit - Kommentare mit # sind möglich -
Hosts ohne Gruppenzugehörigkeit werden automatisch in
[ungrouped] einsortiert
Ansible bietet spezielle Variablen zur Steuerung der Verbindung zu Remote-Hosts:
| Variable | Bedeutung | Beispiel |
|---|---|---|
ansible_host |
IP oder DNS, falls abweichend vom Hostnamen | ansible_host=192.168.1.100 |
ansible_port |
SSH-Port (Standard: 22) | ansible_port=2222 |
ansible_user |
Remote-Benutzer | ansible_user=deploy |
ansible_connection |
Verbindungstyp | ansible_connection=winrm |
Erweiterte Syntax mit Verbindungsparametern:
[webservers]
web1.example.com ansible_user=deploy ansible_port=2222
web2.example.com ansible_host=192.168.1.100 ansible_user=admin
[dbservers]
db1.example.com ansible_connection=ssh ansible_user=dbadmin
db2.example.com ansible_connection=winrm ansible_user=winadmin
[monitoring]
localhost ansible_connection=local[all]: Umfasst automatisch alle Hosts
im Inventory[ungrouped]: Enthält alle Hosts ohne
explizite Gruppenzugehörigkeit[children]Komplexe Hierarchien lassen sich mit der :children
Syntax erstellen:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
[loadbalancers]
lb1.example.com
lb2.example.com
# Verschachtelte Gruppen
[frontend:children]
webservers
loadbalancers
[backend:children]
dbservers
[production:children]
frontend
backendInline-Definition (in der Inventory-Datei):
[webservers:vars]
ansible_user=deploy
ntp_server=ntp.web.com
ssl_enabled=true
[production:vars]
ansible_user=admin
backup_schedule=dailyBest Practice: Verzeichnisbasierte Struktur
inventory/
├── hosts.ini # Nur Host-Definitionen
├── group_vars/
│ ├── all.yml # Variablen für alle Hosts
│ ├── webservers.yml # Variablen für webservers-Gruppe
│ └── production.yml # Variablen für production-Gruppe
└── host_vars/
├── web1.example.com.yml # Host-spezifische Variablen
└── db1.example.com.yml
Beispiel: group_vars/webservers.yml
ansible_user: deploy
ntp_server: ntp.web.com
ssl_enabled: true
max_connections: 100Beispiel:
host_vars/web1.example.com.yml
ansible_port: 2222
server_id: web01
memory_limit: 8GBAnsible löst Variablen nach einer festen Prioritätsreihenfolge auf (von niedrig zu hoch):
group_vars/all - Globale
Variablengroup_vars/<group> -
Gruppenvariablenhost_vars/<host> -
Host-spezifische Variablenvars - Variablen im
Playbookdefaults/main.yml -
Standardwerte von Rollenvars/main.yml -
Rollenvariablen-e) -
Kommandozeilen-Parameter (höchste Priorität)Praktisches Beispiel der Auflösung:
# group_vars/all.yml
ansible_user: default_user
# group_vars/webservers.yml
ansible_user: web_user
# host_vars/web1.example.com.yml
ansible_user: special_userFür web1.example.com wird special_user
verwendet (Host-Variablen überschreiben Gruppenvariablen).
# === ENTWICKLUNGSUMGEBUNG ===
[dev_webservers]
dev-web1.example.com
dev-web2.example.com
[dev_dbservers]
dev-db1.example.com
[development:children]
dev_webservers
dev_dbservers
# === PRODUKTIONSUMGEBUNG ===
[prod_webservers]
prod-web1.example.com ansible_host=10.0.1.10
prod-web2.example.com ansible_host=10.0.1.11
[prod_dbservers]
prod-db1.example.com ansible_host=10.0.2.10
prod-db2.example.com ansible_host=10.0.2.11
[production:children]
prod_webservers
prod_dbservers
# === GLOBALE KATEGORIEN ===
[webservers:children]
dev_webservers
prod_webservers
[dbservers:children]
dev_dbservers
prod_dbservers
# === VARIABLEN ===
[all:vars]
ntp_server=ntp.example.com
timezone=UTC
[development:vars]
ansible_user=dev_user
debug_mode=true
[production:vars]
ansible_user=admin
ssl_required=true[dc1_webservers]
dc1-web1.example.com
dc1-web2.example.com
[dc2_webservers]
dc2-web1.example.com
dc2-web2.example.com
[datacenter1:children]
dc1_webservers
[datacenter2:children]
dc2_webservers
[webservers:children]
datacenter1
datacenter2
[datacenter1:vars]
backup_server=backup1.dc1.example.com
dns_server=8.8.8.8
[datacenter2:vars]
backup_server=backup1.dc2.example.com
dns_server=8.8.4.4Neben INI unterstützt Ansible auch YAML-Inventories:
# inventory.yml
all:
children:
webservers:
hosts:
web1.example.com:
ansible_user: deploy
ansible_port: 2222
web2.example.com:
ansible_host: 192.168.1.100
vars:
ntp_server: ntp.web.com
ssl_enabled: true
dbservers:
hosts:
db1.example.com:
db2.example.com:
vars:
ansible_user: dbadmin
production:
children:
webservers:
dbservers:
vars:
backup_schedule: daily
vars:
timezone: UTCDas ansible-inventory Tool hilft bei der Validierung und
Visualisierung:
# Komplette Inventory-Struktur als JSON ausgeben
ansible-inventory -i inventory/hosts.ini --list
# Graphische Darstellung der Gruppen-Hierarchie
ansible-inventory -i inventory/hosts.ini --graph
# Spezifische Gruppe anzeigen
ansible-inventory -i inventory/hosts.ini --list --limit webservers
# Host-spezifische Variablen anzeigen
ansible-inventory -i inventory/hosts.ini --host web1.example.comSyntax-Validierung:
# Syntax prüfen
ansible-inventory -i inventory/hosts.ini --list > /dev/null
echo $? # 0 = OK, 1 = FehlerHäufige Fehlerquellen: - Fehlende Leerzeichen um
= bei Variablenzuweisungen - Ungültige Zeichen in
Gruppennamen - Zirkuläre Abhängigkeiten bei :children -
Doppelte Host-Definitionen
Trennung von Inventar und Variablen:
hosts.ini definierengroup_vars/ und
host_vars/Konsistente Namenskonventionen:
# Gut: Umgebung-Rolle-Nummer
prod-web01.example.com
staging-db02.example.com
# Vermeiden: Inkonsistente Namen
webserver1
database-prod-2Logische Gruppierung:
webservers, dbservers,
loadbalancersproduction, staging,
developmentdatacenter1, europe,
asiaDokumentation:
# Produktionsumgebung - Hauptdatacenter
[production]
# Webserver mit Load Balancing
[webservers]
prod-web01.example.com # Primary web server
prod-web02.example.com # Secondary web serveransible-vault verschlüsselte Dateienansible-inventory