增强 Tacker 中的 VNF 包 (TOSCA CSAR)

https://blueprints.launchpad.net/tacker/+spec/tosca-csar-mgmt-driver

本文档描述了 Tacker 中 VNF 包管理方面的增强。

问题描述

在 Train 版本中,我们添加了对 ETSI NFV-SOL 005 [1] 中定义的 VNF 包管理的支持。现在,我们希望扩展该支持并实现以下 REST API。

  • 读取已上载 VNF 包的 VNFD GET /vnf_packages/{vnfPkgId}/vnfd

  • 获取已上载的 VNF 包 GET /vnf_packages/{vnfPkgId}/package_content

  • 更新单个 VNF 包的信息 PATCH /vnf_packages/{vnfPkgId}

  • 为列出 VNF 包 API 实现查询参数支持。

  • 从 URI REST API 上传 VNF 包 `` POST /vnf_packages/{id}/package_content/upload_from_uri`` 接受 userName 和 password 参数,但实际上在从地址信息中指定的 URI 获取 CSAR zip 文件时,这些参数并未在内部使用。如果提供 CSAR zip 文件的服务器需要身份验证,它将返回 401 错误,VNF 包的下载将失败,从而将 VNF 包 PackageOnboardingStateType 状态从 uploading 恢复到 create。使用 userNamepassword 参数创建 Authorization HTTP 头部,以便需要身份验证才能获取 VNF 包的服务器能够成功。

提议的变更

为了实现新的 REST API,我们需要对以下组件进行更改

  • Tacker API 服务

    • 添加用于管理 VNF 包的新 API。

    • 修改列出 VNF 包 API GET {apiRoot}/vnfpkgm/v1/vnf_packages 以接受查询参数并相应地过滤 VNF 包。

    • 修改从 URI 上传 VNF 包 API,以启用使用给定的用户名和密码进行身份验证。

  • 在 python-tackerclient 中添加新的 OSC 命令,以支持 VNF 包的管理。

Tacker-server 的新 REST API 资源和方法概述

资源 URI

HTTP 方法

含义

{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/vnfd

GET

读取已上载 VNF 包的 VNFD

{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content

GET

获取已上载的 VNF 包

{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}

PATCH

更新单个 VNF 包的信息

{apiRoot}/vnfpkgm/v1/vnf_packages?filter= (eq, vnfSoftwareVersion,’value’)

GET

使用查询 URI 参数获取 VNF 包列表。此 REST API 已在 Train 版本中支持,除了 URI 查询参数外。

获取已上载的 VNF 包

为了根据 HTTP_RANGE HTTP 请求头部获取已上载的 VNF 包,重要的是提前知道 CSAR zip 文件的大小,但当前大小并未持久化在 vnf_packages 数据库表中。因此,我们需要在 vnf_package 数据库表中添加一个类型为 BigIntegersize 数据库列。对于现有的 VNF 包,我们需要计算 CSAR 文件的大小并在获取已上载的 VNF 包时将其存储在 size 数据库列中(如果尚未设置)。对于新的 VNF 包,将在上传 VNF 包时计算并设置大小。

使用身份验证参数从 URI 上传 VNF 包

如果将 userName 和 password 参数传递到 POST /vnf_packages/{id}/package_content/upload_from_uri REST API 的请求体中,请使用 userNamepassword 参数设置“Authorization”头部,如下所示。

  • userName 和 password 组合成一个冒号 (:)。这意味着 userName 本身不能包含冒号。

  • 生成的字符串使用 Base64 的一种变体进行编码。

  • 然后将授权方法(Basic 和一个空格,例如“Basic ”)添加到编码后的字符串之前。

例如,如果 userName 和 password 都是“xyz”,则该字段的值是 xyz:xyzpassword 的 base64 编码,即 eHl6Onh5enBhc3N3b3Jk,并且 Authorization 头部将显示为

Authorization: Basic eHl6Onh5enBhc3N3b3Jk

数据模型影响

修改 vnf_packages 数据库表,添加类型为 BigIntegersize 列。size 列的默认值设置为 0。

REST API 影响

将添加以下 RestFul API

资源 URI

HTTP 方法

含义

响应代码

{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/vnfd

GET

读取已上载 VNF 包的 VNFD

成功: 200 错误: 401,403 404, 406, 409

{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content

GET

获取已上载的 VNF 包

成功: 200 错误: 401, 403 404, 406, 409, 416

{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}

PATCH

更新单个 VNF 包的信息

成功: 200 错误: 401,403 404, 409

{apiRoot}/vnfpkgm/v1/vnf_packages?filter= (eq, vnfSoftwareVersion,’value’)

GET

使用查询 URI 参数获取 VNF 包列表。此 REST API 已在 Train 版本中支持,除了 URI 查询参数外。

成功: 200 错误: 400, 401, 403

实现

负责人

主要负责人

Hiroyuki Jo <hiroyuki.jo.mt@hco.ntt.co.jp>

其他贡献者

工作项

  • 在 /vnfpkgm/v1 端点中实现新的 REST API。

  • 在 python-tackerclient 中添加新的 OSC 命令,以支持新的 REST API。

  • 修改 OSC vnf package list 命令,以添加命令行选项来过滤 VNF 包。

  • 为需要身份验证的 VNF 包下载添加 Authorization HTTP 头部支持。

  • 添加单元和功能测试。

依赖项

测试

将添加用于 VNF 包上载的单元和功能测试用例。

文档影响

参考资料