summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGinnis <sean.mcginnis@gmail.com>2018-10-10 11:12:40 -0500
committerSean McGinnis <sean.mcginnis@gmail.com>2018-10-12 14:19:51 -0500
commit651f0c38a1f364953dc3cb3f7458385410395fd8 (patch)
tree9f199ad98602e6035c655a8e84c2f7dadcaab2d8
parente3dc30fe8c1ae6a13926bf1eae52097e8bb37aab (diff)
downloadpython-openstackclient-651f0c38a1f364953dc3cb3f7458385410395fd8.tar.gz
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>
-rw-r--r--openstackclient/tests/unit/volume/test_find_resource.py4
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume.py11
-rw-r--r--openstackclient/volume/client.py21
-rw-r--r--openstackclient/volume/v2/volume.py4
4 files changed, 19 insertions, 21 deletions
diff --git a/openstackclient/tests/unit/volume/test_find_resource.py b/openstackclient/tests/unit/volume/test_find_resource.py
index dbf9592f..60591eff 100644
--- a/openstackclient/tests/unit/volume/test_find_resource.py
+++ b/openstackclient/tests/unit/volume/test_find_resource.py
@@ -15,8 +15,8 @@
import mock
-from cinderclient.v1 import volume_snapshots
-from cinderclient.v1 import volumes
+from cinderclient.v3 import volume_snapshots
+from cinderclient.v3 import volumes
from osc_lib import exceptions
from osc_lib import utils
diff --git a/openstackclient/tests/unit/volume/v2/test_volume.py b/openstackclient/tests/unit/volume/v2/test_volume.py
index bb6263bb..183fb228 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume.py
@@ -131,7 +131,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -149,7 +148,6 @@ class TestVolumeCreate(TestVolume):
'--availability-zone', self.new_volume.availability_zone,
'--consistency-group', consistency_group.id,
'--hint', 'k=v',
- '--multi-attach',
self.new_volume.name,
]
verifylist = [
@@ -159,7 +157,6 @@ class TestVolumeCreate(TestVolume):
('availability_zone', self.new_volume.availability_zone),
('consistency_group', consistency_group.id),
('hint', {'k': 'v'}),
- ('multi_attach', True),
('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -180,7 +177,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=consistency_group.id,
- multiattach=True,
scheduler_hints={'k': 'v'},
)
@@ -251,7 +247,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -290,7 +285,6 @@ class TestVolumeCreate(TestVolume):
imageRef=image.id,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -329,7 +323,6 @@ class TestVolumeCreate(TestVolume):
imageRef=image.id,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -367,7 +360,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -406,7 +398,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -449,7 +440,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
@@ -501,7 +491,6 @@ class TestVolumeCreate(TestVolume):
imageRef=None,
source_volid=None,
consistencygroup_id=None,
- multiattach=False,
scheduler_hints=None,
)
diff --git a/openstackclient/volume/client.py b/openstackclient/volume/client.py
index c4b0dfca..e0e670a9 100644
--- a/openstackclient/volume/client.py
+++ b/openstackclient/volume/client.py
@@ -37,13 +37,20 @@ def make_client(instance):
# Defer client imports until we actually need them
from cinderclient import extension
- from cinderclient.v1.contrib import list_extensions
- from cinderclient.v1 import volume_snapshots
- from cinderclient.v1 import volumes
-
- # Monkey patch for v1 cinderclient
- volumes.Volume.NAME_ATTR = 'display_name'
- volume_snapshots.Snapshot.NAME_ATTR = 'display_name'
+ from cinderclient.v3.contrib import list_extensions
+ from cinderclient.v3 import volume_snapshots
+ from cinderclient.v3 import volumes
+
+ # Try a small import to check if cinderclient v1 is supported
+ try:
+ 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(
API_NAME,
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
index 8ab61d2a..7a5c207a 100644
--- a/openstackclient/volume/v2/volume.py
+++ b/openstackclient/volume/v2/volume.py
@@ -212,6 +212,9 @@ class CreateVolume(command.ShowOne):
raise exceptions.CommandError(
_("ERROR: --user is deprecated, please use"
" --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(
size=size,
@@ -224,7 +227,6 @@ class CreateVolume(command.ShowOne):
imageRef=image,
source_volid=source_volume,
consistencygroup_id=consistency_group,
- multiattach=parsed_args.multi_attach,
scheduler_hints=parsed_args.hint,
)