]> granicus.if.org Git - icinga2/commitdiff
Implement the 'macro' function for dynamic custom vars
authorGunnar Beutner <gunnar@beutner.name>
Wed, 28 Jan 2015 13:14:48 +0000 (14:14 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 28 Jan 2015 13:14:48 +0000 (14:14 +0100)
refs #7564

lib/icinga/macroprocessor.cpp
lib/icinga/macroprocessor.hpp

index 280ba938ae9ce4b28805711bf12d6a010d0a21a8..fec5be3a4926bad26fd28020a989cddd88769f47 100644 (file)
@@ -154,6 +154,18 @@ bool MacroProcessor::ResolveMacro(const String& macro, const ResolverList& resol
        return false;
 }
 
+Value MacroProcessor::InternalResolveMacrosShim(const std::vector<Value>& args, const ResolverList& resolvers,
+    const CheckResult::Ptr& cr, String *missingMacro,
+    const MacroProcessor::EscapeCallback& escapeFn, const Dictionary::Ptr& resolvedMacros,
+    bool useResolvedMacros, int recursionLevel)
+{
+       if (args.size() < 1)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Too few arguments for function"));
+
+       return MacroProcessor::InternalResolveMacros(args[0], resolvers, cr, missingMacro, escapeFn,
+           resolvedMacros, useResolvedMacros, recursionLevel);
+}
+
 Value MacroProcessor::InternalResolveMacros(const String& str, const ResolverList& resolvers,
     const CheckResult::Ptr& cr, String *missingMacro,
     const MacroProcessor::EscapeCallback& escapeFn, const Dictionary::Ptr& resolvedMacros,
@@ -206,6 +218,10 @@ Value MacroProcessor::InternalResolveMacros(const String& str, const ResolverLis
                                BOOST_FOREACH(const ResolverSpec& resolver, resolvers) {
                                        resolvers_this->Set(resolver.first, resolver.second);
                                }
+
+                               resolvers_this->Set("macro", new Function(boost::bind(&MacroProcessor::InternalResolveMacrosShim,
+                                   _1, boost::cref(resolvers), cr, missingMacro, boost::cref(escapeFn), resolvedMacros, useResolvedMacros,
+                                   recursionLevel)));
                        }
 
                        ScriptFrame frame(resolvers_this);
index bd1723902d1b6919f17130b211367d65975e31eb..78846aae7674d1152483abb22a322b13113b018d 100644 (file)
@@ -57,6 +57,10 @@ private:
            String *missingMacro, const EscapeCallback& escapeFn,
            const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros,
            int recursionLevel = 0);
+       static Value InternalResolveMacrosShim(const std::vector<Value>& args, const ResolverList& resolvers,
+           const CheckResult::Ptr& cr, String *missingMacro,
+           const MacroProcessor::EscapeCallback& escapeFn, const Dictionary::Ptr& resolvedMacros,
+           bool useResolvedMacros, int recursionLevel);
 };
 
 }