Skip to content

Commit 17d03f4

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Switch server start, server stop to SDK"
2 parents 4e9181a + 9241514 commit 17d03f4

3 files changed

Lines changed: 54 additions & 45 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4576,7 +4576,7 @@ class StartServer(command.Command):
45764576
_description = _("Start server(s)")
45774577

45784578
def get_parser(self, prog_name):
4579-
parser = super(StartServer, self).get_parser(prog_name)
4579+
parser = super().get_parser(prog_name)
45804580
parser.add_argument(
45814581
'server',
45824582
metavar='<server>',
@@ -4595,20 +4595,28 @@ def get_parser(self, prog_name):
45954595
return parser
45964596

45974597
def take_action(self, parsed_args):
4598-
compute_client = self.app.client_manager.compute
4598+
compute_client = self.app.client_manager.sdk_connection.compute
45994599
for server in parsed_args.server:
4600-
utils.find_resource(
4601-
compute_client.servers,
4602-
server,
4603-
all_tenants=parsed_args.all_projects,
4604-
).start()
4600+
try:
4601+
server_id = compute_client.find_server(
4602+
name=server,
4603+
details=False,
4604+
all_projects=parsed_args.all_projects,
4605+
ignore_missing=False,
4606+
).id
4607+
except sdk_exceptions.HttpException as exc:
4608+
if exc.status_code == 403:
4609+
msg = _("Policy doesn't allow passing all-projects")
4610+
raise exceptions.Forbidden(msg)
4611+
4612+
compute_client.start_server(server_id)
46054613

46064614

46074615
class StopServer(command.Command):
46084616
_description = _("Stop server(s)")
46094617

46104618
def get_parser(self, prog_name):
4611-
parser = super(StopServer, self).get_parser(prog_name)
4619+
parser = super().get_parser(prog_name)
46124620
parser.add_argument(
46134621
'server',
46144622
metavar='<server>',
@@ -4627,13 +4635,21 @@ def get_parser(self, prog_name):
46274635
return parser
46284636

46294637
def take_action(self, parsed_args):
4630-
compute_client = self.app.client_manager.compute
4638+
compute_client = self.app.client_manager.sdk_connection.compute
46314639
for server in parsed_args.server:
4632-
utils.find_resource(
4633-
compute_client.servers,
4634-
server,
4635-
all_tenants=parsed_args.all_projects,
4636-
).stop()
4640+
try:
4641+
server_id = compute_client.find_server(
4642+
name=server,
4643+
details=False,
4644+
all_projects=parsed_args.all_projects,
4645+
ignore_missing=False,
4646+
).id
4647+
except sdk_exceptions.HttpException as exc:
4648+
if exc.status_code == 403:
4649+
msg = _("Policy doesn't allow passing all-projects")
4650+
raise exceptions.Forbidden(msg)
4651+
4652+
compute_client.stop_server(server_id)
46374653

46384654

46394655
class SuspendServer(command.Command):

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

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8216,28 +8216,19 @@ def test_server_ssh_deprecated_opts(self, mock_exec):
82168216
class TestServerStart(TestServer):
82178217

82188218
def setUp(self):
8219-
super(TestServerStart, self).setUp()
8219+
super().setUp()
82208220

82218221
# Get the command object to test
82228222
self.cmd = server.StartServer(self.app, None)
82238223

8224-
# Set methods to be tested.
8225-
self.methods = {
8226-
'start': None,
8227-
}
8228-
82298224
def test_server_start_one_server(self):
8230-
self.run_method_with_servers('start', 1)
8225+
self.run_method_with_sdk_servers('start_server', 1)
82318226

82328227
def test_server_start_multi_servers(self):
8233-
self.run_method_with_servers('start', 3)
8228+
self.run_method_with_sdk_servers('start_server', 3)
82348229

8235-
@mock.patch.object(common_utils, 'find_resource')
8236-
def test_server_start_with_all_projects(self, mock_find_resource):
8237-
servers = self.setup_servers_mock(count=1)
8238-
mock_find_resource.side_effect = compute_fakes.FakeServer.get_servers(
8239-
servers, 0,
8240-
)
8230+
def test_server_start_with_all_projects(self):
8231+
servers = self.setup_sdk_servers_mock(count=1)
82418232

82428233
arglist = [
82438234
servers[0].id,
@@ -8250,36 +8241,30 @@ def test_server_start_with_all_projects(self, mock_find_resource):
82508241

82518242
self.cmd.take_action(parsed_args)
82528243

8253-
mock_find_resource.assert_called_once_with(
8254-
mock.ANY, servers[0].id, all_tenants=True,
8244+
self.sdk_client.find_server.assert_called_once_with(
8245+
name=servers[0].id,
8246+
details=False,
8247+
all_projects=True,
8248+
ignore_missing=False,
82558249
)
82568250

82578251

82588252
class TestServerStop(TestServer):
82598253

82608254
def setUp(self):
8261-
super(TestServerStop, self).setUp()
8255+
super().setUp()
82628256

82638257
# Get the command object to test
82648258
self.cmd = server.StopServer(self.app, None)
82658259

8266-
# Set methods to be tested.
8267-
self.methods = {
8268-
'stop': None,
8269-
}
8270-
82718260
def test_server_stop_one_server(self):
8272-
self.run_method_with_servers('stop', 1)
8261+
self.run_method_with_sdk_servers('stop_server', 1)
82738262

82748263
def test_server_stop_multi_servers(self):
8275-
self.run_method_with_servers('stop', 3)
8264+
self.run_method_with_sdk_servers('stop_server', 3)
82768265

8277-
@mock.patch.object(common_utils, 'find_resource')
8278-
def test_server_start_with_all_projects(self, mock_find_resource):
8266+
def test_server_start_with_all_projects(self):
82798267
servers = self.setup_servers_mock(count=1)
8280-
mock_find_resource.side_effect = compute_fakes.FakeServer.get_servers(
8281-
servers, 0,
8282-
)
82838268

82848269
arglist = [
82858270
servers[0].id,
@@ -8292,8 +8277,11 @@ def test_server_start_with_all_projects(self, mock_find_resource):
82928277

82938278
self.cmd.take_action(parsed_args)
82948279

8295-
mock_find_resource.assert_called_once_with(
8296-
mock.ANY, servers[0].id, all_tenants=True,
8280+
self.sdk_client.find_server.assert_called_once_with(
8281+
name=servers[0].id,
8282+
details=False,
8283+
all_projects=True,
8284+
ignore_missing=False,
82978285
)
82988286

82998287

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Migrate ``server start`` and ``server stop`` commands from novaclient to
5+
sdk.

0 commit comments

Comments
 (0)