mit i-doit daten ansible dynamic inventory erstellen
-
Hallo,
ich möchte alle Hosts im i-doit als Dynamic Inventory im AWX Ansible verwenden. Möchte dazu die API verwenden. Hat das jemand schon umgesetzt? Leider findet man im Netz nicht viel dazu..
Danke schonmal,
LG
Emre -
@emrehayta
Hallo,wir haben das bei uns im Einsatz, allerdings funktioniert das seit einem Update nicht mehr -> https://community.i-doit.com/topic/3819/api-abfrage-der-reports-nicht-mehr-möglich
Sollte die API Abfrage für "cmdb.reports.read" noch für Euch funktionieren, würde ich das als Lösungsweg anbieten.
Zwar können auch die Objekte direkt abgefragt werden, allerdings ist das dann zu langsam. Die Report Abfrage ist wesentlich schneller.Die Umsetzung als Python Code habe ich mal als Gist hier abgelegt: https://gist.github.com/steschuser/617afba17127d325eb303617f3bd2f0a
Grüße
-
@emrehayta
Ich würde dir empfehlen dies nicht über die API sondern über einen dynamic Report zu machen. Die dynamischen Reports generieren dir unter anderem einem XML Report mit den Feldern, welche bei der Erstellung des Reports angegeben wurden. Basierend auf diesem XML Report musst du dann nur die Daten, die du wirklich benötigst in JSON Notation speichern und kannst diese anschließend direkt als Inventory in AWX nutzen.Ein Vorteil bei der Nutzung von dynamischen Reports ist, dass du diese via http/s beziehen kannst, es ist also kein API Aufruf über I-Doit notwendig, sondern es reicht aus die ID des Reports zu kennen. Wie @RandomUser jedoch bereits richtig angedeutet hat, ist ein Zwischenschritt notwendig um die Reports für Ansible aufzubereiten. (Hier spielt es jedoch keine Rolle ob du das via python, php, shell etc. machst)
Die Einbindung der Reports in AWX kann dann über ein custom inventory Skript, direkt in AWX realisiert werden.
Beispiel wie das aussehen könnte:
{ "_meta": { "hostvars": { "HOSTNAME": { "ansible_host": "IP", "idoit": { "id": "ObjectID", "ignore": false, "network": { "hostname": "HOSTNAME", "ipaddr": "IP" }, "title": "HOSTNAME" } }, [...]