def _get_hctl(self): from infi.dtypes.hctl import HCTL if self.is_iscsi_session: h, c, t = self._get_hct_iscsi() if (h, c, t) == (-1, 0, -1): return None else: return HCTL(h, c, t, self._get_path_lun_iscsi()) else: h, c, t = self._get_hct_fc(self.initiator_port_name, self.target_port_name) if (h, c, t) == (-1, 0, -1): return None else: return HCTL(h, c, t, self._get_path_lun_fc())
def get_hctl(self): from pyVmomi import vim from infi.storagemodel.errors import RescanIsNeeded from pyVmomi import vim scsi_topology_adapters = self._properties.get( SCSI_TOPOLOGY_PROPERTY_PATH, []) expected_vmhba = self._path_data_object.adapter.split('-')[-1] # adapter.key is key-vim.host.ScsiTopology.Interface-vmhba0 # path_data_object.adapter is key-vim.host.FibreChannelHba-vmhba2 for adapter in [ adapter for adapter in scsi_topology_adapters if adapter.key.split('-')[-1] == expected_vmhba ]: for target in adapter.target: our_transport = self._path_data_object.transport target_transport = target.transport if (isinstance(our_transport, vim.HostInternetScsiTargetTransport) and isinstance(target_transport, vim.HostInternetScsiTargetTransport) and our_transport.iScsiName == target_transport.iScsiName) or \ (isinstance(our_transport, vim.HostFibreChannelTargetTransport) and isinstance(target_transport, vim.HostFibreChannelTargetTransport) and our_transport.portWorldWideName == target_transport.portWorldWideName): for lun in target.lun: # lun.scsiLun = "key-vim.host.ScsiLun-020c0000006742b0f000004e2b0000000000000000496e66696e69" # self._lun_key = 'key-vim.host.ScsiDisk-02000200006742b0f000004e2b0000000000000069496e66696e69' if lun.scsiLun.rsplit('-', 1)[-1] == self._lun_key.rsplit( '-', 1)[-1]: return HCTL(expected_vmhba, 0, target.target, lun.lun) logger.exception( "failed to find SCSI target for path object {}".format( self._path_data_object)) raise RescanIsNeeded()
def get_hctl(self): from infi.dtypes.hctl import HCTL scsi_address = self._pdo_information.ScsiAddress try: return HCTL(scsi_address.PortNumber, scsi_address.ScsiPathId, scsi_address.TargetId, scsi_address.Lun) except AttributeError: # we lost a PDO raise RescanIsNeeded()
def get_hctl(self): """Returns a `infi.dtypes.hctl.HCTL` object""" driver = execute_assert_success( ["/usr/sbin/lsdev", "-F", "parent", "-l", self._name]).get_stdout().strip() host = self._get_host_by_driver(driver) target, lun = execute_assert_success([ "/usr/sbin/lsattr", "-F", "value", "-a", "ww_name", "-a", "lun_id", "-E", "-l", self._name ]).get_stdout().strip().split("\n") target = int(target, 16) lun = int(lun, 16) >> 48 return HCTL(host, 0, target, lun)
def test_fc_mapping_gone(self, get_storage_model): from . import FiberChannelMappingNotExists, MultipleFiberChannelMappingNotExist i_wwn = ":".join(["01"] * 8) t_wwn = ":".join(["02"] * 8) get_storage_model.return_value = MockModel() SCSIModel._devices = [Disk("1")] SCSIModel._devices[0].connectivity = FCConectivityMock(i_wwn, t_wwn) SCSIModel._devices[0].hctl = HCTL(1, 0, 0, 1) self.assertFalse(FiberChannelMappingNotExists(i_wwn, t_wwn, 1)()) self.assertFalse( MultipleFiberChannelMappingNotExist([i_wwn], [t_wwn], [1, 2])()) SCSIModel._devices = [] self.assertTrue(FiberChannelMappingNotExists(i_wwn, t_wwn, 1)()) self.assertTrue( MultipleFiberChannelMappingNotExist([i_wwn], [t_wwn], [1, 2]))
def get_hctl(self): """Returns a `infi.dtypes.hctl.HCTL` instance""" host = AixSCSIDevice._get_host_by_driver(self._driver) return HCTL(host, 0, self._target, self._lun)
def get_hctl(self): # TODO make sure which is base 16 and which isn't! return HCTL(int(self.controller), int(self.controller), int(self.target, 16), int(self.disk))
def get_hctl(self): from infi.dtypes.hctl import HCTL return HCTL(*defer(self.get_ioctl_interface().scsi_get_address)())
def __init__(self, sysfs, multipath_object_path): from infi.dtypes.hctl import HCTL self.multipath_object_path = multipath_object_path self.hctl = HCTL(*self.multipath_object_path.hctl) self.sysfs_device = sysfs.find_scsi_disk_by_hctl(self.hctl)