- 本作品采用知识共享署名 3.0 未移植许可协议进行授权。
许可。
Tacker API 框架¶
目前 tacker 中存在一个 API 实现,但它没有遵循 OpenStack 标准。社区中广泛采用的 API 框架有两个:1. PECAN 2. Falcon。我已经研究了所有关于选择框架的可能性,但与 Falcon 相比,Openstack 社区对 PECAN 的采用率更高。目前许多 OpenStack 项目已经在使用 PECAN,例如 zaqar、magnum 等,但 Ironic 在 PECAN + WSME 方法中面临很多问题。Pecan 社区没有提供对已提交错误的任何支持。与 PECAN 相比,Falcon 更快、更安全。如果我们使用 Falcon,我们不需要依赖像 WSME 这样的第三方项目来进行属性验证。与 PECAN 相比,Falcon 的依赖项更少。现在有许多项目使用 PECAN,但考虑到以上所有因素,我们最好选择 Falcon 而不是 PECAN。Falcon 是为完整的 Cloud REST API 开发的。目前 Zaqar 正在使用。
问题描述¶
我们需要一个能够提供更好性能、安全性和良好社区支持的 API 框架。当前的实现没有被 OpenStack 社区采用,并且与 Falcon/PECAN 相比性能较低。
拟议的变更¶
这会对 API 实现层产生巨大影响。因此,我们需要重写每个 API 实现,但 API 端点保持不变。我们需要更改所有 API 文件,并且当前目录结构也会发生变化。
WSGI 应用服务器 -
Falcon 使用 gunicorn,一个 Python WSGI HTTP 服务器。我们应该创建一个应用程序类,可以在其中保留所有与 WSGI 相关的实现。运行 Falcon API 应用程序非常简单。Falcon 使用 gunicorn 运行应用程序,这就是 Falcon 比其他框架更快的原因。Gunicorn 是一个用于 UNIX 的 Python WSGI HTTP 服务器。
以下是更改内容 -
实现控制器而不是扩展 -
我们为 API 编写了 nfvo 和 vnfm 的单独扩展。我们需要为以下扩展引入新的控制器:tacker/extension/nfvo.py tacker/extension/vnfm.py
Falcon 控制器 - tacker/api/controller/v1/nfvo.py tacker/api/controller/v1/vnfm.py 所有模型属性都定义在同一个文件中,这将是一种有效的方式来在一个级别处理所有内容。
处理属性 -
我们可以为镜像等添加验证钩子,以检查给定的镜像类型是否有效。Falcon 提供 before 钩子,它是用于验证属性的装饰器。
示例
@falcon.before(validate_image_type) def create_vim()
在此文件中,我们可以处理内置类型以及自定义类型,例如 ImageName、TemplateName 等。
异常处理 -
Falcon 提供自己的 API 级别异常,无需依赖其他模块来处理 API 级别异常。
示例 - falcon.HTTPNotFound falcon.HTTPForbidden falcon.HTTPInternalServerError
插件 -
我认为这不会直接影响现有的插件,但对于新功能,我们应该编写单独的控制器并引入该功能。例如,VNFFG,最好编写单独的 api/controller/v1/vnffg.py,因为我们提供 VNFFG 的完整 CRUD 操作。始终最好为那些提供完整 CRUD 操作的功能编写单独的控制器文件。
身份验证 -
Falcon 支持多种身份验证,例如 SSL/TLS/HTTPS。
Tacker Web - 我认为这不会影响 Tacker Web UI,因为我们为新的 Tacker API 框架使用 HTTP WSGI。我们将使用 Apache 服务器启动 Tacker Web UI。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
我们需要重写 API 框架,但端点保持不变。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
我们需要将 falcon 添加到构建中。
开发人员影响¶
无
实现¶
负责人¶
Digambar Patil (digambarpat@gmail.com)
工作项¶
引入新的 API 目录结构。
使用 falcon 钩子实现验证。
为每个扩展实现控制器。
编写脚本来运行 tacker-api
编写单元测试和功能测试
依赖项¶
测试¶
将进行 API 控制器测试。将为新的 API 框架添加单元测试和功能测试。
文档影响¶
我们需要编写关于如何实现新的 API 框架。
参考资料¶
https://wiki.openstack.org/wiki/Zaqar/pecan-evaluation http://falcon.readthedocs.io/en/stable/user/tutorial.html http://gunicorn.org https://pypi.ac.cn/project/falcon-mutualauth