Allow to resize in-use volumes
Since Pike (microversion 3.42) [1] Cinder API allows to resize in-use volumes. So no reason not to implement it in CLI. [1] https://opendev.org/openstack/cinder/src/branch/master/cinder/api/openstack/rest_api_version_history.rst#user-content-section-39 Change-Id: I22462a56d261e0a100aac3f27af7be47223edec0
This commit is contained in:
parent
e2bd1530cf
commit
4c0bfb03fc
@ -29,6 +29,7 @@ API_VERSIONS = {
|
||||
"1": "cinderclient.v1.client.Client",
|
||||
"2": "cinderclient.v2.client.Client",
|
||||
"3": "cinderclient.v3.client.Client",
|
||||
"3.42": "cinderclient.v3.client.Client",
|
||||
}
|
||||
|
||||
|
||||
@ -47,14 +48,19 @@ def make_client(instance):
|
||||
except Exception:
|
||||
del API_VERSIONS['1']
|
||||
|
||||
if instance._api_version[API_NAME] == '1':
|
||||
version = instance._api_version[API_NAME]
|
||||
from cinderclient import api_versions
|
||||
# convert to APIVersion object
|
||||
version = api_versions.get_api_version(version)
|
||||
|
||||
if version.ver_major == '1':
|
||||
# Monkey patch for v1 cinderclient
|
||||
volumes.Volume.NAME_ATTR = 'display_name'
|
||||
volume_snapshots.Snapshot.NAME_ATTR = 'display_name'
|
||||
|
||||
volume_client = utils.get_client_class(
|
||||
API_NAME,
|
||||
instance._api_version[API_NAME],
|
||||
version.ver_major,
|
||||
API_VERSIONS
|
||||
)
|
||||
LOG.debug('Instantiating volume client: %s', volume_client)
|
||||
@ -76,6 +82,7 @@ def make_client(instance):
|
||||
http_log_debug=http_log_debug,
|
||||
region_name=instance.region_name,
|
||||
endpoint_override=endpoint_override,
|
||||
api_version=version,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
|
@ -605,14 +605,16 @@ class SetVolume(command.Command):
|
||||
result = 0
|
||||
if parsed_args.size:
|
||||
try:
|
||||
if volume.status != 'available':
|
||||
msg = (_("Volume is in %s state, it must be available "
|
||||
"before size can be extended") % volume.status)
|
||||
raise exceptions.CommandError(msg)
|
||||
if parsed_args.size <= volume.size:
|
||||
msg = (_("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'):
|
||||
|
||||
msg = (_("Volume is in %s state, it must be available "
|
||||
"before size can be extended") % volume.status)
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user