Inventory Datei - Welche Hosts dürfen es sein?
Einleitung
Die Invetory Datei beschreibt welche Hosts mit den playbooks bespielt werden sollen.
Es können variablen und Parameter zu den Hosts angegben werden.
in der Regel ist eine Inventory-Datei eine INI Datei.
kann aber auch in yaml erstellt werden.
Einzelhosts und Gruppen
Hier ein Beispiel einer Inventory datei mit zwei Gruppen und einem Host ohne gruppe.
Die Invetory Datei hat INI Datei Syntax.
Einzelne Hosts werden vom script immer aufgerufen/abgearbeitet.
Alles was global also ohne Gruppe ist muss immer an den anfang und wird ohne weiteres dazutun aufgerufen.
Wenn Hostnamen verwendet werden, sicherstellen, das diese auch Aufgelöst werden können.
Die Gruppen werden in eckigen Klammern geschrieben. und darunter dann die jeweiligen hosts mit Hostname oder ip Adresse eingetragen.
203.0.113.100
[nginx]
203.0.113.0
[wordpress]
203.0.113.1
Nun haben wir zwei Gruppen nginx und wordpress
Wir können auch ranges definieren. So braucht nicht jeder Hostname eingefügt werden,
beispiel beim IP range oder Hostname range
[webservers]
wwwserver[01:50].example.com
Erster Server wäre dann
wwwserver01.example.com
Letzter Server wäre dann
wwwserver50.example.com
[webservers]
203.0.113.[1:50]
Erster Server wäre dann
203.0.113.1
Letzter Server wäre dann
203.0.113.50
Verschachtelte Gruppen.
Es ist möglich Gruppen in weitere Gruppen aufzudröseln.
Hier haben wir die Hosts Gruppen:
Routers
switches
firewalls
Diese Gruppen hab wir als Kinder in folgende Gruppen gepackt
network
security
lan
Wie zu sehen sind einige Gruppenkinder auch Kinder anderer Hauptgruppen.
Also eine Gruppe kann auch mehreren Übergeordneten Gruppen zu gewiesen sein.
[routers]
10.10.10.1
10.10.10.2
[switches]
172.16.1.1
172.16.1.2
[firewalls]
192.168.1.1
[network:children]
routers
switches
firewalls
[security:children]
routers
firewalls
[lan:children]
routers
switches
Variablen in der Invetory Datei
Es können auch variablen deklariert werden, die dann im Playbook zu verfügung stehen.
Bei einem einzelnen Host egal ob Global oder in der Gruppe wird die Variable oder auch mehrer einfach hinter dem Hostnamen deklariert. Es gibt auch schon vorgefertigte Variablen die ansible dann benutzt wenn sie deklariert werden.
Das sind alle variablen die mit ansible_ anfangen. Sie dienen um z.b einen bestimmten ssh Benutzer anzugeben oder einen anderes ssh port zu nehmen.
Die Syntax
varaiblename=wert
Sollen mehere Variablen adefiniert werden einfach mit leerzeichen trennen.
Werte mit Leerzeichen sind nicht gültig. Bzw müssen in Anführungszeichen gesetzt werden.
Beispiel:
192.168.0.1 ansible_user=root ansible_port=222
Anhand den obigen Beispiels nimmt Ansible zum verbinden zu dem Host den Benutzer root und den Port 222 an statt den standard Port 22.
Wir können auch variablen einer Gruppe hinzufügen. Wenn jeder host in der Gruppe diese Variablen haben soll.
Beispiel:
[routers]
10.10.10.1
10.10.10.2
[switches]
172.16.1.1
172.16.1.2
[routers:vars]
ansible_user=root
ansible_port=222
[switches:vars]
ansible_user=admin
ansible_port=22
Im oben genannten Beispiel wird in eckigen Klammern der Gruppenname gschrieben und dann mit Doppelpunkt direkt dahinter der Tag vars
Nun werden die Variablen (Eine Zeile für eine Variable) untereinadner eingetragen.
Nun hat die Gruppe routers als Benutzername root und den port 222 und die Gruppe switches den Benutzernamen admin und den Port 22.
Möchte man eine Variable defienieren die für alle Gruppen gillt wird als gruppenName all und der Tag vars verwendet.
Smoit gillt für alle Gruppen Benutzer admin und Port 22
[routers]
10.10.10.1
10.10.10.2
[switches]
172.16.1.1
172.16.1.2
[all:varsvars]
ansible_user=admin
ansible_port=22