ich damit auch für eine Weile zu kämpfen hatte, aber eine Lösung durch Versuch gefunden & Fehler.
Einer der Hauptvorteile der API besteht darin, dass Sie Variablen und Metadaten abrufen können, nicht nur Hostnamen.
ab Python API - Ansible Documentation:
#!/usr/bin/env python
# Ansible: initialize needed objects
variable_manager = VariableManager()
loader = DataLoader()
# Ansible: Load inventory
inventory = Inventory(
loader = loader,
variable_manager = variable_manager,
host_list = 'hosts', # Substitute your filename here
)
Dies gibt Ihnen eine Bestands Instanz, die Methoden und Eigenschaften bieten Gruppen und Hosts hat.
Um weiter zu expandieren (und Beispiele für Gruppen- und Host-Klassen bereitzustellen), hier ist ein Snippet, das das Inventar als eine Liste von Gruppen serialisiert, wobei jede Gruppe ein "hosts" -Attribut hat, das eine Liste der Attribute jedes Hosts ist .
#/usr/bin/env python
def serialize(inventory):
if not isinstance(inventory, Inventory):
return dict()
data = list()
for group in inventory.get_groups():
if group != 'all':
group_data = inventory.get_group(group).serialize()
# Seed host data for group
host_data = list()
for host in inventory.get_group(group).hosts:
host_data.append(host.serialize())
group_data['hosts'] = host_data
data.append(group_data)
return data
# Continuing from above
serialized_inventory = serialize(inventory)
Ich lief dies gegen mein Labor von vier F5 BIG-IP-Adressen, und das ist das Ergebnis (getrimmt):
<!-- language: lang-json -->
[{'depth': 1,
'hosts': [{'address': u'bigip-ve-03',
'name': u'bigip-ve-03',
'uuid': UUID('b5e2180b-964f-41d9-9f5a-08a0d7dd133c'),
'vars': {u'hostname': u'bigip-ve-03.local',
u'ip': u'10.128.1.130'}}],
'name': 'ungrouped',
'vars': {}},
{'depth': 1,
'hosts': [{'address': u'bigip-ve-01',
'name': u'bigip-ve-01',
'uuid': UUID('3d7daa57-9d98-4fa6-afe1-5f1e03db4107'),
'vars': {u'hostname': u'bigip-ve-01.local',
u'ip': u'10.128.1.128'}},
{'address': u'bigip-ve-02',
'name': u'bigip-ve-02',
'uuid': UUID('72f35cd8-6f9b-4c11-b4e0-5dc5ece30007'),
'vars': {u'hostname': u'bigip-ve-02.local',
u'ip': u'10.128.1.129'}},
{'address': u'bigip-ve-04',
'name': u'bigip-ve-04',
'uuid': UUID('255526d0-087e-44ae-85b1-4ce9192e03c1'),
'vars': {}}],
'name': u'bigip',
'vars': {u'password': u'admin', u'username': u'admin'}}]
Auch, wenn Sie nur die Host-Namen brauchen, ist die Antwort von @MattDavis besser und einfacher wäre, in einem nicht-Python-Skript zu nennen. – Theo
Noch etwas zu beachten - wir dokumentieren keine externen Anrufer und unterstützen sie nicht bei der Ansible Python API. Es unterstützt unsere Kommandozeilen-Tools. Offensichtlich ist es Open Source und Sie können frei tun, was Sie wollen, aber seien Sie gewarnt: Wir unternehmen keine Anstrengungen, um Änderungen zu vermeiden, selbst zwischen kleineren/Patch-Releases. – nitzmahone