def login_storage_target(self, connection_info): data = connection_info['data'] target_lun = data['target_lun'] target_iqn = data['target_iqn'] target_portal = data['target_portal'] auth_method = data.get('auth_method') auth_username = data.get('auth_username') auth_password = data.get('auth_password') if auth_method and auth_method.upper() != 'CHAP': LOG.error(_LE("Cannot log in target %(target_iqn)s. Unsupported " "iSCSI authentication method: %(auth_method)s."), {'target_iqn': target_iqn, 'auth_method': auth_method}) raise exception.UnsupportedBDMVolumeAuthMethod( auth_method=auth_method) # Check if we already logged in if self._volutils.get_device_number_for_target(target_iqn, target_lun): LOG.debug("Already logged in on storage target. No need to " "login. Portal: %(target_portal)s, " "IQN: %(target_iqn)s, LUN: %(target_lun)s", {'target_portal': target_portal, 'target_iqn': target_iqn, 'target_lun': target_lun}) else: LOG.debug("Logging in on storage target. Portal: " "%(target_portal)s, IQN: %(target_iqn)s, " "LUN: %(target_lun)s", {'target_portal': target_portal, 'target_iqn': target_iqn, 'target_lun': target_lun}) self._volutils.login_storage_target(target_lun, target_iqn, target_portal, auth_username, auth_password) # Wait for the target to be mounted self._get_mounted_disk_from_lun(target_iqn, target_lun, True)
def connect_volume(self, connection_info): connection_properties = connection_info['data'] auth_method = connection_properties.get('auth_method') if auth_method and auth_method.upper() != 'CHAP': LOG.error( _LE("Unsupported iSCSI authentication " "method: %(auth_method)s."), dict(auth_method=auth_method)) raise exception.UnsupportedBDMVolumeAuthMethod( auth_method=auth_method) volume_connected = False for (initiator_name, target_portal, target_iqn, target_lun) in self._get_all_paths(connection_properties): try: msg = _LI("Attempting to estabilish an iSCSI session to " "target %(target_iqn)s on portal %(target_portal)s " "acessing LUN %(target_lun)s using initiator " "%(initiator_name)s.") LOG.info( msg, dict(target_portal=target_portal, target_iqn=target_iqn, target_lun=target_lun, initiator_name=initiator_name)) self._iscsi_utils.login_storage_target( target_lun=target_lun, target_iqn=target_iqn, target_portal=target_portal, auth_username=connection_properties.get('auth_username'), auth_password=connection_properties.get('auth_password'), mpio_enabled=CONF.hyperv.use_multipath_io, initiator_name=initiator_name) volume_connected = True if not CONF.hyperv.use_multipath_io: break except os_win_exc.OSWinException: LOG.exception(_LE("Could not connect iSCSI target %s."), target_iqn) if not volume_connected: raise exception.VolumeAttachFailed( _("Could not connect volume %s.") % connection_properties['volume_id'])