Skip to content

Commit 08b0e58

Browse files
jaystephenfin
authored andcommitted
Add 'server migration force complete' command
This is equivalent to novaclient's 'live-migration-force-complete' command. Change-Id: Ic4dc639afa16cdf8c5a46774895e850d92985292 Story: 2007513 Task: 39293
1 parent 1c3cf11 commit 08b0e58

4 files changed

Lines changed: 94 additions & 0 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2064,6 +2064,44 @@ def take_action(self, parsed_args):
20642064
server.id, parsed_args.migration)
20652065

20662066

2067+
class ForceCompleteMigration(command.Command):
2068+
"""Force an ongoing live migration to complete.
2069+
2070+
This command requires ``--os-compute-api-version`` 2.22 or greater.
2071+
"""
2072+
2073+
def get_parser(self, prog_name):
2074+
parser = super(ForceCompleteMigration, self).get_parser(prog_name)
2075+
parser.add_argument(
2076+
'server',
2077+
metavar='<server>',
2078+
help=_('Server (name or ID)'),
2079+
)
2080+
parser.add_argument(
2081+
'migration',
2082+
metavar='<migration>',
2083+
help=_('Migration (ID)')
2084+
)
2085+
return parser
2086+
2087+
def take_action(self, parsed_args):
2088+
compute_client = self.app.client_manager.compute
2089+
2090+
if compute_client.api_version < api_versions.APIVersion('2.22'):
2091+
msg = _(
2092+
'--os-compute-api-version 2.22 or greater is required to '
2093+
'support the server migration force complete command'
2094+
)
2095+
raise exceptions.CommandError(msg)
2096+
2097+
server = utils.find_resource(
2098+
compute_client.servers,
2099+
parsed_args.server,
2100+
)
2101+
compute_client.server_migrations.live_migrate_force_complete(
2102+
server.id, parsed_args.migration)
2103+
2104+
20672105
class PauseServer(command.Command):
20682106
_description = _("Pause server(s)")
20692107

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4263,6 +4263,57 @@ def test_migration_abort_pre_v224(self):
42634263
str(ex))
42644264

42654265

4266+
class TestServerMigrationForceComplete(TestServer):
4267+
4268+
def setUp(self):
4269+
super(TestServerMigrationForceComplete, self).setUp()
4270+
4271+
self.server = compute_fakes.FakeServer.create_one_server()
4272+
4273+
# Return value for utils.find_resource for server.
4274+
self.servers_mock.get.return_value = self.server
4275+
4276+
# Get the command object to test
4277+
self.cmd = server.ForceCompleteMigration(self.app, None)
4278+
4279+
def test_migration_force_complete(self):
4280+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
4281+
'2.22')
4282+
4283+
arglist = [
4284+
self.server.id,
4285+
'2', # arbitrary migration ID
4286+
]
4287+
verifylist = []
4288+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4289+
4290+
result = self.cmd.take_action(parsed_args)
4291+
4292+
self.servers_mock.get.assert_called_with(self.server.id)
4293+
self.server_migrations_mock.live_migrate_force_complete\
4294+
.assert_called_with(self.server.id, '2',)
4295+
self.assertIsNone(result)
4296+
4297+
def test_migration_force_complete_pre_v222(self):
4298+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
4299+
'2.21')
4300+
4301+
arglist = [
4302+
self.server.id,
4303+
'2', # arbitrary migration ID
4304+
]
4305+
verifylist = []
4306+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4307+
4308+
ex = self.assertRaises(
4309+
exceptions.CommandError,
4310+
self.cmd.take_action,
4311+
parsed_args)
4312+
self.assertIn(
4313+
'--os-compute-api-version 2.22 or greater is required',
4314+
str(ex))
4315+
4316+
42664317
class TestServerPause(TestServer):
42674318

42684319
def setUp(self):
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- Add ``server migration force complete`` command to force complete
4+
ongoing live migrations.

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ openstack.compute.v2 =
110110
server_migrate_revert = openstackclient.compute.v2.server:MigrateRevert
111111
server_migration_list = openstackclient.compute.v2.server:ListMigration
112112
server_migration_abort = openstackclient.compute.v2.server:AbortMigration
113+
server_migration_force_complete = openstackclient.compute.v2.server:ForceCompleteMigration
113114
server_pause = openstackclient.compute.v2.server:PauseServer
114115
server_reboot = openstackclient.compute.v2.server:RebootServer
115116
server_rebuild = openstackclient.compute.v2.server:RebuildServer

0 commit comments

Comments
 (0)