基于 NFV MANO 实现 Tacker API v1

https://blueprints.launchpad.net/tacker/+spec/tacker-api-mano

本文档描述了引入基于 ETSI NFV MANO 标准 [1] 的新的 Tacker REST API 端点的计划。为了向后兼容和支持,基于 ‘servicevm’ 标准的当前 REST API 端点将被保留。

问题描述

Tacker 服务目前实现基于 ‘servicevm’ 标准的 REST API 端点。然而,Tacker 是基于 NFV 编排器的原则构建的,具有内置的 VNF 管理器,如 ETSI NFV MANO 架构 [1] 中所述。Tacker 应该支持并实现对 VNF 资源的 CRUD 操作。为此,必须引入基于 VNF 的 REST API 端点,这些端点可以通过独立的客户端或通过 python-tackerclient 本身来调用。

提议的变更

将 Tacker 从 ‘servicevm’ 完全迁移到 NFV MANO 标准是一项复杂的任务,将分阶段进行。作为本文档的一部分,将引入并实现基于 NFV MANO 的 REST API 端点相关的任务。 拟议的更改涉及以下行动项

  • Tacker REST API 扩展将从 ‘servicevm’ 迁移到 ‘vnfm’。

  • 添加两个新的 REST API 端点 ‘vnf’ 和 ‘vnfd’ 来描述 VNF 资源。

  • 现有的资源 ‘device’ 和 ‘device_template’ 将被移动到新的 ‘vnfm’ 扩展下。

  • ‘vnfm’ REST API 的实现将是对现有 ‘servicevm’ 实现的封装。

  • ‘vnfm’ 资源属性将与 ‘servicevm’ 资源属性相同,除了 ‘services’ 属性,该属性当前未在项目中被使用。

新的 ‘vnfm’ 扩展将集成到 Tacker v1 REST API 中。 ‘servicevm’ 扩展的当前实现将保留,以实现向后兼容性。

备选方案

另一种解决方案是将 Pecan 框架集成到 Tacker 中。 这涉及在一个阶段中重构整个项目以更新到 NFV MANO 标准。 目前,tacker 基于稳定的 Kilo 发布分支,不支持 Pecan 框架。 只有当 Tacker 迁移到 OpenStack 服务的 master 发布版时,才能实现此解决方案。 高级任务包括

  • 修改插件和数据库后端实现,以从 servicevm 迁移到 NFV MANO 标准。

  • 摆脱自研 REST 框架,并实现 Pecan 框架来描述和实现 VNF 资源的 CRUD 操作。

数据模型影响

REST API 影响

将在 v1 中引入新的扩展 ‘vnfm’,它将实现如下所述的 REST API 端点

/vnfd

+---------------------------------------------------------------------------+
|Attribute     |Type   |Access  |Default   |Validation/ |Description        |
|Name          |       |        |Value     |Conversion  |                   |
+---------------------------------------------------------------------------+
|id            |string |RO, All |generated |N/A         |identity           |
|              |(UUID) |        |          |            |                   |
+---------------------------------------------------------------------------+
|name          |string |RW, All |''        |string      |human+readable     |
|              |       |        |          |            |name               |
+---------------------------------------------------------------------------+
|description   |string |RW, All |''        |string      |description of     |
|              |       |        |          |            |template           |
+---------------------------------------------------------------------------+
|attributes    |dict   |RW, All |None      |dict        |TOSCA YAML file    |
|              |       |        |          |            |                   |
+---------------------------------------------------------------------------+
|infra_driver  |string |RW, All |heat      |string      |driver to provision|
|              |       |        |          |            |VNF                |
+---------------------------------------------------------------------------+
|mgmt_driver   |string |RW All  |noop      |string      |driver to configure|
|              |       |        |          |            |VNF                |
+---------------------------------------------------------------------------+
|service_types |list   |RW, All |[]        |service_type|NFV service type   |
|              |       |        |          |_list       |(VNF, NSD)         |
+---------------------------------------------------------------------------+
|tenant_id     |string |RO, All |N/A       |string      |project id to      |
|              |       |        |          |            |launch VNF         |
+--------------+-------+--------+----------+--------------------------------+

/vnf

+----------------------------------------------------------------------------+
|Attribute     |Type   |Access  |Default   |Validation/ |Description         |
|Name          |       |        |Value     |Conversion  |                    |
+----------------------------------------------------------------------------+
|id            |string |RO, All |generated |N/A         |identity            |
|              |(UUID) |        |          |            |                    |
+----------------------------------------------------------------------------+
|name          |string |RW, All |''        |string      |human+readable      |
|              |       |        |          |            |name                |
+----------------------------------------------------------------------------+
|description   |string |RW, All |''        |string      |description of      |
|              |       |        |          |            |template            |
+----------------------------------------------------------------------------+
|attributes    |dict   |RW, All |None      |dict        |TOSCA YAML file     |
|              |       |        |          |            |                    |
+----------------------------------------------------------------------------+
|instance_id   |string |RO, All |generated |string      |identity of         |
|              |       |        |          |            |VM instance         |
+----------------------------------------------------------------------------+
|mgmt_url      |string |RO, All |None      |string      |IP address of       |
|              |       |        |          |            |VNF management net. |
+----------------------------------------------------------------------------+
|tenant_id     |string |RW, All |generated |string      |project id to       |
|              |       |        |          |            |launch VNF          |
+----------------------------------------------------------------------------+
|template_id   |string |RW, All |None      |string      |VNFD id             |
|              |       |        |          |            |                    |
+----------------------------------------------------------------------------+
|status        |string |RO, All |generated |string      |current state       |
|              |       |        |          |            |of VNF              |
+--------------+-------+--------+----------+---------------------------------+
|service_      |list   |RW, All |[]        |service_    |VNF role for a given|
|contexts      |       |        |          |context_list|network             |
+--------------+-------+--------+----------+---------------------------------+

安全影响

通知影响

其他最终用户影响

用户与客户端交互的方式不会直接影响 python-tackerclient。 使用当前实现时,VNF 资源请求会内部转发到 ‘servicevm’ 资源请求。 然而,使用新的实现,python-tackerclient 将直接调用 ‘vnfm’ REST API 来进行 VNF 资源请求。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

sseetha

其他贡献者

工作项

  1. 向 tacker v1 添加新的扩展 ‘vnfm’ 并弃用现有的 ‘servicevm’ 扩展。

  2. 新的扩展应内部调用 servicevm 插件基础。

  3. 修改 tackerclient 中的 VNFM API 请求,以反映请求体中的 VNF 资源,并删除围绕 ‘servicevm’ 的当前封装实现。

  4. 为新的扩展添加单元测试,并贡献到现有的 API 相关测试用例。

  5. 添加 REST api 文档文件,详细记录 ‘vnfm’ 扩展。

依赖项

测试

目前,Tacker 中没有添加 tempest 测试,并将作为单独的活动进行跟踪。

文档影响

将在 Tacker wiki 链接 [2] 中添加一个文档页面,记录新的 REST API VNF v1 资源。

参考资料

[1] http://www.ietf.org/proceedings/88/slides/slides-88-opsawg-6.pdf [2] https://wiki.openstack.org/wiki/Tacker/API