'Return the iSCSI Target given a volume info.'

def _iscsi_get_target(self, data):

    target_portal = data['target_portal']
    target_iqn = data['target_iqn']
    host_mor = vm_util.get_host_ref(self._session, self._cluster)
    lst_properties = ['config.storageDevice.hostBusAdapter', 'config.storageDevice.scsiTopology', 'config.storageDevice.scsiLun']
    prop_dict = self._session._call_method(vutil, 'get_object_properties_dict', host_mor, lst_properties)
    result = (None, None)
    hbas_ret = None
    scsi_topology = None
    scsi_lun_ret = None
    if prop_dict:
        hbas_ret = prop_dict.get('config.storageDevice.hostBusAdapter')
        scsi_topology = prop_dict.get('config.storageDevice.scsiTopology')
        scsi_lun_ret = prop_dict.get('config.storageDevice.scsiLun')
    if (hbas_ret is None):
        return result
    host_hbas = hbas_ret.HostHostBusAdapter
    if (not host_hbas):
        return result
    for hba in host_hbas:
        if (hba.__class__.__name__ == 'HostInternetScsiHba'):
            hba_key = hba.key
            break
    else:
        return result
    if (scsi_topology is None):
        return result
    host_adapters = scsi_topology.adapter
    if (not host_adapters):
        return result
    scsi_lun_key = None
    for adapter in host_adapters:
        if (adapter.adapter == hba_key):
            if (not getattr(adapter, 'target', None)):
                return result
            for target in adapter.target:
                if (getattr(target.transport, 'address', None) and (target.transport.address[0] == target_portal) and (target.transport.iScsiName == target_iqn)):
                    if (not target.lun):
                        return result
                    for lun in target.lun:
                        if ('host.ScsiDisk' in lun.scsiLun):
                            scsi_lun_key = lun.scsiLun
                            break
                    break
            break
    if (scsi_lun_key is None):
        return result
    if (scsi_lun_ret is None):
        return result
    host_scsi_luns = scsi_lun_ret.ScsiLun
    if (not host_scsi_luns):
        return result
    for scsi_lun in host_scsi_luns:
        if (scsi_lun.key == scsi_lun_key):
            return (scsi_lun.deviceName, scsi_lun.uuid)
    return result
