Restore "Add new scenario test cases for live migration""
This reverts commit a655a71c7d
.
Change-Id: Iac2ee8b42366ba9ff67107c9e5c3b7ab2c86f6e9
This commit is contained in:
parent
d2bbd9395c
commit
3b6283d233
|
@ -41,6 +41,7 @@ WaitForServerStatusTimeout = _client.WaitForServerStatusTimeout
|
||||||
shutoff_server = _client.shutoff_server
|
shutoff_server = _client.shutoff_server
|
||||||
activate_server = _client.activate_server
|
activate_server = _client.activate_server
|
||||||
ensure_server_status = _client.ensure_server_status
|
ensure_server_status = _client.ensure_server_status
|
||||||
|
live_migrate_server = _client.live_migrate_server
|
||||||
migrate_server = _client.migrate_server
|
migrate_server = _client.migrate_server
|
||||||
confirm_resize = _client.confirm_resize
|
confirm_resize = _client.confirm_resize
|
||||||
reboot_server = _client.reboot_server
|
reboot_server = _client.reboot_server
|
||||||
|
|
|
@ -150,6 +150,22 @@ def migrate_server(server: typing.Optional[ServerType] = None,
|
||||||
info=params)
|
info=params)
|
||||||
|
|
||||||
|
|
||||||
|
def live_migrate_server(server: typing.Optional[ServerType] = None,
|
||||||
|
server_id: typing.Optional[str] = None,
|
||||||
|
host: typing.Optional[str] = None,
|
||||||
|
block_migration: typing.Union[str, bool] = True,
|
||||||
|
disk_over_commit: bool = False,
|
||||||
|
client: NovaClientType = None,
|
||||||
|
**params):
|
||||||
|
server_id = get_server_id(server=server, server_id=server_id)
|
||||||
|
LOG.debug(f"Start server live migration (server_id='{server_id}', "
|
||||||
|
f"host={host}, block_migration={block_migration}, "
|
||||||
|
f"disk_over_commit={disk_over_commit}, info={params})")
|
||||||
|
return nova_client(client).servers.live_migrate(
|
||||||
|
server=server_id, host=host, block_migration=block_migration,
|
||||||
|
disk_over_commit=disk_over_commit, **params)
|
||||||
|
|
||||||
|
|
||||||
def confirm_resize(server: typing.Optional[ServerType] = None,
|
def confirm_resize(server: typing.Optional[ServerType] = None,
|
||||||
server_id: typing.Optional[str] = None,
|
server_id: typing.Optional[str] = None,
|
||||||
client: NovaClientType = None, **params):
|
client: NovaClientType = None, **params):
|
||||||
|
|
|
@ -77,19 +77,20 @@ class MigrateServerStack(stacks.CirrosServerStackFixture):
|
||||||
class MigrateServerTest(testtools.TestCase):
|
class MigrateServerTest(testtools.TestCase):
|
||||||
|
|
||||||
stack = tobiko.required_setup_fixture(MigrateServerStack)
|
stack = tobiko.required_setup_fixture(MigrateServerStack)
|
||||||
|
peer_stack = tobiko.required_setup_fixture(stacks.CirrosServerStackFixture)
|
||||||
|
|
||||||
def test_migrate_server(self):
|
def test_migrate_server(self, live=False):
|
||||||
"""Tests cold migration actually changes hypervisor
|
"""Tests cold migration actually changes hypervisor
|
||||||
"""
|
"""
|
||||||
server = self.setup_server()
|
server = self.setup_server()
|
||||||
initial_hypervisor = nova.get_server_hypervisor(server)
|
initial_hypervisor = nova.get_server_hypervisor(server)
|
||||||
|
|
||||||
server = self.migrate_server(server)
|
server = self.migrate_server(server, live=live)
|
||||||
|
|
||||||
final_hypervisor = nova.get_server_hypervisor(server)
|
final_hypervisor = nova.get_server_hypervisor(server)
|
||||||
self.assertNotEqual(initial_hypervisor, final_hypervisor)
|
self.assertNotEqual(initial_hypervisor, final_hypervisor)
|
||||||
|
|
||||||
def test_migrate_server_with_host(self):
|
def test_migrate_server_with_host(self, live=False):
|
||||||
"""Tests cold migration actually ends on target hypervisor
|
"""Tests cold migration actually ends on target hypervisor
|
||||||
"""
|
"""
|
||||||
server = self.setup_server()
|
server = self.setup_server()
|
||||||
|
@ -99,21 +100,36 @@ class MigrateServerTest(testtools.TestCase):
|
||||||
target_hypervisor = hypervisor.hypervisor_hostname
|
target_hypervisor = hypervisor.hypervisor_hostname
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
target_hypervisor = None
|
||||||
self.skipTest("Cannot find a valid hypervisor host to migrate "
|
self.skipTest("Cannot find a valid hypervisor host to migrate "
|
||||||
"server to")
|
"server to")
|
||||||
|
|
||||||
server = self.migrate_server(server=server, host=target_hypervisor)
|
server = self.migrate_server(server=server, host=target_hypervisor,
|
||||||
|
live=live)
|
||||||
|
|
||||||
final_hypervisor = nova.get_server_hypervisor(server)
|
final_hypervisor = nova.get_server_hypervisor(server)
|
||||||
self.assertEqual(target_hypervisor, final_hypervisor)
|
self.assertEqual(target_hypervisor, final_hypervisor)
|
||||||
|
|
||||||
|
def test_live_migrate_server(self):
|
||||||
|
self.test_migrate_server(live=True)
|
||||||
|
|
||||||
|
@tobiko.skip("Expected to create problems on compute nodes")
|
||||||
|
def test_live_migrate_server_with_host(self):
|
||||||
|
self.test_migrate_server_with_host(live=True)
|
||||||
|
|
||||||
def setup_server(self):
|
def setup_server(self):
|
||||||
server = self.stack.ensure_server_status('ACTIVE')
|
server = self.stack.ensure_server_status('ACTIVE')
|
||||||
self.assertEqual('ACTIVE', server.status)
|
self.assertEqual('ACTIVE', server.status)
|
||||||
return server
|
return server
|
||||||
|
|
||||||
def migrate_server(self, server, **params):
|
def migrate_server(self, server, live=False, **params):
|
||||||
self.assertEqual('ACTIVE', server.status)
|
self.assertEqual('ACTIVE', server.status)
|
||||||
|
|
||||||
|
if live:
|
||||||
|
nova.live_migrate_server(server, **params)
|
||||||
|
server = nova.wait_for_server_status(
|
||||||
|
server, 'ACTIVE', transient_status=['MIGRATING'])
|
||||||
|
else:
|
||||||
nova.migrate_server(server, **params)
|
nova.migrate_server(server, **params)
|
||||||
|
|
||||||
server = nova.wait_for_server_status(server, 'VERIFY_RESIZE')
|
server = nova.wait_for_server_status(server, 'VERIFY_RESIZE')
|
||||||
|
@ -121,8 +137,13 @@ class MigrateServerTest(testtools.TestCase):
|
||||||
nova.confirm_resize(server)
|
nova.confirm_resize(server)
|
||||||
|
|
||||||
server = nova.wait_for_server_status(
|
server = nova.wait_for_server_status(
|
||||||
server, 'ACTIVE', transient_status={'VERIFY_RESIZE'})
|
server, 'ACTIVE', transient_status=['VERIFY_RESIZE'])
|
||||||
self.assertEqual('ACTIVE', server.status)
|
self.assertEqual('ACTIVE', server.status)
|
||||||
|
|
||||||
ping.ping_until_received(self.stack.ip_address).assert_replied()
|
# wait until all VM fixed IPs are reachable
|
||||||
|
ping.assert_reachable_hosts(self.stack.list_fixed_ips(),
|
||||||
|
timeout=900.,
|
||||||
|
ssh_client=self.peer_stack.ssh_client)
|
||||||
|
# check floating IP is reachable
|
||||||
|
ping.assert_reachable_hosts([self.stack.floating_ip_address])
|
||||||
return server
|
return server
|
||||||
|
|
Loading…
Reference in New Issue