支持必需特性的混合与任何特性

https://blueprints.launchpad.net/nova/+spec/mixing-required-traits-with-any-traits

any-traits-in-allocation-candidates-query 规范提议允许以 required=in:TRAIT1,TRAIT2 的形式查询特性。本规范更进一步,提议允许重复 required 查询参数,以支持在单个查询中混合 required=TRAIT1,TRAIT2,!TRAIT3required=in:TRAIT1,TRAIT2 格式。Neutron 需要这种能力,以便能够表达端口需要具有特定 vnic_type 特性的资源提供者,并且还需要具有端口网络映射到的某个物理网络特性。

例如

GET /allocation_candidates?required1=CUSTOM_VNIC_TYPE_DIRECT&
                           required1=in:CUSTOM_PHYSNET_FOO,CUSTOM_PHYSNET_BAR
                           ...

在候选项中请求一个支持 direct vnic_type 的网络设备资源提供者,并且该设备连接到 physnet_foophysnet_bar 或两者。

问题描述

Neutron 需要通过 Nova 能够向 Placement 查询分配候选项,这些候选项需要在一个查询中匹配特性列表中的“至少一个”特性,同时匹配另一个特定特性。

用例

Neutron 希望使用这种 any(traits) 查询来表达,端口的带宽资源请求需要由连接到给定端口网络所连接的某个物理网络的网络设备资源提供者来满足。通过 Neutron 的多提供者网络扩展,单个 Neutron 网络可以由连接到不同物理网络的多个网络段组成。但同时,Neutron 也希望表达同一资源提供者也具有特定的 vnic_type 特性。

提议的变更

扩展 GET /allocation_candidatesGET /resource_providers 请求,以允许重复 requiredrequired<N> 查询参数,以支持在单个查询中同时使用 required=TRAIT1,TRAIT2,!TRAIT3required=in:TRAIT1,TRAIT2 语法。

备选方案

数据模型影响

REST API 影响

在一个新的微版本中,GET /allocation_candidatesGET /resource_providers 查询应允许重复 required 查询参数多次,同时在同一查询中支持普通和任意特性语法。

具有 required=CUSTOM_VNIC_TYPE_NORMAL& required=in:CUSTOM_PHYSNET1,CUSTOM_PHYSNET2 参数的 GET /allocation_candidates 查询应返回分配候选项,其中每个分配候选项都具有特性 CUSTOM_VNIC_TYPE_NORMALCUSTOM_PHYSNET1CUSTOM_PHYSNET2(或两者)。

具有 required=CUSTOM_VNIC_TYPE_NORMAL& required=in:CUSTOM_PHYSNET1,CUSTOM_PHYSNET2 参数的 GET /resource_providers 查询应返回资源提供者,其中每个资源提供者都具有特性 CUSTOM_VNIC_TYPE_NORMALCUSTOM_PHYSNET1CUSTOM_PHYSNET2(或两者)。

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

请注意,以下两个查询表达了完全相同的要求

?required=in:A,B,C
&required=X
&required=Y
&required=Z

?required=in:A,B,C
&required=X,Y,Z

安全影响

通知影响

其他最终用户影响

osc-placement 客户端插件需要更新以支持新的 Placement API 微版本。这意味着 CLI 应该支持多次提供 --required 参数,支持普通和任意特性语法。

性能影响

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

balazs-gibizer

工作项

  • 扩展资源提供者和分配候选者数据库查询,以支持多组必需特性

  • 通过新的微版本扩展 Placement REST API,支持重复 required 查询参数

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

依赖项

测试

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

文档影响

需要更新 Placement API 参考文档。

参考资料

历史

修订版

发布名称

描述

Rocky

引入

Stein

重新提出