Handle not having cinderclient.v1 available

The Cinder v1 API was deprecated several years ago and may be removed
from python-cinderclient in the near future. To handle the case where v1
is no longer present, this updates cinderclient initialization to work
without it and give an appropriate error if v1 is requested with a
version where it is no longer available.

Change-Id: I277d7b48b8ad4cce383ec3722f8117938378f615
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
This commit is contained in:
Sean McGinnis 2018-10-10 11:12:40 -05:00
parent e3dc30fe8c
commit 651f0c38a1
No known key found for this signature in database
GPG Key ID: CE7EE4BFAF8D70C8
4 changed files with 18 additions and 20 deletions

View File

@ -15,8 +15,8 @@
import mock import mock
from cinderclient.v1 import volume_snapshots from cinderclient.v3 import volume_snapshots
from cinderclient.v1 import volumes from cinderclient.v3 import volumes
from osc_lib import exceptions from osc_lib import exceptions
from osc_lib import utils from osc_lib import utils

View File

@ -131,7 +131,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -149,7 +148,6 @@ class TestVolumeCreate(TestVolume):
'--availability-zone', self.new_volume.availability_zone, '--availability-zone', self.new_volume.availability_zone,
'--consistency-group', consistency_group.id, '--consistency-group', consistency_group.id,
'--hint', 'k=v', '--hint', 'k=v',
'--multi-attach',
self.new_volume.name, self.new_volume.name,
] ]
verifylist = [ verifylist = [
@ -159,7 +157,6 @@ class TestVolumeCreate(TestVolume):
('availability_zone', self.new_volume.availability_zone), ('availability_zone', self.new_volume.availability_zone),
('consistency_group', consistency_group.id), ('consistency_group', consistency_group.id),
('hint', {'k': 'v'}), ('hint', {'k': 'v'}),
('multi_attach', True),
('name', self.new_volume.name), ('name', self.new_volume.name),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -180,7 +177,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=consistency_group.id, consistencygroup_id=consistency_group.id,
multiattach=True,
scheduler_hints={'k': 'v'}, scheduler_hints={'k': 'v'},
) )
@ -251,7 +247,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -290,7 +285,6 @@ class TestVolumeCreate(TestVolume):
imageRef=image.id, imageRef=image.id,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -329,7 +323,6 @@ class TestVolumeCreate(TestVolume):
imageRef=image.id, imageRef=image.id,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -367,7 +360,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -406,7 +398,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -449,7 +440,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )
@ -501,7 +491,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None, imageRef=None,
source_volid=None, source_volid=None,
consistencygroup_id=None, consistencygroup_id=None,
multiattach=False,
scheduler_hints=None, scheduler_hints=None,
) )

View File

@ -37,13 +37,20 @@ def make_client(instance):
# Defer client imports until we actually need them # Defer client imports until we actually need them
from cinderclient import extension from cinderclient import extension
from cinderclient.v1.contrib import list_extensions from cinderclient.v3.contrib import list_extensions
from cinderclient.v1 import volume_snapshots from cinderclient.v3 import volume_snapshots
from cinderclient.v1 import volumes from cinderclient.v3 import volumes
# Monkey patch for v1 cinderclient # Try a small import to check if cinderclient v1 is supported
volumes.Volume.NAME_ATTR = 'display_name' try:
volume_snapshots.Snapshot.NAME_ATTR = 'display_name' from cinderclient.v1 import services # noqa
except Exception:
del API_VERSIONS['1']
if instance._api_version[API_NAME] == '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( volume_client = utils.get_client_class(
API_NAME, API_NAME,

View File

@ -212,6 +212,9 @@ class CreateVolume(command.ShowOne):
raise exceptions.CommandError( raise exceptions.CommandError(
_("ERROR: --user is deprecated, please use" _("ERROR: --user is deprecated, please use"
" --os-username instead.")) " --os-username instead."))
if parsed_args.multi_attach:
LOG.warning(_("'--multi-attach' option is no longer supported by "
"the block storage service."))
volume = volume_client.volumes.create( volume = volume_client.volumes.create(
size=size, size=size,
@ -224,7 +227,6 @@ class CreateVolume(command.ShowOne):
imageRef=image, imageRef=image,
source_volid=source_volume, source_volid=source_volume,
consistencygroup_id=consistency_group, consistencygroup_id=consistency_group,
multiattach=parsed_args.multi_attach,
scheduler_hints=parsed_args.hint, scheduler_hints=parsed_args.hint,
) )