示例#1
0
 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())
示例#2
0
 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()
示例#3
0
 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()
示例#4
0
 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)
示例#5
0
 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)
示例#7
0
 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))
示例#8
0
 def get_hctl(self):
     from infi.dtypes.hctl import HCTL
     return HCTL(*defer(self.get_ioctl_interface().scsi_get_address)())
示例#9
0
 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)