Add --cascade to volume delete

This adds the --cascade parameter to the volume
delete command.  Using this will call the volume delete
with an additional parameter that deletes snapshots as
part of the same operation.

The name "cascade" is chosen to be somewhat generic,
so that we can extend this if desired in the future.
(And to hint at the terminology from SQL.)

Depends-On: I33d15b76d4bd0de14c635d404b2c97096c977a58
Change-Id: I05ce61e647c43f9a1e6d74444356a76e5d284673
Blueprint: del-vols-with-snaps
This commit is contained in:
Eric Harney
2016-01-07 16:20:57 -05:00
parent 8d1d409700
commit ccacc338a5
2 changed files with 18 additions and 5 deletions

View File

@@ -445,6 +445,12 @@ def do_create(cs, args):
utils.print_dict(info)
@utils.arg('--cascade',
metavar='<cascade>',
default=False,
const=True,
nargs='?',
help='Remove any snapshots along with volume. Default=False.')
@utils.arg('volume',
metavar='<volume>', nargs='+',
help='Name or ID of volume or volumes to delete.')
@@ -454,7 +460,7 @@ def do_delete(cs, args):
failure_count = 0
for volume in args.volume:
try:
utils.find_volume(cs, volume).delete()
utils.find_volume(cs, volume).delete(cascade=args.cascade)
print("Request to delete volume %s has been accepted." % (volume))
except Exception as e:
failure_count += 1

View File

@@ -24,9 +24,9 @@ class Volume(base.Resource):
def __repr__(self):
return "<Volume: %s>" % self.id
def delete(self):
def delete(self, cascade=False):
"""Delete this volume."""
return self.manager.delete(self)
return self.manager.delete(self, cascade=cascade)
def update(self, **kwargs):
"""Update the name or description for this volume."""
@@ -297,12 +297,19 @@ class VolumeManager(base.ManagerWithFind):
sort_dir=sort_dir, sort=sort)
return self._list(url, resource_type, limit=limit)
def delete(self, volume):
def delete(self, volume, cascade=False):
"""Delete a volume.
:param volume: The :class:`Volume` to delete.
:param cascade: Also delete dependent snapshots.
"""
return self._delete("/volumes/%s" % base.getid(volume))
loc = "/volumes/%s" % base.getid(volume)
if cascade:
loc += '?cascade=True'
return self._delete(loc)
def update(self, volume, **kwargs):
"""Update the name or description for a volume.