From 9241514137cd8d45fa6f36808536c5d0f218cb97 Mon Sep 17 00:00:00 2001 From: Thrivikram Mudunuri Date: Tue, 30 Nov 2021 00:56:39 -0500 Subject: Switch server start, server stop to SDK Switch the server start and server stop commands from novaclient to SDK. Change-Id: I5ebfa6b2468d5f20b99ea0eab1aea9377be09b8c --- openstackclient/compute/v2/server.py | 44 +++++++++++++------ .../tests/unit/compute/v2/test_server.py | 50 ++++++++-------------- ...-server-start-stop-to-sdk-55edd4e1ff5e6ac7.yaml | 5 +++ 3 files changed, 54 insertions(+), 45 deletions(-) create mode 100644 releasenotes/notes/migrate-server-start-stop-to-sdk-55edd4e1ff5e6ac7.yaml diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index c4bf5da9..8496a13e 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -4582,7 +4582,7 @@ class StartServer(command.Command): _description = _("Start server(s)") def get_parser(self, prog_name): - parser = super(StartServer, self).get_parser(prog_name) + parser = super().get_parser(prog_name) parser.add_argument( 'server', metavar='', @@ -4601,20 +4601,28 @@ class StartServer(command.Command): return parser def take_action(self, parsed_args): - compute_client = self.app.client_manager.compute + compute_client = self.app.client_manager.sdk_connection.compute for server in parsed_args.server: - utils.find_resource( - compute_client.servers, - server, - all_tenants=parsed_args.all_projects, - ).start() + try: + server_id = compute_client.find_server( + name=server, + details=False, + all_projects=parsed_args.all_projects, + ignore_missing=False, + ).id + except sdk_exceptions.HttpException as exc: + if exc.status_code == 403: + msg = _("Policy doesn't allow passing all-projects") + raise exceptions.Forbidden(msg) + + compute_client.start_server(server_id) class StopServer(command.Command): _description = _("Stop server(s)") def get_parser(self, prog_name): - parser = super(StopServer, self).get_parser(prog_name) + parser = super().get_parser(prog_name) parser.add_argument( 'server', metavar='', @@ -4633,13 +4641,21 @@ class StopServer(command.Command): return parser def take_action(self, parsed_args): - compute_client = self.app.client_manager.compute + compute_client = self.app.client_manager.sdk_connection.compute for server in parsed_args.server: - utils.find_resource( - compute_client.servers, - server, - all_tenants=parsed_args.all_projects, - ).stop() + try: + server_id = compute_client.find_server( + name=server, + details=False, + all_projects=parsed_args.all_projects, + ignore_missing=False, + ).id + except sdk_exceptions.HttpException as exc: + if exc.status_code == 403: + msg = _("Policy doesn't allow passing all-projects") + raise exceptions.Forbidden(msg) + + compute_client.stop_server(server_id) class SuspendServer(command.Command): diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index 01c71b6c..8cb8ceb5 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -8217,28 +8217,19 @@ class TestServerSsh(TestServer): class TestServerStart(TestServer): def setUp(self): - super(TestServerStart, self).setUp() + super().setUp() # Get the command object to test self.cmd = server.StartServer(self.app, None) - # Set methods to be tested. - self.methods = { - 'start': None, - } - def test_server_start_one_server(self): - self.run_method_with_servers('start', 1) + self.run_method_with_sdk_servers('start_server', 1) def test_server_start_multi_servers(self): - self.run_method_with_servers('start', 3) + self.run_method_with_sdk_servers('start_server', 3) - @mock.patch.object(common_utils, 'find_resource') - def test_server_start_with_all_projects(self, mock_find_resource): - servers = self.setup_servers_mock(count=1) - mock_find_resource.side_effect = compute_fakes.FakeServer.get_servers( - servers, 0, - ) + def test_server_start_with_all_projects(self): + servers = self.setup_sdk_servers_mock(count=1) arglist = [ servers[0].id, @@ -8251,36 +8242,30 @@ class TestServerStart(TestServer): self.cmd.take_action(parsed_args) - mock_find_resource.assert_called_once_with( - mock.ANY, servers[0].id, all_tenants=True, + self.sdk_client.find_server.assert_called_once_with( + name=servers[0].id, + details=False, + all_projects=True, + ignore_missing=False, ) class TestServerStop(TestServer): def setUp(self): - super(TestServerStop, self).setUp() + super().setUp() # Get the command object to test self.cmd = server.StopServer(self.app, None) - # Set methods to be tested. - self.methods = { - 'stop': None, - } - def test_server_stop_one_server(self): - self.run_method_with_servers('stop', 1) + self.run_method_with_sdk_servers('stop_server', 1) def test_server_stop_multi_servers(self): - self.run_method_with_servers('stop', 3) + self.run_method_with_sdk_servers('stop_server', 3) - @mock.patch.object(common_utils, 'find_resource') - def test_server_start_with_all_projects(self, mock_find_resource): + def test_server_start_with_all_projects(self): servers = self.setup_servers_mock(count=1) - mock_find_resource.side_effect = compute_fakes.FakeServer.get_servers( - servers, 0, - ) arglist = [ servers[0].id, @@ -8293,8 +8278,11 @@ class TestServerStop(TestServer): self.cmd.take_action(parsed_args) - mock_find_resource.assert_called_once_with( - mock.ANY, servers[0].id, all_tenants=True, + self.sdk_client.find_server.assert_called_once_with( + name=servers[0].id, + details=False, + all_projects=True, + ignore_missing=False, ) diff --git a/releasenotes/notes/migrate-server-start-stop-to-sdk-55edd4e1ff5e6ac7.yaml b/releasenotes/notes/migrate-server-start-stop-to-sdk-55edd4e1ff5e6ac7.yaml new file mode 100644 index 00000000..afcca53d --- /dev/null +++ b/releasenotes/notes/migrate-server-start-stop-to-sdk-55edd4e1ff5e6ac7.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Migrate ``server start`` and ``server stop`` commands from novaclient to + sdk. -- cgit v1.2.1