Wie in meinem letzten Blogpost angekündigt, werde ich anhand eines Beispiels zeigen, wie man mittels der i-doit-API Daten erstellen, aktualisieren und löschen kann.
Ein großer Vorteil den man durch das Benutzen der i-doit-API hat, ist der, dass man nicht “wie üblich” mit SQL-Statements interne Verarbeitungsschritte innerhalb der Datenbank umgeht. Dadurch kann es nicht passieren, dass man durch z.B. einem UPDATE-Statement einen Datensatz so verändert, dass dieser fehlerhaft wird. Somit ist die Datenintegrität mit der API gewährleistet.
Zunächst sucht man sich das Objekt aus der CMDB heraus welches man verändern will (im folgenden Beispiel das Modell eines bestehenden Servers):
curl -s --data '{ "jsonrpc":"2.0","id":"1","method":"cmdb.category.read", \ "params":{ "apikey":"random_key","objID":"random_objectid","category":"C__CATG__MODEL"}}' \ --header "Content-Type: application/json" \ | python -m json.tool
Man erhält durch diese Anfrage folgende Antwort:
{ "id": "1", "jsonrpc": "2.0", "result": [] }
Wie man sieht ist das result null. D.h. dieser Server/Objekt besitzt keinen Eintrag zu einem Modell bzw. Hersteller. Somit kann man nun ein neues Modell hinzufügen.
Zu beachten ist, dass im Voraus schon Modelle bzw. Hersteller in der CMDB angelegt wurden!
Die zu benutzende Methode ist cmdb.category.create:
curl -s --data '{ "jsonrpc":"2.0","id":"1","method":"cmdb.category.create", \ "params":{ "apikey":"random_key","objID":"random_objectid","category":"C__CATG__MODEL",\ "data":{ "manufacturer": "random_manufacturer","title":"random_modelname","serial":"1234"}}}' \ --header "Content-Type: application/json" \ | python -m json.tool
Sollte alles funktioniert haben, bekommt man folgenden Response zurück:
{ "jsonrpc": "2.0", "result": { "id": "855", "message": "Category entry successfully created.", "success": true }, "id": "1" }
Hat man z.B. die Seriennummer falsch eingetragen und möchte diese verändern, kann man dies mit der Methode update durchführen.
cmdb.category.update
curl -s --data '{ "jsonrpc":"2.0","id":"1","method":"cmdb.category.update", \ "params":{ "apikey":"random_key","objID":"random_objectid","category":"C__CATG__MODEL",\ "data":{ "serial":"4321"}}' --header "Content-Type: application/json" \ | python -m json.tool
Im Anschluss kann man überprüfen ob alle eingetragenen Daten stimmen, indem man wieder den Server ausliest (oberes Beispiel cmdb.category.read):
{ "jsonrpc": "2.0", "result": [{ "id": "855", "objID": "random_objectid", "manufacturer": { "id": "13", "title": "random_manufacturer", "const": null, "title_lang": "random_manufacturer" }, "title": { "id": "3", "title": "random_modelname", "const": null, "title_lang": "random_modelname" }, "productid": "", "service_tag": "", "serial": "4321", "firmware": "", "description": "" }], "id": "1" }
Zum Schluss löschen wir den Server komplett mittels der Methode quickpurge (quickpurge muss in i-doit aktiviert sein!)
cmdb.category.quickpurge:
curl -s --data '{ "jsonrpc":"2.0","id":"1","method":"cmdb.category.quickpurge", \ "params":{ "apikey":"random_key","id":"random_objectid","\ --header "Content-Type: application/json" \ | python -m json.tool
{ "jsonrpc": "2.0", "result": { "message": "Object(s) successfully purged", "success": true }, "id": "1" }
Quickpurge ist eine Methode bei denen die drei Löschschritte (archivieren, löschen, purge) automatisch hintereinander ausgeführt werden. Ansonsten müsste man der Methode cmdb.object.delete die verschiedenen Status in folgender Reihenfolge mitschicken:
{ ... "status": "C__RECORD_STATUS__ARCHIVED" ... } { ... "status": "C__RECORD_STATUS__DELETED" ... } { ... "status": "C__RECORD_STATUS__PURGE" ... }
Im nächsten Teil der Serien zeige ich wie man mit einem Ruby-Script all diese Schritte automatisiert durchführen kann.