summaryrefslogtreecommitdiff
path: root/openstackclient/volume
diff options
context:
space:
mode:
authorchengkunye <chengkun@unitedstack.com>2015-07-17 17:05:23 +0800
committerSteve Martinelli <stevemar@ca.ibm.com>2015-07-20 12:59:57 -0700
commit659abf492825b71b99e6f4be58447d6f393e33ef (patch)
treefd85de22134c562489db66ae666c971e25b3c04a /openstackclient/volume
parent11c9695e5ef127d0c99e2af610e462f5b1af4933 (diff)
downloadpython-openstackclient-659abf492825b71b99e6f4be58447d6f393e33ef.tar.gz
Add create and list for volume type v2
Volume API v2 is missing create and list features. implements bp: volume-v2 Change-Id: I34a1ae440e9620b1c65546f4f43b369c8661250d
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 ae5cc8b8..c785021f 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"""