diff options
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/common/utils.py | 4 | ||||
| -rw-r--r-- | openstackclient/compute/v2/fixedip.py | 12 | ||||
| -rw-r--r-- | openstackclient/compute/v2/floatingip.py | 18 | ||||
| -rw-r--r-- | openstackclient/compute/v2/floatingippool.py | 2 | ||||
| -rw-r--r-- | openstackclient/compute/v2/security_group.py | 20 | ||||
| -rw-r--r-- | openstackclient/compute/v2/server.py | 53 | ||||
| -rw-r--r-- | openstackclient/compute/v2/usage.py | 17 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_server.py | 54 |
8 files changed, 123 insertions, 57 deletions
diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py index 0a1f8e0e..4da8e320 100644 --- a/openstackclient/common/utils.py +++ b/openstackclient/common/utils.py @@ -145,7 +145,6 @@ def format_dict(data): """Return a formatted string of key value pairs :param data: a dict - :param format: optional formatting hints :rtype: a string formatted to key='value' """ @@ -305,8 +304,9 @@ def wait_for_status(status_f, :param status_f: a status function that takes a single id argument :param res_id: the resource id to watch - :param success_status: a list of status strings for successful completion :param status_field: the status attribute in the returned resource object + :param success_status: a list of status strings for successful completion + :param error_status: a list of status strings for error :param sleep_time: wait this long (seconds) :param callback: called per sleep cycle, useful to display progress :rtype: True on success diff --git a/openstackclient/compute/v2/fixedip.py b/openstackclient/compute/v2/fixedip.py index d105e391..da9d85c3 100644 --- a/openstackclient/compute/v2/fixedip.py +++ b/openstackclient/compute/v2/fixedip.py @@ -23,7 +23,7 @@ from openstackclient.common import utils class AddFixedIP(command.Command): - """Add fixed-ip command""" + """Add fixed IP address to server""" log = logging.getLogger(__name__ + ".AddFixedIP") @@ -32,12 +32,12 @@ class AddFixedIP(command.Command): parser.add_argument( "network", metavar="<network>", - help="Name of the network to fetch an IP address from", + help="Network to fetch an IP address from (name or ID)", ) parser.add_argument( "server", metavar="<server>", - help="Name of the server to receive the IP address", + help="Server to receive the IP address (name or ID)", ) return parser @@ -56,7 +56,7 @@ class AddFixedIP(command.Command): class RemoveFixedIP(command.Command): - """Remove fixed-ip command""" + """Remove fixed IP address from server""" log = logging.getLogger(__name__ + ".RemoveFixedIP") @@ -65,12 +65,12 @@ class RemoveFixedIP(command.Command): parser.add_argument( "ip_address", metavar="<ip-address>", - help="IP address to remove from server", + help="IP address to remove from server (name only)", ) parser.add_argument( "server", metavar="<server>", - help="Name of the server to remove the IP address from", + help="Server to remove the IP address from (name or ID)", ) return parser diff --git a/openstackclient/compute/v2/floatingip.py b/openstackclient/compute/v2/floatingip.py index c557c24b..65fe5910 100644 --- a/openstackclient/compute/v2/floatingip.py +++ b/openstackclient/compute/v2/floatingip.py @@ -26,7 +26,7 @@ from openstackclient.common import utils class AddFloatingIP(command.Command): - """Add floating-ip to server""" + """Add floating IP address to server""" log = logging.getLogger(__name__ + ".AddFloatingIP") @@ -35,7 +35,7 @@ class AddFloatingIP(command.Command): parser.add_argument( "ip_address", metavar="<ip-address>", - help="IP address to add to server", + help="IP address to add to server (name only)", ) parser.add_argument( "server", @@ -56,7 +56,7 @@ class AddFloatingIP(command.Command): class CreateFloatingIP(show.ShowOne): - """Create new floating-ip""" + """Create new floating IP address""" log = logging.getLogger(__name__ + '.CreateFloatingIP') @@ -65,7 +65,7 @@ class CreateFloatingIP(show.ShowOne): parser.add_argument( 'pool', metavar='<pool>', - help='Pool to fetch floating IP from', + help='Pool to fetch IP address from (name or ID)', ) return parser @@ -80,7 +80,7 @@ class CreateFloatingIP(show.ShowOne): class DeleteFloatingIP(command.Command): - """Delete a floating-ip""" + """Delete a floating IP address""" log = logging.getLogger(__name__ + '.DeleteFloatingIP') @@ -89,7 +89,7 @@ class DeleteFloatingIP(command.Command): parser.add_argument( "ip_address", metavar="<ip-address>", - help="IP address to delete", + help="IP address to delete (ID only)", ) return parser @@ -107,7 +107,7 @@ class DeleteFloatingIP(command.Command): class ListFloatingIP(lister.Lister): - """List floating-ips""" + """List floating IP addresses""" log = logging.getLogger(__name__ + '.ListFloatingIP') @@ -127,7 +127,7 @@ class ListFloatingIP(lister.Lister): class RemoveFloatingIP(command.Command): - """Remove floating-ip from server""" + """Remove floating IP address from server""" log = logging.getLogger(__name__ + ".RemoveFloatingIP") @@ -136,7 +136,7 @@ class RemoveFloatingIP(command.Command): parser.add_argument( "ip_address", metavar="<ip-address>", - help="IP address to remove from server", + help="IP address to remove from server (name only)", ) parser.add_argument( "server", diff --git a/openstackclient/compute/v2/floatingippool.py b/openstackclient/compute/v2/floatingippool.py index cc485552..39a2d8fe 100644 --- a/openstackclient/compute/v2/floatingippool.py +++ b/openstackclient/compute/v2/floatingippool.py @@ -23,7 +23,7 @@ from openstackclient.common import utils class ListFloatingIPPool(lister.Lister): - """List floating-ip-pools""" + """List pools of floating IP addresses""" log = logging.getLogger(__name__ + '.ListFloatingIPPool') diff --git a/openstackclient/compute/v2/security_group.py b/openstackclient/compute/v2/security_group.py index 3dd0c49b..0ba51d68 100644 --- a/openstackclient/compute/v2/security_group.py +++ b/openstackclient/compute/v2/security_group.py @@ -103,7 +103,7 @@ class DeleteSecurityGroup(command.Command): parser.add_argument( 'group', metavar='<group>', - help='Name or ID of security group to delete', + help='Security group to delete (name or ID)', ) return parser @@ -120,7 +120,7 @@ class DeleteSecurityGroup(command.Command): class ListSecurityGroup(lister.Lister): - """List all security groups""" + """List security groups""" log = logging.getLogger(__name__ + ".ListSecurityGroup") @@ -185,7 +185,7 @@ class SetSecurityGroup(show.ShowOne): parser.add_argument( 'group', metavar='<group>', - help='Name or ID of security group to change', + help='Security group to modify (name or ID)', ) parser.add_argument( '--name', @@ -195,7 +195,7 @@ class SetSecurityGroup(show.ShowOne): parser.add_argument( "--description", metavar="<description>", - help="New security group name", + help="New security group description", ) return parser @@ -227,7 +227,7 @@ class SetSecurityGroup(show.ShowOne): class ShowSecurityGroup(show.ShowOne): - """Show a specific security group""" + """Display security group details""" log = logging.getLogger(__name__ + '.ShowSecurityGroup') @@ -236,7 +236,7 @@ class ShowSecurityGroup(show.ShowOne): parser.add_argument( 'group', metavar='<group>', - help='Name or ID of security group to change', + help='Security group to display (name or ID)', ) return parser @@ -275,7 +275,7 @@ class CreateSecurityGroupRule(show.ShowOne): parser.add_argument( 'group', metavar='<group>', - help='Create rule in this security group', + help='Create rule in this security group (name or ID)', ) parser.add_argument( "--proto", @@ -333,7 +333,7 @@ class DeleteSecurityGroupRule(command.Command): parser.add_argument( 'rule', metavar='<rule>', - help='Security group rule ID to delete', + help='Security group rule to delete (ID only)', ) return parser @@ -346,7 +346,7 @@ class DeleteSecurityGroupRule(command.Command): class ListSecurityGroupRule(lister.Lister): - """List all security group rules""" + """List security group rules""" log = logging.getLogger(__name__ + ".ListSecurityGroupRule") @@ -355,7 +355,7 @@ class ListSecurityGroupRule(lister.Lister): parser.add_argument( 'group', metavar='<group>', - help='List all rules in this security group', + help='List all rules in this security group (name or ID)', ) return parser diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index aa4569c3..875b9a13 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -1268,7 +1268,7 @@ class ResizeServer(command.Command): class ResumeServer(command.Command): - """Resume server""" + """Resume server(s)""" log = logging.getLogger(__name__ + '.ResumeServer') @@ -1277,7 +1277,8 @@ class ResumeServer(command.Command): parser.add_argument( 'server', metavar='<server>', - help=_('Server (name or ID)'), + nargs='+', + help=_('Server(s) to resume (name or ID)'), ) return parser @@ -1285,10 +1286,11 @@ class ResumeServer(command.Command): def take_action(self, parsed_args): compute_client = self.app.client_manager.compute - utils.find_resource( - compute_client.servers, - parsed_args.server, - ) .resume() + for server in parsed_args.server: + utils.find_resource( + compute_client.servers, + server, + ).resume() class SetServer(command.Command): @@ -1387,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""" @@ -1585,7 +1612,7 @@ class StopServer(command.Command): class SuspendServer(command.Command): - """Suspend server""" + """Suspend server(s)""" log = logging.getLogger(__name__ + '.SuspendServer') @@ -1594,7 +1621,8 @@ class SuspendServer(command.Command): parser.add_argument( 'server', metavar='<server>', - help=_('Server (name or ID)'), + nargs='+', + help=_('Server(s) to suspend (name or ID)'), ) return parser @@ -1602,10 +1630,11 @@ class SuspendServer(command.Command): def take_action(self, parsed_args): compute_client = self.app.client_manager.compute - utils.find_resource( - compute_client.servers, - parsed_args.server, - ).suspend() + for server in parsed_args.server: + utils.find_resource( + compute_client.servers, + server, + ).suspend() class UnlockServer(command.Command): diff --git a/openstackclient/compute/v2/usage.py b/openstackclient/compute/v2/usage.py index 6d5d678f..4e7cf100 100644 --- a/openstackclient/compute/v2/usage.py +++ b/openstackclient/compute/v2/usage.py @@ -196,20 +196,3 @@ class ShowUsage(show.ShowOne): float("%.2f" % usage.total_local_gb_usage) if hasattr(usage, "total_local_gb_usage") else None) return zip(*sorted(six.iteritems(info))) - - -# This is out of order due to the subclass, will eventually be removed - -class ListProjectUsage(ListUsage): - """List resource usage per project""" - - deprecated = True - - log = logging.getLogger('DEPRECATED:') - - def take_action(self, parsed_args): - self.log.warning( - "%s is deprecated, use 'usage list'", - getattr(self, 'cmd_name', 'this command'), - ) - return super(ListProjectUsage, self).take_action(parsed_args) diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py index 791a90ab..61e098a8 100644 --- a/openstackclient/tests/compute/v2/test_server.py +++ b/openstackclient/tests/compute/v2/test_server.py @@ -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() |
