Merge "Add nova profile support for vm migrate operation"

This commit is contained in:
Zuul 2018-06-05 17:04:52 +00:00 committed by Gerrit Code Review
commit 184434f5e6
4 changed files with 55 additions and 2 deletions

View File

@ -139,6 +139,10 @@ class NovaClient(base.DriverBase):
def server_unrescue(self, server):
return self.conn.compute.unrescue_server(server)
@sdk.translate_exception
def server_migrate(self, server):
return self.conn.compute.migrate_server(server)
@sdk.translate_exception
def server_evacuate(self, server, host=None, admin_pass=None, force=None):
return self.conn.compute.evacuate_server(

View File

@ -241,11 +241,11 @@ class ServerProfile(base.Profile):
OP_NAMES = (
OP_REBOOT, OP_REBUILD, OP_CHANGE_PASSWORD, OP_PAUSE, OP_UNPAUSE,
OP_SUSPEND, OP_RESUME, OP_LOCK, OP_UNLOCK, OP_START, OP_STOP,
OP_RESCUE, OP_UNRESCUE, OP_EVACUATE,
OP_RESCUE, OP_UNRESCUE, OP_EVACUATE, OP_MIGRATE,
) = (
'reboot', 'rebuild', 'change_password', 'pause', 'unpause',
'suspend', 'resume', 'lock', 'unlock', 'start', 'stop',
'rescue', 'unrescue', 'evacuate',
'rescue', 'unrescue', 'evacuate', 'migrate',
)
REBOOT_TYPE = 'type'
@ -1694,3 +1694,8 @@ class ServerProfile(base.Profile):
"""Handler for the unrescue operation."""
return self._handle_generic_op(obj, 'server_unrescue',
'unrescue', consts.VS_ACTIVE)
def handle_migrate(self, obj):
"""Handler for the migrate operation."""
return self._handle_generic_op(obj, 'server_migrate',
'migrate', consts.VS_ACTIVE)

View File

@ -287,6 +287,16 @@ class TestNovaV2(base.SenlinTestCase):
self.assertEqual(target.return_value, res)
target.assert_called_once_with(server)
def test_server_migrate(self):
d = nova_v2.NovaClient(self.conn_params)
server = mock.Mock()
target = d.conn.compute.migrate_server
res = d.server_migrate(server)
self.assertEqual(target.return_value, res)
target.assert_called_once_with(server)
def test_server_evacuate(self):
d = nova_v2.NovaClient(self.conn_params)
server = mock.Mock()

View File

@ -1957,3 +1957,37 @@ class TestNovaServerBasic(base.SenlinTestCase):
"timeout.", six.text_type(ex))
cc.server_unrescue.assert_called_once_with('FAKE_ID')
cc.wait_for_server.assert_called_once_with('FAKE_ID', 'ACTIVE')
def test_handle_migrate(self):
obj = mock.Mock(physical_id='FAKE_ID')
profile = server.ServerProfile('t', self.spec)
profile._computeclient = mock.Mock()
# do it
res = profile.handle_migrate(obj)
self.assertTrue(res)
def test_handle_migrate_no_physical_id(self):
obj = mock.Mock(physical_id=None)
profile = server.ServerProfile('t', self.spec)
# do it
res = profile.handle_migrate(obj)
self.assertFalse(res)
def test_handle_migrate_failed_waiting(self):
profile = server.ServerProfile('t', self.spec)
cc = mock.Mock()
ex = exc.InternalError(code=500, message='timeout')
cc.wait_for_server.side_effect = ex
profile._computeclient = cc
node_obj = mock.Mock(physical_id='FAKE_ID')
ex = self.assertRaises(exc.EResourceOperation,
profile.handle_migrate,
node_obj)
self.assertEqual("Failed in migrate server 'FAKE_ID': "
"timeout.", six.text_type(ex))
cc.server_migrate.assert_called_once_with('FAKE_ID')
cc.wait_for_server.assert_called_once_with('FAKE_ID', 'ACTIVE')