Ansible Inventory besteht eigentlich aus zwei Teilen: statisches Inventar und dynamisches Inventar. Statisches Inventar bezieht sich auf die in der Datei /etc/ansible/hosts angegebenen Hosts und Gruppen. Dynamisches Inventar bezieht sich auf das Abrufen der Hostliste über externe Skripte und das Befolgen der Anforderungen ansible Das an den Befehl ansilbe zurückgegebene Format. Dieser Teil kombiniert im Allgemeinen das CMDB-Asset-Management-System, das Zabbix-Überwachungssystem, das Crobble-Installationssystem, die Cloud-Computing-Plattform usw., um Host-Informationen zu erhalten. Da Host-Ressourcen im Allgemeinen dynamisch zunehmen oder abnehmen, werden diese Systeme im Allgemeinen intelligent aktualisiert. Wir können die Hostliste über die von diesen Tools bereitgestellte API zurückgeben oder auf Bibliotheksabfragen zugreifen.
Da Ansible beim Akzeptieren von Skripten zum dynamischen Abrufen von Hostinformationen das JSON-Format unterstützt, werde ich sie hier nicht von anderen Systemen übernehmen und einen Teil der Hostinformationen im JSON-Format über einen Code ausdrucken:
#!/usr/bin/env python # coding=utf-8 import json host1ip = ['10.212.52.252','10.212.52.14'] host2ip = ['10.212.52.16'] group = 'test1' group2 = 'test2' hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}} print json.dumps(hostdata,indent=4)
Hinweis:
1. Der Hostteil muss im Listenformat vorliegen
2. In der Hostdatenzeile kann der Teil „hosts“ weggelassen werden, aber wenn er verwendet wird, muss er „hosts“ sein und darf keine anderen Zeichenfolgen wie „hostlist“ sein.
Nachdem Sieweggelassen haben, können Sie es so schreiben:
hostdata = {group:host1ip,group2:host2ip}
Das Ergebnis der direkten Ausführung dieses Codes ist wie folgt:
[root@361way.com ~]# python twogroup.py { "test1": { "hosts": [ "10.212.52.252", "10.212.52.14" ] }, "test2": { "hosts": [ "10.212.52.16" ] } }
Zwei Hostgruppen sind oben definiert. Die Gruppe test1 enthält die Hosts 10.212.52.252 und 10.212.52.14, und die Gruppe test2 enthält den Host 10.212.52.16. ansible kann über die folgenden Methoden aufgerufen werden:
[root@361way.com ~]# ansible -i twogroup.py test1 -m command -a 'uptime' -k SSH password: 10.212.52.252 | success | rc=0 >> 23:01pm up 24 days 8:24, 2 users, load average: 0.21, 0.35, 0.39 10.212.52.14 | success | rc=0 >> 23:08pm up 332 days 5:23, 2 users, load average: 0.00, 0.01, 0.05 [root@361way.com ~]# ansible -i twogroup.py test2 -m command -a 'uptime' -k SSH password: 10.212.52.16 | success | rc=0 >> 23:09pm up 332 days 6:00, 2 users, load average: 0.08, 0.06, 0.05
Im Beispiel einer statischen Host-Konfigurationsdatei gibt es Gruppenvariablen (vars), auch zwischen Gruppen, wie unten gezeigt:
Wenn Sie den obigen Teil wünschen, erhalten Sie die Implementierung über das Skript. Das nach der Implementierung zurückgegebene JSON-Format sollte wie folgt aussehen:
Komplexe Rückgabeformate wie die oben genannten werden im Allgemeinen nicht in Ad-hoc-Umgebungen verwendet. Die meisten davon werden in Ansible-Playbooks verwendet. Dies liegt daran, dass die Playbook-Datei manchmal die Übergabe von Vars-Parametern beinhaltet.
Dies wurde am Anfang dieses Artikels erwähnt. Wir haben Beispiele von Plattformen wie cobbler und cmdb erhalten. Da der Initiator (Autor) von Ansible auch der Entwickler der Cobbler-Software ist, gibt uns das offizielle Dokument ein Beispiel für Cobbler und ein Beispiel für den Erhalt von Hostinformationen von AWS. Wie folgt:
Holen Sie sich den Host-Informationscode für Cobbler
Holen Sie sich den Host-Informationscode in der AWS Cloud
Zum Abrufen von Hostinformationen von AWS und zum Einfügen in die Datenbank habe ich bereits ein entsprechendes Kapitel geschrieben. Weitere Informationen finden Sie auch in meinem vorherigen Blogbeitrag – AWS Host Asset Management (dieser Artikel ist auch in reinem Python implementiert). ).
Holen Sie sich Host-Informationen über die Zabbix-API. Ich habe auch eine Zabbix-Zusammenfassung geschrieben (8). Wenn Sie Host-Listeninformationen über die Zabbix-Plattform erhalten möchten, können Sie sich auch darauf beziehen.
1. Das nach dem Parameter ansible -i aufgerufene Skript ist nicht unbedingt eine py-Datei, es kann auch das Ausgabeergebnis anderer Skripte sein:
[root@361way.com yaml]# ansible -i group.sh test1 -m command -a 'uptime' -k SSH password: 10.212.52.16 | success | rc=0 >> 00:18am up 332 days 7:10, 2 users, load average: 0.00, 0.01, 0.05 10.212.52.14 | success | rc=0 >> 00:17am up 332 days 6:32, 2 users, load average: 0.01, 0.03, 0.05 10.212.52.252 | success | rc=0 >> 00:11am up 24 days 9:33, 2 users, load average: 0.49, 0.42, 0.41 [root@localhost yaml]# cat group.sh #!/bin/bash groups=''' { "test1": { "hosts": [ "10.212.52.252", "10.212.52.14", "10.212.52.16" ] } } ''' echo $groups
2. Das durch den Parameter -i angegebene Skript muss über eine ausführbare Berechtigung verfügen, andernfalls wird ein Fehler wie folgt gemeldet:
[root@361way.com yaml]# ansible -i hostjson.py AA -a 'uptime' ERROR: The file hostjson.py looks like it should be an executable inventory script, but is not marked executable. Perhaps you want to correct this with `chmod +x hostjson.py`?
Das obige ist der detaillierte Inhalt vonEinführung in Ansible Dynamic Inventory. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!