Events von Skript verarbeiten
-
Hallo zusammen,
ich beschäftige mich gerade mit den Events von i-doit und der Verarbeitung der Daten durch ein Skript. Ich habe zum Test ein Python Skript erstellt, welches das Base64 kodierte JSON dekodiert und in eine Datei sachreibt:
#!/usr/bin/python import base64, json, sys file = open('/usr/local/bin/events/logfile', 'w') data = json.loads(base64.b64decode(str(sys.argv[1]))) print(data) json.dump(data, file) file.close()
Ich erhalte zwar eine Ausgabe wenn ich bspw. einen Server anlege, allerdings entspricht erstens die darin enthaltene SYSID (sofern vorhanden) nicht der des Objekts und zweitens sind keine brauchbaren Details zu finden. Ich würde z.B. eine IP-Adresse, Hostname etc. erwarten:
{"username": "admin", "title": "Global v4 liefert Netzwerk an ", "cmdbStatus": "In Betrieb", "sysID": "SYSID_1477060626", "id": "63", "objectTypeConst": "C__OBJTYPE__RELATION", "cmdbStatusID": 6, "objectTypeID": 60, "objectType": "Beziehungen"}
Wir wollen damit letztendlich per Skript die API von Foreman ansprechen und bei Erstellung eines Servers diesen dort auch als Host anlegen.
-
Hallo,
die Anbindung von Foreman klingt nach einer spannenden Anwendung. Wird es das Script unter einer Open-Source-Lizenz geben? Ich bin sicher, dass auch andere an einer Anbindung zwischen i-doit und Foreman interessiert sein werden.
Nun aber zum Problem und damit zu einer Verständnisfrage: Um welches Event geht es? Objekt erstellen? Hier lohnt es sich, im Script nach bestimmten Attributen vorzufiltern. Im Beispiel ist ein Beziehungs-Objekt angegeben, dass sicherlich nicht aktiv vom Benutzer, sondern automatisch im Hintergrund angelegt worden ist. Das erkennt man an dem Attribut "objectTypeConst".
Beim Erstellen eines Objekts werden auch nur die allgemeinen Daten mitgeliefert. Die Attribute "IP-Adresse" und "Hostname" sind Teil der Kategorie "Hostadresse". Sollen diese Daten verarbeitet werden, muss man zusätzlich die API von i-doit ansprechen.
Das erzeugt natürlich einen gewissen Overhead. Wenn das Script daher lange läuft, hängt solange auch die Web GUI. Daher ist es ratsam, hier mit Queues zu arbeiten: Das Script nimmt die ersten Infos entgegen und speichert sie zwischen. Ein zweites Script schaut regelmäßig nach Änderungen und verarbeitet sie dann weiter. Natürlich geht das noch eleganter, aber für die ersten Schritte soll es reichen.
Viele Grüße
Benjamin -
Guten Morgen Benjamin,
ich habe ein Event des Typs "Objekt: (beliebige Quelle) Neuanlage" definiert, welches mein Python Skript anspricht. So wie ich das verstehe bekommt dieses Skript z.B. bei Anlage eines Servers mindestens einen ggf. aber mehrere JSON Requests geschickt. Je nachdem welche Abhängigkeiten i-doit sonst noch anlegen muss. Stimmt das soweit?
Sind die auswählbaren Events in der GUI das Maximum oder lassen sich innerhalb von i-doit weitere definieren, ähnlich der benutzerdefinierten Kategorien beispielsweise?
Viele Grüße, Christian
-
Was mir gerade sehr helfen würde: Wie kann ich über die API die Details eine Objekts abfragen und bis zu welchem Detailgrad geht das?
Viele Grüße, Christian
-
Hallo Christian,
mit der Methode "cmdb.object.read" kannst Du alle Informationen zu einem Objekt auslesen, als Parameter muesstest Du dann die ID und die auszulesende Kategorie angeben.
Gruss,
jkondek -
Ich probiere es z.B. so:
curl -X POST http://192.168.178.130/src/jsonrpc.php -H "Content-Type: application/json" -H "Authorization: Basic YWRtaW46YWRtaW4=" -d '{"version":"2.0","method":"cmdb.object.read","params":{"apikey":"abcdefgh","id":62,"catgID":47},"id":1}'
Ich bekomme aber kein Ergebnis (es sollte die IP-Adresse des Hosts angezeigt werden). Ist der Aufruf noch falsch?