summaryrefslogtreecommitdiff
path: root/openstackclient/volume
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-20 22:28:10 +0000
committerGerrit Code Review <review@openstack.org>2015-07-20 22:28:10 +0000
commit26ea98b30e2c9573eb96378e3689f577d11940a8 (patch)
tree6c48281190d24660ea6726e5a0db186efd7ed287 /openstackclient/volume
parent7442c018d2b52cc88372ecc966436a88fe7c96ac (diff)
parent659abf492825b71b99e6f4be58447d6f393e33ef (diff)
downloadpython-openstackclient-26ea98b30e2c9573eb96378e3689f577d11940a8.tar.gz
Merge "Add create and list for volume type v2"
Diffstat (limited to 'openstackclient/volume')
-rw-r--r--openstackclient/volume/v2/volume_type.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/openstackclient/volume/v2/volume_type.py b/openstackclient/volume/v2/volume_type.py
index c724d867..7f9a1c4b 100644
--- a/openstackclient/volume/v2/volume_type.py
+++ b/openstackclient/volume/v2/volume_type.py
@@ -17,12 +17,79 @@
import logging
from cliff import command
+from cliff import lister
from cliff import show
import six
+from openstackclient.common import parseractions
from openstackclient.common import utils
+class CreateVolumeType(show.ShowOne):
+ """Create new volume type"""
+
+ log = logging.getLogger(__name__ + ".CreateVolumeType")
+
+ def get_parser(self, prog_name):
+ parser = super(CreateVolumeType, self).get_parser(prog_name)
+ parser.add_argument(
+ "name",
+ metavar="<name>",
+ help="New volume type name"
+ )
+ parser.add_argument(
+ "--description",
+ metavar="<description>",
+ help="New volume type description",
+ )
+ public_group = parser.add_mutually_exclusive_group()
+ public_group.add_argument(
+ "--public",
+ dest="public",
+ action="store_true",
+ default=False,
+ help="Volume type is accessible to the public",
+ )
+ public_group.add_argument(
+ "--private",
+ dest="private",
+ action="store_true",
+ default=False,
+ help="Volume type is not accessible to the public",
+ )
+ parser.add_argument(
+ '--property',
+ metavar='<key=value>',
+ action=parseractions.KeyValueAction,
+ help='Property to add for this volume type'
+ '(repeat option to set multiple properties)',
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug('take_action(%s)', parsed_args)
+
+ volume_client = self.app.client_manager.volume
+
+ kwargs = {}
+ if parsed_args.public:
+ kwargs['public'] = True
+ if parsed_args.private:
+ kwargs['private'] = True
+
+ volume_type = volume_client.volume_types.create(
+ parsed_args.name,
+ description=parsed_args.description,
+ **kwargs
+ )
+ volume_type._info.pop('extra_specs')
+ if parsed_args.property:
+ result = volume_type.set_keys(parsed_args.property)
+ volume_type._info.update({'properties': utils.format_dict(result)})
+
+ return zip(*sorted(six.iteritems(volume_type._info)))
+
+
class DeleteVolumeType(command.Command):
"""Delete volume type"""
@@ -46,6 +113,36 @@ class DeleteVolumeType(command.Command):
return
+class ListVolumeType(lister.Lister):
+ """List volume types"""
+
+ log = logging.getLogger(__name__ + '.ListVolumeType')
+
+ def get_parser(self, prog_name):
+ parser = super(ListVolumeType, self).get_parser(prog_name)
+ parser.add_argument(
+ '--long',
+ action='store_true',
+ default=False,
+ help='List additional fields in output')
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug('take_action(%s)', parsed_args)
+ if parsed_args.long:
+ columns = ['ID', 'Name', 'Description', 'Extra Specs']
+ column_headers = ['ID', 'Name', 'Description', 'Properties']
+ else:
+ columns = ['ID', 'Name']
+ column_headers = columns
+ data = self.app.client_manager.volume.volume_types.list()
+ return (column_headers,
+ (utils.get_item_properties(
+ s, columns,
+ formatters={'Extra Specs': utils.format_dict},
+ ) for s in data))
+
+
class ShowVolumeType(show.ShowOne):
"""Display volume type details"""