From 4ad4c314aef3b8c37017ad1b4867658754aaf94d Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 28 Jan 2015 14:14:48 +0100 Subject: [PATCH] Implement the 'macro' function for dynamic custom vars refs #7564 --- lib/icinga/macroprocessor.cpp | 16 ++++++++++++++++ lib/icinga/macroprocessor.hpp | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/lib/icinga/macroprocessor.cpp b/lib/icinga/macroprocessor.cpp index 280ba938a..fec5be3a4 100644 --- a/lib/icinga/macroprocessor.cpp +++ b/lib/icinga/macroprocessor.cpp @@ -154,6 +154,18 @@ bool MacroProcessor::ResolveMacro(const String& macro, const ResolverList& resol return false; } +Value MacroProcessor::InternalResolveMacrosShim(const std::vector& 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); diff --git a/lib/icinga/macroprocessor.hpp b/lib/icinga/macroprocessor.hpp index bd1723902..78846aae7 100644 --- a/lib/icinga/macroprocessor.hpp +++ b/lib/icinga/macroprocessor.hpp @@ -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& args, const ResolverList& resolvers, + const CheckResult::Ptr& cr, String *missingMacro, + const MacroProcessor::EscapeCallback& escapeFn, const Dictionary::Ptr& resolvedMacros, + bool useResolvedMacros, int recursionLevel); }; } -- 2.49.0