Skip to content

Commit a41a8c4

Browse files
committed
Add "openstack server shelve" into OSC
Currently, the shelve operation is not supported by OSC. So, this patch attempts to add it into OSC. Change-Id: I92545300bef006a069338168d2de800e8a58af69 Implements: blueprint introduce-shelve-into-osc
1 parent 42a5909 commit a41a8c4

5 files changed

Lines changed: 96 additions & 0 deletions

File tree

doc/source/command-objects/server.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,21 @@ Resume server
495495
496496
Server (name or ID)
497497
498+
server shelve
499+
-------------
500+
501+
Shelve server(s)
502+
503+
.. program:: server shelve
504+
.. code:: bash
505+
506+
os server shelve
507+
<server> [<server> ...]
508+
509+
.. describe:: <server>
510+
511+
Server(s) to shelve (name or ID)
512+
498513
server set
499514
----------
500515

doc/source/commands.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ Those actions with an opposite action are noted in parens if applicable.
182182
* ``revoke`` (``issue``) - revoke a token
183183
* ``save`` - download an object locally
184184
* ``set`` (``unset``) - set a property on the object, formerly called metadata
185+
* ``shelve`` (``unshelve``) - shelve one or more server
185186
* ``show`` - display detailed information about the specific object
186187
* ``start`` (``stop``) - start one or more servers
187188
* ``stop`` (``start``) - stop one or more servers

openstackclient/compute/v2/server.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,31 @@ def take_action(self, parsed_args):
13871387
return zip(*sorted(six.iteritems(data)))
13881388

13891389

1390+
class ShelveServer(command.Command):
1391+
"""Shelve server(s)"""
1392+
1393+
log = logging.getLogger(__name__ + '.ShelveServer')
1394+
1395+
def get_parser(self, prog_name):
1396+
parser = super(ShelveServer, self).get_parser(prog_name)
1397+
parser.add_argument(
1398+
'server',
1399+
metavar='<server>',
1400+
nargs='+',
1401+
help=_('Server(s) to shelve (name or ID)'),
1402+
)
1403+
return parser
1404+
1405+
@utils.log_method(log)
1406+
def take_action(self, parsed_args):
1407+
compute_client = self.app.client_manager.compute
1408+
for server in parsed_args.server:
1409+
utils.find_resource(
1410+
compute_client.servers,
1411+
server,
1412+
).shelve()
1413+
1414+
13901415
class SshServer(command.Command):
13911416
"""Ssh to server"""
13921417

openstackclient/tests/compute/v2/test_server.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,3 +766,57 @@ def test_get_ip_address(self):
766766
server._get_ip_address, self.OLD, 'public', [4, 6])
767767
self.assertRaises(exceptions.CommandError,
768768
server._get_ip_address, self.OLD, 'private', [6])
769+
770+
771+
class TestShelveServer(TestServer):
772+
773+
def setUp(self):
774+
super(TestShelveServer, self).setUp()
775+
776+
# Get the command object to test
777+
self.cmd = server.ShelveServer(self.app, None)
778+
779+
# Set shelve method to be tested.
780+
self.methods = {
781+
'shelve': None,
782+
}
783+
784+
def setup_servers_mock(self, count=1):
785+
servers = fakes.FakeServer.create_servers(methods=self.methods,
786+
count=count)
787+
788+
self.servers_mock.get = fakes.FakeServer.get_servers(servers, 1)
789+
790+
return servers
791+
792+
def test_shelve_one_server(self):
793+
server = self.setup_servers_mock(1)[0]
794+
795+
arglist = [
796+
server.id,
797+
]
798+
verifylist = [
799+
('server', [server.id]),
800+
]
801+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
802+
803+
self.cmd.take_action(parsed_args)
804+
805+
server.shelve.assert_called_with()
806+
807+
def test_shelve_multi_servers(self):
808+
servers = self.setup_servers_mock(3)
809+
arglist = []
810+
verifylist = []
811+
812+
for i in range(0, len(servers)):
813+
arglist.append(servers[i].id)
814+
verifylist = [
815+
('server', arglist),
816+
]
817+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
818+
819+
self.cmd.take_action(parsed_args)
820+
821+
for i in range(0, len(servers)):
822+
servers[i].shelve.assert_called_with()

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ openstack.compute.v2 =
130130
server_resize = openstackclient.compute.v2.server:ResizeServer
131131
server_resume = openstackclient.compute.v2.server:ResumeServer
132132
server_set = openstackclient.compute.v2.server:SetServer
133+
server_shelve = openstackclient.compute.v2.server:ShelveServer
133134
server_show = openstackclient.compute.v2.server:ShowServer
134135
server_ssh = openstackclient.compute.v2.server:SshServer
135136
server_start = openstackclient.compute.v2.server:StartServer

0 commit comments

Comments
 (0)