使用对象进行资源跟踪器

https://blueprints.launchpad.net/nova/+spec/make-resource-tracker-use-objects

该蓝图已获得 Kilo 的批准,但一些补丁错过了功能冻结。本提案旨在 Liberty 中完成剩余的补丁。

Nova 正在将用于通过 RPC 和数据库进行通信的数据结构转换为使用一种称为 Nova Objects 的对象封装。这支持实时升级和数据库模式独立性的多版本控制。该蓝图涵盖将资源跟踪器转换为使用 Nova Objects。

问题描述

转换为 Nova Objects 将用 Nova Object 版本替换当前通过 Conductor API 传递的字典数据结构。在必要时,Nova Objects 将扩展以涵盖尚未实现参数。

用例

作为操作员,我希望能够在不出现停机的情况下升级 Nova。

项目优先级

该蓝图符合实时升级的优先级。

提议的变更

将使用的 Nova Object 类包括

  • ComputeNode

  • Instance

  • 迁移

  • 风味

  • Service

  • PciDevicePool

ComputeNode 对象在 Kilo 周期中被修改为包含必需的字段。PciDevicePool 对象周围需要进行少量清理,以正确分配标签以及与 os-pci API 相关的 API 示例和测试。PciDevicePool 用于 ComputeNode 对象,因此在最终用 ComputeNode 对象替换资源跟踪器中的计算节点数据结构之前,这是必需的。

其他对象在 Kilo 期间已添加到资源跟踪器中。

备选方案

无。

数据模型影响

对象将代码与数据库模式隔离。它们被编写为与现有数据模型版本一起工作。目前,调度器不使用 ComputeNode 对象,因此那里的代码需要容忍数据库模式或存储在字段中的数据格式的变化。

REST API 影响

无。当前用于 pci 统计信息的测试和 API 示例不正确,将被修复。这不会更改相关的 API,因此,虽然示例会更改,但 API 不会更改。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

对象被编写为与 Juno 中使用的数据库模式兼容。此蓝图中的剩余更改没有相关的数据库迁移,并且数据库中字段中存储的数据格式不会更改。这意味着 Kilo 和 Liberty 版本的计算节点可以共存并与调度器交互。

开发人员影响

从事资源跟踪器的开发人员需要使用新的对象,而不是直接向 Conductor 进行数据库调用。

实现

负责人

主要负责人

pmurray

工作项

这些是完成蓝图剩余的工作项。

  • 在资源跟踪器中使用 ComputeNode 对象

其中一些工作项目前已准备好进行审查:https://review.openstack.org/#/q/topic:bp/make-resource-tracker-use-objects,n,z

依赖项

测试

这不会影响现有的 Tempest 测试。将为每个对象添加单元测试,并修改现有测试以处理新的数据结构。

文档影响

os-pci API 响应示例将是正确的。不会有新功能,API 不会更改,但 API 示例出现在文档中,因此这将对文档产生轻微的影响。

参考资料

https://blueprints.launchpad.net/nova/+spec/scheduler-lib