Inventar aufbauen
Ansible arbeitet mit mehreren verwalteten Knoten oder „Hosts“ in Ihrer Infrastruktur gleichzeitig und verwendet eine Liste oder Gruppe von Listen, die als Inventar bekannt sind.
Sobald das Inventar definiert ist, verwendet man Pattern, um die Hosts oder Gruppen auszuwählen, für die Ansible ausgeführt werden soll. Der Standardspeicherort für das Inventar ist eine Datei namens
/etc/ansible/hosts
Sie können in der Befehlszeile mit der Option
-i <path>
eine andere Inventardatei angeben. Man kann auch mehrere Inventardateien gleichzeitig verwenden und / oder Inventar aus dynamischen oder Cloud-Quellen oder unterschiedlichen Formaten (YAML, ini usw.) abrufen. Ansible wurde in Version 2.4 eingeführt und verfügt über Inventar-Plugins , um dies flexibel und anpassbar zu machen.
Die Inventardatei kann in einem von vielen Formaten vorliegen, abhängig von den Inventar-Plugins, die man hat. Die gängigsten Formate sind INI und YAML. Eine einfache INI
/etc/ansible/hosts
könnte so aussehen:
mail.example.com
[webservers]
wilma.example.com
fred.example.com
[dbservers]
diamond.example.com
emerald.example.com
ruby.example.com
Die Überschriften in Klammern sind Gruppennamen, die verwendet werden, um Hosts zu klassifizieren und zu entscheiden, welche Hosts man zu welchen Zeiten und zu welchem Zweck steuert. Gruppennamen sollten denselben Richtlinien folgen wie beim Erstellen gültiger Variablennamen.
Hier ist dieselbe grundlegende Inventardatei im YAML-Format:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
wilma.example.com:
fred.example.com:
dbservers:
hosts:
diamond.example.com:
emerald.example.com:
ruby.example.com:
Default groups
Es gibt zwei Standardgruppen: all
und nicht ungrouped
. Die Gruppe all
enthält jeden Host. Die nicht ungrouped
Gruppe enthält alle Hosts, die außer all
keine weitere Gruppe haben . Jeder Host gehört immer zu mindestens 2 Gruppen ( all
und nicht ungrouped
oder all
e und eine andere Gruppe). Obwohl all
e und nicht ungrouped
immer vorhanden sind, können sie implizit sein und nicht in Gruppenlisten wie group_names
erscheinen.
Hosts in mehreren Gruppen
Man kann jeden Host in mehr als eine Gruppe aufnehmen. Zum Beispiel könnte ein Produktions-Webserver in einem Rechenzentrum in Frankfurt in Gruppen mit den Namen [prod] und [frankfurt] und [webservers] enthalten sein. Man kann Gruppen erstellen,die verfolgen:
- Was -Eine Anwendung,ein Stack oder ein Microservice (z.B.Datenbankserver,Webserver usw.).
- Wo -Ein Rechenzentrum oder eine Region,um mit dem lokalen DNS,Speicher usw.zu kommunizieren (z.B.Ost,West).
- Wann -In der Entwicklungsphase,um Tests auf Produktionsressourcen zu vermeiden (z.B.prod,test).
Die Erweiterung des bisherigen YAML-Inventars um die Angaben Was,Wann und Wo würde so aussehen:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
east:
hosts:
foo.example.com:
one.example.com:
two.example.com:
west:
hosts:
bar.example.com:
three.example.com:
prod:
hosts:
foo.example.com:
one.example.com:
two.example.com:
test:
hosts:
bar.example.com:
three.example.com:
Man kann sehen, dass one.example.com
in den Gruppen dbservers
, east
und prod
vorhanden ist.
Man kann auch verschachtelte Gruppen verwenden, um prod
und test
in diesem Inventar zu vereinfachen , um dasselbe Ergebnis zu erzielen:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
east:
hosts:
foo.example.com:
one.example.com:
two.example.com:
west:
hosts:
bar.example.com:
three.example.com:
prod:
children:
east:
test:
children:
west:
Hinzufügen Host Bereichen
Wenn man viele Hosts mit einem ähnlichen Muster hat, kann man sie als einen Bereich hinzufügen:
INI:
[webservers]
www[01:50].example.com
YAML:
...
webservers:
hosts:
www[01:50].example.com:
Man kann bei der Definition eines numerischen Bereichs von Hosts eine Schrittweite (Inkremente zwischen Sequenznummern)angeben:
INI:
[webservers]
www[01:50:2].example.com
YAML:
...
webservers:
hosts:
www[01:50:2].example.com:
Bei numerischen Mustern können führende Nullen je nach Wunsch hinzugefügt oder entfernt werden.Bereiche sind inklusive.Sie können auch alphabetische Bereiche definieren:
[databases]
db-[a:f].example.com
Hinzufügen von Variablen zum Inventar
Man kann Variablenwerte speichern, die sich auf einen bestimmten Host oder eine bestimmte Gruppe im Inventar beziehen. Zunächst kann man Variablen direkt zu den Hosts und Gruppen in Ihrer Hauptinventardatei hinzufügen. Wenn man dem Ansible-Inventar jedoch immer mehr verwaltete Knoten hinzufügen, möchten Sie wahrscheinlich Variablen in separaten Host- und Gruppenvariablendateien speichern.
Zuweisung einer Variablen an eine Maschine:Host-Variablen
Sie können eine Variable ganz einfach einem einzelnen Host zuweisen und sie dann später in Playbooks verwenden.
INI:
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
YAML:
atlanta:
hosts:
host1:
http_port: 80
maxRequestsPerChild: 808
host2:
http_port: 303
maxRequestsPerChild: 909
Einzigartige Werte wie nicht standardisierte SSH-Ports eignen sich gut als Host-Variablen. Diese können zum Ansible-Inventar hinzufügt werden, indem die Portnummer nach dem Hostnamen mit einem Doppelpunkt hinzufügt wird:
badwolf.example.com:5309
Verbindungsvariablen funktionieren auch gut als Host-Variablen:
[targets]
localhost ansible_connection=local
other1.example.com ansible_connection=ssh ansible_user=myuser
other2.example.com ansible_connection=ssh ansible_user=myotheruser
Inventory aliases
Sie können auch Aliasnamen in Ihrem Inventar definieren:
INI:
jumper ansible_port=5555 ansible_host=192.0.2.50
YAML:
...
hosts:
jumper:
ansible_port: 5555
ansible_host: 192.0.2.50