dynamisches Host Inventar für Ansible
Hallo,
Aus einem Business Need heraus musste ich ein dynamisches Host Inventar für Ansible entwickeln.
Sollten Sie nicht wissen was Ansible ist, empfehle ich Ihnen die offizielle Webseite: https://www.ansible.com/ Einfach gesagt ist Ansible ein Orchestrierungstool für Anwendungen aller Art.
Dieses Modul verbindet sich auf ein vCenter und liest die ESXi-Server aus. Diese werden im Anschluss als Inventar zur Verfügung gestellt. Darüber hinaus können die Server nach verschiedenen Kriterien gruppiert werden. So können Sie entscheiden ob Sie die Hosts nach Cluster oder Datacenter gruppieren möchten.
Als Basis verwendete ich das offizielle Modul ‘vmware_vm_inventory’. Dies erleichterte die Entwicklung, da ich so einen Teil weiterverwenden konnte. Das Modul steht unter der GPLv3, womit Sie das Modul auch in eigenen Projekten verwenden dürfen.
Das Modul kann dort heruntergeladen werden: vmware_host_inventory
Damit das Modul funktioniert, benötigt es eine statische Inventardatei, welche auf diese Namen enden muss: vmware.yml, vmware.yaml, vmware_host_inventory.yml, oder vmware_host_inventory.yaml.
Die Datei benötigt mindestens diesen Inhalt:
1 2 3 4 5 6 7 |
plugin: vmware_host_inventory strict: False hostname: '{{ vCenter }}' username: '{{ vCenter_User }}' password: '{{ vCenter_Password }}' validate_certs: False with_tags: true |
Sie können die folgenden Einstellungen nutzen:
Name | Zweck | Standard |
hostname | Hostname oder IP des vCenter | leer |
username | Nutzername für das vCenter | leer |
password | Passwort für das vCenter | leer |
validate_certs | Zertifikate validieren? | True |
with_tags | Tags berücksichtigen? | False |
properties | Liste an Eigenschaften für die Hosts |
|
group_by_cluster | Gruppiere nach Cluster? | False |
group_by_datacenter | Gruppiere nach Datacenter? | False |
group_by_maintenance | Gruppiere nach Wartungsmodus? | True |
Aufgerufen werden kann das Modul z.B. mit ansible-inventory -i vcenter.vmware.yml --list
Die Beispielausgabe sieht in meinem Fall so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
{ "Maintenance": { "hosts": [ "192.168.21.128" ] }, "_meta": { "hostvars": { "192.168.21.128": { "ansible_host": "192.168.21.128", "attached_tags": [], "name": "192.168.21.128", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": true }, "bckesx01.cloud.gessinger.local": { "ansible_host": "bckesx01.cloud.gessinger.local", "attached_tags": [], "name": "bckesx01.cloud.gessinger.local", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": false }, "cloudesx01.cloud.gessinger.local": { "ansible_host": "cloudesx01.cloud.gessinger.local", "attached_tags": [], "name": "cloudesx01.cloud.gessinger.local", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": false }, "cloudesx02.cloud.gessinger.local": { "ansible_host": "cloudesx02.cloud.gessinger.local", "attached_tags": [ "ESXi_basicSetup" ], "name": "cloudesx02.cloud.gessinger.local", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": false }, "cloudesx04.cloud.gessinger.local": { "ansible_host": "cloudesx04.cloud.gessinger.local", "attached_tags": [], "name": "cloudesx04.cloud.gessinger.local", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": false }, "esxi01.gessinger.local": { "ansible_host": "esxi01.gessinger.local", "attached_tags": [], "name": "esxi01.gessinger.local", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": false }, "esxi02.gessinger.local": { "ansible_host": "esxi02.gessinger.local", "attached_tags": [], "name": "esxi02.gessinger.local", "summary.runtime.connectionState": "connected", "summary.runtime.inMaintenanceMode": false } } }, "all": { "children": [ "Maintenance", "cl_clZel01", "connected", "ungrouped" ] }, "cl_clZel01": { "hosts": [ "esxi01.gessinger.local", "esxi02.gessinger.local" ] }, "connected": { "hosts": [ "192.168.21.128", "bckesx01.cloud.gessinger.local", "cloudesx01.cloud.gessinger.local", "cloudesx02.cloud.gessinger.local", "cloudesx04.cloud.gessinger.local", "esxi01.gessinger.local", "esxi02.gessinger.local" ] } } |
Lassen Sie gerne Ihr Feedback als Kommentar hier. Sollten Sie Wünsche und Anregungen haben, freue ich mich darauf diese annehmen zu können.