添加检查等待状态¶
https://bugs.launchpad.net/ironic/+bug/1725211
该规范建议在 ironic 状态机中添加一个新的 inspect wait 状态。
问题描述¶
带内检查是一个异步过程 [1],目前没有通过“等待”状态来处理。这与其余的异步 ironic 状态存在差异,并且可能对未来的功能(例如中止内省 [2] 或合并 ironic 和 ironic-inspector [3])造成问题;
提议的变更¶
因此,让我们在 ironic 状态机中添加一个新的被动状态,即 inspect wait 状态。
对于 ironic inspector 驱动程序之类的异步检查,当发出检查请求时,ironic conductor 会将节点从 manageable 状态移动到 inspecting 状态,然后如果 InspectInterface.inspect_hardware 返回 INSPECTING 或 INSPECTWAIT,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 状态机中。
将添加以下状态转换
inspecting到inspect wait,事件为wait。inspect wait到inspect failed,事件为fail。inspect wait到manageable,事件为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 接口实现的,其从 inspecting 到 inspect wait 的状态转换由 ironic inspector 处理,但需要在状态检查中添加 inspect wait 状态。
实现¶
负责人¶
- 主要负责人
kaifeng
- 其他贡献者
vetrisko
工作项¶
添加
inspect wait状态和状态转换到 ironic 状态机。在 ironic inspector 的
_check_status和OneViewInspect驱动程序的_check_status中应用状态更改。添加新的选项
inspect_wait_timeout,并弃用inspect_timeout。在 conductor 定期任务
_check_inspect_timeouts中处理状态inspect wait的超时,允许在节点处于inspect wait状态时更新节点、端口和端口组。处理 API 微版本兼容性。
将
inspect wait添加到 ironic-inspector 中作为有效状态。更新文档,有关详细信息,请参阅 文档影响。
依赖项¶
无
测试¶
将添加单元测试,tempest 测试将涵盖 API 更改。
升级和向后兼容性¶
API 向后兼容性由微版本保护。
文档影响¶
状态图将从源代码自动生成。更新 ironic 状态文档以解决新状态,以及当前 inspecting 状态的语义变化。