self.driver.initialize_connection,
volume2, self._connector)
- # with storwize_svc_npiv_compatibility_mode set to True,
- # lsfabric can return [] and initilize_connection will still
- # complete successfully
-
with mock.patch.object(storwize_svc_common.StorwizeHelpers,
'get_conn_fc_wwpns') as conn_fc_wwpns:
conn_fc_wwpns.return_value = []
- self._set_flag('storwize_svc_npiv_compatibility_mode',
- True)
- expected_fc_npiv = {
- 'driver_volume_type': 'fibre_channel',
- 'data': {'target_lun': 1,
- 'target_wwn': '5005076802432ADE',
- 'target_discovered': False}}
+
ret = self.driver.initialize_connection(volume2,
self._connector)
- self.assertEqual(
- expected_fc_npiv['driver_volume_type'],
- ret['driver_volume_type'])
- for k, v in expected_fc_npiv['data'].items():
- self.assertEqual(v, ret['data'][k])
- self._set_flag('storwize_svc_npiv_compatibility_mode',
- False)
ret = self.driver.terminate_connection(volume1, self._connector)
- # For npiv compatibility test case, we need to terminate connection
- # to the 2nd volume
- # Return the fc info only when last volume detached
+
if protocol == 'FC' and self.USESIM:
# For the first volume detach, ret['data'] should be empty
# only ret['driver_volume_type'] returned
self.assertIs('copying', model_update['replication_status'])
self.driver.delete_volume(volume)
- def test_storwize_initiator_target_map_npiv(self):
- # Create two volumes to be used in mappings
- ctxt = context.get_admin_context()
- self._set_flag('storwize_svc_npiv_compatibility_mode', True)
-
- # Generate us a test volume
- volume = self._generate_vol_info(None, None)
- self.driver.create_volume(volume)
-
- # FIbre Channel volume type
- vol_type = volume_types.create(ctxt, 'FC', {'protocol': 'FC'})
-
- volume['volume_type_id'] = vol_type['id']
-
- # Make sure that the volumes have been created
- self._assert_vol_exists(volume['name'], True)
-
- wwpns = ['ff00000000000000', 'ff00000000000001']
- connector = {'host': 'storwize-svc-test', 'wwpns': wwpns}
-
- # Initialise the connection
- with mock.patch.object(storwize_svc_common.StorwizeHelpers,
- 'get_conn_fc_wwpns') as conn_fc_wwpns:
- conn_fc_wwpns.return_value = []
- init_ret = self.driver.initialize_connection(volume, connector)
-
- # Check that the initiator_target_map is as expected
- init_data = {'driver_volume_type': 'fibre_channel',
- 'data': {'initiator_target_map':
- {'ff00000000000000': ['5005076802432ADE',
- '5005076802332ADE',
- '5005076802532ADE',
- '5005076802232ADE',
- '5005076802132ADE',
- '5005086802132ADE',
- '5005086802332ADE',
- '5005086802532ADE',
- '5005086802232ADE',
- '5005086802432ADE'],
- 'ff00000000000001': ['5005076802432ADE',
- '5005076802332ADE',
- '5005076802532ADE',
- '5005076802232ADE',
- '5005076802132ADE',
- '5005086802132ADE',
- '5005086802332ADE',
- '5005086802532ADE',
- '5005086802232ADE',
- '5005086802432ADE']},
- 'target_discovered': False,
- 'target_lun': 0,
- 'target_wwn': '5005076802432ADE',
- 'volume_id': volume['id']
- }
- }
-
- self.assertEqual(init_data, init_ret)
-
- # Terminate connection
- term_ret = self.driver.terminate_connection(volume, connector)
- # Check that the initiator_target_map is as expected
- term_data = {'driver_volume_type': 'fibre_channel',
- 'data': {'initiator_target_map':
- {'ff00000000000000': ['AABBCCDDEEFF0011'],
- 'ff00000000000001': ['AABBCCDDEEFF0011']}
- }
- }
-
- self.assertEqual(term_data, term_ret)
-
def test_storwize_consistency_group_snapshot(self):
cg_type = self._create_consistency_group_volume_type()
self.ctxt.user_id = 'fake_user_id'
from oslo_config import cfg
from oslo_log import log as logging
-from oslo_log import versionutils
from oslo_service import loopingcall
from oslo_utils import excutils
from oslo_utils import units
cfg.BoolOpt('storwize_svc_multihostmap_enabled',
default=True,
help='Allows vdisk to multi host mapping'),
- # TODO(xqli): storwize_svc_npiv_compatibility_mode should always be set
- # to True. It will be deprecated and removed in M release.
- cfg.BoolOpt('storwize_svc_npiv_compatibility_mode',
- default=True,
- help='Indicate whether svc driver is compatible for NPIV '
- 'setup. If it is compatible, it will allow no wwpns '
- 'being returned on get_conn_fc_wwpns during '
- 'initialize_connection. It should always be set to '
- 'True. It will be deprecated and removed in M release.'),
cfg.BoolOpt('storwize_svc_allow_tenant_qos',
default=False,
help='Allow tenants to specify QOS on create'),
"""Check that we have all configuration details from the storage."""
LOG.debug('enter: do_setup')
- # storwize_svc_npiv_compatibility_mode should always be set to True.
- # It will be deprecated and removed in M release. If the options is
- # set to False, we'll warn the operator.
- msg = _LW("The option storwize_svc_npiv_compatibility_mode will be "
- "deprecated and not used. It will be removed in the "
- "M release.")
- if not self.configuration.storwize_svc_npiv_compatibility_mode:
- versionutils.report_deprecated_feature(LOG, msg)
-
# Get storage system name, id, and code level
self._state.update(self._helpers.get_system_info())
conn_wwpns = self._helpers.get_conn_fc_wwpns(host_name)
# If conn_wwpns is empty, then that means that there were
- # no target ports with visibility to any of the initiators.
- # We will either fail the attach, or return all target
- # ports, depending on the value of the
- # storwize_svc_npiv_compatibity_mode flag.
+ # no target ports with visibility to any of the initiators
+ # so we return all target ports.
if len(conn_wwpns) == 0:
- # TODO(xqli): Remove storwize_svc_npiv_compatibility_mode
- # in M release.
- npiv_compat = (self.configuration.
- storwize_svc_npiv_compatibility_mode)
- if not npiv_compat:
- msg = (_('Could not get FC connection information for '
- 'the host-volume connection. Is the host '
- 'configured properly for FC connections?'))
- LOG.error(msg)
- raise exception.VolumeBackendAPIException(data=msg)
- else:
- for node in self._state['storage_nodes'].values():
- conn_wwpns.extend(node['WWPN'])
+ for node in self._state['storage_nodes'].values():
+ conn_wwpns.extend(node['WWPN'])
if not vol_opts['multipath']:
# preferred_node_entry can have a list of WWPNs while only