在虚拟接口列表 API 响应中添加 VIF net-id

https://blueprints.launchpad.net/nova/+spec/add-vif-net-id-in-vif-list

v2 和 v2.1 的虚拟接口 API 响应之间存在差异。VIF net_id 未包含在 v2.1 响应中。本规范建议将 VIF net_id 作为微版本添加到 v2.1 API 中。

问题描述

V2 API 具有虚拟接口的扩展 ‘OS-EXT-VIF-NET’,它在虚拟接口列表响应中添加了 “OS-EXT-VIF-NET:net_id”。但在将 v2 扩展移植到 v2.1 时,此扩展被遗漏了。因此,虚拟接口 API 的 v2 和 v2.1 响应之间存在差异。

v2 列出虚拟接口的响应(启用所有扩展)

{
  "virtual_interfaces": [
    {
        "id": "%(id)s",
        "mac_address": "%(mac_addr)s",
        "OS-EXT-VIF-NET:net_id": "%(id)s"
    }
  ]
}

v2.1 列出虚拟接口的响应

{
  "virtual_interfaces": [
    {
        "id": "%(id)s",
        "mac_address": "%(mac_addr)s"
    }
  ]
}

在 v2.1 中缺少属性 “OS-EXT-VIF-NET:net_id”。需要 VIF 的 net_id 的用户将无法从 v2.1 获取它。

这是 v2.1 基本 API 中的一个错误 [1],但无法将其作为错误修复,因为 v2.1 已在 kilo 中发布,并且根据 API 合同,在 v2.1 基本 API 中修复此错误为时已晚。

另一个问题是,v2.1 扩展列表也返回 ‘OS-EXT-VIF-NET’ 扩展,这给用户带来了错误的提示,即该扩展也已加载到 v2.1 中,而实际上并非如此,这是由于上述问题造成的。应在 v2.1 基本 API 中删除此扩展,并回溯到稳定的 kilo 分支,如 [2] 中建议的那样。

用例

需要 VIF 的 net_id 信息的用户,并且从 v2 API 获取相同信息,也应该能够从 v2.1 API 获取。

通过添加此信息,用户可以确定 vif 插入到哪个网络中。

项目优先级

无。

提议的变更

本规范建议通过在虚拟接口列表响应中添加 VIF net-id 信息来修复此错误,作为微版本。

v2.1 列出虚拟接口的响应

当前

{
  "virtual_interfaces": [
    {
        "id": "%(id)s",
        "mac_address": "%(mac_addr)s"
    }
  ]
}

之后

{
  "virtual_interfaces": [
    {
        "id": "%(id)s",
        "mac_address": "%(mac_addr)s",
        "net_id": "%(id)s"
    }
  ]
}

将在响应中添加属性 “net_id”。

注意 - 属性名称 “OS-EXT-VIF-NET:net_id”(在 v2 中)已更改为 “net_id”。因为此属性作为微版本添加,并且根据指南 [3],我们不应像在 v2 中作为扩展添加时那样,在新属性名称中添加命名空间。

备选方案

作为替代方案,我们可以将其作为 v2.1 基本 API 中的错误进行修复,而无需使用微版本,以便 v2.1 与 v2 完全相同。但这会破坏 API 合同,因为 v2.1 已经发布。

数据模型影响

无。

REST API 影响

新的属性 VIF net-id 将作为微版本添加。

  • 方法的规范

    • 描述

      • API 虚拟接口列表

    • 方法类型

      • GET

    • 正常的 HTTP 响应代码

      • 200,响应代码无变化

    • 预期的错误 http 响应代码

      • 错误代码无变化

    • 资源的 URL

      • ‘servers/<server_uuid>/os-virtual-interfaces’

    • 如果允许,则为 body 数据定义 JSON schema

      • 不允许请求体。

    • 如果存在,则为响应数据定义 JSON schema

{
  'status_code': [200],
  'response_body': {
      'type': 'object',
      'properties': {
          'virtual_interfaces': {
              'type': 'array',
              'items': {
                  'type': 'object',
                  'properties': {
                      'id': {'type': 'string'},
                      'mac_address': {'type': 'string'},
                      'net_id': {'type': 'string'}
                  }
                  'required': ['id', 'mac_address', 'net_id']
              }
          }
      }
      'required': ['virtual_interfaces']
  }
}

安全影响

无。

通知影响

无。

其他最终用户影响

需要更新 python-novaclient,以便在 v2.1 + 微版本的相应命令中显示 VIF ‘net_id’。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

实现

负责人

主要负责人

gmann

其他贡献者

工作项

  • 在虚拟接口列表响应中添加 ‘net_id’。

  • 相应地修改示例和单元测试。

依赖项

无。

测试

目前 Nova 功能测试将涵盖这些更改的测试。在 Tempest 中讨论微版本测试后,可以相应地测试这些更改。

文档影响

将相应地更新虚拟接口 GET API 文档。

参考资料