Skip to content

Commit 9241514

Browse files
Thrivikram Mudunuristephenfin
authored andcommitted
Switch server start, server stop to SDK
Switch the server start and server stop commands from novaclient to SDK. Change-Id: I5ebfa6b2468d5f20b99ea0eab1aea9377be09b8c
1 parent ce8171b commit 9241514

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
@@ -4582,7 +4582,7 @@ class StartServer(command.Command):
45824582
_description = _("Start server(s)")
45834583

45844584
def get_parser(self, prog_name):
4585-
parser = super(StartServer, self).get_parser(prog_name)
4585+
parser = super().get_parser(prog_name)
45864586
parser.add_argument(
45874587
'server',
45884588
metavar='<server>',
@@ -4601,20 +4601,28 @@ def get_parser(self, prog_name):
46014601
return parser
46024602

46034603
def take_action(self, parsed_args):
4604-
compute_client = self.app.client_manager.compute
4604+
compute_client = self.app.client_manager.sdk_connection.compute
46054605
for server in parsed_args.server:
4606-
utils.find_resource(
4607-
compute_client.servers,
4608-
server,
4609-
all_tenants=parsed_args.all_projects,
4610-
).start()
4606+
try:
4607+
server_id = compute_client.find_server(
4608+
name=server,
4609+
details=False,
4610+
all_projects=parsed_args.all_projects,
4611+
ignore_missing=False,
4612+
).id
4613+
except sdk_exceptions.HttpException as exc:
4614+
if exc.status_code == 403:
4615+
msg = _("Policy doesn't allow passing all-projects")
4616+
raise exceptions.Forbidden(msg)
4617+
4618+
compute_client.start_server(server_id)
46114619

46124620

46134621
class StopServer(command.Command):
46144622
_description = _("Stop server(s)")
46154623

46164624
def get_parser(self, prog_name):
4617-
parser = super(StopServer, self).get_parser(prog_name)
4625+
parser = super().get_parser(prog_name)
46184626
parser.add_argument(
46194627
'server',
46204628
metavar='<server>',
@@ -4633,13 +4641,21 @@ def get_parser(self, prog_name):
46334641
return parser
46344642

46354643
def take_action(self, parsed_args):
4636-
compute_client = self.app.client_manager.compute
4644+
compute_client = self.app.client_manager.sdk_connection.compute
46374645
for server in parsed_args.server:
4638-
utils.find_resource(
4639-
compute_client.servers,
4640-
server,
4641-
all_tenants=parsed_args.all_projects,
4642-
).stop()
4646+
try:
4647+
server_id = compute_client.find_server(
4648+
name=server,
4649+
details=False,
4650+
all_projects=parsed_args.all_projects,
4651+
ignore_missing=False,
4652+
).id
4653+
except sdk_exceptions.HttpException as exc:
4654+
if exc.status_code == 403:
4655+
msg = _("Policy doesn't allow passing all-projects")
4656+
raise exceptions.Forbidden(msg)
4657+
4658+
compute_client.stop_server(server_id)
46434659

46444660

46454661
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
@@ -8217,28 +8217,19 @@ def test_server_ssh_deprecated_opts(self, mock_exec):
82178217
class TestServerStart(TestServer):
82188218

82198219
def setUp(self):
8220-
super(TestServerStart, self).setUp()
8220+
super().setUp()
82218221

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

8225-
# Set methods to be tested.
8226-
self.methods = {
8227-
'start': None,
8228-
}
8229-
82308225
def test_server_start_one_server(self):
8231-
self.run_method_with_servers('start', 1)
8226+
self.run_method_with_sdk_servers('start_server', 1)
82328227

82338228
def test_server_start_multi_servers(self):
8234-
self.run_method_with_servers('start', 3)
8229+
self.run_method_with_sdk_servers('start_server', 3)
82358230

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

82438234
arglist = [
82448235
servers[0].id,
@@ -8251,36 +8242,30 @@ def test_server_start_with_all_projects(self, mock_find_resource):
82518242

82528243
self.cmd.take_action(parsed_args)
82538244

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

82588252

82598253
class TestServerStop(TestServer):
82608254

82618255
def setUp(self):
8262-
super(TestServerStop, self).setUp()
8256+
super().setUp()
82638257

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

8267-
# Set methods to be tested.
8268-
self.methods = {
8269-
'stop': None,
8270-
}
8271-
82728261
def test_server_stop_one_server(self):
8273-
self.run_method_with_servers('stop', 1)
8262+
self.run_method_with_sdk_servers('stop_server', 1)
82748263

82758264
def test_server_stop_multi_servers(self):
8276-
self.run_method_with_servers('stop', 3)
8265+
self.run_method_with_sdk_servers('stop_server', 3)
82778266

8278-
@mock.patch.object(common_utils, 'find_resource')
8279-
def test_server_start_with_all_projects(self, mock_find_resource):
8267+
def test_server_start_with_all_projects(self):
82808268
servers = self.setup_servers_mock(count=1)
8281-
mock_find_resource.side_effect = compute_fakes.FakeServer.get_servers(
8282-
servers, 0,
8283-
)
82848269

82858270
arglist = [
82868271
servers[0].id,
@@ -8293,8 +8278,11 @@ def test_server_start_with_all_projects(self, mock_find_resource):
82938278

82948279
self.cmd.take_action(parsed_args)
82958280

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

83008288

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)