I-Doit API Update Sub Kategorien (z.B C__CATG__VERSION)
-
Hallo zusammen,
ich suche derzeit eine Möglichkeit Subkategorien zu aktualisieren, wie etwa "C__CATG__VERSION". Hintergrund ist, dass ich gerne dynamisch das OS System aktualisieren möchte (samt Versionsnummer), diese aber nicht übernommen wird. Beziehungweise, die Versionsnummer wird nur dann übernommen, wenn diese zuvor im DialogPlus Feld hinterlegt wurde.
Auszug aus der API Beschreibung:
Beim Versuch einen Eintrag des Betriebssystems zu aktualisieren
- name: update os information in CMDB shell: | curl -s --noproxy "*" --location --request POST 'https://idoit/i-doit/src/jsonrpc.php' \ --header 'Content-Type: application/json' \ --header "X-RPC-Auth-Session: {{ idoit_session_key }}" \ --header "Cookie: PHPSESSID= {{ idoit_session_key }}" \ --data-raw '{ "version": "2.0", "method": "cmdb.category.save", "params": { "object": "{{ idoit_object_id }}", "entry": "", "data": { "application": "{{ os_idoit_id }}", "application_type": "", "assigned_license": "", "assigned_license_key": "", "assigned_it_service": "", "assigned_variant": "{{ ansible_distribution_release }}", "assigned_version": "{{ ansible_distribution_version }}", "assigned_databases": "", "description": "Auto created by API" }, "category": "C__CATG__OPERATING_SYSTEM", "apikey": "{{ idoit_api_key }}", "language": "en" }, "id": 1 }' args: warn: false delegate_to: 127.0.0.1 when: - "os_idoit_id is defined"
Musste ich jedoch feststellen, dass der Wert zwar korrekt dem Request hinzugefügt wird (hier als String) jedoch nicht gespeichert wird.
changed: [idoit] => {"changed": true, "cmd": "curl -s --noproxy \"*\" --location --request POST 'https://idoit/i-doit/src/jsonrpc.php' --header 'Content-Type: application/json' --header \"X-RPC-Auth-Session: u501nrtoo270p04ceuakpmetgc\" --header \"Cookie: PHPSESSID= u501nrtoo270p04ceuakpmetgc\" --data-raw '{\n \"version\": \"2.0\",\n \"method\": \"cmdb.category.save\",\n \"params\": {\n \"object\": \"11571\",\n \"entry\": \"\",\n \"data\": {\n \"application\": \"1702\",\n \"application_type\": \"\",\n \"assigned_license\": \"\",\n \"assigned_license_key\": \"\",\n \"assigned_it_service\": \"\",\n \"assigned_variant\": \"Core\",\n \"assigned_version\": \"7.8\",\n \"assigned_databases\": \"\",\n \"description\": \"Auto created by API\"\n },\n \"category\": \"C__CATG__OPERATING_SYSTEM\",\n \"apikey\": \"XzpV1ejX9ungCUW6K2dT\",\n \"language\": \"en\"\n },\n \"id\": 1\n }'\n", "delta": "0:00:00.290924", "end": "2020-10-07 13:10:15.218418", "rc": 0, "start": "2020-10-07 13:10:14.927494", "stderr": "", "stderr_lines": [], "stdout": "{\"id\":1,\"jsonrpc\":\"2.0\",\"result\":{\"success\":true,\"message\":\"Category entry successfully saved\",\"entry\":444}}", "stdout_lines": ["{\"id\":1,\"jsonrpc\":\"2.0\",\"result\":{\"success\":true,\"message\":\"Category entry successfully saved\",\"entry\":444}}"]}
In der Beschreibung der Kategorie wird darauf verwiesen, dass sich assigned_version auf einen bereits existierenden Wert beziehen muss. Ich habe in der Doku jedoch noch keinen Hinweis darauf gefunden, wie ich diesen Wert über die API hinterlegen kann.
Vielleicht könnt ihr mir hier weiterhelfen?
Gruß
Lewando -
Ich habe mal grob über den idoit Code der mir vorliegt geguckt. Bitte versuchen, ob es mit
"assigned_version": "Version {{ ansible_distribution_version }}",
besser funktioniert. Falls ja, können Sie einen Bug Report bei synetics einwerfen.
Hintergrund: idoit versucht hier eine Fallunterscheidung:
- Integer -> DB primary key, welcher bestehenden Eintrag referenziert
- String -> Wert, wie er angezeigt werden soll, für den evtl. automatisch ein neuer Eintrag in der DB erzeugt wird
Durch Verwendung von PHP
is_numeric
gelingt die Fallunterscheidung nicht sauber und der erste Fall wird irrtümlich getriggert ohne ordentliche Fehlerbehandlung im Folgenden.Grundsätzlich kann bei
assigned_variant
das gleiche passieren, Sie haben nur Glück, dass der Wert bei Ihnen nicht numerisch ist. -
@franknagel :
Gute Idee, ich hab das direkt mal ausprobiert und es scheint ähnlich zu sein, wie von ihnen beschrieben.Ändere ich den POST, wie in ihrem Beispiel zu sehen ist, bekommt I-Doit mit, das ein neuer Wert geschrieben werden soll
Dieser wird beim Objekt jedoch nicht übernommen.
Sieht für mich auf den ersten Blick wirklich nach einem Bug aus, oder?
Edit: einen Bug Report habe ich hierzu ebenfalls mal eröffnet.
-