From 0c83e7b4485e11a11f6b552048f4f28704fc07f5 Mon Sep 17 00:00:00 2001 From: "OTSUKA, Yuanying" Date: Fri, 24 Jul 2015 14:10:31 +0900 Subject: [PATCH] Add context to TemplateDefinition.extract_definition Sometimes template needs some parameters from context not only baymodel and bay. For example, heat-kubernetes template needs such parameters to build a secure cluster. This adds context to TemplateDefinition.extract_definition method. Change-Id: Ia291bf9b2f2a40bcd918e14aebf0348f4706e46a Partially-Implements: bp secure-kubernetes --- magnum/conductor/handlers/bay_conductor.py | 2 +- magnum/conductor/template_definition.py | 23 +++++++++++-------- .../conductor/test_template_definition.py | 7 +++--- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/magnum/conductor/handlers/bay_conductor.py b/magnum/conductor/handlers/bay_conductor.py index 291a593796..e6e5b53a61 100644 --- a/magnum/conductor/handlers/bay_conductor.py +++ b/magnum/conductor/handlers/bay_conductor.py @@ -62,7 +62,7 @@ def _extract_template_definition(context, bay, scale_manager=None): cluster_coe = baymodel.coe definition = TDef.get_template_definition('vm', cluster_distro, cluster_coe) - return definition.extract_definition(baymodel, bay, + return definition.extract_definition(context, baymodel, bay, scale_manager=scale_manager) diff --git a/magnum/conductor/template_definition.py b/magnum/conductor/template_definition.py index 0267eea457..f00a73f278 100644 --- a/magnum/conductor/template_definition.py +++ b/magnum/conductor/template_definition.py @@ -276,9 +276,10 @@ class TemplateDefinition(object): return None - def get_params(self, baymodel, bay, **kwargs): + def get_params(self, context, baymodel, bay, **kwargs): """Pulls template parameters from Baymodel and Bay. + :param context: Context to pull template parameters from :param baymodel: Baymodel to pull template parameters from :param bay: Bay to pull template parameters from :param extra_params: Any extra params to provide to the template @@ -303,8 +304,9 @@ class TemplateDefinition(object): def template_path(self): pass - def extract_definition(self, baymodel, bay, **kwargs): - return self.template_path, self.get_params(baymodel, bay, **kwargs) + def extract_definition(self, context, baymodel, bay, **kwargs): + return self.template_path, self.get_params(context, baymodel, bay, + **kwargs) class BaseTemplateDefinition(TemplateDefinition): @@ -358,7 +360,7 @@ class AtomicK8sTemplateDefinition(BaseTemplateDefinition): self.add_output('kube_minions_external', bay_attr='node_addresses') - def get_params(self, baymodel, bay, **kwargs): + def get_params(self, context, baymodel, bay, **kwargs): extra_params = kwargs.pop('extra_params', {}) scale_mgr = kwargs.pop('scale_manager', None) if scale_mgr: @@ -367,7 +369,8 @@ class AtomicK8sTemplateDefinition(BaseTemplateDefinition): scale_mgr.get_removal_nodes(hosts)) return super(AtomicK8sTemplateDefinition, - self).get_params(baymodel, bay, extra_params=extra_params, + self).get_params(context, baymodel, bay, + extra_params=extra_params, **kwargs) @property @@ -395,12 +398,13 @@ class CoreOSK8sTemplateDefinition(AtomicK8sTemplateDefinition): token = uuid.uuid4().hex return token - def get_params(self, baymodel, bay, **kwargs): + def get_params(self, context, baymodel, bay, **kwargs): extra_params = kwargs.pop('extra_params', {}) extra_params['token'] = self.get_token() return super(CoreOSK8sTemplateDefinition, - self).get_params(baymodel, bay, extra_params=extra_params, + self).get_params(context, baymodel, bay, + extra_params=extra_params, **kwargs) @property @@ -451,12 +455,13 @@ class AtomicSwarmTemplateDefinition(BaseTemplateDefinition): return discovery_url - def get_params(self, baymodel, bay, **kwargs): + def get_params(self, context, baymodel, bay, **kwargs): extra_params = kwargs.pop('extra_params', {}) extra_params['discovery_url'] = self.get_discovery_url(bay) return super(AtomicSwarmTemplateDefinition, - self).get_params(baymodel, bay, extra_params=extra_params, + self).get_params(context, baymodel, bay, + extra_params=extra_params, **kwargs) @property diff --git a/magnum/tests/unit/conductor/test_template_definition.py b/magnum/tests/unit/conductor/test_template_definition.py index f5c1597fc8..07746bc71d 100644 --- a/magnum/tests/unit/conductor/test_template_definition.py +++ b/magnum/tests/unit/conductor/test_template_definition.py @@ -112,6 +112,7 @@ class TemplateDefinitionTestCase(base.TestCase): @mock.patch('magnum.conductor.template_definition.TemplateDefinition' '.get_output') def test_k8s_get_params(self, mock_get_output, mock_get_params): + mock_context = mock.MagicMock() mock_baymodel = mock.MagicMock() mock_bay = mock.MagicMock() mock_scale_manager = mock.MagicMock() @@ -120,13 +121,13 @@ class TemplateDefinitionTestCase(base.TestCase): mock_scale_manager.get_removal_nodes.return_value = removal_nodes k8s_def = tdef.AtomicK8sTemplateDefinition() - k8s_def.get_params(mock_baymodel, mock_bay, + k8s_def.get_params(mock_context, mock_baymodel, mock_bay, scale_manager=mock_scale_manager) expected_kwargs = {'extra_params': { 'minions_to_remove': removal_nodes}} - mock_get_params.assert_called_once_with(mock_baymodel, mock_bay, - **expected_kwargs) + mock_get_params.assert_called_once_with(mock_context, mock_baymodel, + mock_bay, **expected_kwargs) @mock.patch('requests.post') def test_swarm_discovery_url_public_token(self, mock_post):