Wie wir wissen, ist Ansible ist das leistungsstärkste Automatisierungstool die die Hosts problemlos konfigurieren können. Der Hauptvorteil der Verwendung von Ansible als Automatisierungstool besteht darin, dass wir keinen Agenten auf Hosts installieren müssen. Die Kommunikation zwischen dem Ansible-Server und seinen Clients oder verwalteten Hosts erfolgt ohne Agenten, sie funktioniert über den ssh-Mechanismus.
In Bezug auf die Ansible-Terminologie wird das System, auf dem wir Ansible-Software installieren, als „Control Node“ bezeichnet “ und die Server, die von Ansible Server oder Control Node verwaltet und konfiguriert werden, werden als „Managed Host“ bezeichnet “. Verwaltete Hosts-Einträge werden in einer Host-Bestandsdatei gespeichert, es handelt sich um eine Textdatei auf dem Kontrollknoten, die aus verwalteten Hostnamen oder IP-Adressen besteht. In Ansible können wir Hostinventar von zwei Typen verwalten, d. h. statisch und dynamisch .
In diesem Artikel werden wir besprechen, wie Sie statisches und dynamisches Host-Inventar in Ansible verwalten. Ich gehe davon aus, dass die Ansible-Software bereits auf meinem Kontrollknoten installiert ist. Immer wenn wir Ansible-Software installieren, wird eine standardmäßige Ansible-Hostdatei mit dem Namen "hosts" erstellt “ unter dem Ordner „/etc/ansible ” Falls die Ansible-Software nicht auf Ihrem Server installiert ist, lesen Sie die folgenden Hinweise
- So installieren Sie Ansible (Automatisierungstool) unter CentOS 8/RHEL 8
- So installieren Sie das Ansible Automation-Tool unter CentOS 7.x
In diesem Tutorial werde ich Folgendes verwenden:
Ein Kontrollknoten – control-node.example.com (192.168.0.10)
Zwei verwaltete Hosts – servera.example.com (192.168.0.20) und serverb.example.com (192.168.0.30)
Statisches Hostinventar
Ein statisches Host-Inventar in Ansible ist ein INI-ähnliches Textdatei, in deren Abschnitt jeweils eine Gruppe von Hosts deklariert wird ( host group). Jeder Abschnitt beginnt mit einem Hostgruppennamen, der in eckige Klammern ([]) eingeschlossen ist, dann werden die Hosteinträge jedes verwalteten Hosts in der Gruppe aufgelistet, jeder in einer einzelnen Zeile. Hosteinträge können Hostnamen oder IP-Adressen von verwalteten Hosts sein. Lassen Sie uns eine Inventardatei mit dem Namen „inventory“ im Ordner „test-lab“ im Home-Verzeichnis Ihres Benutzers erstellen.
[[email protected] ~]$ mkdir test-lab [[email protected] ~]$ cd test-lab/ [[email protected] test-lab]$ vi inventory control-node.example.com 192.168.0.10 [webserver] servera.example.com [dbserver] serverb.example.com [datacenter:children] webserver dbserver
Speichern und beenden Sie die Datei.
In der Inventardatei habe ich zwei Hostgruppen mit den Namen webserver und dbserver erstellt, außerdem haben wir eine weitere Gruppe mit dem Namen datacenter erstellt, die Gruppen von Hostgruppen enthält. Anisble-Hostinventare können Gruppen von Hostgruppen enthalten, dies wird mit „:children erreicht Das Beispiel für ein Suffix wird im oben erstellten Inventar gezeigt. Außerdem ist es nicht zwingend erforderlich, Hosts in einer Gruppe zu platzieren. Wir können die Hosts einfach platzieren, ohne die Hostgruppe zu erwähnen, genau wie der Eintrag „control-node.exmaple.com“ in der Bestandsdatei
Lassen Sie uns einige grundlegende Operationen mit dem ansible-Befehl ausführen, indem wir auf Inventory-Hosts verweisen.
Um den Ansible-Befehl für die Hostverwaltung zu verwenden, muss der Pfad der Hostinventardatei mit „-i angegeben werden ”-Option.
$ ansible {host-pattern} -i /
Beispiel:1 Alle verwalteten Hosts auflisten
Um alle verwalteten Hosts aufzulisten, geben Sie im Ansible-Befehl das Schlüsselwort „all“ anstelle des Hostmusters an, das Beispiel ist unten gezeigt
[[email protected] test-lab]$ ansible all -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (4): control-node.example.com 192.168.0.10 servera.example.com serverb.example.com [[email protected] test-lab]$
Eine andere Möglichkeit, alle verwalteten Hosts aufzulisten, ist die Verwendung des Platzhalterzeichens „*“.
[[email protected] test-lab]$ ansible '*' -i /home/linuxtechi/test-lab/inventory --list-hosts
Beispiel:2 Listen Sie die verwalteten Hosts basierend auf der Hostgruppe auf.
Geben Sie den Namen der Hostgruppe anstelle des Hostmusters an
[[email protected] test-lab]$ ansible webserver -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): servera.example.com [[email protected] test-lab]$ [[email protected] test-lab]$ ansible datacenter -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (2): servera.example.com serverb.example.com [[email protected] test-lab]$
Beispiel:3 Listen Sie verwaltete Hosts basierend auf einem Wildcard-Hostmuster auf.
Listen Sie alle Hosts auf, die sich auf der Domain „*.example.com“ befinden
[[email protected] test-lab]$ ansible '*.example.com' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (3): control-node.example.com servera.example.com serverb.example.com [[email protected] test-lab]$
Listen Sie alle Hosts auf, die sich im Netzwerk „192.168.0.0“ befinden
[[email protected] test-lab]$ ansible '192.168.0.*' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): 192.168.0.10 [[email protected] test-lab]$
Beispiel:4 Erweitertes Hostmuster wie Inklusion und Exklusion
Abgesehen von Platzhaltern ermöglicht uns Ansible, mithilfe von Einschluss- und Ausschlusslogik komplexe Hostmuster zu erstellen. Die Einbeziehung erfolgt mit dem Zeichen „:“, um Gruppen im Hostmuster zu trennen, um eine ODER-Logik anzuzeigen.
Beispiel für Hosteinschlussmuster
[[email protected] test-lab]$ ansible 'webserver:dbserver' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (2): servera.example.com serverb.example.com [[email protected] test-lab]$
Beispiel für Host-Schnittmuster
„:&“ repräsentiert die Schnittmenge zweier Gruppen in der Bestandsdatei
[[email protected] test-lab]$ ansible 'datacenter:&dbserver' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): serverb.example.com [[email protected] test-lab]$
Beispiel für ein Host-Ausschlussmuster
Der Ausschluss erfolgt über das Zeichen „:“ in Verbindung mit dem Zeichen „!“
[[email protected] test-lab]$ ansible 'datacenter:!dbserver' -i /home/linuxtechi/test-lab/inventory --list-hosts hosts (1): servera.example.com [[email protected] test-lab]$
Dynamisches Hostinventar
Hostinventar in Ansible kann dynamisch generiert werden. Zu den Quellen für dynamische Inventarinformationen gehören öffentliche/private Cloud-Anbieter, Cobbler-Systeminformationen, LDAP-Datenbank oder CMDB (Configuration Management Database). Ansible enthält Skripte, die dynamische Host-, Gruppen- und Variableninformationen von den gängigsten Anbietern wie Amazon EC2, Cobbler, Rackspace und OpenStack verarbeiten.
Für Cloud-Anbieter sollten Authentifizierungs- und Zugriffsinformationen in Dateien definiert werden, auf die Skripte zugreifen können. Eine Reihe vorhandener Skripte sind auf der GitHub-Site von Ansible unter https://github.com/ansible/ansible/tree/devel/contrib/inventory verfügbar. Diese Skripte unterstützen die dynamische Generierung eines Inventars auf der Grundlage von Hostinformationen, die von a zahlreiche Plattformen wie Openstack , AWS , Ovirt , Red Hat Satellite und OpenShift .
Wir können unser eigenes benutzerdefiniertes dynamisches Inventarprogramm in jeder Programmiersprache schreiben und müssen im JSON-Format zurückkehren, wenn die entsprechenden Optionen bestanden werden. Damit Ansible ein Skript zum Abrufen von Hostinformationen aus einem externen Inventarsystem verwenden kann, muss dieses Skript die –list unterstützen -Parameter, der Hostgruppen- und Hostinformationen ähnlich dem JSON-Hash/Wörterbuch zurückgibt. Beispiel ist unten gezeigt:
[[email protected] test-lab]$ ./inventoryscript --list { "webservers" :["web1.example.com", "web2.example.com" ], "dbservers" :["db1.example.com", "db2.example.com"] }
Ein Skript, das ein dynamisches Inventar erstellt, muss ausführbar sein, damit Ansible es verwenden kann.
Hinweis:Ansible unterstützt die Verwendung mehrerer Inventare im selben Lauf. Wenn entweder der an den ‚-i‘-Parameter übergebene Wert oder der Wert des Inventory-Parameters in der /etc/ansible/ansible.cfg . Wenn mehrere Bestandsdateien vorhanden sind, werden sie in alphabetischer Reihenfolge untersucht. Daher ist es wichtig, dass der Name einer Datei dem einer anderen Datei in alphabetischer Reihenfolge folgt, wenn ihr Inhalt vom Inhalt einer anderen Datei abhängt.