diff --git a/os_brick/initiator/connectors/scaleio.py b/os_brick/initiator/connectors/scaleio.py index 1ae65ab1a..133884a62 100644 --- a/os_brick/initiator/connectors/scaleio.py +++ b/os_brick/initiator/connectors/scaleio.py @@ -88,12 +88,20 @@ class ScaleIOConnector(base.BaseLinuxConnector): raise exception.BrickException(message=msg) @staticmethod - def _get_connector_password(config_group, failed_over): + def _get_password_token(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 LOG.info("Get ScaleIO connector password from configuration file") try: - return priv_scaleio.get_connector_password(CONNECTOR_CONF_PATH, - config_group, - failed_over) + password = priv_scaleio.get_connector_password( + CONNECTOR_CONF_PATH, + connection_properties['config_group'], + connection_properties['failed_over']) + return password, None except Exception as e: msg = _("Error getting ScaleIO connector password from " "configuration file: %s") % e @@ -320,10 +328,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'], - connection_properties['failed_over'], - ) + 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', diff --git a/os_brick/tests/initiator/connectors/test_scaleio.py b/os_brick/tests/initiator/connectors/test_scaleio.py index 88129bde5..d33d37193 100644 --- a/os_brick/tests/initiator/connectors/test_scaleio.py +++ b/os_brick/tests/initiator/connectors/test_scaleio.py @@ -174,6 +174,26 @@ class ScaleIOConnectorTestCase(test_connector.ConnectorTestCase): self.connector.GET_GUID_OP_CODE) 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_guid_mock.assert_called_once_with( + self.connector.GET_GUID_OP_CODE) + self.get_password_mock.assert_not_called() + def test_connect_volume_without_volume_id(self): """Successful connect to volume without a Volume Id""" connection_properties = dict(self.fake_connection_properties)