新的驱动管理接口

https://blueprints.launchpad.net/ironic/+spec/new-management-interface

此蓝图整合了创建用于管理类操作的新驱动接口以及暴露这些方法的新 REST API 资源所需的工作。

问题描述

几乎所有的电源接口(除了 SSH 电源接口)都在它们的 Vendor Passthru 接口上暴露了一个设置启动设备的方法,此蓝图旨在将此方法提升为官方接口。

设置启动设备不适合当前的驱动接口,即使现在它是电源接口的 Vendor Passthru 的一部分,它实际上也不是一个电源操作,因此此蓝图还将包括创建一个名为管理接口的新接口,以便暴露此类管理操作。

如第一段所述,SSH 电源接口没有暴露任何设置启动设备的方法,因此这将作为此蓝图的一部分来实现。我们需要所有驱动程序都遵守新接口,以确保一致性。

至于 API 的更改,将在 REST API 的节点资源中添加一个新的“management”子资源,并暴露获取支持的启动设备以及设置/获取给定节点的启动设备的方法。未来可以向管理接口添加更多操作,例如:get_sensor_data()[1],update_firmware(),get_firmware_list() 等…

提议的变更

  • 创建一个新的管理接口,暴露以下方法

    • validate() - 用于验证特定于驱动程序的管理信息。(例如,节点是否已经设置了正确的凭据)

    • set_boot_device() - 用于为特定节点设置启动设备。

    • get_boot_device() - 用于获取特定节点的当前启动设备。

    • get_supported_boot_devices() - 用于获取该驱动程序支持的启动设备列表。

  • 将 set_boot_device() 方法从 Vendor Passthru 接口移植到新接口。

  • 为 ssh 添加一个管理接口,并为其实现 set_boot_device()

  • 在 REST API 中创建一个新的 /nodes/<uuid>/management/boot_device 子资源,以暴露客户端设置或获取节点启动设备的方法。

    • 要设置启动设备

      PUT {‘boot_device’: ‘pxe’}

      /nodes/<uuid>/management/boot_device[?persistent=<bool>]

      如果请求成功完成,则返回 HTTP 204 (No Content)。

      如果传递了无效或不受支持的启动设备参数,则应返回 400 (Bad Request)。

      可以设置“persistent”标志,以指示启动设备更改是仅应用于下一次启动还是应用于所有未来的启动。默认情况下,persistent 将为 False。

    • 要获取当前启动设备

      GET /nodes/<uuid>/management/boot_device

      返回一个包含启动设备及其是否持久化的字典。例如

      {‘boot_device’: ‘pxe’, ‘persistent’: True}

      如果‘boot_device’未知,其值为 None(seamicro python 库似乎没有暴露获取当前启动设备的方法,只能设置它[3])。

      如果‘persistent’未知,其值为 None(pyghmi 方法获取当前启动设备,但未指示其是否持久化[3]。对于设置启动设备,可以指示其是否持久化)。

    • 要获取支持的启动设备

      GET /nodes/<uuid>/management/boot_device/supported

      这将返回所有支持的启动设备列表(不是启动顺序)。

  • 更新 Ironic 客户端和库以支持新的 API 资源。

备选方案

继续使用 Vendor Passthru 接口。

数据模型影响

REST API 影响

  • 将在 API 中添加一个新的 /nodes/<uuid>/management/boot_device 子资源,设置或获取节点的启动设备的请求应发送到那里,以便像 set_boot_device 这样的方法不再通过 vendor_passthru 暴露。

  • nodes/<uuid>/validate 将包含管理接口。

驱动程序 API 影响

  • 新的管理接口将包含在标准接口组中。

  • ipmitool、ipminative、seamicro 和 ssh 驱动程序将被更新以使用此新接口。

Nova 驱动程序影响

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

lucasagomes

其他贡献者

工作项

  • 创建新的管理接口基类。

  • 将 set_boot_device() 方法从 ipmitool、ipminative、seamicro 驱动程序的 Vendor Passthru 接口移植到新接口。

  • 在 ssh、ipmitool、ipminative、seamicro 驱动程序上实现缺失的方法。

  • 实现 REST API 以暴露新接口。

依赖项

测试

  • 将添加/更新单元测试以覆盖这些更改。

  • 将在 Ironic 中添加 Tempest 测试,以确保新的 /nodes/<uuid>/management/boot_device 正常工作。

文档影响

架构文档应更新为包含新的管理接口。

参考资料

[1] https://specs.openstack.org/openstack/ironic-specs/specs/juno/send-data-to-ceilometer.html [2] https://github.com/seamicro/python-seamicroclient/blob/master/seamicroclient/v2/servers.py#L24 [3] https://github.com/stackforge/pyghmi/blob/master/pyghmi/ipmi/command.py#L123