From 6e30db8033160fedbf864db08e98fd18b92a0d08 Mon Sep 17 00:00:00 2001 From: Richard Maw Date: Fri, 22 Nov 2013 16:49:12 +0000 Subject: morphloader: Set default values for cluster morphs This was omittted from the MorphologyLoader due to cluster morphologies being added at about the same time. This bug escaped detection since the MorphologyLoader was not required to deploy. It soon will be. --- morphlib/morphloader.py | 22 +++++++++++++++++++--- morphlib/morphloader_tests.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py index 769d8c8e..9ac248da 100644 --- a/morphlib/morphloader.py +++ b/morphlib/morphloader.py @@ -352,7 +352,9 @@ class MorphologyLoader(object): if key not in morphology: morphology[key] = defaults[key] - if kind == 'system': + if kind == 'cluster': + self._set_cluster_defaults(morphology) + elif kind == 'system': self._set_system_defaults(morphology) elif kind == 'stratum': self._set_stratum_defaults(morphology) @@ -372,8 +374,22 @@ class MorphologyLoader(object): if key in morphology and morphology[key] == defaults[key]: del morphology[key] - if kind == 'stratum': - self._unset_stratum_defaults(morphology) + if kind in ('stratum', 'cluster'): + getattr(self, '_unset_%s_defaults' % kind)(morphology) + + def _set_cluster_defaults(self, morph): + for system in morph.get('systems', []): + if 'deploy-defaults' not in system: + system['deploy-defaults'] = {} + if 'deploy' not in system: + system['deploy'] = {} + + def _unset_cluster_defaults(self, morph): + for system in morph.get('systems', []): + if 'deploy-defaults' in system and system['deploy-defaults'] == {}: + del system['deploy-defaults'] + if 'deploy' in system and system['deploy'] == {}: + del system['deploy'] def _set_system_defaults(self, morph): pass diff --git a/morphlib/morphloader_tests.py b/morphlib/morphloader_tests.py index 2711db20..b6ebff6a 100644 --- a/morphlib/morphloader_tests.py +++ b/morphlib/morphloader_tests.py @@ -497,6 +497,41 @@ name: foo 'arch': 'x86_64', }) + def test_sets_defaults_for_cluster(self): + m = morphlib.morph3.Morphology( + name='foo', + kind='cluster', + systems=[ + {'morph': 'foo'}, + {'morph': 'bar'}]) + self.loader.set_defaults(m) + self.loader.validate(m) + self.assertEqual(m['systems'], + [{'morph': 'foo', + 'deploy-defaults': {}, + 'deploy': {}}, + {'morph': 'bar', + 'deploy-defaults': {}, + 'deploy': {}}]) + + def test_unsets_defaults_for_cluster(self): + m = morphlib.morph3.Morphology( + name='foo', + kind='cluster', + description='', + systems=[ + {'morph': 'foo', + 'deploy-defaults': {}, + 'deploy': {}}, + {'morph': 'bar', + 'deploy-defaults': {}, + 'deploy': {}}]) + self.loader.unset_defaults(m) + self.assertNotIn('description', m) + self.assertEqual(m['systems'], + [{'morph': 'foo'}, + {'morph': 'bar'}]) + def test_sets_stratum_chunks_repo_and_morph_from_name(self): m = morphlib.morph3.Morphology( { -- cgit v1.2.1