]> granicus.if.org Git - icinga2/commitdiff
Access custom attributes as ${host,service,user}.vars.<name>$.
authorMichael Friedrich <Michael.Friedrich@netways.de>
Sat, 5 Apr 2014 15:13:17 +0000 (17:13 +0200)
committerMichael Friedrich <Michael.Friedrich@netways.de>
Sat, 5 Apr 2014 15:13:17 +0000 (17:13 +0200)
Refs #5855

lib/icinga/host.cpp
lib/icinga/service.cpp
lib/icinga/user.cpp

index cdf5aaf50da35f1e3ee5d6099c0bd31123295aec..095066c89bf7c4aea40477fe907211977bc3c758 100644 (file)
@@ -258,11 +258,23 @@ String Host::StateTypeToString(StateType type)
 
 bool Host::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *result) const
 {
+       String key;
+       Dictionary::Ptr vars;
+
        /* require prefix for object macros */
        if (macro.SubStr(0, 5) == "host.") {
-               String key = macro.SubStr(5);
+               key = macro.SubStr(5);
+
+               if (key.SubStr(0, 5) == "vars.") {
+                       vars = GetVars();
+                       String vars_key = key.SubStr(5);
 
-               if (key == "name") {
+                       if (vars && vars->Contains(vars_key)) {
+                               *result = vars->Get(vars_key);
+                               return true;
+                       }
+               }
+               else if (key == "name") {
                        *result = GetName();
                        return true;
                }
@@ -369,13 +381,13 @@ bool Host::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *re
                                return true;
                        }
                }
-       }
-
-       Dictionary::Ptr vars = GetVars();
+       } else {
+               vars = GetVars();
 
-       if (vars && vars->Contains(macro)) {
-               *result = vars->Get(macro);
-               return true;
+               if (vars && vars->Contains(macro)) {
+                       *result = vars->Get(macro);
+                       return true;
+               }
        }
 
        return false;
index c12f0b9acafd423b4e51c567e1773b4d7b4b010e..04b093d6ef10febd800ca479408f463c140d0ddb 100644 (file)
@@ -128,11 +128,22 @@ String Service::StateTypeToString(StateType type)
 
 bool Service::ResolveMacro(const String& macro, const CheckResult::Ptr& cr, String *result) const
 {
+       String key;
+       Dictionary::Ptr vars;
+
        /* require prefix for object macros */
        if (macro.SubStr(0, 8) == "service.") {
-               String key = macro.SubStr(8);
+               key = macro.SubStr(8);
+
+               if (key.SubStr(0, 5) == "vars.") {
+                       vars = GetVars();
+                       String vars_key = key.SubStr(5);
 
-               if (key == "description") {
+                       if (vars && vars->Contains(vars_key)) {
+                               *result = vars->Get(vars_key);
+                               return true;
+                       }
+               } else if (key == "description") {
                        *result = GetShortName();
                        return true;
                } else if (key == "displayname") {
@@ -199,13 +210,13 @@ bool Service::ResolveMacro(const String& macro, const CheckResult::Ptr& cr, Stri
                                return true;
                        }
                }
-       }
-
-       Dictionary::Ptr vars = GetVars();
+       } else {
+               vars = GetVars();
 
-       if (vars && vars->Contains(macro)) {
-               *result = vars->Get(macro);
-               return true;
+               if (vars && vars->Contains(macro)) {
+                       *result = vars->Get(macro);
+                       return true;
+               }
        }
 
        return false;
index 1feb9f8c76ac85849ffc63e4972a5f3ca4a7350f..4568ce84fa1e67e675c41cae9447f093e8277037 100644 (file)
@@ -68,24 +68,35 @@ TimePeriod::Ptr User::GetNotificationPeriod(void) const
 
 bool User::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *result) const
 {
+       String key;
+       Dictionary::Ptr vars;
+
        /* require prefix for object macros */
        if (macro.SubStr(0, 5) == "user.") {
-               String key = macro.SubStr(5);
+               key = macro.SubStr(5);
+
+               if (key.SubStr(0, 5) == "vars.") {
+                       vars = GetVars();
+                       String vars_key = key.SubStr(5);
 
-               if (key == "name") {
+                       if (vars && vars->Contains(vars_key)) {
+                               *result = vars->Get(vars_key);
+                               return true;
+                       }
+               } else if (key == "name") {
                        *result = GetName();
                        return true;
                } else if (key == "displayname") {
                        *result = GetDisplayName();
                        return true;
                }
-       }
+       } else {
+               vars = GetVars();
 
-       Dictionary::Ptr vars = GetVars();
-
-       if (vars && vars->Contains(macro)) {
-               *result = vars->Get(macro);
-               return true;
+               if (vars && vars->Contains(macro)) {
+                       *result = vars->Get(macro);
+                       return true;
+               }
        }
 
        return false;