summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/common/utils.py4
-rw-r--r--openstackclient/compute/v2/fixedip.py12
-rw-r--r--openstackclient/compute/v2/floatingip.py18
-rw-r--r--openstackclient/compute/v2/floatingippool.py2
-rw-r--r--openstackclient/compute/v2/security_group.py20
-rw-r--r--openstackclient/compute/v2/server.py53
-rw-r--r--openstackclient/compute/v2/usage.py17
-rw-r--r--openstackclient/tests/compute/v2/test_server.py54
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()