添加检查等待状态

https://bugs.launchpad.net/ironic/+bug/1725211

该规范建议在 ironic 状态机中添加一个新的 inspect wait 状态。

问题描述

带内检查是一个异步过程 [1],目前没有通过“等待”状态来处理。这与其余的异步 ironic 状态存在差异,并且可能对未来的功能(例如中止内省 [2] 或合并 ironicironic-inspector [3])造成问题;

提议的变更

因此,让我们在 ironic 状态机中添加一个新的被动状态,即 inspect wait 状态。

对于 ironic inspector 驱动程序之类的异步检查,当发出检查请求时,ironic conductor 会将节点从 manageable 状态移动到 inspecting 状态,然后如果 InspectInterface.inspect_hardware 返回 INSPECTINGINSPECTWAIT,ironic conductor 会将节点移动到 inspect wait 状态。返回 INSPECTING 的行为将被弃用并记录为警告。弃用期过后,返回 INSPECTING 将导致节点移动到 inspect failed 状态。

添加一个新的选项 [conductor]inspect_wait_timeout 来保护 inspect wait 状态,默认值为 1800 秒,与 [conductor]inspect_timeout 相同。如果在 inspect wait 状态下硬件检查超时,节点将从 inspect wait 移动到 inspect failed

现有的 [conductor]inspect_timeout 将被弃用。

在更新 ironic 节点、端口和端口组时,inspect wait 状态将被设置为允许的状态。

由于 ironic-inspector 在开始检查之前会检查节点配置状态,因此需要将 inspect wait 状态添加到 ironic-inspector 中作为有效状态。

备选方案

此功能没有替代方案。

数据模型影响

状态机影响

一个新的不稳定状态 inspect wait 将被添加到 ironic 状态机中。

将添加以下状态转换

  1. inspectinginspect wait,事件为 wait

  2. inspect waitinspect failed,事件为 fail

  3. inspect waitmanageable,事件为 done

REST API 影响

API 微版本将增加,以隐藏新的 inspect wait 状态,以防止使用旧微版本的客户端访问,这将在 update_state_in_older_versions 中完成。

节点相关的 API 端点将受到影响

  • POST /v1/nodes

  • GET /v1/nodes

  • GET /v1/nodes/detail

  • GET /v1/nodes/{node_ident}

  • PATCH /v1/nodes/{node_ident}

对于使用旧微版本的客户端,inspect wait 的配置状态将被更改为 inspecting,API 行为没有其他影响。

客户端 (CLI) 影响

由于兼容性在 ironic API 中处理,CLI 不受影响。

“ironic” CLI

“openstack baremetal” CLI

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

Ramdisk 影响

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

添加一个新的选项 [conductor]inspect_wait_timeout 来保护状态 inspecting 的超时,默认为 1800 秒。

开发人员影响

此功能对同步检查没有影响,这包括大多数 OOB 驱动程序。对于带内检查,必须考虑新的状态。

实施此规范后,基于异步检查的驱动程序必须相应地进行更改,这包括带内检查和带外检查(如果有)。

OneViewInspect 在树中是基于 ironic inspector 接口实现的,其从 inspectinginspect wait 的状态转换由 ironic inspector 处理,但需要在状态检查中添加 inspect wait 状态。

实现

负责人

主要负责人

kaifeng

其他贡献者

vetrisko

工作项

  1. 添加 inspect wait 状态和状态转换到 ironic 状态机。

  2. 在 ironic inspector 的 _check_statusOneViewInspect 驱动程序的 _check_status 中应用状态更改。

  3. 添加新的选项 inspect_wait_timeout,并弃用 inspect_timeout

  4. 在 conductor 定期任务 _check_inspect_timeouts 中处理状态 inspect wait 的超时,允许在节点处于 inspect wait 状态时更新节点、端口和端口组。

  5. 处理 API 微版本兼容性。

  6. inspect wait 添加到 ironic-inspector 中作为有效状态。

  7. 更新文档,有关详细信息,请参阅 文档影响

依赖项

测试

将添加单元测试,tempest 测试将涵盖 API 更改。

升级和向后兼容性

API 向后兼容性由微版本保护。

文档影响

状态图将从源代码自动生成。更新 ironic 状态文档以解决新状态,以及当前 inspecting 状态的语义变化。

参考资料