Rename openstack volume delete --purge -> --cascade

This flag is called "cascade" in the Cinder API.
The flag "purge" doesn't really communicate an obvious
meaning in the context of volume deletion. It also
has the danger of implying some kind of behavior about
volume wiping that does not exist.

Rename this flag to "--cascade" and preserve "--purge"
as a hidden flag for compatibility.

Change-Id: I8de27811222c17155697073fb9c512746d009266
This commit is contained in:
Eric Harney
2024-12-04 18:51:17 +00:00
parent ecc744a4fd
commit 07bb75bec9
4 changed files with 47 additions and 21 deletions

View File

@@ -685,7 +685,7 @@ class TestVolumeDelete(TestVolume):
arglist = [volumes[0].id]
verifylist = [
("force", False),
("purge", False),
("cascade", False),
("volumes", [volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -703,7 +703,7 @@ class TestVolumeDelete(TestVolume):
arglist = [v.id for v in volumes]
verifylist = [
('force', False),
('purge', False),
('cascade', False),
('volumes', arglist),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -723,7 +723,7 @@ class TestVolumeDelete(TestVolume):
]
verifylist = [
('force', False),
('purge', False),
('cascade', False),
('volumes', arglist),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -755,7 +755,7 @@ class TestVolumeDelete(TestVolume):
]
verifylist = [
('force', False),
('purge', True),
('cascade', True),
('volumes', [volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -776,7 +776,7 @@ class TestVolumeDelete(TestVolume):
]
verifylist = [
('force', True),
('purge', False),
('cascade', False),
('volumes', [volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)

View File

@@ -980,7 +980,7 @@ class TestVolumeDeleteLegacy(volume_fakes.TestVolume):
arglist = [self.volumes[0].id]
verifylist = [
("force", False),
("purge", False),
("cascade", False),
("volumes", [self.volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -996,7 +996,7 @@ class TestVolumeDeleteLegacy(volume_fakes.TestVolume):
arglist = [v.id for v in self.volumes]
verifylist = [
('force', False),
('purge', False),
('cascade', False),
('volumes', arglist),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1014,7 +1014,7 @@ class TestVolumeDeleteLegacy(volume_fakes.TestVolume):
]
verifylist = [
('force', False),
('purge', False),
('cascade', False),
('volumes', arglist),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1044,7 +1044,26 @@ class TestVolumeDeleteLegacy(volume_fakes.TestVolume):
]
verifylist = [
('force', False),
('purge', True),
('cascade', True),
('volumes', [self.volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
self.volumes_mock.delete.assert_called_once_with(
self.volumes[0].id, cascade=True
)
self.assertIsNone(result)
def test_volume_delete_with_cascade(self):
arglist = [
'--cascade',
self.volumes[0].id,
]
verifylist = [
('force', False),
('cascade', True),
('volumes', [self.volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1063,7 +1082,7 @@ class TestVolumeDeleteLegacy(volume_fakes.TestVolume):
]
verifylist = [
('force', True),
('purge', False),
('cascade', False),
('volumes', [self.volumes[0].id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1095,7 +1114,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
verifylist = [
("remote", True),
("force", False),
("purge", False),
("cascade", False),
("volumes", [vol.id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1115,7 +1134,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
verifylist = [
('remote', True),
('force', False),
('purge', False),
('cascade', False),
('volumes', arglist[1:]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1137,7 +1156,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
verifylist = [
('remote', True),
('force', False),
('purge', True),
('cascade', True),
('volumes', [vol.id]),
]
@@ -1146,7 +1165,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
exceptions.CommandError, self.cmd.take_action, parsed_args
)
self.assertIn(
"The --force and --purge options are not supported with the "
"The --force and --cascade options are not supported with the "
"--remote parameter.",
str(exc),
)
@@ -1162,7 +1181,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
verifylist = [
('remote', True),
('force', True),
('purge', False),
('cascade', False),
('volumes', [vol.id]),
]
@@ -1171,7 +1190,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
exceptions.CommandError, self.cmd.take_action, parsed_args
)
self.assertIn(
"The --force and --purge options are not supported with the "
"The --force and --cascade options are not supported with the "
"--remote parameter.",
str(exc),
)

View File

@@ -353,13 +353,20 @@ class DeleteVolume(command.Command):
),
)
group.add_argument(
"--purge",
"--cascade",
action="store_true",
help=_(
"Remove any snapshots along with volume(s) "
"(defaults to False)"
),
)
group.add_argument(
# now called "cascade", accept old arg for compatibility
"--purge",
action="store_true",
help=argparse.SUPPRESS,
dest='cascade',
)
return parser
def take_action(self, parsed_args):
@@ -373,7 +380,7 @@ class DeleteVolume(command.Command):
volume_client.volumes.force_delete(volume_obj.id)
else:
volume_client.volumes.delete(
volume_obj.id, cascade=parsed_args.purge
volume_obj.id, cascade=parsed_args.cascade
)
except Exception as e:
result += 1

View File

@@ -372,9 +372,9 @@ class DeleteVolume(volume_v2.DeleteVolume):
volume_client_sdk = self.app.client_manager.sdk_connection.volume
result = 0
if parsed_args.remote and (parsed_args.force or parsed_args.purge):
if parsed_args.remote and (parsed_args.force or parsed_args.cascade):
msg = _(
"The --force and --purge options are not "
"The --force and --cascade options are not "
"supported with the --remote parameter."
)
raise exceptions.CommandError(msg)
@@ -388,7 +388,7 @@ class DeleteVolume(volume_v2.DeleteVolume):
volume_client.volumes.force_delete(volume_obj.id)
else:
volume_client.volumes.delete(
volume_obj.id, cascade=parsed_args.purge
volume_obj.id, cascade=parsed_args.cascade
)
except Exception as e:
result += 1