From 6b60614afaf88819ce92a2d0ed269035a3c8b261 Mon Sep 17 00:00:00 2001 From: Erik Olof Gunnar Andersson Date: Mon, 4 Mar 2019 13:21:18 -0800 Subject: [PATCH] Fix VxFlexOs KeyError after upgrade A long time ago the driver was changed to store volume_id in the nova database and use that. Previously it would use the volume_name and make a call to get the volume_id. Both should be supported, but as the code path currently throws a KeyError it will never reach the backwardscompatible code. This makes sure that the driver works even after an upgrade from Mitaka. Change-Id: Ic389e1a8f0f43ef410eee89202fef19d554fce90 Closes-Bug: #1648629 --- os_brick/initiator/connectors/vxflexos.py | 2 +- .../tests/initiator/connectors/test_vxflexos.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/os_brick/initiator/connectors/vxflexos.py b/os_brick/initiator/connectors/vxflexos.py index f542dc6f6..4f7c1e899 100644 --- a/os_brick/initiator/connectors/vxflexos.py +++ b/os_brick/initiator/connectors/vxflexos.py @@ -276,7 +276,7 @@ class VxFlexOsConnector(base.BaseLinuxConnector): try: self.volume_id = connection_properties['vxflexos_volume_id'] except KeyError: - self.volume_id = connection_properties['scaleIO_volume_id'] + self.volume_id = connection_properties.get('scaleIO_volume_id') d_option_used = True if d_option_used: LOG.warning("Deprecated: scaleIO_volname and scaleIO_volume_id " diff --git a/os_brick/tests/initiator/connectors/test_vxflexos.py b/os_brick/tests/initiator/connectors/test_vxflexos.py index 4d0bd46df..cb7212dd3 100644 --- a/os_brick/tests/initiator/connectors/test_vxflexos.py +++ b/os_brick/tests/initiator/connectors/test_vxflexos.py @@ -171,6 +171,13 @@ class VxFlexOsConnectorTestCase(test_connector.ConnectorTestCase): """Successful connect to volume""" self.connector.connect_volume(self.fake_connection_properties) + def test_connect_volume_without_volume_id(self): + """Successful connect to volume without a Volume Id""" + connection_properties = dict(self.fake_connection_properties) + connection_properties.pop('vxflexos_volume_id') + + self.connector.connect_volume(connection_properties) + def test_connect_with_bandwidth_limit(self): """Successful connect to volume with bandwidth limit""" self.fake_connection_properties['bandwidthLimit'] = '500' @@ -191,6 +198,13 @@ class VxFlexOsConnectorTestCase(test_connector.ConnectorTestCase): """Successful disconnect from volume""" self.connector.disconnect_volume(self.fake_connection_properties, None) + def test_disconnect_volume_without_volume_id(self): + """Successful disconnect from volume without a Volume Id""" + connection_properties = dict(self.fake_connection_properties) + connection_properties.pop('vxflexos_volume_id') + + self.connector.disconnect_volume(connection_properties, None) + def test_error_id(self): """Fail to connect with bad volume name""" self.fake_connection_properties['vxflexos_volume_id'] = 'bad_id'