summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-03-30 19:05:02 +0000
committerGerrit Code Review <review@openstack.org>2023-03-30 19:05:02 +0000
commit17d03f49aa1bda404e1ec061dd078e1aa0ed211c (patch)
tree5b997a69244f3b7f7979c35b824be871ec09cc27
parent4e9181aa1e22a1f8796f645da7937a275677d0c1 (diff)
parent9241514137cd8d45fa6f36808536c5d0f218cb97 (diff)
downloadpython-openstackclient-17d03f49aa1bda404e1ec061dd078e1aa0ed211c.tar.gz
Merge "Switch server start, server stop to SDK"
-rw-r--r--openstackclient/compute/v2/server.py44
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py50
-rw-r--r--releasenotes/notes/migrate-server-start-stop-to-sdk-55edd4e1ff5e6ac7.yaml5
3 files changed, 54 insertions, 45 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 37c78b6f..0d40d96a 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -4576,7 +4576,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='<server>',
@@ -4595,20 +4595,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='<server>',
@@ -4627,13 +4635,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 511cac02..bd7dcea6 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -8216,28 +8216,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,
@@ -8250,36 +8241,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,
@@ -8292,8 +8277,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.