移除 nova API 代码树中的 ‘v3’

https://bugs.launchpad.net/nova/+bug/1462901

在尝试处理 Nova API 代码时,目录树中存在许多令人困惑的概念,这使得将树中的内容映射到 API 中变得比应该更困难。

示例混淆

  • v2.1 代码位于 nova/api/openstack/compute/plugins/v3。人们对 v3 是什么感到困惑。

  • 同时存在 pluginscontrib 目录

  • v2.0 代码位于顶层 nova/api/openstack/compute,即使它已被弃用。

我们应该清理 api 目录结构,使其不那么令人困惑,从而减少在处理代码库时的认知负荷,并使新贡献者更容易理解。

问题描述

见上文。

用例

无。这是 Nova 的代码树清理。

项目优先级

这是 Liberty 中 Nova API 的一项优先级工作项目。

提议的变更

api 目录结构应该看起来更像这样(这是一个包含一些关键数据的示例,而不是所有移动操作)

::
nova/api/openstack/
compute/ - 所有 os 计算 api
legacy_v2/ - 所有 v2 代码的入口点。这将

使其将来更容易删除

servers.py - v2.1 服务器实现

flavors.py - v2.1 flavors 实现

servers/ - 一个包含添加资源的

到服务器的代码目录

servers/actions/pause.py(重命名自 pause_server.py)

servers/actions/ - 添加操作的所有代码块

flavors/ - 扩展添加所有内容的

flavors

等等…

基本上,将所有 v2 代码放在角落里,这样它就不会是人们首先找到的东西。

然后将剩余的代码命名为不包含版本,并创建一个与 REST URI 结构尽可能匹配的磁盘目录结构。使其更容易理解事物在 REST 结构中的位置。

  • 将当前位于 nova/api/openstack/computenova/api/openstack/compute/contrib 下的 V2 API 代码移动到 nova/api/openstack/compute/legacy_v2。‘V2’ API 将在未来被弃用。

  • Nova V2.1 REST API 指的是带有 Microversion 的新的 Nova REST API。v2.1 的演进将通过 Microversion 在未来完成。因此,提议是 API 版本不会包含在任何代码路径中。现在位于 nova/api/openstack/compute/plugins/v3 下的 V2.1 API 将被移动到 nova/api/openstack/compute。这意味着 V2.1 API 将是 Nova 支持的唯一计算 API。v2.1 API 使用的 JSON-Schema 移动到 nova/api/openstack/compute/schemas

  • 删除代码、测试和配置文件中对 ‘v3’ 的任何引用。示例:APIRouterV3,以及 api-paste.ini 中的 v3 端点条目等。

  • 为了更准确地反映这些组件所代表的资源的 REST uri 结构,重构磁盘上的 v2.1 代码。

  • 请注意,现有的 api-paste.ini 文件引用了 APIRouterAPIRouterV21 类。我们必须保留这些名称,以便在人们升级时不会破坏任何东西。

备选方案

在 V2 支持被移除之前,将 V2.1 API 保留在当前目录中。但是,由于未来的所有 API 改进都将针对 V2.1 API,许多开发人员会对如何编码到当前 API 感到困惑。我们现在应该摆脱它,并避免让开发人员感到困惑。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Ed Leafe <ed@leafe.com> Alex Xu <hejie.xu@intel.com>

工作项

  • 将所有 V2 代码移动到 ‘legacy_v2’ 目录。

  • 更新所有对 ‘nova.api.openstack.compute’ 的现有引用,使其指向 ‘nova.api.openstack.compute.legacy_v2’。

  • 将所有 V2.1 代码移动到顶层目录。

  • 将 V2.1 的 json-schema 移出 v3 目录。

  • 从 api-paste.ini 中删除 v3 端点。为此已经进行了努力 https://etherpad.openstack.org/p/merge_sample_tests

依赖项

测试

不需要新的测试,但现有的测试需要更新才能与新的代码树一起工作。

v2.1 API 示例测试在 nova/tests/functional/v3 中移动到 nova/tests/functional/api_sample_tests。v2 API 示例测试将由 https://etherpad.openstack.org/p/merge_sample_tests 删除

v2.1 和 v2 API 的单元测试已经合并。将它们移动到 nova/unit/api/openstack/compute

文档影响

这只是一个代码清理,对最终用户来说是不可见的。

参考资料

Nova API 团队工作项目:https://etherpad.openstack.org/p/YVR-nova-liberty-summit-action-items

历史