本作品采用知识共享署名 3.0 未移植许可协议进行授权。

许可。

http://creativecommons.org/licenses/by/3.0/legalcode

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 添加到构建中。

开发人员影响

实现

负责人

工作项

  1. 引入新的 API 目录结构。

  2. 使用 falcon 钩子实现验证。

  3. 为每个扩展实现控制器。

  4. 编写脚本来运行 tacker-api

  5. 编写单元测试和功能测试

依赖项

测试

将进行 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