支持裸机检查中止¶
https://bugs.launchpad.net/ironic/+bug/1703089
本规范旨在支持从 ironic API 中中止节点检查。 此规范的继续需要 inspect wait 状态的依赖关系 [1]。
问题描述¶
目前,我们无法从 ironic API 中中止节点检查过程。 当节点未在检查网络下正确设置时,管理员只能等待它在指定超时后失败,或者从 ironic inspector API/CLI 中中止检查过程(如果使用带内检查接口 inspector)。
虽然检查状态会通过周期性任务同步到 ironic,但对于从 ironic 发起的、然后由 inspector 停止的操作,它并不一致,此外,这会产生一点时间延迟。 在下一个状态同步之前,节点状态在 ironic 和 inspector 之间不一致。 ironic-inspector 状态同步的默认时间间隔为 60 秒,具体取决于用户配置而有所不同。
提议的变更¶
在状态机中添加 inspect wait 到 inspect failed 的状态转换,添加对 ironic 的支持,允许在节点处于 inspect wait 状态时请求 abort 动词。
在 InspectInterface 中添加一个名为 abort 的方法,以便检查接口可以提供实现来支持检查中止。 默认行为是引发 UnsupportedDriverExtension 异常。 为 inspector 检查接口实现中止操作。
当从 ironic API 请求中止操作,并且节点处于 inspect wait 状态时,ironic 调用驱动程序 API 的检查接口中的 abort 方法,如果该方法执行成功,则将节点状态移动到 inspect failed。
请注意,对 ironic-inspector 的中止请求是异步的,ironic 将在接受请求 (202) 后将节点移动到 inspect failed,而不管 ironic-inspector 处的操作是否执行成功。 这通过在 ironic-inspector 端处理故障来降低此功能的复杂性。
从 ironic-inspector 的角度来看,每个检查请求都会刷新节点的本地缓存,这确保了在开始节点检查时节点状态同步。 但是,如果接受了中止请求但在 ironic-inspector 处未成功执行,则会存在不一致的节点状态。 此不一致性将在 ironic-inspector 节点缓存清理超时时消除。
涉及的更改是
在基本检查接口 (InspectInterface) 中添加一个名为
abort()的方法。为
inspector检查接口实现abort()。实现 ironic 处理当置备状态为
inspect wait时abort动词的逻辑。
备选方案¶
在指定超时值后等待
inspect fail。通过 ironic-inspector api 或
openstack baremetal introspection abort命令请求。 请注意,只有在使用 ironic inspector 作为检查接口时才可行。 其他检查接口(如带外检查)可能采用不同的方法来实现相同目标,这超出了本规范的范围。
数据模型影响¶
无
状态机影响¶
添加 inspect wait 到 inspect failed 的状态转换,事件为 abort,添加到 ironic 状态机。
REST API 影响¶
修改置备状态 API 以支持本规范中描述的转换。 API 微版本将增加。 对于使用早期微版本的客户端,当节点处于 inspect wait 状态时,不允许使用 abort 动词。
PUT /v1/nodes/{node_ident}/states/provision
与
abort处于inspecting状态的节点相同的 JSON Schema{ "target": "abort" }
对于使用早期微版本的客户端,返回 406 (Not Acceptable)
对于使用受支持微版本的客户端
如果请求已接受,则返回 202 (Accepted)
如果当前检查接口不支持中止,则返回 400 (Bad Request)
客户端 (CLI) 影响¶
“ironic” CLI¶
无
“openstack baremetal” CLI¶
无
RPC API 影响¶
无
驱动程序 API 影响¶
将在 base.py 中的 InspectInterface 中添加一个新方法 abort,默认行为是引发异常 UnsupportedDriverExtension
def abort(self, task):
raise exception.UnsupportedDriverExtension(
driver=task.node.inspect_interface,
extension='abort')
Nova 驱动程序影响¶
无
Ramdisk 影响¶
无
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
对于大量处于检查状态的多个节点,在发生检查重试时,可以减少一点时间成本。
性能影响¶
无
其他部署者影响¶
部署者可以通过 ironic API/CLI 中止硬件内省,除了 inspector API/CLI 之外,对于使用 inspector 作为(带内)检查接口的节点。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
kaifeng
工作项¶
添加通过
abort将inspect wait转换为inspect failed的转换。将一个新方法
abort()添加到基本检查接口。将中止实现添加到 ironic
inspector.Inspector。在 ironic conductor 中实现中止逻辑。
依赖项¶
无
测试¶
将添加 Tempest 测试来测试 REST API 的更改。
升级和向后兼容性¶
为了向后兼容,API 将被更新。 使用此功能之前版本的客户端请求的处理方式相同。
文档影响¶
相关文档和状态机图将相应更新。