'Driver entry point to attach a volume to an instance.'

@fczm_utils.add_fc_zone
def initialize_connection(self, volume, connector):

    LOG.info('Entering    initialize_connection    volume=%(vol)s    connector=%(conn)s    location=%(loc)s', {'vol': volume, 'conn': connector, 'loc': volume['provider_location']})
    wwpns = []
    initiator_name = connector['initiator']
    for wwpn in connector['wwpns']:
        wwpns.append(wwpn)
    initiator_group_name = self._get_igroupname_for_initiator_fc(wwpns)
    if (not initiator_group_name):
        initiator_group_name = self._create_igroup_for_initiator(initiator_name, wwpns)
    LOG.info('Initiator    group    name    is    %(grp)s    for    initiator    %(iname)s', {'grp': initiator_group_name, 'iname': initiator_name})
    self.APIExecutor.add_acl(volume, initiator_group_name)
    lun = self.get_lun_number(volume, initiator_group_name)
    init_targ_map = {}
    array_name = volume['provider_location'].split()
    target_wwns = self.get_wwpns_from_array(array_name)
    init_targ_map = self._build_initiator_target_map(target_wwns, connector)
    data = {'driver_volume_type': 'fibre_channel', 'data': {'target_lun': lun, 'target_discovered': True, 'target_wwn': target_wwns, 'initiator_target_map': init_targ_map}}
    LOG.info('Return    FC    data    for    zone    addition:    %(data)s.', {'data': data})
    return data
