summaryrefslogtreecommitdiff
path: root/cinderclient/v3
diff options
context:
space:
mode:
Diffstat (limited to 'cinderclient/v3')
-rw-r--r--cinderclient/v3/shell.py8
-rw-r--r--cinderclient/v3/volumes.py20
2 files changed, 27 insertions, 1 deletions
diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py
index 13097d2..d0ed94c 100644
--- a/cinderclient/v3/shell.py
+++ b/cinderclient/v3/shell.py
@@ -617,8 +617,16 @@ def do_rename(cs, args):
metavar='<key=value>',
nargs='+',
default=[],
+ end_version='3.14',
help='Metadata key and value pair to set or unset. '
'For unset, specify only the key.')
+@utils.arg('metadata',
+ metavar='<key=value>',
+ nargs='+',
+ default=[],
+ start_version='3.15',
+ help='Metadata key and value pair to set or unset. '
+ 'For unset, specify only the key(s): <key key>')
@utils.service_type('volumev3')
def do_metadata(cs, args):
"""Sets or deletes volume metadata."""
diff --git a/cinderclient/v3/volumes.py b/cinderclient/v3/volumes.py
index 6862a18..6dd0f9c 100644
--- a/cinderclient/v3/volumes.py
+++ b/cinderclient/v3/volumes.py
@@ -435,6 +435,7 @@ class VolumeManager(base.ManagerWithFind):
return self._create("/volumes/%s/metadata" % base.getid(volume),
body, "metadata")
+ @api_versions.wraps("2.0")
def delete_metadata(self, volume, keys):
"""Delete specified keys from volumes metadata.
@@ -444,11 +445,28 @@ class VolumeManager(base.ManagerWithFind):
response_list = []
for k in keys:
resp, body = self._delete("/volumes/%s/metadata/%s" %
- (base.getid(volume), k))
+ (base.getid(volume), k))
response_list.append(resp)
return common_base.ListWithMeta([], response_list)
+ @api_versions.wraps("3.15")
+ def delete_metadata(self, volume, keys):
+ """Delete specified keys from volumes metadata.
+
+ :param volume: The :class:`Volume`.
+ :param keys: A list of keys to be removed.
+ """
+ data = self._get("/volumes/%s/metadata" % base.getid(volume))
+ metadata = data._info.get("metadata", {})
+ if set(keys).issubset(metadata.keys()):
+ for k in keys:
+ metadata.pop(k)
+ body = {'metadata': metadata}
+ kwargs = {'headers': {'If-Match': data._checksum}}
+ return self._update("/volumes/%s/metadata" % base.getid(volume),
+ body, **kwargs)
+
def set_image_metadata(self, volume, metadata):
"""Set a volume's image metadata.