Merge "Clean up instance defaults setting" into stable/train

This commit is contained in:
Zuul 2020-01-09 22:35:34 +00:00 committed by Gerrit Code Review
commit f49538ffae
2 changed files with 38 additions and 10 deletions

View File

@ -363,10 +363,12 @@ class ExpandRolesAction(base.TripleOAction):
def run(self, context):
for role in self.roles:
role.setdefault('defaults', {})
role['defaults'].setdefault(
'image', {'href': self.default_image})
for inst in role.get('instances', []):
# Set the default image so that the
# source validation can succeed.
inst.setdefault('image', {'href': self.default_image})
for k, v in role['defaults'].items():
inst.setdefault(k, v)
# Set the default hostname now for duplicate hostname
# detection during validation
@ -401,12 +403,7 @@ class ExpandRolesAction(base.TripleOAction):
role_instances = []
for instance in role.get('instances', []):
inst = {}
inst.update(role.get('defaults', {}))
inst.update(instance)
inst.setdefault('image', {'image': self.default_image})
if 'name' in inst and 'hostname' not in inst:
inst['hostname'] = inst['name']
# create a hostname map entry now if the specified hostname
# is a valid generated name
@ -420,8 +417,7 @@ class ExpandRolesAction(base.TripleOAction):
while len([i for i in role_instances
if i.get('provisioned', True)]) < count:
inst = {}
inst.update(role.get('defaults', {}))
inst.setdefault('image', {'href': self.default_image})
inst.update(role['defaults'])
role_instances.append(inst)
# NOTE(dtantsur): our hostname format may differ from THT defaults,

View File

@ -677,6 +677,38 @@ class TestExpandRoles(base.TestCase):
},
result['environment']['parameter_defaults'])
def test_image_in_defaults(self):
roles = [{
'name': 'Controller',
'defaults': {
'image': {
'href': 'file:///tmp/foo.qcow2',
'checksum': '12345678'
}
},
'count': 3,
'instances': [{
'hostname': 'overcloud-controller-0',
'image': {'href': 'overcloud-full'}
}, {
'hostname': 'overcloud-controller-1',
}]
}]
action = baremetal_deploy.ExpandRolesAction(roles)
result = action.run(mock.Mock())
self.assertEqual(
[
{'hostname': 'overcloud-controller-0',
'image': {'href': 'overcloud-full'}},
{'hostname': 'overcloud-controller-1',
'image': {'href': 'file:///tmp/foo.qcow2',
'checksum': '12345678'}},
{'hostname': 'overcloud-controller-2',
'image': {'href': 'file:///tmp/foo.qcow2',
'checksum': '12345678'}},
],
result['instances'])
def test_with_parameters(self):
roles = [{
'name': 'Compute',