Skip to content

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

@andyb2000

Description

@andyb2000

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions