ScaleIO: Connection info backward compatibility

When we fixed bug 1823200 in Change-ID
Iab54c515fe7be252df52b1a0503a251779805759 we made the ScaleIO connector
incompatible with the old connection properties dictionary as it only
supported the new 'config_group' and 'failed_over' parameters to get the
password.

This is a problem in any system that is upgraded and has attachments to
the array, because the connection properties of those volumes will not
contain the new fields and detaching them will result in error
"KeyError: 'config_group'".

This patch adds compatibility code to support the old connection
properties format so we can detach those volumes.

This patch includes the release note from Change
Ib98043358d51426ca650104ad59a7e09911ee8e9

Related-Bug: #1823200
Change-Id: I6f01a178616b74ed9a86876ca46e7e46eb360518
(cherry picked from commit 5450483082)
(cherry picked from commit 31589a624f)
Conflicts:
	os_brick/initiator/connectors/scaleio.py
(cherry picked from commit db95b001e2)
(cherry picked from commit 173601116e)
Conflicts:
	os_brick/initiator/connectors/scaleio.py
	os_brick/tests/initiator/connectors/test_scaleio.py
(cherry picked from commit 43da3cd47b)
This commit is contained in:
Gorka Eguileor 2020-08-13 13:13:02 +02:00 committed by Alan Bishop
parent 76ce4f707d
commit 777ee3640a
3 changed files with 41 additions and 3 deletions

View File

@ -66,6 +66,17 @@ class ScaleIOConnector(base.BaseLinuxConnector):
self.iops_limit = None
self.bandwidth_limit = None
def _get_password_token(self, connection_properties):
# In old connection format we had the password and token in properties
if 'serverPassword' in connection_properties:
return (connection_properties['serverPassword'],
connection_properties['serverToken'])
# The new format reads password from file and doesn't have the token
password = self._get_connector_password(
connection_properties['config_group'])
return password, None
@staticmethod
def get_connector_properties(root_helper, *args, **kwargs):
"""The ScaleIO connector properties."""
@ -299,9 +310,8 @@ class ScaleIOConnector(base.BaseLinuxConnector):
self.server_ip = connection_properties['serverIP']
self.server_port = connection_properties['serverPort']
self.server_username = connection_properties['serverUsername']
self.server_password = self._get_connector_password(
connection_properties['config_group'],
)
self.server_password, self.server_token = self._get_password_token(
connection_properties)
self.iops_limit = connection_properties['iopsLimit']
self.bandwidth_limit = connection_properties['bandwidthLimit']
device_info = {'type': 'block',

View File

@ -175,6 +175,24 @@ class ScaleIOConnectorTestCase(test_connector.ConnectorTestCase):
self.connector.connect_volume(self.fake_connection_properties)
self.get_password_mock.assert_called_once()
def test_connect_volume_old_connection_properties(self):
"""Successful connect to volume"""
connection_properties = {
'hostIP': test_connector.MY_IP,
'serverIP': test_connector.MY_IP,
'scaleIO_volname': self.vol['name'],
'scaleIO_volume_id': self.vol['provider_id'],
'serverPort': 443,
'serverUsername': 'test',
'serverPassword': 'fake',
'serverToken': 'fake_token',
'iopsLimit': None,
'bandwidthLimit': None
}
self.connector.connect_volume(connection_properties)
self.get_password_mock.assert_not_called()
def test_connect_with_bandwidth_limit(self):
"""Successful connect to volume with bandwidth limit"""
self.fake_connection_properties['bandwidthLimit'] = '500'

View File

@ -0,0 +1,10 @@
---
fixes:
- |
`Bug #1823200 <https://bugs.launchpad.net/cinder/+bug/1823200>`_:
Prior fixes for this bug changed the connection properties but did
not take into account an upgrade scenario in which currently attached
volumes had the old format connection properties and could fail on
detatch with "KeyError: 'config_group'". This release updates the
'scaleio' connector to handle this situation. It is only applicable
to deployments using a Dell EMC PowerFlex/VxFlex OS/ScaleIO backend.