Fix do_recover problem when operation is None

This patch fixes do_recover problem when operation is None.

Change-Id: Ia19d96a1ee55303ec0be7533a4e2c1558067c155
Closes-Bug: #1666245
This commit is contained in:
jonnary 2017-02-22 17:56:25 +08:00
parent 50b0592c5e
commit 05eb8daaff
2 changed files with 25 additions and 8 deletions

View File

@ -1095,15 +1095,17 @@ class ServerProfile(base.Profile):
if operation and not isinstance(operation, six.string_types):
operation = operation[0]
op_name = operation['name']
if op_name.upper() != consts.RECOVER_RECREATE:
op_params = operation.get('params', {})
if op_name.lower() not in self.OP_NAMES:
LOG.error(_LE("The operation '%s' is not supported"), op_name)
return False
if operation is not None and 'name' in operation:
op_name = operation['name']
if op_name.upper() != consts.RECOVER_RECREATE:
op_params = operation.get('params', {})
if op_name.lower() not in self.OP_NAMES:
LOG.error(_LE("The operation '%s' is not supported"),
op_name)
return False
method = getattr(self, "handle_" + op_name.lower())
return method(obj, **op_params)
method = getattr(self, "handle_" + op_name.lower())
return method(obj, **op_params)
return super(ServerProfile, self).do_recover(obj, **options)

View File

@ -933,6 +933,21 @@ class TestNovaServerBasic(base.SenlinTestCase):
cc.server_get.assert_called_with('FAKE_ID')
self.assertTrue(res)
@mock.patch.object(server.ServerProfile, 'do_delete')
@mock.patch.object(server.ServerProfile, 'do_create')
def test_do_recover_operation_is_none(self, mock_create, mock_delete):
profile = server.ServerProfile('t', self.spec)
node_obj = mock.Mock(physical_id='FAKE_ID')
mock_delete.return_value = None
mock_create.return_value = True
res = profile.do_recover(node_obj, operation=None)
self.assertTrue(res)
mock_delete.assert_called_once_with(node_obj, force=False)
mock_create.assert_called_once_with(node_obj)
@mock.patch.object(server.ServerProfile, 'handle_rebuild')
def test_do_recover_rebuild(self, mock_rebuild):
profile = server.ServerProfile('t', self.spec)