支持 Servers IPs API 响应中非唯一网络名称

https://blueprints.launchpad.net/nova/+spec/servers-ips-non-unique-network-names

当虚拟机使用多个同名网络时,正确报告服务器 IP 信息。此规范建议在 Server IPs API 资源中使用网络 ID 而不是名称来分组虚拟机网络。

问题描述

Neutron 允许存在多个同名网络。Nova 允许将多个网络添加到虚拟机。

当将两个同名网络添加到虚拟机并发出 Servers IPs API 请求时,将返回不正确的信息。响应与只有一个网络且具有多个 IP 地址的情况相同。

// GET /servers/68c1b82f-adf2-4b71-a411-0b70da3c1748/ips

{
  "addresses": {
    "testnet1": [
      {
        "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:65:83:12",
        "version": 4,
        "addr": "192.168.0.12",
        "OS-EXT-IPS:type": "fixed"
      },
      {
        "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:7c:67:72",
        "version": 4,
        "addr": "192.168.1.4",
        "OS-EXT-IPS:type": "fixed"
      }
    ]
  }
}

相反,响应应指示存在两个网络,每个网络具有一个地址。此外,应保留网络标签。请注意删除不必要的 OS-EXT-IPS-MACOS-EXT-IPS 前缀。

// GET /servers/68c1b82f-adf2-4b71-a411-0b70da3c1748/ips

{
   "addresses":{
      "b7388c79-b206-4ddf-9d75-95ec4488b906":{
         "name":"testnet1",
         "ips":[
            {
               "mac_addr":"fa:16:3e:65:83:12",
               "version":4,
               "addr":"192.168.0.12",
               "type":"fixed"
            }
         ]
      },
      "b69db569-85b3-4fd6-b053-11be7d23fbc6":{
         "name":"testnet1",
         "ips":[
            {
               "mac_addr":"fa:16:3e:7c:67:72",
               "version":4,
               "addr":"192.168.1.4",
               "type":"fixed"
            }
         ]
      }
   }
}

因此,对特定网络的请求将从

/servers/{server_id}/ips/{network_label}

变为

/servers/{server_id}/ips/{network_id}

服务器详情响应将相应更新,因为它们包含类似的地址部分

GET /servers/detail
GET /servers/{server_id}
PUT /servers/{server_id}
GET /servers/{server_id/action (rebuild)

用例

作为附加到多个同名网络的服务器的 API 用户,我希望能够唯一标识服务器 IP 地址与哪些网络相关联。

提议的变更

此规范建议通过更改响应模式和资源路径来修复此错误,作为微版本。由于更改会影响 API 消费者,因此不会修复遗留 API。

备选方案

  • 不允许添加与现有网络同名的网络

  • 将服务器 IP 地址报告为数组,而不是字典

数据模型影响

REST API 影响

通过新的微版本对 API 的五项更改

更改资源路径从

/servers/{server_id}/ips/{network_label}

变为

/servers/{server_id}/ips/{network_id}

更改 /servers/{server_id}/ips 资源的模式为

  • 按 ID 分组网络

  • 在网络组中保留网络名称

  • 使数据模型与 /servers/detail 路径通用

{
   "addresses":{
      "b7388c79-b206-4ddf-9d75-95ec4488b906":{
         "name":"testnet1",
         "ips":[
            {
               "mac_addr":"fa:16:3e:65:83:12",
               "version":4,
               "addr":"192.168.0.12",
               "type":"fixed"
            }
         ]
      }
   }
}

更改以下路由中的模式,以匹配与 /servers/{server_id}/ips 中 ID 标识的地址响应

  • GET /servers/detail

  • GET /servers/{server_id}

  • PUT /servers/{server_id}

  • POST /servers/{server_id}/action (rebuild)

...
"addresses":{
   "b7388c79-b206-4ddf-9d75-95ec4488b906":{
      "name":"testnet1",
      "ips":[
         {
            "mac_addr":"aa:bb:cc:dd:ee:ff",
            "type":"fixed",
            "addr":"192.168.0.12",
            "version":4
         }
      ]
   },
},
...

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

Jonghan Park <jhan12.park@samsung.com> Maciej Kucia <maciej@kucia.net>

工作项

  • 通过新的微版本修复 API

  • 在 nova-client 中反映 API 更改

  • 在文档中反映 API 更改

依赖项

测试

应更新测试以反映 API 更改。

文档影响

更新 api-ref 以反映新的 API 模式和路径。

参考资料

历史

修订版

发布名称

描述

Rocky

引入