'Connect the host and volume; return dict describing connection.'

def initialize_connection_iscsi(self, volume, connector, fss_hosts):

    vid = 0
    iscsi_target_info = {}
    self._check_iscsi_option()
    (client_id, target_id) = self._get_iscsi_host(connector)
    if (target_id is None):
        initiator = connector['initiator']
        host_name = (GROUP_PREFIX + ('%s-' % connector['host']))
        initiator_info = initiator.split(':')
        idx = (len(initiator_info) - 1)
        client_host_name = (host_name + initiator_info[idx])
        (client_id, target_id) = self._create_iscsi_host(client_host_name, initiator, fss_hosts)
    volume_name = self._get_fss_volume_name(volume)
    try:
        vid = self._get_fss_vid_from_name(volume_name, FSS_SINGLE_TYPE)
        if (not vid):
            msg = (_('Can    not    find    cinder    volume    -    %(volumeName)s.') % {'volumeName': volume_name})
            raise exception.VolumeBackendAPIException(msg)
        self.assign_iscsi_vdev(client_id, target_id, vid)
        time.sleep(3)
    except FSSHTTPError as err:
        with excutils.save_and_reraise_exception() as ctxt:
            if ((err.code == 2415984989) and ('XML_ERROR_VIRTUAL_DEV_ASSIGNED_TO_iSCSI_TARGET' in err.text)):
                ctxt.reraise = False
            LOG.warning('Assign    volume    failed    with    message:    %(msg)s.', {'msg': err.reason})
    finally:
        (lun, target_name) = self.FSS._get_iscsi_target_info(client_id, vid)
        iscsi_target_info['lun'] = lun
        iscsi_target_info['iqn'] = target_name
    if (not iscsi_target_info):
        msg = _('Failed    to    get    iSCSI    target    info    for    the    LUN:    %s')
        raise exception.VolumeBackendAPIException(data=(msg % volume_name))
    return iscsi_target_info
