弃用 API 代理

https://blueprints.launchpad.net/nova/+spec/deprecate-api-proxies

弃用 Nova 中存在于不再是 Nova 一部分的服务的 API 代理。同时弃用 Nova 网络 API,以便同时弃用所有网络 API,无论网络后端如何。

问题描述

许多服务最初存在于 Nova 中(镜像、卷、裸机、网络),后来被拆分出去。当时并没有真正考虑 Nova API 保持稳定的影响。

随着时间的推移,所有这些服务都发生了演变,在许多情况下,这些服务中当前的 API 与原始 Nova API 的语义不匹配。维护这些服务的代理层随着时间的推移变得越来越困难,并且返回的数据的有效性也越来越受到怀疑。

作为 Nova 团队,我们希望尽可能地将 API 用户引导到原生 API,并摆脱成为其他 REST API 的纯代理的习惯。

用例

最终用户应访问镜像、卷、裸机和网络(在使用 Nova 网络时)的原生 API。

提议的变更

API 参考站点将被更新,以说明以下所有资源已被弃用

  • /images

  • /os-baremetal-nodes

  • /os-volumes

  • /os-snapshots

  • /os-fixed-ips

  • /os-floating-ips

  • /os-floating-ip-dns

  • /os-floating-ip-pools

  • /os-floating-ips-bulk

  • /os-fping - (这实际上只适用于 nova-net)

  • /os-networks

  • /os-security-group-default-rules

  • /os-security-group-rules

  • /os-security-groups

  • /os-tenant-networks

所有这些的文档将被移动到 API 参考站点的末尾,并且将清楚地表明这是 API 弃用部分的一部分。

还将提供指向相关 API 的正确对应文档部分的链接。

网络 API

Nova 网络已被弃用,因此围绕该网络的 API 也将被标记为已弃用,以及其用于与代理通信的方式。将为本节编写序言,以阐明网络 API 的弃用以及与 Neutron 功能的代理的弃用。

希望继续在 Nova 中使用网络 API 的用户只需将他们的代码冻结到此更改之前的微版本即可。

限制和配额

呈现给用户的某些限制和配额是用于网络资源的。当使用 Neutron 时,这些限制和配额从未正确工作。

与网络资源相关的键(安全组、固定 IP、浮动 IP)也将从本微版本的限制中删除。

维护状态

对于所有这些 API,将存在以下规则。

  • 将不会向它们添加新功能

  • 这些 API 背后的代码将处于软冻结状态,错误修复将保持在最低限度。

  • 不会导致 500 错误的错误可能不会被修复。

内部表示保持不变

Nova 服务器包含诸如

"accessIPv4": "1.2.3.4",
"accessIPv6": "80fe::",
"addresses": {
       "private": [
             {
                 "addr": "192.168.0.3",
                 "OS-EXT-IPS-MAC:mac_addr": "aa:bb:cc:dd:ee:ff",
                 "OS-EXT-IPS:type": "fixed",
                 "version": 4
             }
         ]
     },

这确实是网络信息,但是它实际上是我们的服务器模型的一部分。 在这些情况下,我们将继续在我们的服务器对象中保留这种表示,即使它来自另一个服务。

这最好被认为是 REST API 中的完整路径正在被弃用,资源定义没有改变(可能除了链接内容的变化)。

备选方案

永久保留这些代理。这将增加 Nova 的维护成本,并降低我们适应新功能和要求的速度。

数据模型影响

没有立即的数据模型更改,但是一旦从树中实际删除了上述 API,就可以进行数据库清理。

REST API 影响

此更改将与 API 微版本一起进行,之后所有以下资源将返回 404

这是 404,因为我们正在删除所有这些情况下的整个资源。 其他建议的 400 都不合适,因为这几乎从来不适用于 GET(因为你如何使该请求格式错误),并且 405 不合适,因为资源根本不存在(405 是用于 /resource,其中一些动词有效,但其他动词无效)。

  • /images

  • /os-baremetal-nodes

  • /os-volumes

  • /os-snapshots

  • /os-fixed-ips

  • /os-floating-ips

  • /os-floating-ip-dns

  • /os-floating-ip-pools

  • /os-floating-ips-bulk

  • /os-fping - (这实际上只适用于 nova-net)

  • /os-networks

  • /os-security-group-default-rules

  • /os-security-group-rules

  • /os-security-groups

  • /os-tenant-networks

对于基于 nova-net 云的用户,我们将建议仅使用最大微版本 N-1(其中 N 是此更改所在的版本)。 这有效地意味着 nova-net 用户和云不会获得新的 API 功能,这对于使用已弃用后端的用户来说是合适的。

安全影响

通知影响

其他最终用户影响

nova cli 将确保弃用所有这些功能,并且我们计划在 O 中删除它们。

性能影响

一旦这些 API 消失,这将减少 Nova 上的某些负载,因为用户将直接访问他们需要访问的 API。

其他部署者影响

glance.api_servers 的值变得比以前更重要。

开发人员影响

实现

负责人

主要负责人

sdague

工作项

  • 更新 API 参考站点,将项目标记为已弃用

  • 引入微版本以触发这些资源的 404 * 删除此微版本中的限制键 * 在此微版本中收紧 imageRef 验证

  • 为诸如在 neutron 上设置端口地址,然后在 nova 中通过服务器对象验证它们是否正确之类的项目创建 Tempest 测试

依赖项

测试

将进行树内功能测试,以确保这些 API 在此 Microversion 之后能够正常工作并返回 404 错误。

存在许多 tempest 测试提供对所涉及 API 的往返,但很少有测试尝试使用原生 API 设置资源数据,然后通过 Nova API 获取它(例如嵌入在服务器表示中的 IP / 安全组)。

应该更全面地进行测试,并且代理的弃用将为此提供一个很好的机会。

文档影响

API 参考将如上所述更新。

参考资料

Newton Summit 会议关于 API 弃用 - https://etherpad.openstack.org/p/newton-nova-api

历史

修订版

发布名称

描述

Newton

引入