summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-10-14 03:46:00 +0000
committerGerrit Code Review <review@openstack.org>2020-10-14 03:46:00 +0000
commitf083d42972ec1678ad705b4e1984ba2944a07da2 (patch)
tree9937f81e0b187bcc343b8dc987d46d3f56b9e573 /openstackclient
parent91027a501f61e4e884b304544bbc2b729f8f8f20 (diff)
parent08b0e5855be5dc12a2fd04c5c92027c8a85a0d00 (diff)
downloadpython-openstackclient-f083d42972ec1678ad705b4e1984ba2944a07da2.tar.gz
Merge "Add 'server migration force complete' command"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py38
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py51
2 files changed, 89 insertions, 0 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 06f2a4c0..03763021 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -2070,6 +2070,44 @@ class AbortMigration(command.Command):
server.id, parsed_args.migration)
+class ForceCompleteMigration(command.Command):
+ """Force an ongoing live migration to complete.
+
+ This command requires ``--os-compute-api-version`` 2.22 or greater.
+ """
+
+ def get_parser(self, prog_name):
+ parser = super(ForceCompleteMigration, self).get_parser(prog_name)
+ parser.add_argument(
+ 'server',
+ metavar='<server>',
+ help=_('Server (name or ID)'),
+ )
+ parser.add_argument(
+ 'migration',
+ metavar='<migration>',
+ help=_('Migration (ID)')
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ compute_client = self.app.client_manager.compute
+
+ if compute_client.api_version < api_versions.APIVersion('2.22'):
+ msg = _(
+ '--os-compute-api-version 2.22 or greater is required to '
+ 'support the server migration force complete command'
+ )
+ raise exceptions.CommandError(msg)
+
+ server = utils.find_resource(
+ compute_client.servers,
+ parsed_args.server,
+ )
+ compute_client.server_migrations.live_migrate_force_complete(
+ server.id, parsed_args.migration)
+
+
class PauseServer(command.Command):
_description = _("Pause server(s)")
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 9eb3a20c..100559f3 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -4288,6 +4288,57 @@ class TestServerMigrationAbort(TestServer):
str(ex))
+class TestServerMigrationForceComplete(TestServer):
+
+ def setUp(self):
+ super(TestServerMigrationForceComplete, self).setUp()
+
+ self.server = compute_fakes.FakeServer.create_one_server()
+
+ # Return value for utils.find_resource for server.
+ self.servers_mock.get.return_value = self.server
+
+ # Get the command object to test
+ self.cmd = server.ForceCompleteMigration(self.app, None)
+
+ def test_migration_force_complete(self):
+ self.app.client_manager.compute.api_version = api_versions.APIVersion(
+ '2.22')
+
+ arglist = [
+ self.server.id,
+ '2', # arbitrary migration ID
+ ]
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.get.assert_called_with(self.server.id)
+ self.server_migrations_mock.live_migrate_force_complete\
+ .assert_called_with(self.server.id, '2',)
+ self.assertIsNone(result)
+
+ def test_migration_force_complete_pre_v222(self):
+ self.app.client_manager.compute.api_version = api_versions.APIVersion(
+ '2.21')
+
+ arglist = [
+ self.server.id,
+ '2', # arbitrary migration ID
+ ]
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ ex = self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+ self.assertIn(
+ '--os-compute-api-version 2.22 or greater is required',
+ str(ex))
+
+
class TestServerPause(TestServer):
def setUp(self):