icingaweb2-module-director icon indicating copy to clipboard operation
icingaweb2-module-director copied to clipboard

icingacli error with modify action - Trying to set invalid key "fields"

Open andyb2000 opened this issue 1 year ago • 3 comments

Describe the bug

The error is when trying to amend/update an icinga director service. To do an amend first I query the current service object using: icingacli director service show --host="aslf02" 'check_juniper_load' --json --no-pretty

which returns the json output, I would then modify the keys/values and then submit the change back. However when pushing back the change (for example even if I don't change any fields and push back exactly the same record) I get the error:

ERROR: InvalidArgumentException in /usr/share/icingaweb2/modules/director/library/Director/Data/Db/DbObject.php:364 with message: Trying to set invalid key "fields"

The "director service show" command returns:

icingacli director service show --host="aslf02" 'check_juniper_load' --json --no-pretty

{"fields":[],"host":"aslf02","imports":["servicetemplate-XXXX","service-juniper-load"],"notes":"Added by icinga-import 10:14:56 13/12/2024","object_name":"check_juniper_load","object_type":"object","uuid":"198e50ba-73d8-4be8-979f-fae427918a2b","vars":{"ARG1":"20,30,40"}}

You can see the first json array returned is "fields". This isn't being set in my code anywhere, it seems to be a default parameter added either by director or icinga. So if I then submit that back I get the error returned as it's trying to set the key "fields" which it states to be invalid.

In previous versions of icinga/icingacli this didn't occur, however my other installation is a much older install so this may be a few revisions since this crept in.

icingacli version Icinga Web 2 2.12.2 Git Commit 7f9217b0521f19f770ad59ca17d7d4b3514e54e5 PHP Version 8.1.2-1ubuntu2.19 MODULE VERSION director 1.11.3 incubator 0.22.0 monitoring 2.12.2 pnp 1.0.1 pulsant-theme 1.0.1

(For reference, my older install uses 2.7.3 which doesn't appear to have this issue)

If I do an "inspect" via the GUI I see no reference of this key "fields".

Looking at the code, the export I suspect is adding this is here: /usr/share/icingaweb2/modules/director/library/Director/Data/Exporter.php

protected function exportIcingaObject(IcingaObject $object)
    {
        $props = (array) $object->toPlainObject($this->resolveObjects, !$this->showDefaults);
        if ($object->supportsFields()) {
            $props['fields'] = $this->fieldReferenceLoader->loadFor($object);
        }

        return $props;
    }

But I'm not clear if this should be exporting the property "fields" or not when it's clearly blank in my case?

andyb2000 avatar Dec 13 '24 13:12 andyb2000