定义 idrac 硬件类型对 Redfish 接口的支持

https://storyboard.openstack.org/#!/story/2004592

操作者需要能够配置 Ironic 使用 Redfish 来管理 Dell EMC 裸机服务器,并确信它

  • 提供了一种逐步增加 Redfish 使用的方法,随着 Ironic 的支持、标准以及 Dell EMC 服务实现的发展,

  • 提供 Dell EMC 支持的管理协议选择,包括智能平台管理接口 (IPMI)、Redfish 和 Web 服务管理 (WS-Man),

  • 提供所有他们依赖的 idrac 硬件类型功能,

  • 能够工作并且将继续工作,

  • 得到供应商和社区的支持,并且

  • 能够提供 Dell EMC 增值服务。

本规范建议 idrac 硬件类型提供这一点。

问题描述

用例

扩展了前言段落描述的内容,可以设想几种用例。虽然本规范支持这些用例,但最终可能只有一部分用例在操作者中具有实际用途。这可能受到许多因素的影响,包括现有与全新部署、操作者对 Redfish 与 WS-Man 的熟悉程度、协议实现成熟度、Redfish 和 WS-Man 中所需功能的可用性、对供应商增值服务的需求、运营计划和时间表等。

以下是这些用例。请注意,除了前两个之外,它们可以组合使用来配置单个 Dell EMC 裸机服务器。

  • 管理员用户拥有一个 Dell EMC 裸机服务器,并且仅使用 WS-Man 来管理它。

  • 管理员用户拥有一个 Dell EMC 裸机服务器,并且仅使用 Redfish 来管理它。

  • 管理员用户拥有一个 Dell EMC 裸机服务器,并且同时使用 Redfish 和 WS-Man 来管理它。当两者都提供所需的功能时,使用其中任何一个。

  • 管理员用户拥有一个 Dell EMC 裸机服务器,并且同时使用 Redfish 和 WS-Man 来管理它。Ironic 管理服务器的能力得到最大化。

  • 管理员用户拥有一个 Dell EMC 裸机服务器,并且同时使用 Redfish 和 WS-Man 来管理它。使用仅从一个或两者处可用的供应商增值服务。

提议的变更

背景

idrac 硬件类型是 Ironic 驱动程序,旨在与配备集成 Dell 远程访问控制器 (iDRAC) 板载管理控制器的 Dell EMC 裸机服务器一起使用。到目前为止,所有带外 (OOB) 管理协议依赖的接口实现 idrac 都使用 WS-Man 协议与 iDRAC 交互。这些实现 inspectmanagementpowerraidvendor 硬件接口。与硬件类型一样,它们也被命名为 idrac。它们依赖于 python-dracclient 的 WS-Man 客户端。

操作者还可以选择使用通用的、与供应商无关的 redfish 硬件类型,与具有支持 Redfish 协议的 iDRAC 的 Dell EMC 裸机服务器一起使用。redfish 支持的 OOB 协议依赖的接口实现使用 Redfish 协议与 BMC 交互。这些实现 biosinspectmanagementpower 硬件接口。同样,与硬件类型一样,它们也被命名为 redfish。它们依赖于 sushy 的 Redfish 客户端。重要的是,虽然其中一些与 iDRAC 配合使用,包括 managementpower,但并非全部。

redfish 硬件类型支持管理符合 Redfish 协议的服务器。但是,它相对较新,并且该协议标准一直在发展,以及 Dell EMC 等硬件供应商的实现也在发展。与标准一样,合规性和互操作性之间存在差异。例如,Redfish bios 接口实现由于客户端和服务器协议实现不兼容,因此无法与 iDRAC 配合使用。

虽然 idracredfish 硬件类型支持的接口实现之间存在很多功能重叠,但并不完全相同。只有 idrac 支持 raid 接口实现,只有 redfish 支持 bios。此外,idracredfish 接口实现中的可选硬件接口功能可能不同。例如,虽然 redfish 实现的 management 硬件接口首先引入了可选的启动模式功能,但 idrac 尚未提供该功能。因此,这两种硬件类型不能完全替代彼此。

Dell EMC 希望能够像通过 WS-Man 一样,为其客户提供 Redfish 标准支持的供应商增值服务。这使操作者能够使用尚未标准化的功能和功能,从而使操作者受益。Dell EMC 可以更快速地响应客户的需求并在市场上实现差异化。

目标

通过本规范,我们将实现通过 Dell EMC 裸机服务器推广和加速 Redfish 采用的目标。

非目标

以下内容被认为不属于本规范的范围

  • 支持使用 Redfish 和 WS-Man managementpower 接口实现混合配置的节点。遗留的 idrac 实现的 managementpower 硬件接口相互作用以设置启动设备。尚不清楚在混合 Redfish 和 WS-Man 配置中适应这一点是否有必要。

  • 可以使用以下 TripleO 命令来注册和配置节点,以便使用 Ironic 进行部署

    openstack overcloud node import instackenv.json
    

    请参阅 TripleO 注册节点 文档。它在节点的 driver_info 字段中设置属性,这些属性是其驱动程序所必需的。目前,当节点的驱动程序为 idrac 时,这些属性是 WS-Man 接口实现 idrac 支持的属性——drac_addressdrac_usernamedrac_password。请参阅 iDRAC 驱动程序 文档。

    Redfish 接口实现需要在 driver_info 字段中具有类似的但不同的属性,包括 redfish_addressredfish_system_idredfish_usernameredfish_password。请参阅 Redfish 驱动程序 文档。

    更改该 TripleO 命令以在节点的 driver_info 字段中设置 Redfish 和 WS-Man 属性,当其 driveridrac 时,超出本规范的范围。TripleO 项目蓝图将解决这个问题。

  • 定义 idrac 硬件类型对 IPMI 接口实现的的支持。可以将其作为本规范的后续工作来完成。

解决方案

本规范建议通过更改 idrac 硬件类型来解决其描述的问题。由于 Ironic 驱动程序组合改革,我们允许“一个供应商驱动程序,每个节点可配置选项,而不是每个供应商的许多驱动程序”。[1] 该改革的目标包括 [2]

* Make vendors in charge of defining a set of supported interface
  implementations in priority order

* Allow vendors to guarantee that unsupported interface implementations will
  not be used with hardware types they define. This is done by having a
  hardware type list all interfaces it supports.

idrac 硬件类型中实现该解决方案有助于使其成为具有 iDRAC 及其 IPMI、Redfish 和 WS-Man 管理协议实现的 Dell EMC 裸机服务器的唯一 Dell EMC 驱动程序。它也符合改革的目标。操作者期望的是这样。

以下是该提案的详细信息。

  • 定义两个新的接口实现组,入口点名称为 idrac-redfishidrac-wsmanidrac-redfish 入口点引用与 iDRAC 兼容的 Redfish 接口实现,目前是 managementpower 硬件接口。idrac-wsman 入口点是遗留 idrac 入口点的新的名称。遗留 idrac 入口点保持不变。例如

    ironic.hardware.interfaces.management =
        ...
        idrac = ironic.drivers.modules.drac.management:DracManagement
        idrac-redfish = ironic.drivers.modules.drac.management:DracRedfishManagement
        idrac-wsman = ironic.drivers.modules.drac.management:DracWSManManagement
        ...
        redfish = ironic.drivers.modules.redfish.management:RedfishManagement
    
  • 声明 idrac 硬件类型对 idracidrac-redfishidrac-wsman 接口实现的的支持。idrac 继续具有最高优先级,因为它在其 supported_<INTERFACE>_interfaces 列表中排在第一位。这里 <INTERFACE> 是一种硬件接口类型:inspectmanagementpower 等。例如

    class IDRACHardware(generic.GenericHardware):
        ...
        @property
        def supported_management_interfaces(self):
            return [management.DracManagement, management.DracWSManManagement,
                management.DracRedfishManagement]
        ...
    

注意

该属性使用类,而不是实例或入口点名称。示例假定已导入所需的模块。

  • 新的 idrac-redfish 入口点由新的 Python 类定义,因为使用通用的、与供应商无关的 Redfish 类会使 redfish 入口点与 idrac-redfish 同义,并受支持。以后更改入口点 Python 类名称以解决 Dell EMC 特定的不兼容性或引入供应商增值服务,这可能会消除对 redfish 的支持,这可能是一个破坏性更改。新的 Python 类是从通用的、与供应商无关的 Redfish 类派生的。

  • 新的 idrac-wsman 入口点由新的 Python 类定义。通过将遗留 idrac 入口点的类从 Drac<INTERFACE> 重命名为 DracWSMan<INTERFACE> 来创建这些类。这里 <INTERFACE> 指的是一种硬件接口类型:InspectManagementPower 等。

    遗留的 Drac<INTERFACE> 类通过简单地从新的 DracWSMan<INTERFACE> 类派生来重新定义。例如

    class DracManagement(DracWSManManagement):
        pass
    

    这使得遗留的 Drac<INTERFACE> 类成为新的 DracWSMan<INTERFACE> 类的别名。对 WS-Man 接口实现进行的任何错误修复或功能添加都可从 idracidrac-wsman 入口点获得。拥有两个入口点组的单独类使得随后可以添加实现遗留 idrac 入口点弃用的逻辑,例如发出日志消息等。

备选方案

  • 我们可以更改 python-dracclient 的最低层以支持 Redfish,除了 WS-Man 之外。但是,我们预计提供 python-dracclient API 和工作流程,这些 API 和工作流程抽象了非常不同的 Redfish 和 WS-Man 技术,将具有挑战性。Redfish 的接口是 RESTful 的,而 WS-Man 是一种简单对象访问协议 (SOAP)。API 和工作流程可能需要更改或重新定义。这将需要对现有的 idrac 接口实现进行大量修改。

  • 我们可以保持 idrac 硬件类型用于 WS-Man 和 redfish 硬件类型用于 Redfish 的现状。但是,这不会促进和加速操作者在 Dell EMC 裸机服务器中使用 Redfish,因为 redfish 并不提供 idrac 的所有功能。这也不会支持解决与通用的、与供应商无关的 redfish 硬件类型相关的 Dell EMC 特定不兼容性,或使用 Redfish 引入供应商增值服务。

  • 我们可以让 redfish 接口实现使用 Redfish OEM 扩展来解决供应商特定的不兼容性并引入供应商增值服务。但是,这似乎与它们应该是通用且与供应商无关的意图不一致。

数据模型影响

状态机影响

REST API 影响

客户端 (CLI) 影响

“ironic” CLI

“openstack baremetal” CLI

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

Ramdisk 影响

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

  • 部署者可以将 idrac-redfish 添加到 enabled_management_interfacesenabled_power_interfaces 选项以启用这些新的接口实现。

  • 部署者可以将 idrac-wsman 添加到 enabled_inspect_interfacesenabled_management_interfacesenabled_power_interfacesenabled_raid_interfacesenabled_vendor_interfaces 中,以启用这些新的接口实现。

  • 部署者必须在节点的 driver_info 字段中指定 Redfish 接口实现所需的属性,包括 redfish_addressredfish_system_idredfish_usernameredfish_password,以使用 idrac-redfish 接口实现。这除了 idrac 硬件类型在 driver_info 中需要的传统属性之外 – drac_addressdrac_usernamedrac_password

    openstack baremetal node create --driver idrac --driver-info \
      drac_address=1.2.3.4 --driver-info drac_username=admin --driver-info \
      drac_password=password --driver_info redfish_address=https://1.2.3.4 \
      --driver-info redfish_system_id=/redfish/v1/Systems/System.Embedded.1 \
      --driver-info redfish_username=admin --driver-info \
      redfish_password=password
    

    请参阅 Redfish 驱动程序 文档、iDRAC 驱动程序 文档和 非目标

  • 部署者可以在节点注册时指定新的 idrac-redfishidrac-wsman 接口实现

    openstack baremetal node create --driver idrac ... --management-interface \
      idrac-wsman --power-interface idrac-wsman ...
    

    它们也可以通过以下命令设置

    openstack baremetal node set <NODE> --management-interface idrac-redfish \
      --power-interface idrac-redfish
    

    它们必须如上所述启用。

开发人员影响

实现

负责人

主要负责人

rpioso

其他贡献者

工作项

  • 定义两个具有入口点名称为 idrac-redfishidrac-wsman 的接口实现组。

  • 声明 idrac 硬件类型对 idracidrac-redfishidrac-wsman 接口实现的支持。

  • 针对配备 iDRAC 并由 idrac 硬件类型管理的 Dell EMC 裸机服务器集成测试这些更改。

  • 修改 Dell EMC Ironic 第三方持续集成 (CI) 以涵盖此规范添加的支持配置。

  • 更新 iDRAC 驱动程序 文档。

依赖项

此规范与 驱动程序组合改革 相关。

它专门针对配备 iDRAC 并由 idrac 硬件类型管理的 Dell EMC 裸机服务器。

测试

由于当前硬件可用性的限制,无法在 gate 中进行测试。

缓解计划是为通过此规范添加的支持配置添加到 Dell EMC Ironic 第三方 CI 中,我们预计这些配置将很常见。

升级和向后兼容性

此更改设计为向后兼容。传统的 idrac 接口实现入口点将在一段时间内得到支持。将涵盖其弃用的单独故事。

一旦可行,我们将建议切换到合适的新的 idrac-redfishidrac-wsman 接口实现入口点。

文档影响

更新了 iDRAC 驱动程序 文档,以

  • 描述从传统的 idrac 接口实现入口点切换到新的 idrac-redfishidrac-wsman 入口点,

  • 反映对支持的接口实现的更改,并

  • 告知具有 Redfish 和 WS-Man 管理电源 接口实现混合的节点配置不受支持。

参考资料

OpenStack 软件项目
相关的 Ironic 规范
文档
标准

脚注