请求的可用区列表

https://blueprints.launchpad.net/nova/+spec/list-requested-az

目前,server show 和 server list –long 输出显示实例的当前可用区。也就是说,实例宿主机所在的可用区。从这些信息中无法得知实例创建请求是否包含可用区。

此实现允许用户验证其可用区请求是否已正确处理和满足,方法是返回有关实例当前位置的信息,以及原始请求的信息。

问题描述

截至今天,server show 和 server list –long 输出显示实例的当前可用区。也就是说,实例宿主机所在的可用区。从这些信息中无法得知实例创建请求是否包含可用区。

此外,当 cross_az_attach 选项为 False 并且从卷启动实例时,实例可以固定到可用区,在这种情况下,实例将被调度到属于固定可用区的宿主机上。

此外,当 default_schedule_zone 配置选项设置为特定可用区时,实例将被固定到该特定可用区,并且实例将被调度到属于固定可用区的宿主机上。

用例

  • 作为操作员,我想知道实例创建请求是否明确请求了可用区。以及请求的可用区和当前可用区是否相同或不同。

提议的变更

nova cell 数据库中的 instances 表没有请求的可用区信息。可以通过 nova_api 数据库中的 request_specs 表获取相同的信息。

对于 server show 输出,使用 RequestSpec 对象中的现有 get_by_instance_uuid 方法并在输出中显示它。

对于 server list –long 输出,为 RequestSpec 对象实现一个方法 get_by_instance_uuids,该方法接收将在列出输出中显示的实例的实例 UUID 列表,并返回这些实例的 RequestSpec 对象列表。

备选方案

或者,我们可以将请求的可用区信息添加到 instances 表中,并在执行 server list –long 或 server show 时仅使用 instances 表中的数据并显示给用户,但这也会在 request_specs 表和 instances 表中复制数据。

数据模型影响

对于实现,我们需要向 RequestSpec 对象添加一个方法 get_by_instance_uuids,该方法接收实例 UUID 列表作为输入,并返回这些实例的 RequestSpec 对象列表。

REST API 影响

此更改将通过新的微版本更新来完成。

以下是将被更改的两个 API。

GET /servers/{server_id}

  • server show api 响应将包含服务器创建期间请求的可用区。

    {
      "server":
          {
              ...
              "pinned_availability_zone": None
              ...
          }
    }
    

GET /servers/detail

  • server list –long api 响应将包含服务器创建期间请求的可用区。

    {
      "servers": [
          {
              ...
              "pinned_availability_zone": None
              ...
          }
          {
              ...
              "pinned_availability_zone": None
              ...
          }
      ]
    }
    

安全影响

通知影响

其他最终用户影响

性能影响

当用户调用 server list –long 时,性能会略有下降,因为我们将添加另一个数据库调用来获取实例的 request_specs 列表。

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

ratailor

功能联络人

功能联络人

ratailor

工作项

  • 实施 API 更改

  • 添加测试

依赖项

  • 需要更新 openstackclient 和 openstacksdk 以实现此更改。

测试

  • 添加单元测试

  • 添加功能测试(API 示例)

文档影响

api-ref 将更新以反映这些更改。

参考资料

历史

修订版

发布名称

描述

2024.1 Caracal

引入