]> granicus.if.org Git - icinga2/commitdiff
Only sync objects actually belonging to a cluster zone
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 18 Sep 2015 10:49:38 +0000 (12:49 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Fri, 18 Sep 2015 10:49:38 +0000 (12:49 +0200)
refs #9927
refs #9100

lib/remote/apilistener-configsync.cpp

index d3844468463b15af17e44235f0aa666f6ab6427b..d15fbfcdceb29f25d7aa783021fead2fe0235cf4 100644 (file)
@@ -248,6 +248,10 @@ void ApiListener::UpdateConfigObject(const ConfigObject::Ptr& object, const Mess
        if (object->GetPackage() != "_api")
                return;
 
+       /* don't sync objects without a zone attribute */
+       if (object->GetZoneName().IsEmpty())
+               return;
+
        Dictionary::Ptr message = new Dictionary();
        message->Set("jsonrpc", "2.0");
        message->Set("method", "config::UpdateObject");
@@ -303,6 +307,10 @@ void ApiListener::DeleteConfigObject(const ConfigObject::Ptr& object, const Mess
        if (object->GetPackage() != "_api")
                return;
 
+       /* don't sync objects without a zone attribute */
+       if (object->GetZoneName().IsEmpty())
+               return;
+
        Dictionary::Ptr message = new Dictionary();
        message->Set("jsonrpc", "2.0");
        message->Set("method", "config::DeleteObject");
@@ -346,17 +354,12 @@ void ApiListener::SendRuntimeConfigObjects(const JsonRpcConnection::Ptr& aclient
 
                        String objZone = object->GetZoneName();
 
-                       /* only sync objects in the same zone if no zone attribute was set */
-                       if (objZone.IsEmpty() && azone != lzone) {
-                               Log(LogDebug, "ApiListener")
-                                   << "Skipping sync: No object zone specified and client zone '"
-                                   << azone->GetName() << "' does not match local zone '"
-                                   << lzone->GetName() << "'.";
+                       /* don't sync objects without a zone attribute */
+                       if (objZone.IsEmpty())
                                continue;
-                       }
 
                        /* don't sync objects for non-matching parent-child zones */
-                       if (!objZone.IsEmpty() && !azone->IsChildOf(lzone)) {
+                       if (!azone->IsChildOf(lzone) && azone != lzone) {
                                Log(LogDebug, "ApiListener")
                                    << "Skipping sync: object zone '" << objZone
                                    << "' defined but client zone '"  << azone->GetName()