Fix: extend in-use volumes check

Currently we have 2 issues with extending volumes checks:

1. We don't specify explicitly that MV 3.42 needs to be passed for
in-use volumes
2. Any state of volume (error, attaching, detaching etc) can pass
this check by specifying MV 3.42

The fundamentally correct approach to these checks should be:

1. Only allow 'available' and 'in-use' volumes to be extended
2. Check MV 3.42 or greater is specified in case of 'in-use' volumes
otherwise fail

This approach is implemented in the patch.

Change-Id: I45ab9af953f7d060379f48ca429eaea7cfe857cc
This commit is contained in:
Rajat Dhasmana
2024-12-09 18:58:27 +05:30
parent ecc744a4fd
commit 03933e9a73

View File

@@ -768,18 +768,24 @@ class SetVolume(command.Command):
_("New size must be greater than %s GB") % volume.size
)
raise exceptions.CommandError(msg)
if (
volume.status != 'available'
and not volume_client.api_version.matches('3.42')
):
if volume.status not in ('available', 'in-use'):
msg = (
_(
"Volume is in %s state, it must be available "
"before size can be extended"
"or in-use before size can be extended."
)
% volume.status
)
raise exceptions.CommandError(msg)
if (
volume.status == 'in-use'
and not volume_client.api_version.matches('3.42')
):
msg = _(
"--os-volume-api-version 3.42 or greater is "
"required to extend in-use volumes."
)
raise exceptions.CommandError(msg)
volume_client.volumes.extend(volume.id, parsed_args.size)
except Exception as e:
LOG.error(_("Failed to set volume size: %s"), e)