Skip to content

Commit 416550f

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Support to set server state"
2 parents 6e3f717 + 1a7284f commit 416550f

4 files changed

Lines changed: 81 additions & 0 deletions

File tree

doc/source/command-objects/server.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ Set server properties
559559
--property <key=value>
560560
[--property <key=value>] ...
561561
--root-password
562+
--state <state>
562563
<server>
563564
564565
.. option:: --name <new-name>
@@ -574,6 +575,10 @@ Set server properties
574575
Property to add/change for this server
575576
(repeat option to set multiple properties)
576577
578+
.. option:: --state <state>
579+
580+
New server state (valid value: active, error)
581+
577582
.. describe:: <server>
578583
579584
Server (name or ID)

openstackclient/compute/v2/server.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,6 +1370,12 @@ def get_parser(self, prog_name):
13701370
help=_('Property to add/change for this server '
13711371
'(repeat option to set multiple properties)'),
13721372
)
1373+
parser.add_argument(
1374+
'--state',
1375+
metavar='<state>',
1376+
choices=['active', 'error'],
1377+
help=_('New server state (valid value: active, error)'),
1378+
)
13731379
return parser
13741380

13751381
def take_action(self, parsed_args):
@@ -1389,6 +1395,9 @@ def take_action(self, parsed_args):
13891395
parsed_args.property,
13901396
)
13911397

1398+
if parsed_args.state:
1399+
server.reset_state(state=parsed_args.state)
1400+
13921401
if parsed_args.root_password:
13931402
p1 = getpass.getpass(_('New password: '))
13941403
p2 = getpass.getpass(_('Retype new password: '))

openstackclient/tests/compute/v2/test_server.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,67 @@ def test_server_resume_multi_servers(self):
12131213
self.run_method_with_servers('resume', 3)
12141214

12151215

1216+
class TestServerSet(TestServer):
1217+
1218+
def setUp(self):
1219+
super(TestServerSet, self).setUp()
1220+
1221+
self.methods = {
1222+
'update': None,
1223+
'reset_state': None,
1224+
'change_password': None,
1225+
}
1226+
1227+
self.fake_servers = self.setup_servers_mock(2)
1228+
1229+
# Get the command object to test
1230+
self.cmd = server.SetServer(self.app, None)
1231+
1232+
def test_server_set_no_option(self):
1233+
arglist = [
1234+
'foo_vm'
1235+
]
1236+
verifylist = [
1237+
('server', 'foo_vm')
1238+
]
1239+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1240+
result = self.cmd.take_action(parsed_args)
1241+
self.assertNotCalled(self.fake_servers[0].update)
1242+
self.assertNotCalled(self.fake_servers[0].reset_state)
1243+
self.assertNotCalled(self.fake_servers[0].change_password)
1244+
self.assertNotCalled(self.servers_mock.set_meta)
1245+
self.assertIsNone(result)
1246+
1247+
def test_server_set_with_state(self):
1248+
for index, state in enumerate(['active', 'error']):
1249+
arglist = [
1250+
'--state', state,
1251+
'foo_vm',
1252+
]
1253+
verifylist = [
1254+
('state', state),
1255+
('server', 'foo_vm'),
1256+
]
1257+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1258+
result = self.cmd.take_action(parsed_args)
1259+
self.fake_servers[index].reset_state.assert_called_once_with(
1260+
state=state)
1261+
self.assertIsNone(result)
1262+
1263+
def test_server_set_with_invalid_state(self):
1264+
arglist = [
1265+
'--state', 'foo_state',
1266+
'foo_vm',
1267+
]
1268+
verifylist = [
1269+
('state', 'foo_state'),
1270+
('server', 'foo_vm'),
1271+
]
1272+
self.assertRaises(utils.ParserException,
1273+
self.check_parser,
1274+
self.cmd, arglist, verifylist)
1275+
1276+
12161277
class TestServerShelve(TestServer):
12171278

12181279
def setUp(self):
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add ``--state`` option to ``server set`` command to set the server to
5+
active or error state.
6+
[Blueprint `server-reset-state <https://blueprints.launchpad.net/python-openstackclient/+spec/server-reset-state>`_]

0 commit comments

Comments
 (0)