From f5abec20cfa2767bd5c4c0db7f4ea37f86605875 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Fri, 30 Apr 2021 11:50:50 +0200 Subject: [PATCH] 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.) --- lib/icingadb/icingadb-objects.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/icingadb/icingadb-objects.cpp b/lib/icingadb/icingadb-objects.cpp index 5793f9762..c62f5916e 100644 --- a/lib/icingadb/icingadb-objects.cpp +++ b/lib/icingadb/icingadb-objects.cpp @@ -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()->ToString()); + break; + default: + values->Set(attr, JsonEncode(value)); + } } }