mirror of https://github.com/Icinga/icinga2.git
parent
f64bdc8788
commit
671eb0110f
|
@ -31,6 +31,8 @@ type DynamicObject {
|
|||
%attribute string "__type",
|
||||
|
||||
%attribute dictionary "methods" {
|
||||
%validator "native::ValidateMethods",
|
||||
|
||||
%attribute string "*",
|
||||
},
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
using namespace icinga;
|
||||
|
||||
REGISTER_SCRIPTFUNCTION("native::ValidateMethods", &ConfigType::ValidateMethods);
|
||||
|
||||
ConfigType::ConfigType(const String& name, const DebugInfo& debuginfo)
|
||||
: m_Name(name), m_RuleList(boost::make_shared<TypeRuleList>()), m_DebugInfo(debuginfo)
|
||||
{ }
|
||||
|
@ -166,3 +168,25 @@ void ConfigType::ValidateDictionary(const Dictionary::Ptr& dictionary,
|
|||
}
|
||||
}
|
||||
|
||||
void ConfigType::ValidateMethods(const ScriptTask::Ptr& task,
|
||||
const vector<Value>& arguments)
|
||||
{
|
||||
if (arguments.size() < 1)
|
||||
BOOST_THROW_EXCEPTION(invalid_argument("Missing argument: Location must be specified."));
|
||||
|
||||
if (arguments.size() < 2)
|
||||
BOOST_THROW_EXCEPTION(invalid_argument("Missing argument: Attribute dictionary must be specified."));
|
||||
|
||||
String location = arguments[0];
|
||||
Dictionary::Ptr attrs = arguments[1];
|
||||
|
||||
String key;
|
||||
BOOST_FOREACH(tie(key, tuples::ignore), attrs) {
|
||||
if (!ScriptFunction::GetByName(key)) {
|
||||
ConfigCompilerContext::GetContext()->AddError(false, "Validation failed for " +
|
||||
location + ": Method '" + key + "' not found.");
|
||||
}
|
||||
}
|
||||
|
||||
task->FinishResult(Empty);
|
||||
}
|
||||
|
|
|
@ -46,6 +46,9 @@ public:
|
|||
|
||||
void ValidateItem(const ConfigItem::Ptr& object) const;
|
||||
|
||||
static void ValidateMethods(const ScriptTask::Ptr& task,
|
||||
const vector<Value>& arguments);
|
||||
|
||||
private:
|
||||
String m_Name; /**< The type name. */
|
||||
String m_Parent; /**< The parent type. */
|
||||
|
|
Loading…
Reference in New Issue