diff --git a/os_brick/initiator/connectors/fibre_channel.py b/os_brick/initiator/connectors/fibre_channel.py index 9df46b114..570dd1240 100644 --- a/os_brick/initiator/connectors/fibre_channel.py +++ b/os_brick/initiator/connectors/fibre_channel.py @@ -83,6 +83,13 @@ class FibreChannelConnector(base.BaseLinuxConnector): else: wwns = [] + # Convert wwns to lower case + wwns = [wwn.lower() for wwn in wwns] + if target_wwns: + connection_properties['target_wwns'] = wwns + elif target_wwn: + connection_properties['target_wwn'] = wwns + target_lun = connection_properties.get('target_lun', 0) target_luns = connection_properties.get('target_luns') if target_luns: @@ -117,7 +124,12 @@ class FibreChannelConnector(base.BaseLinuxConnector): # If there is an initiator_target_map we can update it too if connection_properties.get('initiator_target_map') is not None: + # Convert it to lower case itmap = connection_properties['initiator_target_map'] + itmap = {k.lower(): [port.lower() for port in v] + for k, v in itmap.items()} + connection_properties['initiator_target_map'] = itmap + new_itmap = dict() for init_wwpn in itmap: target_wwpns = itmap[init_wwpn] @@ -125,7 +137,7 @@ class FibreChannelConnector(base.BaseLinuxConnector): for target_wwpn in target_wwpns: if target_wwpn in wwpn_lun_map: init_targets.append((target_wwpn, - wwpn_lun_map[target_wwpn])) + wwpn_lun_map[target_wwpn])) new_itmap[init_wwpn] = init_targets connection_properties['initiator_target_lun_map'] = new_itmap diff --git a/os_brick/tests/initiator/connectors/test_fibre_channel.py b/os_brick/tests/initiator/connectors/test_fibre_channel.py index 4101a6f59..c87d0153b 100644 --- a/os_brick/tests/initiator/connectors/test_fibre_channel.py +++ b/os_brick/tests/initiator/connectors/test_fibre_channel.py @@ -591,7 +591,29 @@ class FibreChannelConnectorTestCase(test_connector.ConnectorTestCase): ('1234567890123457', 2)] } }, - + { + "target_info": { + "target_lun": 1, + "target_wwn": ['20320002AC01E166', '21420002AC01E166', + '20410002AC01E166', '21410002AC01E166'] + }, + "expected_targets": [ + ('20320002ac01e166', 1), + ('21420002ac01e166', 1), + ('20410002ac01e166', 1), + ('21410002ac01e166', 1) + ], + "itmap": { + '10001409DCD71FF6': ['20320002AC01E166', '21420002AC01E166'], + '10001409DCD71FF7': ['20410002AC01E166', '21410002AC01E166'] + }, + "expected_map": { + '10001409dcd71ff6': [('20320002ac01e166', 1), + ('21420002ac01e166', 1)], + '10001409dcd71ff7': [('20410002ac01e166', 1), + ('21410002ac01e166', 1)] + } + }, ) @ddt.unpack def test__add_targets_to_connection_properties(self, target_info, @@ -610,6 +632,14 @@ class FibreChannelConnectorTestCase(test_connector.ConnectorTestCase): self.assertIn('targets', connection_info) self.assertEqual(expected_targets, connection_info['targets']) + # Check that we turn to lowercase target wwns + key = 'target_wwns' if 'target_wwns' in target_info else 'target_wwn' + wwns = target_info.get(key) + wwns = [wwns] if isinstance(wwns, six.string_types) else wwns + wwns = [w.lower() for w in wwns] + if wwns: + self.assertEqual(wwns, conn['data'][key]) + if itmap: self.assertIn('initiator_target_lun_map', connection_info) self.assertEqual(expected_map,