From 6d0b41177b3140c9234adb75524120029b32ab38 Mon Sep 17 00:00:00 2001 From: Ratnadeep Debnath Date: Thu, 31 Dec 2015 17:00:53 +0530 Subject: [PATCH] Fix namespace conflicts in answers.conf. Fixes #478 --- atomicapp/nulecule/base.py | 10 ++++++++-- atomicapp/nulecule/lib.py | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/atomicapp/nulecule/base.py b/atomicapp/nulecule/base.py index b60647ba..caef15fa 100644 --- a/atomicapp/nulecule/base.py +++ b/atomicapp/nulecule/base.py @@ -199,8 +199,8 @@ def load_components(self, nodeps=False, dryrun=False): node_name = node[NAME_KEY] source = Utils.getSourceImage(node) component = NuleculeComponent( - node_name, self.basepath, source, - node.get(PARAMS_KEY), node.get(ARTIFACTS_KEY)) + self._get_component_namespace(node_name), self.basepath, + source, node.get(PARAMS_KEY), node.get(ARTIFACTS_KEY)) component.load(nodeps, dryrun) components.append(component) self.components = components @@ -222,6 +222,12 @@ def render(self, provider_key=None, dryrun=False): for component in self.components: component.render(provider_key=provider_key, dryrun=dryrun) + def _get_component_namespace(self, component_name): + current_namespace = '' if self.namespace == GLOBAL_CONF else self.namespace + return ( + '%s:%s' % (current_namespace, component_name) + if current_namespace else component_name) + class NuleculeComponent(NuleculeBase): """ diff --git a/atomicapp/nulecule/lib.py b/atomicapp/nulecule/lib.py index 141a12d2..b4ef565e 100644 --- a/atomicapp/nulecule/lib.py +++ b/atomicapp/nulecule/lib.py @@ -39,8 +39,10 @@ def load_config(self, config, ask=False, skip_asking=False): Returns: None """ + parent_namespace = self._get_parent_namespace() for param in self.params: value = config.get(self.namespace, {}).get(param[NAME_KEY]) or \ + config.get(parent_namespace, {}).get(param[NAME_KEY]) or \ config.get(GLOBAL_CONF, {}).get(param[NAME_KEY]) if value is None and (ask or ( not skip_asking and param.get(DEFAULTNAME_KEY) is None)): @@ -109,3 +111,7 @@ def install(self): def uninstall(self): raise NotImplementedError + + def _get_parent_namespace(self): + tokens = self.namespace.split(':') + return ':'.join(tokens[:-1]) if len(tokens) > 1 else GLOBAL_CONF