Skip to content

Commit f083d42

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add 'server migration force complete' command"
2 parents 91027a5 + 08b0e58 commit f083d42

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
@@ -2070,6 +2070,44 @@ def take_action(self, parsed_args):
20702070
server.id, parsed_args.migration)
20712071

20722072

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

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

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

42904290

4291+
class TestServerMigrationForceComplete(TestServer):
4292+
4293+
def setUp(self):
4294+
super(TestServerMigrationForceComplete, self).setUp()
4295+
4296+
self.server = compute_fakes.FakeServer.create_one_server()
4297+
4298+
# Return value for utils.find_resource for server.
4299+
self.servers_mock.get.return_value = self.server
4300+
4301+
# Get the command object to test
4302+
self.cmd = server.ForceCompleteMigration(self.app, None)
4303+
4304+
def test_migration_force_complete(self):
4305+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
4306+
'2.22')
4307+
4308+
arglist = [
4309+
self.server.id,
4310+
'2', # arbitrary migration ID
4311+
]
4312+
verifylist = []
4313+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4314+
4315+
result = self.cmd.take_action(parsed_args)
4316+
4317+
self.servers_mock.get.assert_called_with(self.server.id)
4318+
self.server_migrations_mock.live_migrate_force_complete\
4319+
.assert_called_with(self.server.id, '2',)
4320+
self.assertIsNone(result)
4321+
4322+
def test_migration_force_complete_pre_v222(self):
4323+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
4324+
'2.21')
4325+
4326+
arglist = [
4327+
self.server.id,
4328+
'2', # arbitrary migration ID
4329+
]
4330+
verifylist = []
4331+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4332+
4333+
ex = self.assertRaises(
4334+
exceptions.CommandError,
4335+
self.cmd.take_action,
4336+
parsed_args)
4337+
self.assertIn(
4338+
'--os-compute-api-version 2.22 or greater is required',
4339+
str(ex))
4340+
4341+
42914342
class TestServerPause(TestServer):
42924343

42934344
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)