Support for abort an ongoing live migration
In Nova API microversion 2.24 there is a new operation which allows to abort a running live migration. This change is to enable this feature at the client side implementing a new method to call the new nova API: nova live-migration-abort <server_id> <migration_id> Implements blueprint: abort-live-migration Depends-On: I1ff861e54997a069894b542bd764ac3ef1b3dbb2 Change-Id: Ic2ead126e0cf48aa54a083e97cb9d1303a5a9bbd
This commit is contained in:
parent
e0c7d2c673
commit
77e50cc91b
@ -25,4 +25,4 @@ API_MIN_VERSION = api_versions.APIVersion("2.1")
|
|||||||
# when client supported the max version, and bumped sequentially, otherwise
|
# when client supported the max version, and bumped sequentially, otherwise
|
||||||
# the client may break due to server side new version may include some
|
# the client may break due to server side new version may include some
|
||||||
# backward incompatible change.
|
# backward incompatible change.
|
||||||
API_MAX_VERSION = api_versions.APIVersion("2.23")
|
API_MAX_VERSION = api_versions.APIVersion("2.24")
|
||||||
|
@ -76,3 +76,7 @@ class Fixture(base.Fixture):
|
|||||||
status_code=200,
|
status_code=200,
|
||||||
json=get_migration,
|
json=get_migration,
|
||||||
headers=self.json_headers)
|
headers=self.json_headers)
|
||||||
|
url = self.url('1234', 'migrations', '1')
|
||||||
|
self.requests.register_uri('DELETE', url,
|
||||||
|
status_code=202,
|
||||||
|
headers=self.json_headers)
|
||||||
|
@ -2495,6 +2495,9 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||||||
}]}
|
}]}
|
||||||
return (200, FAKE_RESPONSE_HEADERS, migrations)
|
return (200, FAKE_RESPONSE_HEADERS, migrations)
|
||||||
|
|
||||||
|
def delete_servers_1234_migrations_1(self):
|
||||||
|
return (202, {}, None)
|
||||||
|
|
||||||
|
|
||||||
class FakeSessionClient(fakes.FakeClient, client.Client):
|
class FakeSessionClient(fakes.FakeClient, client.Client):
|
||||||
|
|
||||||
|
@ -80,3 +80,13 @@ class ServerMigrationsTestV223(ServerMigrationsTest):
|
|||||||
self.assert_request_id(migration, fakes.FAKE_REQUEST_ID_LIST)
|
self.assert_request_id(migration, fakes.FAKE_REQUEST_ID_LIST)
|
||||||
|
|
||||||
self.assert_called('GET', '/servers/1234/migrations/1')
|
self.assert_called('GET', '/servers/1234/migrations/1')
|
||||||
|
|
||||||
|
|
||||||
|
class ServerMigrationsTestV224(ServerMigrationsTest):
|
||||||
|
def setUp(self):
|
||||||
|
super(ServerMigrationsTestV224, self).setUp()
|
||||||
|
self.cs.api_version = api_versions.APIVersion("2.24")
|
||||||
|
|
||||||
|
def test_live_migration_abort(self):
|
||||||
|
self.cs.server_migrations.live_migration_abort(1234, 1)
|
||||||
|
self.assert_called('DELETE', '/servers/1234/migrations/1')
|
||||||
|
@ -1697,6 +1697,11 @@ class ShellTest(utils.TestCase):
|
|||||||
api_version='2.23')
|
api_version='2.23')
|
||||||
self.assert_called('GET', '/servers/1234/migrations/1')
|
self.assert_called('GET', '/servers/1234/migrations/1')
|
||||||
|
|
||||||
|
def test_live_migration_abort(self):
|
||||||
|
self.run_command('live-migration-abort sample-server 1',
|
||||||
|
api_version='2.24')
|
||||||
|
self.assert_called('DELETE', '/servers/1234/migrations/1')
|
||||||
|
|
||||||
def test_host_evacuate_live_with_no_target_host(self):
|
def test_host_evacuate_live_with_no_target_host(self):
|
||||||
self.run_command('host-evacuate-live hyper')
|
self.run_command('host-evacuate-live hyper')
|
||||||
self.assert_called('GET', '/os-hypervisors/hyper/servers', pos=0)
|
self.assert_called('GET', '/os-hypervisors/hyper/servers', pos=0)
|
||||||
|
@ -64,4 +64,17 @@ class ServerMigrationsManager(base.ManagerWithFind):
|
|||||||
:returns: An instance of novaclient.base.ListWithMeta
|
:returns: An instance of novaclient.base.ListWithMeta
|
||||||
"""
|
"""
|
||||||
return self._list(
|
return self._list(
|
||||||
'/servers/%s/migrations' % base.getid(server), "migrations")
|
'/servers/%s/migrations' % (base.getid(server)), "migrations")
|
||||||
|
|
||||||
|
@api_versions.wraps("2.24")
|
||||||
|
def live_migration_abort(self, server, migration):
|
||||||
|
"""
|
||||||
|
Cancel an ongoing live migration
|
||||||
|
|
||||||
|
:param server: The :class:`Server` (or its ID)
|
||||||
|
:param migration: Migration id that will be cancelled
|
||||||
|
:returns: An instance of novaclient.base.TupleWithMeta
|
||||||
|
"""
|
||||||
|
return self._delete(
|
||||||
|
'/servers/%s/migrations/%s' % (base.getid(server),
|
||||||
|
base.getid(migration)))
|
||||||
|
@ -3883,6 +3883,15 @@ def do_server_migration_show(cs, args):
|
|||||||
utils.print_dict(migration._info)
|
utils.print_dict(migration._info)
|
||||||
|
|
||||||
|
|
||||||
|
@api_versions.wraps("2.24")
|
||||||
|
@cliutils.arg('server', metavar='<server>', help=_('Name or ID of server.'))
|
||||||
|
@cliutils.arg('migration', metavar='<migration>', help=_('ID of migration.'))
|
||||||
|
def do_live_migration_abort(cs, args):
|
||||||
|
"""Abort an on-going live migration."""
|
||||||
|
server = _find_server(cs, args.server)
|
||||||
|
cs.server_migrations.live_migration_abort(server, args.migration)
|
||||||
|
|
||||||
|
|
||||||
@cliutils.arg(
|
@cliutils.arg(
|
||||||
'--all-tenants',
|
'--all-tenants',
|
||||||
action='store_const',
|
action='store_const',
|
||||||
|
Loading…
Reference in New Issue
Block a user