connector – Connector

用于每个支持的传输协议的 Brick Connector 对象。

这里的连接器负责发现和移除每个支持的传输协议的卷。

class os_brick.initiator.connector.InitiatorConnector
static factory(protocol, root_helper, driver=None, use_multipath=False, device_scan_attempts=3, arch=None, *args, **kwargs)

基于协议和架构构建 Connector 对象。

class os_brick.initiator.connector.ISCSIConnector(root_helper: str, driver=None, execute=None, use_multipath: bool = False, device_scan_attempts: int = 3, transport: str = 'default', *args, **kwargs)

连接/断开 iSCSI 卷的 Connector 类。

connect_volume(connection_properties: dict) dict[str, str] | None

将卷连接到 instance_name。

参数:

connection_properties (dict) – 描述所有目标卷属性的有效字典。

返回值:

dict

iSCSI 的 connection_properties 必须包括:target_portal(s) - IP 和可选端口 target_iqn(s) - iSCSI Qualified Name target_lun(s) - 卷的 LUN ID 请注意,当 use_multipath=True 时可以使用复数键。

disconnect_volume(connection_properties: dict, device_info: dict, force: bool = False, ignore_errors: bool = False) None

从 instance_name 断开卷。

参数:
  • connection_properties (dict 必须包括:target_portal(s) - IP 和可选端口 target_iqn(s) - iSCSI Qualified Name target_lun(s) - 卷的 LUN ID) – 描述所有目标卷属性的字典。

  • device_info (dict) – 历史差异,但与 connection_props 相同

  • force (bool) – 是否强制断开连接,即使刷新失败。

  • ignore_errors (bool) – 当 force 为 True 时,这将决定在完成操作后是忽略错误还是引发异常。默认值为 False。

class os_brick.initiator.connector.FibreChannelConnector(root_helper: str, driver=None, execute: str | None = None, use_multipath: bool = False, device_scan_attempts: int = 3, *args, **kwargs)

连接/断开 Fibre Channel 卷的 Connector 类。

connect_volume(connection_properties: dict) dict

将卷连接到 instance_name。

参数:

connection_properties (dict) – 描述所有目标卷属性的字典。

返回值:

dict

Fibre Channel 的 connection_properties 必须包括:target_wwn - World Wide Name target_lun - 卷的 LUN ID

disconnect_volume(connection_properties: dict, device_info: dict, force: bool = False, ignore_errors: bool = False) None

从 instance_name 断开卷。

参数:
  • connection_properties (dict) – 描述所有目标卷属性的字典。

  • device_info (dict) – 历史差异,但与 connection_props 相同

Fibre Channel 的 connection_properties 必须包括:target_wwn - World Wide Name target_lun - 卷的 LUN ID

class os_brick.initiator.connector.LocalConnector(root_helper, driver=None, *args, **kwargs)

“连接/断开基于文件系统的卷的 Connector 类。

connect_volume(connection_properties: dict) dict

连接到卷。

参数:

connection_properties (dict) –

描述所有目标卷属性的字典。 connection_properties 必须包括

  • device_path - 要连接的卷的路径

返回值:

dict

disconnect_volume(connection_properties, device_info, force=False, ignore_errors=False)

从本地主机断开卷。

参数:
  • connection_properties (dict) – 描述所有目标卷属性的字典。

  • device_info (dict) – 历史差异,但与 connection_props 相同

class os_brick.initiator.connector.HuaweiStorHyperConnector(root_helper, driver=None, *args, **kwargs)

“连接/断开 SDSHypervisor 卷的 Connector 类。

connect_volume(connection_properties)

连接到卷。

参数:

connection_properties (dict) – 描述所有目标卷属性的字典。

返回值:

dict

disconnect_volume(connection_properties, device_info, force=False, ignore_errors=False)

从本地主机断开卷。

参数:
  • connection_properties (dict) – 描述所有目标卷属性的字典。

  • device_info (dict) – 历史差异,但与 connection_props 相同

class os_brick.initiator.connectors.nvmeof.NVMeOFConnector(root_helper: str, driver: HostDriver | None = None, use_multipath: bool = False, device_scan_attempts: int = 5, *args, **kwargs)

用于连接/断开 NVMe-oF 卷的连接器类。

connect_volume(connection_properties: NVMeOFConnProps) dict[str, str]

连接并发现卷。

disconnect_volume(connection_properties: dict, device_info: dict[str, str], force: bool = False, ignore_errors: bool = False) None

刷新卷。

卷的断开发生在存储系统端。在这里,如果没有任何卷剩余,我们可以删除到子系统的连接。但新的卷可能会在同时异步出现。所以剩下的只有刷新或拆卸相应的 RAID 设备。

参数:
  • connection_properties (dict) – 字典,描述了所有目标卷属性,如 connect_volume 中所述,但还包含“device_path”键,其中包含连接的卷的路径(Nova 添加此项)。

  • device_info (dict) – 历史差异,但与 connection_props 相同

extend_volume(connection_properties: dict[str, str]) int

更新已连接的卷,以反映扩展后的当前大小

反映 NVMe-oF 卷的新大小的唯一方法是重新扫描,这将重新扫描整个子系统。这在 attach_volume 和 detach_volume 中是一个问题,但在这里不是,因为我们将至少在子系统中拥有我们正在操作的命名空间。

棘手的部分是知道何时已经完成重新扫描,并且 sysfs 上的卷大小是最终的。重新扫描可能由于 AER 消息而在此方法调用之前已经发生,或者我们可能需要在这里触发它。

可以使用“nvme ns-rescan”手动触发扫描,或者写入 configf 的 rescan 文件中的 1,或者它们可以通过调用“nvme list”、“nvme id-ns”,甚至使用“nvme admin-passthru”命令间接触发。

即使在使用上述任何 NVMe 命令获取新大小后,我们仍然需要等待直到这反映在主机设备上,因为我们不能在新的大小生效之前返回给调用者。

如果在系统上没有看到新的大小生效 5 秒钟,或者我们无法使用 nvme 获取新的大小,那么我们将在后者中重新扫描,并且在两种情况下,我们都会盲目地等待 5 秒钟并返回当前存在的大小。

对于复制的卷,需要扩展 RAID。

get_volume_paths(connection_properties: NVMeOFConnProps, device_info: dict[str, str] | None = None) list[str]

返回存在卷的路径。

classmethod get_connector_properties(root_helper, *args, **kwargs) dict

NVMe-oF 连接器属性(initiator uuid 和 nqn)。