From 5377da34065afdf96f2dd873419d77583844dfdd Mon Sep 17 00:00:00 2001
From: Steve Martinelli <stevemar@ca.ibm.com>
Date: Sun, 3 Mar 2013 20:34:18 -0600
Subject: [PATCH] Add metadata support for volume type

rebase
added set and unset metadata

Change-Id: I8d969e1de305975d7c71a0bad3a62b15f423c3e0
---
 openstackclient/volume/v1/type.py | 67 +++++++++++++++++++++++++++++++
 setup.py                          |  2 +
 2 files changed, 69 insertions(+)

diff --git a/openstackclient/volume/v1/type.py b/openstackclient/volume/v1/type.py
index 124f67d844..9f4d3df445 100644
--- a/openstackclient/volume/v1/type.py
+++ b/openstackclient/volume/v1/type.py
@@ -90,3 +90,70 @@ class ListType(lister.Lister):
                     s, columns,
                     formatters={},
                 ) for s in data))
+
+
+class SetType(command.Command):
+    """Set type command"""
+
+    api = 'volume'
+    log = logging.getLogger(__name__ + '.SetType')
+
+    def get_parser(self, prog_name):
+        parser = super(SetType, self).get_parser(prog_name)
+        parser.add_argument(
+            'type',
+            metavar='<type>',
+            help='Type ID to update',
+        )
+        parser.add_argument(
+            'meta_data',
+            metavar='<key=value>',
+            help='meta-data to add to volume type',
+        )
+        return parser
+
+    def take_action(self, parsed_args):
+        self.log.debug('take_action(%s)' % parsed_args)
+
+        meta = dict(v.split('=') for v in parsed_args.meta_data.split(' '))
+        volume_client = self.app.client_manager.volume
+        volume_type = volume_client.volume_types.get(
+            parsed_args.type
+        )
+
+        volume_type.set_keys(meta)
+
+        return
+
+
+class UnsetType(command.Command):
+    """Unset type command"""
+
+    api = 'volume'
+    log = logging.getLogger(__name__ + '.UnsetType')
+
+    def get_parser(self, prog_name):
+        parser = super(UnsetType, self).get_parser(prog_name)
+        parser.add_argument(
+            'type',
+            metavar='<type>',
+            help='Type ID to update',
+        )
+        parser.add_argument(
+            'meta_data',
+            metavar='<key>',
+            help='meta-data to remove from volume type (key only)',
+        )
+        return parser
+
+    def take_action(self, parsed_args):
+        self.log.debug('take_action(%s)' % parsed_args)
+        volume_client = self.app.client_manager.volume
+        volume_type = volume_client.volume_types.get(
+            parsed_args.type
+        )
+        key_list = []
+        key_list.append(parsed_args.meta_data)
+        volume_type.unset_keys(key_list)
+
+        return
diff --git a/setup.py b/setup.py
index 15a41eb7eb..e4ea3f93d3 100644
--- a/setup.py
+++ b/setup.py
@@ -151,6 +151,8 @@ setuptools.setup(
             'create_type=openstackclient.volume.v1.type:CreateType',
             'delete_type=openstackclient.volume.v1.type:DeleteType',
             'list_type=openstackclient.volume.v1.type:ListType',
+            'set_type=openstackclient.volume.v1.type:SetType',
+            'unset_type=openstackclient.volume.v1.type:UnsetType',
             'show_quota=openstackclient.volume.v1.quota:ShowQuota',
             'list_quota=openstackclient.volume.v1.quota:ListQuota',
             'set_quota=openstackclient.volume.v1.quota:SetQuota',