移除 nova API 代码树中的 ‘v3’¶
https://bugs.launchpad.net/nova/+bug/1462901
在尝试处理 Nova API 代码时,目录树中存在许多令人困惑的概念,这使得将树中的内容映射到 API 中变得比应该更困难。
示例混淆
v2.1 代码位于
nova/api/openstack/compute/plugins/v3。人们对 v3 是什么感到困惑。同时存在
plugins和contrib目录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/compute和nova/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 文件引用了 APIRouter 和 APIRouterV21 类。我们必须保留这些名称,以便在人们升级时不会破坏任何东西。
备选方案¶
在 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
历史¶
无