summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander.sulfrian@fu-berlin.de>2016-07-12 00:51:18 +0200
committerAlexander Sulfrian <alexander.sulfrian@fu-berlin.de>2017-03-21 17:26:08 +0100
commit99f1110d43e00654eb06c35495871da253c21e5b (patch)
tree065e830378bcfd8df5de5a470823613688ac30cc
parent9af8a7ea4b1de56ac6b8800277518e9159fb7dca (diff)
downloadbcfg2-99f1110d43e00654eb06c35495871da253c21e5b.tar.gz
bcfg2-99f1110d43e00654eb06c35495871da253c21e5b.tar.bz2
bcfg2-99f1110d43e00654eb06c35495871da253c21e5b.zip
Server/Plugins/Ldap: Use CallableDict
With the CallableDict the LdapQueries will only be executed, if the values are used.
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Ldap.py42
1 files changed, 28 insertions, 14 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Ldap.py b/src/lib/Bcfg2/Server/Plugins/Ldap.py
index 757150300..81077508c 100644
--- a/src/lib/Bcfg2/Server/Plugins/Ldap.py
+++ b/src/lib/Bcfg2/Server/Plugins/Ldap.py
@@ -5,6 +5,8 @@ import os
import sys
import time
import traceback
+from functools import partial
+
import Bcfg2.Options
import Bcfg2.Server.Plugin
from Bcfg2.Logger import Debuggable
@@ -84,20 +86,10 @@ class Ldap(Bcfg2.Server.Plugin.Plugin,
self.config = ConfigFile(os.path.join(self.data, 'config.py'))
- def get_additional_data(self, metadata):
- query = None
+ def _execute_query(self, query, metadata):
try:
- data = {}
- self.debug_log("Found queries %s" % self.config.queries)
- for query_class in self.config.queries:
- query = query_class()
- if query.is_applicable(metadata):
- self.debug_log("Processing query '%s'" % query.name)
- data[query.name] = query.get_result(metadata)
- else:
- self.debug_log("query '%s' not applicable to host '%s'" %
- (query.name, metadata.hostname))
- return data
+ self.debug_log("Processing query '%s'" % query.name)
+ return query.get_result(metadata)
except: # pylint: disable=W0702
if hasattr(query, "name"):
self.logger.error(
@@ -106,7 +98,29 @@ class Ldap(Bcfg2.Server.Plugin.Plugin,
query.name)
for line in traceback.format_exc().split('\n'):
self.logger.error(line)
- return {}
+ return None
+
+ def get_additional_data(self, metadata):
+ data = {}
+ self.debug_log("Found queries %s" % self.config.queries)
+ for query_class in self.config.queries:
+ try:
+ query = query_class()
+ if query.is_applicable(metadata):
+ self.debug_log("Processing query '%s'" % query.name)
+ data[query.name] = partial(
+ self._execute_query, query, metadata)
+ else:
+ self.debug_log("query '%s' not applicable to host '%s'" %
+ (query.name, metadata.hostname))
+ except:
+ self.logger.error(
+ "Exception during preparation of query named '%s'. "
+ "Query will be ignored." % query_class.__name__)
+ for line in traceback.format_exc().split('\n'):
+ self.logger.error(line)
+
+ return Bcfg2.Server.Plugin.CallableDict(**data)
def start_client_run(self, metadata):
if self.core.metadata_cache_mode == 'aggressive':