diff options
Diffstat (limited to 'cinderclient/v3')
| -rw-r--r-- | cinderclient/v3/shell.py | 8 | ||||
| -rw-r--r-- | cinderclient/v3/volumes.py | 20 |
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. |
