'Perform necessary work to make an iSCSI connection.
To be able to create an iSCSI connection from a given host to a
volume, we must:
1. Translate the given iSCSI name to a host name
2. Create new host on the storage system if it does not yet exist
3. Map the volume to the host if it is not already done
4. Return the connection information for relevant nodes (in the
proper I/O group)'

def _do_initialize_connection(self, volume, connector):

    LOG.debug('enter:    initialize_connection:    volume    %(vol)s    with    connector    %(conn)s', {'vol': volume['id'], 'conn': connector})
    volume_name = self._get_target_vol(volume)
    host_name = self._helpers.get_host_from_connector(connector, iscsi=True)
    if (host_name is None):
        host_name = self._helpers.create_host(connector, iscsi=True)
    chap_secret = self._helpers.get_chap_secret_for_host(host_name)
    chap_enabled = self.configuration.storwize_svc_iscsi_chap_enabled
    if (chap_enabled and (chap_secret is None)):
        chap_secret = self._helpers.add_chap_secret_to_host(host_name)
    elif ((not chap_enabled) and chap_secret):
        LOG.warning('CHAP    secret    exists    for    host    but    CHAP    is    disabled.')
    multihostmap = self.configuration.storwize_svc_multihostmap_enabled
    lun_id = self._helpers.map_vol_to_host(volume_name, host_name, multihostmap)
    try:
        properties = self._get_single_iscsi_data(volume, connector, lun_id, chap_secret)
        multipath = connector.get('multipath', False)
        if multipath:
            properties = self._get_multi_iscsi_data(volume, connector, lun_id, properties)
    except Exception:
        with excutils.save_and_reraise_exception():
            self._do_terminate_connection(volume, connector)
            LOG.error('initialize_connection:    Failed    to    collect    return    properties    for    volume    %(vol)s    and    connector    %(conn)s.\n', {'vol': volume, 'conn': connector})
    LOG.debug('leave:    initialize_connection:\n    volume:    %(vol)s\n    connector:    %(conn)s\n    properties:    %(prop)s', {'vol': volume['id'], 'conn': connector, 'prop': properties})
    return {'driver_volume_type': 'iscsi', 'data': properties}
