summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--morphlib/morphloader.py22
-rw-r--r--morphlib/morphloader_tests.py35
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(
{