为风味展示和详细 API 调用添加额外规格

https://blueprints.launchpad.net/nova/+spec/add-extra-specs-to-flavor-list

为以下 API 添加新的微版本,以返回风味的 extra-specs

  • GET /flavors/details

  • GET /flavors/{flavor_id}

  • POST /flavors

  • PUT /flavors/{flavor_id}

问题描述

目前,GET /flavors/detailsGET /flavors/{flavor_id}POST /flavorsPUT /flavors/{flavor_id} 的响应不包含 extra_specs 字段。用户必须再次调用 GET /flavors/{flavor_id}/extra_specs 来获取 extra_specs 字段。

shade 这样的 UI 和 SDK 在检索所有风味和额外规格之前可能会超时。

用例

UI 和 SDK 可以避免为每个风味进行单独的调用以获取 extra_specs,从而避免在此过程中发生超时。

提议的变更

为以下 API 添加新的微版本,以返回风味的 extra-specs

  • GET /flavors/details

  • GET /flavors/{flavor_id}

  • POST /flavors

  • PUT /flavors/{flavor_id}

注意

当添加微版本 2.47 时,extra_specs 字段已包含在服务器详细信息响应中的嵌入式实例风味中,并且仅对满足特定策略的用户可见 [1]。

备选方案

数据模型影响

REST API 影响

以下更改将在新的 API 微版本中引入。

  • GET /flavors/details

    extra_specs 数据添加到响应体。

    JSON 响应体示例

    {
        "flavors": [
        ...
            {
                "OS-FLV-DISABLED:disabled": false,
                "disk": 1,
                "OS-FLV-EXT-DATA:ephemeral": 0,
                "os-flavor-access:is_public": true,
                "id": "1",
                "links": [
                    {
                        "href": "http://openstack.example.com/v2/6f70656e737461636b20342065766572/flavors/1",
                        "rel": "self"
                    },
                    {
                        "href": "http://openstack.example.com/6f70656e737461636b20342065766572/flavors/1",
                        "rel": "bookmark"
                    }
                ],
                "name": "m1.tiny",
                "ram": 512,
                "swap": "",
                "vcpus": 1,
                "rxtx_factor": 1.0,
                "description": null,
                "extra_specs": {
                    "key1": "value1",
                    "key2": "value2"
                }
            },
        ...
        ]
    }
    
  • GET /flavors/{flavor_id}

    extra_specs 数据添加到响应体。

    JSON 响应体示例

    {
        "flavor": {
            "OS-FLV-DISABLED:disabled": false,
            "disk": 20,
            "OS-FLV-EXT-DATA:ephemeral": 0,
            "os-flavor-access:is_public": true,
            "id": "7",
            "links": [
                {
                    "href": "http://openstack.example.com/v2/6f70656e737461636b20342065766572/flavors/7",
                    "rel": "self"
                },
                {
                    "href": "http://openstack.example.com/6f70656e737461636b20342065766572/flavors/7",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.small.description",
            "ram": 2048,
            "swap": "",
            "vcpus": 1,
            "rxtx_factor": 1.0,
            "description": "test description",
            "extra_specs": {
                "key1": "value1",
                "key2": "value2"
            }
        }
    }
    
  • POST /flavors

    extra_specs 数据添加到响应体。

    JSON 响应体示例

    {
        "flavor": {
            "OS-FLV-DISABLED:disabled": false,
            "disk": 10,
            "OS-FLV-EXT-DATA:ephemeral": 0,
            "os-flavor-access:is_public": true,
            "id": "10",
            "links": [
                {
                    "href": "http://openstack.example.com/v2/6f70656e737461636b20342065766572/flavors/10",
                    "rel": "self"
                },
                {
                    "href": "http://openstack.example.com/6f70656e737461636b20342065766572/flavors/10",
                    "rel": "bookmark"
                }
            ],
            "name": "test_flavor",
            "ram": 1024,
            "swap": "",
            "rxtx_factor": 2.0,
            "vcpus": 2,
            "description": "test description",
            "extra_specs": {}
        }
    }
    
  • PUT /flavors/{flavor_id}

    extra_specs 数据添加到响应体。

    JSON 响应体示例

    {
        "flavor": {
            "OS-FLV-DISABLED:disabled": false,
            "disk": 1,
            "OS-FLV-EXT-DATA:ephemeral": 0,
            "os-flavor-access:is_public": true,
            "id": "1",
            "links": [
                {
                    "href": "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/flavors/1",
                    "rel": "self"
                },
                {
                    "href": "http://openstack.example.com/6f70656e737461636b20342065766572/flavors/1",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.tiny",
            "ram": 512,
            "swap": "",
            "vcpus": 1,
            "rxtx_factor": 1.0,
            "description": "updated description",
            "extra_specs": {
                "key1": "value1",
                "key2": "value2"
            }
        }
    }
    

安全影响

风味资源中风味 extra_specs 的可见性将由与查询风味 extra_specs 相同的策略规则控制。

通知影响

其他最终用户影响

novaclient 和 openstackclient 已被修改为将 extra_specs 字段添加到响应中。

性能影响

由于我们在从数据库获取风味时始终连接额外规格,因此不会有性能影响,它已经可用,只是 API 响应中未公开。

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

江益坤

其他贡献者

Kevin Zheng

工作项

  • 将“extra_specs”字段添加到风味 API。

  • 在 novaclient/openstackclient 中添加“extra_specs”字段

  • API 文档,包括“extra_specs”字段的说明

依赖项

测试

添加以下测试。

  • 功能测试

  • 负面单元测试

文档影响

  • API 参考

  • CLI 参考

参考资料

历史

修订版

发布名称

描述

Rocky

提议