Fix server get_details when server is not found
When a nova server is not found (e.g. deleted), the get_details() function should return some useful information instead of just throwing an exception. It would be difficult for users to figure out what happened. Change-Id: I960edf4cf292ad3a640046dc4afafa2aa7915116 Closes-Bug: #1526177
This commit is contained in:
parent
f0df889c8b
commit
3761205177
|
@ -535,7 +535,16 @@ class ServerProfile(base.Profile):
|
|||
if obj.physical_id is None or obj.physical_id == '':
|
||||
return {}
|
||||
|
||||
server = self.nova(obj).server_get(obj.physical_id)
|
||||
try:
|
||||
server = self.nova(obj).server_get(obj.physical_id)
|
||||
except exception.InternalError as ex:
|
||||
return {
|
||||
'Error': {
|
||||
'code': ex.code,
|
||||
'message': six.text_type(ex)
|
||||
}
|
||||
}
|
||||
|
||||
if server is None:
|
||||
return {}
|
||||
server_data = server.to_dict()
|
||||
|
|
|
@ -970,14 +970,22 @@ class TestNovaServerProfile(base.SenlinTestCase):
|
|||
def test_do_get_details_server_not_found(self):
|
||||
# Test path for server not created
|
||||
nc = mock.Mock()
|
||||
nc.server_get.return_value = None
|
||||
err = exception.InternalError(code=404,
|
||||
message='No Server found for ID')
|
||||
nc.server_get.side_effect = err
|
||||
profile = server.ServerProfile('t', self.spec)
|
||||
profile._novaclient = nc
|
||||
obj = mock.Mock()
|
||||
obj.physical_id = 'FAKE_ID'
|
||||
|
||||
res = profile.do_get_details(obj)
|
||||
self.assertEqual({}, res)
|
||||
expected = {
|
||||
'Error': {
|
||||
'message': 'No Server found for ID',
|
||||
'code': 404
|
||||
}
|
||||
}
|
||||
self.assertEqual(expected, res)
|
||||
nc.server_get.assert_called_once_with('FAKE_ID')
|
||||
|
||||
def test_do_join_successful(self):
|
||||
|
|
Loading…
Reference in New Issue