Merge "Make sure we always populate flavor_id" into stable/train

This commit is contained in:
Zuul 2020-03-04 21:47:15 +00:00 committed by Gerrit Code Review
commit c87b5b4916
2 changed files with 60 additions and 1 deletions

View File

@ -1385,7 +1385,7 @@ class ServerProfile(base.Profile):
details = {
'image': image_id,
'attached_volumes': attached_volumes,
'flavor': server_data['flavor']['id'],
'flavor': self._get_flavor_id(obj, server_data),
}
for key in known_keys:
if key in server_data:
@ -1425,6 +1425,20 @@ class ServerProfile(base.Profile):
return dict((k, details[k]) for k in sorted(details))
def _get_flavor_id(self, obj, server):
"""Get flavor id.
:param obj: The node object.
:param dict server: The server object.
:return: The flavor_id for the server.
"""
flavor = server['flavor']
if 'id' in flavor:
return flavor['id']
return self.compute(obj).flavor_find(flavor['original_name'], False).id
def _get_image_id(self, obj, server, op):
"""Get image id.

View File

@ -1228,6 +1228,51 @@ class TestNovaServerBasic(base.SenlinTestCase):
self.assertEqual(expected, res)
cc.server_get.assert_called_once_with('FAKE_ID')
def test_do_get_details_flavor_no_id_key(self):
cc = mock.Mock()
profile = server.ServerProfile('t', self.spec)
profile._computeclient = cc
node_obj = mock.Mock(physical_id='FAKE_ID')
# Test normal path
nova_server = mock.Mock()
nova_server.to_dict.return_value = {
'addresses': {
'private': [{
'version': 4,
'addr': '10.0.0.3',
}]
},
'flavor': {
'original_name': 'FAKE_FLAVOR',
},
'id': 'FAKE_ID',
'image': {},
'attached_volumes': [{
'id': 'FAKE_VOLUME',
}],
'security_groups': [{'name': 'default'}],
}
cc.server_get.return_value = nova_server
cc.flavor_find.return_value = mock.PropertyMock(id='FAKE_FLAVOR_ID')
res = profile.do_get_details(node_obj)
expected = {
'flavor': 'FAKE_FLAVOR_ID',
'id': 'FAKE_ID',
'image': {},
'attached_volumes': ['FAKE_VOLUME'],
'addresses': {
'private': [{
'version': 4,
'addr': '10.0.0.3',
}]
},
'security_groups': 'default',
}
self.assertEqual(expected, res)
cc.server_get.assert_called_once_with('FAKE_ID')
def test_do_get_details_image_no_id_key(self):
cc = mock.Mock()
profile = server.ServerProfile('t', self.spec)