在添加租户访问权限前检查风味类型

https://blueprints.launchpad.net/nova/+spec/check-flavor-type-before-add-tenant

问题描述

我们无法向公共风味添加租户访问权限。 尝试这样做会在稍后显示风味时导致令人困惑的错误消息

$ nova flavor-access-add 1 2
+-----------+-----------+
| Flavor_ID | Tenant_ID |
+-----------+-----------+
| 1         |         2 |
+-----------+-----------+

$ nova flavor-access-list --flavor 1
ERROR (CommandError): Failed to get access list for public flavor type.

我们应该检查风味是否为公共风味,并拒绝向公共风味添加访问权限的 API 调用。 但这是一个向后不兼容的错误,每个 API 变更都需要规范,因此需要一个微版本来处理此问题。

用例

如果风味是公共风味,用户将收到无法添加访问权限的通知,但有一些例外情况。

项目优先级

提议的变更

在 API 层,对于风味的“addTenantAccess”,我们执行以下操作以添加访问权限,因此建议的更改是在添加访问权限之前,添加一个验证来检查类型,并在风味为私有类型时引发异常。

api/openstack/compute/plugins/v3/flavor_access.py

flavor = objects.Flavor(context=context, flavorid=id)
try:
    flavor.add_access(tenant)

这是一个不向后兼容的修复,因此将添加一个新的微版本,并且仅当传入的 API 版本等于或高于此版本时,才会进行检查。

备选方案

让用户继续使用现有的代码,即使它是一个错误。

数据模型影响

REST API 影响

根据讨论的“Proposed change”(建议的更改),将在调用 add_access 之前添加一个检查。 它将类似于

def _check_flavor_type(self, req, flavor):
    if req.version > target_version:
         if flavor.type is public:
             raise HTTPBadRequest

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

jichenjc <jichenjc@cn.ibm.com>

工作项

通过微版本添加 API 变更,因为它向后不兼容。 1) 向 os-flavor-access/addTenantAccess 添加微版本 2) 在添加访问权限之前添加验证。

依赖项

测试

文档影响

参考资料

[1] https://bugs.launchpad.net/nova/+bug/1361476 [2] https://review.openstack.org/#/c/124338/