Direkt zum Hauptinhalt

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 gruppenNameGruppenname all und der Tag vars verwendet.
SmoitSomit gillt für alle Gruppen der Benutzer admin und der Port 22

[routers]
10.10.10.1
10.10.10.2

[switches]
172.16.1.1
172.16.1.2


[all:vars]
ansible_user=admin 
ansible_port=22