diff options
Diffstat (limited to 'morphlib')
-rw-r--r-- | morphlib/morphloader.py | 22 | ||||
-rw-r--r-- | 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( { |