summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-11-22 16:49:12 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-11-29 16:11:31 +0000
commit6e30db8033160fedbf864db08e98fd18b92a0d08 (patch)
tree56736d74a18bee142062611860b1d13a1e57ee4a
parent5ceb033caf279016876643315a66ab2aad3095d1 (diff)
downloadmorph-6e30db8033160fedbf864db08e98fd18b92a0d08.tar.gz
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.
-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(
{