介绍驱动器能力

本规范介绍了 Ironic 驱动器的可检查能力(通过 Ironic API)。

https://blueprints.launchpad.net/ironic/+spec/driver-capabilities

问题描述

这些用例至少需要能力:

  • 使用合适的驱动器在节点上进行调度。

    例如,随着时间的推移,我们开始实现并非所有驱动器都支持的部署变体,包括:

    • 全盘与分区部署 [1]。

    • 使用 configdrive 进行部署 [2]。

    • 使用临时分区。

    在调度时需要考虑所有这些差异。 否则,将在部署的后期阶段出现错误,甚至(如全盘部署)导致错误的部署。

    Ironic 应该能够将驱动器能力聚合到节点能力中,以便将其暴露给调度器。(本规范未涉及。)

  • 检查驱动器功能。

    随着我们引入越来越多的特定于供应商的功能,我们需要某种方法来确定给定驱动器是否支持这些功能。 驱动器能力将使第三方工具能够检查特定驱动器对特定功能的支持情况。

提议的变更

  • 在所有驱动器接口中引入 get_capabilities() 调用,返回值是字符串集合。

  • BaseDriver 中引入 get_capabilities() 调用,默认值为所有接口能力的并集。

  • 将能力作为 /v1/drivers/{name}/capabilities REST 端点发布。

通过上述更改,开发人员可以使用 Ironic API 浏览驱动器列表并检查其能力。

备选方案

  • 显然,最佳解决方案是让所有驱动器实现相同的能力集。 不幸的是,这不现实。 例如,某些驱动器(如 IPMI)比其他驱动器(如 ILO 和 DRAC)更通用,但我们不希望人为地限制更具体的驱动器可以暴露的内容。

数据模型影响

无。 目前,我们期望驱动器能力是硬编码的常量。

REST API 影响

  • /v1/drivers/{name}/capabilities

    • 获取驱动器能力。

    • 方法类型 GET。

    • 正常的 http 响应代码:200

    • 预期的错误 http 响应代码

      • 404 - 未找到驱动程序。

    • 参数:name - 驱动程序名称

    • 主体:无

    • 响应:字符串列表的 JSON。

  • 客户端库和 CLI 需要进行相应的更改,例如:

    $ ironic driver-get-capabilities pxe_ipmitool
    

RPC API 影响

  • 新的同步 RPC 方法 get_driver_capabilities,接受 driver_name,返回能力列表。

驱动程序 API 影响

  • 将新方法 get_capabilities 添加到所有接口,默认情况下返回一个空集。

  • 将新方法 get_capabilities 添加到 BaseDriver,默认情况下返回所有接口的 get_capabilities 结果的并集。

更改是向后兼容的。

Nova 驱动程序影响

目前没有。 本规范是实现节点硬件能力的起点 [3],这将影响 Nova 驱动程序。

安全影响

其他最终用户影响

  • 新的 CLI 命令:ironic driver-get-capabilities <driver name>

可扩展性影响

性能影响

其他部署者影响

开发人员影响

  • 驱动程序开发人员可以覆盖 get_capabilities 以提供有关其他能力的信息。

实现

负责人

主要负责人

工作项

  • get_capabilities 添加到所有接口。

  • get_capabilities 添加到 BaseDriver

  • get_driver_capabilities 添加到 RPC API。

  • 添加新的 REST API。

  • 研究是否将能力添加到现有的驱动程序。

依赖项

测试

单元测试

升级和向后兼容性

没有升级影响

文档影响

  • 应记录新的 API。

  • 驱动程序文档应提及新方法。

参考资料