Merge "Add "openstack server shelve" into OSC"
This commit is contained in:
		@@ -495,6 +495,21 @@ Resume server(s)
 | 
			
		||||
 | 
			
		||||
    Server(s) to resume (name or ID)
 | 
			
		||||
 | 
			
		||||
server shelve
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
Shelve server(s)
 | 
			
		||||
 | 
			
		||||
.. program:: server shelve
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
    os server shelve
 | 
			
		||||
        <server> [<server> ...]
 | 
			
		||||
 | 
			
		||||
.. describe:: <server>
 | 
			
		||||
 | 
			
		||||
    Server(s) to shelve (name or ID)
 | 
			
		||||
 | 
			
		||||
server set
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -183,6 +183,7 @@ Those actions with an opposite action are noted in parens if applicable.
 | 
			
		||||
* ``revoke`` (``issue``) - revoke a token
 | 
			
		||||
* ``save`` - download an object locally
 | 
			
		||||
* ``set`` (``unset``) - set a property on the object, formerly called metadata
 | 
			
		||||
* ``shelve`` (``unshelve``) - shelve one or more server
 | 
			
		||||
* ``show`` - display detailed information about the specific object
 | 
			
		||||
* ``start`` (``stop``) - start one or more servers
 | 
			
		||||
* ``stop`` (``start``) - stop one or more servers
 | 
			
		||||
 
 | 
			
		||||
@@ -1389,6 +1389,31 @@ class ShowServer(show.ShowOne):
 | 
			
		||||
        return zip(*sorted(six.iteritems(data)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ShelveServer(command.Command):
 | 
			
		||||
    """Shelve server(s)"""
 | 
			
		||||
 | 
			
		||||
    log = logging.getLogger(__name__ + '.ShelveServer')
 | 
			
		||||
 | 
			
		||||
    def get_parser(self, prog_name):
 | 
			
		||||
        parser = super(ShelveServer, self).get_parser(prog_name)
 | 
			
		||||
        parser.add_argument(
 | 
			
		||||
            'server',
 | 
			
		||||
            metavar='<server>',
 | 
			
		||||
            nargs='+',
 | 
			
		||||
            help=_('Server(s) to shelve (name or ID)'),
 | 
			
		||||
        )
 | 
			
		||||
        return parser
 | 
			
		||||
 | 
			
		||||
    @utils.log_method(log)
 | 
			
		||||
    def take_action(self, parsed_args):
 | 
			
		||||
        compute_client = self.app.client_manager.compute
 | 
			
		||||
        for server in parsed_args.server:
 | 
			
		||||
            utils.find_resource(
 | 
			
		||||
                compute_client.servers,
 | 
			
		||||
                server,
 | 
			
		||||
            ).shelve()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SshServer(command.Command):
 | 
			
		||||
    """Ssh to server"""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -766,3 +766,57 @@ class TestServerGeneral(testtools.TestCase):
 | 
			
		||||
                          server._get_ip_address, self.OLD, 'public', [4, 6])
 | 
			
		||||
        self.assertRaises(exceptions.CommandError,
 | 
			
		||||
                          server._get_ip_address, self.OLD, 'private', [6])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestShelveServer(TestServer):
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        super(TestShelveServer, self).setUp()
 | 
			
		||||
 | 
			
		||||
        # Get the command object to test
 | 
			
		||||
        self.cmd = server.ShelveServer(self.app, None)
 | 
			
		||||
 | 
			
		||||
        # Set shelve method to be tested.
 | 
			
		||||
        self.methods = {
 | 
			
		||||
            'shelve': None,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def setup_servers_mock(self, count=1):
 | 
			
		||||
        servers = fakes.FakeServer.create_servers(methods=self.methods,
 | 
			
		||||
                                                  count=count)
 | 
			
		||||
 | 
			
		||||
        self.servers_mock.get = fakes.FakeServer.get_servers(servers, 1)
 | 
			
		||||
 | 
			
		||||
        return servers
 | 
			
		||||
 | 
			
		||||
    def test_shelve_one_server(self):
 | 
			
		||||
        server = self.setup_servers_mock(1)[0]
 | 
			
		||||
 | 
			
		||||
        arglist = [
 | 
			
		||||
            server.id,
 | 
			
		||||
        ]
 | 
			
		||||
        verifylist = [
 | 
			
		||||
            ('server', [server.id]),
 | 
			
		||||
        ]
 | 
			
		||||
        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 | 
			
		||||
 | 
			
		||||
        self.cmd.take_action(parsed_args)
 | 
			
		||||
 | 
			
		||||
        server.shelve.assert_called_with()
 | 
			
		||||
 | 
			
		||||
    def test_shelve_multi_servers(self):
 | 
			
		||||
        servers = self.setup_servers_mock(3)
 | 
			
		||||
        arglist = []
 | 
			
		||||
        verifylist = []
 | 
			
		||||
 | 
			
		||||
        for i in range(0, len(servers)):
 | 
			
		||||
            arglist.append(servers[i].id)
 | 
			
		||||
        verifylist = [
 | 
			
		||||
            ('server', arglist),
 | 
			
		||||
        ]
 | 
			
		||||
        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 | 
			
		||||
 | 
			
		||||
        self.cmd.take_action(parsed_args)
 | 
			
		||||
 | 
			
		||||
        for i in range(0, len(servers)):
 | 
			
		||||
            servers[i].shelve.assert_called_with()
 | 
			
		||||
 
 | 
			
		||||
@@ -130,6 +130,7 @@ openstack.compute.v2 =
 | 
			
		||||
    server_resize = openstackclient.compute.v2.server:ResizeServer
 | 
			
		||||
    server_resume = openstackclient.compute.v2.server:ResumeServer
 | 
			
		||||
    server_set = openstackclient.compute.v2.server:SetServer
 | 
			
		||||
    server_shelve = openstackclient.compute.v2.server:ShelveServer
 | 
			
		||||
    server_show = openstackclient.compute.v2.server:ShowServer
 | 
			
		||||
    server_ssh = openstackclient.compute.v2.server:SshServer
 | 
			
		||||
    server_start = openstackclient.compute.v2.server:StartServer
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user