支持在 allocation_candidates 查询中使用任意 traits

https://blueprints.launchpad.net/nova/+spec/any-traits-in-allocation-candidates-query

Placement 中的 GET /allocation_candidates 请求支持 required 查询参数。如果调用者在 required 参数中指定了一系列 traits,那么 Placement 将返回的 allocation candidates 限制为满足该列表中所有 traits 的 RP 树。为了支持 Neutron + Nova 中的最小带宽保证,我们需要能够查询满足指定查询中 traits 列表中的至少一个 trait 的 allocation candidates。这对于当 Neutron 网络映射到多个 physnets 但端口的带宽请求可以从端口的网络映射到的任何 physnet 满足的情况是必需的。

问题描述

Neutron 通过 Nova 需要能够查询 Placement,以查找匹配所提供的查询中 traits 列表中的至少一个 trait 的 allocation candidates。

用例

Neutron 希望使用此 any(traits) 查询来表达端口的带宽资源请求需要由连接到给定端口的网络所连接的 physnets 中的一个的 Network 设备 RP 满足。使用 Neutron 的多提供商网络扩展,单个 Neutron 网络可以由连接到不同 physnets 的多个网络段组成。

提议的变更

扩展 GET /allocation_candidatesGET /resource_providers 请求,添加一个新的 required=in:TRAIT1,TRAIT2 查询参数语法,并更改 Placement 实现以支持这种新的语法。

granular-resource-requests 规范建议在 Placement 查询中支持多个请求组,这些请求组由 required 查询参数中的正整数后缀标识。新的 in:TRAIT1,TRAIT2 语法也适用于 required<N> 查询参数。

备选方案

数据模型影响

REST API 影响

目前,GET /allocation_candidatesGET /resource_providers 查询支持 required 查询参数,格式为 required=TRAIT1,TRAIT2,!TRAIT3。此规范建议实现一个新的 microversion,以允许 required=in:TRAIT1,TRAIT2 格式以及旧格式。

从具有 required=in:TRAIT1,TRAIT2 的请求返回的每个资源提供者应具有 TRAIT1 和 TRAIT2 中的至少一个匹配的 trait。

required=in:TRAIT1,TRAIT2 用于 GET /allocation_candidates 查询意味着,所有 allocation candidate 中所有提供者的 traits 的并集必须包含 T1 和 T2 中的至少一个。

requiredX=in:TRAIT1,TRAIT2 用于 GET /allocation_candidates 查询意味着,满足 granular 请求组 X 要求的资源提供者也必须具有 T1 和 T2 中的至少一个。

GET /allocation_candidatesGET /resource_providers 查询的响应体保持不变。

后续的单独规范将建议支持多次重复 required 查询参数,以允许混合这两种格式。

请注意,在同一个 required=in: 查询参数中混合所需的和禁止的 trait 要求,例如 required=in:TRAIT1,!TRAIT2 将不受支持,并将导致 HTTP 400 响应。

安全影响

通知影响

其他最终用户影响

osc-placement 客户端插件需要更新以支持新的 Placement API microversion。该插件当前支持 –required CLI 参数,该参数接受一系列 traits。因此,此补丁建议扩展该参数以接受 in:TRAIT1,TRAIT2 格式。

性能影响

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

balazs-gibizer

工作项

  • 扩展资源提供者和 allocation candidate DB 查询以支持新型查询

  • 使用新的 microversion 扩展 Placement REST API,以支持任意 trait 语法

  • 扩展 osc-placement 客户端插件以支持新的 microversion

依赖项

  • 只有当所有旧的 microversion 都已支持时,才能使用新的 microversion 支持扩展 osc-placement 客户端插件,而目前并非如此。

测试

需要为 Placement API 更改编写新的 gabbi 和功能测试。此外,osc-placement 客户端插件还需要额外的功能测试覆盖范围。

文档影响

需要更新 Placement API 参考。

参考资料

  • osc-placement review 系列添加了对最新 Placement microversion 的支持

历史

修订版

发布名称

描述

Rocky

引入

Stein

重新提出