封装 Python NeutronClient

https://blueprints.launchpad.net/nova/+spec/nova-neutron-refactor

Openstack Network API 的 Neutron 实现所使用的 Neutron 客户端模块是对 Neutron API 的一个基础、轻量级的封装。直接使用该模块的功能导致了自适应代码在 API 适配器实现中普遍存在。这种重复且有时不透明的代码使得实现难以调试和维护。通过封装现有的客户端,提供更高层次的、Nova 导向的抽象

  • 可以更轻松地实现可读的网络 API 实现。

  • 允许将 Neutron API 的运作知识捕获在代码中,供所有开发人员重用,而无需他们具备 Neutron API 方面的专业知识。这本身就是可维护、可扩展和可测试的。

  • 提供了一个自然的边界,以隐藏 Neutron 特定的细节,例如

    • 抛出的异常

    • JSON 请求和响应转换

问题描述

在 Neutron Network API 适配器的实现中,直接使用 neutronclient 模块非常普遍。这导致了以下后果

  • JSON 请求的构造和回复的解析在整个代码中重复出现。

  • Neutron 特定的异常被允许渗透到调用者的 API 边界。

  • Neutron 客户端的使用情况取决于相应作者的专业知识。没有一种机制可以捕获最佳实践,供开发人员立即使用。

  • Neutron 客户端的更改可能需要对适配器实现进行普遍的更改。

  • 某些 API 功能只能通过具有管理凭据的上下文访问,这要求维护人员了解哪些操作受到管理凭据的约束或以其他方式受到影响。

用例

  • Nova 开发人员不需要直接了解 Neutron 客户端或 API 特定细节即可执行基本的代码更改。

  • 具有 Neutron 专业知识的开发人员需要一种机制来捕获最佳实践,以便他们和其他开发人员可以方便地使用。

  • 可以以一种可管理且一致的方式引入对远程调用行为的特殊处理。

项目优先级

此重构解决了重大的技术债务问题,并且是迈向弃用 nova-network 的一步。

提议的变更

通过一个类(或如果需要,一组类)提供 Nova 使用的 Neutron 客户端调用的更高层次的抽象。这些类隐藏了 JSON 请求的构造、回复到 Nova 对象的转换以及 Neutron 异常到 Nova 异常的转换。

备选方案

继续直接“原地”使用 Neutron 客户端,可能通过辅助方法减轻代码重复,并通过诸如装饰器之类的替代方式执行临时异常转换。

数据模型影响

REST API 影响

安全影响

无。

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

这项工作的成果将在适配器的重构中被使用,因此仅对从事这项工作开发的开发人员产生影响。

实现

负责人

主要负责人:Brent Eagles (beagles@redhat.com)

核心团队中的一位或多位赞助者应直接参与,至少以咨询能力。特别是

  • Dan Smith 用于 Nova 对象

  • Matt Riedemann

  • Maru Newby (Neutron)

主要负责人:* Brent Eagles beagles@redhat.com

工作项

  1. 创建一个提供 Neutron 客户端更高层次方法的类。

  2. 创建 tempest 测试来行使封装器。

依赖项

测试

这些更改将通过现有的 CI 进行测试。

文档影响

参考资料