Website-Suche

So verwenden Sie statische und dynamische Inventare in Ansible – Teil 4


In diesem Teil 4 der Ansible-Reihe erklären wir, wie man statisches und dynamisches Inventar verwendet, um Gruppen von Hosts in Ansible zu definieren.

In einem Ansible werden verwaltete Hosts oder Server, die vom Ansible-Kontrollknoten gesteuert werden, in einer Host-Inventardatei definiert, wie unter „Ein Host“ erläutert Die Inventardatei ist eine Textdatei, die aus Hostnamen oder IP-Adressen von verwalteten Hosts oder Remote-Servern besteht.

Verwaltete Hosts können entweder als einzelne Einträge aufgeführt oder unter einem Gruppennamen kategorisiert werden, wie wir später sehen werden. In Ansible gibt es zwei Arten von Inventardateien: Statisch und Dynamisch.

Werfen wir einen Blick auf jedes einzelne dieser Probleme und sehen wir, wie wir damit umgehen können. Wir gehen davon aus, dass Sie Ansible bereits auf Ihrem Kontrollknoten installiert und die passwortlose SSH-Verbindung zu Ihren verwalteten Hosts konfiguriert haben.

Statische Host-Inventardatei

In Ansible ist eine statische Inventardatei eine reine Textdatei, die eine Liste verwalteter Hosts enthält, die unter einer Hostgruppe deklariert sind, entweder mit Hostnamen oder mit IP-Adressen.

Der Name einer Hostgruppe wird in eckige Klammern eingeschlossen, z. B. [Gruppenname]. Die verwalteten Hosteinträge werden später jeweils in einer eigenen Zeile unterhalb des Gruppennamens aufgelistet. Wie bereits erwähnt, werden die Hosts entweder mit Hostnamen oder mit IP-Adressen aufgelistet.

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

Zur Veranschaulichung erstellen wir eine statische Inventardatei.

mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

Speichern Sie die Datei und beenden Sie den Vorgang.

Wie Sie in der Inventardatei oben sehen können, haben wir zwei Hostgruppen erstellt: Webserver und Datenbankserver. Außerdem haben wir eine zusätzliche Gruppe namens datacenter erstellt, die eine Gruppe von Hostgruppen enthält, die wie oben gezeigt durch das Suffix ':children' gekennzeichnet sind.

Ansible ermöglicht es auch, Gruppen von Hosts unter einem Gruppennamen zu platzieren. In der Inventardatei oben wurden die Gruppen Webserver und Datenbankserver unter dem Datencenter platziert.

HINWEIS: Es ist nicht zwingend erforderlich, verwaltete Hosts in einer Hostgruppe zu platzieren. Sie können sie beispielsweise einfach anhand ihres Hostnamens oder ihrer IP-Adresse auflisten.

173.82.202.239
172.82.115.165
load_balancer.pnl.com

Lassen Sie uns nun einige Ansible-Befehle verwenden, um auf die Host-Inventardatei zu verweisen. Die grundlegende Syntax für die Bestandsverwaltung ist wie folgt.

ansible {host-pattern} -i /path/of/inventory/file --list-hosts

Zum Beispiel,

ansible all -i /root/test_labs/hosts --list-hosts

Alternativ können Sie das Platzhalterzeichen * verwenden, um das Argument ‘all’ zu ersetzen.

ansible * -i /root/test_labs/hosts --list-hosts

Um Hosts in einer Gruppe aufzulisten, geben Sie die Hostgruppe anstelle von Hostmuster an.

ansible webservers -i /root/test_labs/hosts --list-hosts

Dynamische Host-Inventardatei

In einer Konfiguration – insbesondere einem Cloud-Setup wie AWS, bei dem sich die Inventardatei ständig ändert, wenn Sie Server hinzufügen oder außer Betrieb nehmen, wird es zu einer echten Herausforderung, die in der Inventardatei definierten Hosts im Auge zu behalten. Es wird umständlich, zur Hostdatei zurückzukehren und die Liste der Hosts mit ihren IP-Adressen zu aktualisieren.

Und hier kommt eine dynamische Inventarisierung ins Spiel. Was ist also ein dynamisches Inventar? Ein dynamisches Inventar ist ein in Python, PHP oder einer anderen Programmiersprache geschriebenes Skript. Dies ist praktisch in Cloud-Umgebungen wie AWS, in denen sich IP-Adressen ändern, sobald ein virtueller Server gestoppt und erneut gestartet wird.

Ansible hat bereits Inventarskripte für öffentliche Cloud-Plattformen wie Google Compute Engine, Amazon EC2-Instanz, OpenStack, RackSpace, Cobbler und andere entwickelt.

Welche Vorteile bietet eine dynamische Inventur gegenüber einer statischen Inventur?
  • Dynamische Inventare reduzieren menschliches Versagen perfekt, da Informationen mithilfe von Skripten gesammelt werden.
  • Der Aufwand für die Bestandsverwaltung ist minimal.

Sie können Ihr eigenes dynamisches Inventar in einer Programmiersprache Ihrer Wahl schreiben. Das Inventar sollte ein JSON-Format zurückgeben, wenn entsprechende Optionen übergeben werden.

Nutzen Sie ein vorhandenes dynamisches Inventarskript

Ein Skript, das zum Erstellen eines dynamischen Inventars verwendet wird, muss ausführbar gemacht werden, damit Ansible es verwenden kann.

Um Informationen über die Hosts innerhalb eines dynamischen Inventarskripts abzurufen, führen Sie es einfach aus.

./script --list 

Wie bereits erwähnt, sollte die Ausgabe in JSON im folgenden Format erfolgen.

Ein Wörterbuch bestehend aus Gruppen (d. h. Webservern, Datenbankservern)
  • Eine Liste der verwalteten Hosts pro Gruppe
  • Ein Wörterbuch von Variablen
Meta-Wörterbuch
  • Hosts und Hostvars
Beispielausgabe
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
Abschluss

In diesem Artikel haben wir gezeigt, wie man sowohl statische als auch dynamische Inventare erstellt. Zusammenfassend ist eine statische Inventardatei eine reine Textdatei, die eine Liste verwalteter Hosts oder Remote-Knoten enthält, deren Anzahl und IP-Adressen ziemlich konstant bleiben.

Andererseits ändert sich eine dynamische Hostdatei ständig, wenn Sie neue Hosts hinzufügen oder alte außer Betrieb nehmen. Die IP-Adressen von Hosts sind auch dynamisch, wenn Sie neue Hostsysteme stoppen und starten. Wir hoffen, dass Sie dieses Tutorial informativ fanden.