添加维护原因字段

https://blueprints.launchpad.net/ironic/+spec/maintenance-reason

当节点进入维护模式(手动或自动)时,Ironic 和操作者应该知道原因。

问题描述

Ironic 具有将节点标记为“维护”模式的能力,以便在调度和验证状态时忽略该节点。但是

  • 当 Ironic 自动将节点置于维护模式时,它会将原因设置在 last_error 字段中,该字段可能会被后续的其他任务覆盖。

  • 当操作者手动将节点置于维护模式时,他们没有办法向其他操作者展示原因,或者稍后提醒自己。

提议的变更

以下内容应该足以解决这个问题

  • 应该在节点表中添加一个 maintenance_reason 字段,作为存储节点进入维护模式原因的标准位置。这应该是一个内部属性,不能通过调用 node.update API 直接编辑。

  • 应该添加一个新的 API 端点,以便更轻松地管理维护模式。该端点可以打开或关闭维护模式,并在打开时提供可选的原因,并在关闭时清除原因。为了向后兼容,仍然允许使用旧方法更改维护模式。

  • 修改 node.update 以在通过 node.update API 关闭维护模式时清除维护原因。

备选方案

或者,操作员可以将此信息存储在另一个系统中,例如 CMDB。

虽然我认为这很好,但这不允许 Ironic 在将节点置于维护模式时自动设置维护原因。需要进行一些工作来使 Ironic 通知操作员或与另一个系统集成;并且可能导致操作员需要手动工作才能将原因放入另一个系统。

数据模型影响

这将向 node 表添加一个 maintenance_reason 字段,并附带一个数据库迁移。该字段默认为 NULL,当没有原因时,或者通过新的 API 清除维护原因时,也将是该值。

REST API 影响

将添加一个新端点,包含两种方法

  • PUT /v1/nodes/<uuid>/maintenance

    • 将节点置于维护模式,并提供可选的原因。

    • 方法类型:PUT

    • 正常响应代码:202

    • 预期错误

      • 如果 <uuid> 对应的节点不存在,则返回 404 错误。

      • 如果找不到节点的驱动程序的 conductor,则返回 400 错误。

    • URL: /v1/nodes/<uuid>/maintenance

    • URL 参数: 无。

    • JSON body: {“reason”: “某个原因。”},或者 {} 或为空表示没有原因。

    • 如果成功,响应 body 为空。

  • DELETE /v1/nodes/<uuid>/maintenance

    • 将节点退出维护模式并清除原因。

    • 方法类型: DELETE

    • 正常响应代码:202

    • 预期错误

      • 如果 <uuid> 对应的节点不存在,则返回 404 错误。

      • 如果找不到节点的驱动程序的 conductor,则返回 400 错误。

    • URL: /v1/nodes/<uuid>/maintenance

    • URL 参数: 无。

    • JSON body: 无。

    • 如果成功,响应 body 为空。

应该将 maintenance_reason 字段添加到节点详情 API 中。

RPC API 影响

无。

驱动程序 API 影响

无。

Nova 驱动程序影响

无。

安全影响

无。

其他最终用户影响

将在 python-ironicclient 中添加对此的支持。CLI 的外观将如下所示

usage: ironic node-set-maintenance [--reason <reason>]
                                   <node id> <maintenance mode>

Set maintenance mode on or off.

Positional arguments:
  <node id>           UUID of node
  <maintenance mode>  Supported states: 'on' or 'off'

Optional arguments:
  --reason <reason>   The reason for setting maintenance mode to "on"; not
                      valid when setting to "off".

可扩展性影响

无。

性能影响

无。

其他部署者影响

部署者可能希望在部署后开始使用此功能;但是,否则不应产生任何影响。

开发人员影响

无。

实现

负责人

主要负责人

jroll

其他贡献者

lucasagomes

工作项

  • 使用迁移将 maintenance_reason 添加到节点表中。

  • 在自动设置维护模式时设置 maintenance_reason

  • 添加新的 API 端点。

  • 在使用 node.update 设置维护模式关闭时清除 maintenance_reason。

  • 为新的 API 端点添加客户端支持。

  • 为新的 API 端点添加 Tempest 测试。

依赖项

无。

测试

应该为新的 API 端点添加 Tempest 测试。

升级和向后兼容性

此更改与现有的客户端向后兼容,因为它们仍然可以使用 node.update 调用来打开或关闭维护模式。在 v1 中不会弃用通过 node.update 调用进行更新,因为没有合理的编程方法可以通知用户其弃用。它将在 v2 中弃用。

为了避免维护原因过时,使用 node.update 调用关闭维护模式将清除维护原因。

文档影响

应该记录新的 API 端点和客户端方法。

参考资料

无。