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:
    7784d455-6be1-4546-bcd5-13388d467e42-grafik.png

    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
    f55bf09b-9485-4771-937e-9c7745d9f310-grafik.png

    Dieser wird beim Objekt jedoch nicht übernommen.
    9f8d6d34-f485-4d0a-be5a-4a2649b78637-grafik.png

    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.


Log in to reply
 


Datenschutz / Privacy Policy