移除 provider.yaml 中已跟踪的特性

https://blueprints.launchpad.net/nova/+spec/copy-applied-provider-yaml

本文档提出一项功能,以确保从 provider.yaml 中移除的特性也能从资源提供者中正确删除。

问题描述

Nova-compute 具有使用配置文件(provider.yaml)向资源提供者注册自定义特性的功能。 https://docs.openstack.org/nova/latest/admin/managing-resource-providers.html

在这种配置文件中,即使自定义特性的值被修改或特性被删除,原始特性也不会从目标资源提供者中移除。在用资源提供者注册的自定义特性被替换,并且旧的自定义特性影响调度的情况下,这种行为可能成为一个问题。

用例

  • 作为云运营商,我希望确保对于相同类型的自定义特性,资源提供者只注册一个特性。

  • 作为云运营商,我希望在 nova-compute 的配置文件中完成自定义特性的注册,而无需额外的实现(在另一个系统中调用 Placement API 使用 API/CLI)。

提议的变更

我们建议添加一个流程,让 nova-compute 在将内容应用到 placement 后,将 provider.yaml 文件的内容复制到 /var/lib/nova/applied_provider.yaml

然后,当基于 provider.yaml 文件更新 placement 时,nova-compute 会在 /var/lib/nova/applied_provider.yaml/etc/nova/provider.yaml 之间执行差异比较,以检测 provider.yaml 文件中是否删除了任何特性。

目前,差异比较仅限于特性,但以后可以将此逻辑扩展到允许使用差异比较 provider.yaml 的任何部分。

备选方案

  • 仅将文件中定义的自定义特性注册到资源提供者,将 provider.yaml 视为声明性数据。但是,这是一个破坏性更改,并且存在对现有环境的影响的担忧。

  • 在 provider.yaml 中添加类似 declarative_prefix 的定义,以声明性地处理带有 declarative_prefix 的特性。在这种情况下,对 provider.yaml 中非特性元素的扩展性有限,并且 provider.yaml 中的定义和资源跟踪器的代码都变得复杂。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

预计不会对 nova 的性能产生影响。如果自定义特性更新频繁,则删除和创建特性的请求将频繁发送到 Placement API。

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

mkuroha

其他贡献者

功能联络人

功能联络人

需要联络人

工作项

  • _merge_provider_configs 方法中实现 provider.yaml 的复制以及与 applied_provider.yaml 的特性差异提取。

依赖项

测试

  • 添加单元/功能测试

文档影响

更新现有的 使用配置文件管理资源提供者 指南,以解释与 applied_provider.yaml 相关的行为。

参考资料

历史

修订版

发布名称

描述

2025.2 Flamingo

引入