Icinga DB: serialize icinga:config:checkcommand:argument#value and #set_if as expected

I.e. keep the serializations as simple as possible:

null     => null
true     => true
42.0     => 42
"foobar" => foobar
{{42}}   => Object of type 'Function'

(["foobar"] and {"foo"="bar"} can't occur there.)
This commit is contained in:
Alexander A. Klimov 2021-04-30 11:50:50 +02:00
parent b08b30ee80
commit f5abec20cf

View File

@ -972,12 +972,20 @@ void IcingaDB::InsertObjectDependencies(const ConfigObject::Ptr& object, const S
values = new Dictionary({{"value", kv.second}});
}
{
for (const char *attr : {"value", "set_if"}) {
Value value;
// JsonEncode() the value if it's set.
if (values->Get("value", &value)) {
values->Set("value", JsonEncode(value));
// Stringify if set.
if (values->Get(attr, &value)) {
switch (value.GetType()) {
case ValueString:
break;
case ValueObject:
values->Set(attr, value.Get<Object::Ptr>()->ToString());
break;
default:
values->Set(attr, JsonEncode(value));
}
}
}