增强 Tacker 中的 VNF 生命周期管理

https://blueprints.launchpad.net/tacker/+spec/support-etsi-nfv-specs

本规范描述了 Tacker 中 VNF 生命周期管理的增强。

问题描述

在 Ussuri 版本中,我们添加了对 ETSI NFV SOL 002 [1] 和 SOL 003 [2] 中定义的 VNF 生命周期管理的支持。Tacker 应该支持更多的属性以符合 ETSI NFV SOL 规范,并扩展更广泛的使用场景。

提议的变更

为了向后兼容,VNFM 支持以下功能

  • 将 vnfPkgId 设置为相关的 API。该参数存在于 SOL003 版本 2.4.1 [3] 中,但已在 SOL003 版本 2.6.1 中删除。

  • 创建 VNF 标识符(响应)

  • 查询 VNF(响应)

  • 列出 VNF 实例(响应)

  • 修改 VNF 实例(请求)

  • 为了支持属性过滤,以便获取 vnfPkgId,VNFM 支持基于属性的过滤

1) vnfPkgId 支持

1-1) 创建 VNF 请求流程

../../_images/0114.png

VNFM 向 NFVO 发送一个按“vnfdId”过滤的 GET 请求,以查询 VNF 包的信息以获取“vnfPkgId”,因为使用“vnfdId”获取 VNF 包的 API 不受支持。由于需要从 NFVO 获取 VNF 包,因此获得的“vnfPkgId”保存在 DB 中,并作为从 VNFM 获取 VNF 包请求的参数使用。之后,VNFM 启动通过配置启用的信息收集序列,并收集内容/VNFD/artifact。这些 GET 请求,“VNF 包内容”,“单个 VNF 包中的 VNFD”和“单个 VNF 包 artifact”可以配置为每个 API 的执行与否。成功获取目标 VNF 包后,VNFM 返回一个 201 Created 响应,其中 payload body 包含“vnfPkgId”属性。

1-2) 查询 VNF 请求流程

../../_images/028.png

VNFM 返回一个包含 payload body 中“vnfPkgId”的“200 OK”响应。

1-3) 列出 VNF 请求流程

../../_images/035.png

VNFM 返回一个包含 payload body 中“vnfPkgId”的“200 OK”响应。

1-4) 修改 VNF 请求流程

../../_images/043.png

客户端发送一个包含“vnfPkgId”属性的修改 VNF 信息请求。之后,启动通过配置启用的信息收集序列,并收集内容/VNFD/artifact。这些 GET 请求,“VNF 包内容”,“单个 VNF 包中的 VNFD”和“单个 VNF 包 artifact”可以配置为每个 API 的执行与否。VNFM 在正确收集所有 VNF 包信息后将继续修改 VNF 信息。

2) 支持基于属性的过滤

为了增强带有基于属性过滤功能的 LCM 支持,SOL013 [4] 第 5.2.2 节中定义的过滤规范将在 Victoria 版本中得到支持。

此功能可以在以下情况下运行

  • vnf_instances(GET)

基于属性过滤的运算符

带有参数的运算符

含义

eq,<attrName>,<value>

属性等于 <value>

neq,<attrName>,<value>

属性不等于 <value>

in,<attrName>,<value>[,<value>]*

属性等于列表中的一个值(“in set”关系)

nin,<attrName>,<value>[,<value>]*

属性不等于列表中的任何值(“not in set”关系)

gt,<attrName>,<value>

属性大于 <value>

gte,<attrName>,<value>

属性大于或等于 <value>

lt,<attrName>,<value>

属性小于 <value>

lte,<attrName>,<value>

属性小于或等于 <value>

cont,<attrName>,<value>[,<value>]*

字符串属性包含(至少)列表中的一个值

ncont,<attrName>,<value>[,<value>]*

字符串属性不包含列表中的任何值

运算符对数据类型的适用性

运算符

字符串

数字

DateTime

枚举

布尔值

eq

x

x

x

x

neq

x

x

x

x

x

x

x

nin

x

x

x

gt

x

x

x

gte

x

x

x

lt

x

x

x

lte

x

x

x

cont

x

ncont

x

上述表格定义了哪些运算符适用于哪些数据类型。所有标有“x”的组合都应支持。

备选方案

数据模型影响

修改 ‘tacker’ 数据库中的以下表格。相应的 schemas 详见如下:-

vnf_instances:

vnf_pkg_id vnf_pkg_id varchar(36) vnf_metadata vnf_metadata json

REST API 影响(需要更新)

以下属性将被添加到 restFul API。这些属性基于 ETSI NFV SOL002 [1] 和 SOL003 [2]

  • 名称: 创建 VNF 标识符
    描述: 创建新的 VNF 实例资源
    方法类型: POST
    资源的 URL:/vnflcm/v1/vnf_instances
    请求:

    数据类型

    基数

    描述

    CreateVnfRequest

    1

    VNF 创建参数。

    属性名称

    数据类型

    基数

    Victoria 中的支持

    vnfdId

    标识符

    1

    Ussuri 中已支持

    vnfInstanceName

    字符串

    0..1

    Ussuri 中已支持

    vnfInstanceDescription

    字符串

    0..1

    Ussuri 中已支持

    metadata

    KeyValuePairs

    0..1

    响应:

    数据类型

    基数

    响应代码

    描述

    VnfInstance

    1

    成功 201
    错误 400 401 403

    VNF 实例标识符已成功创建。

  • 名称:查询 VNF
    描述:通过其 id 请求现有的 VNF 实例资源
    方法类型: GET
    资源的 URL:/vnflcm/v1/vnf_instances/{vnfInstanceId}
    此资源的资源 URI 变量:

    名称

    描述

    vnfInstanceId

    VNF 实例的标识符。

    响应:

    数据类型

    基数

    响应代码

    描述

    VnfInstance

    1

    成功: 200
    错误:401 403 404

    成功查询了单个 VNF 实例的信息。

  • 名称:列出 VNF 实例
    描述:请求列出所有现有的 VNF 实例
    方法类型: GET
    资源的 URL:/vnflcm/v1/vnf_instances
    响应:

    数据类型

    基数

    响应代码

    描述

    VnfInstance

    0..N

    成功: 200
    错误:401 403

    成功查询了零个或多个 VNF 实例的信息。

    属性名称

    数据类型

    基数

    Victoria 中的支持

    id

    标识符

    1

    Ussuri 中已支持

    vnfInstanceName

    字符串

    0..1

    Ussuri 中已支持

    vnfInstanceDescription

    字符串

    0..1

    Ussuri 中已支持

    vnfdId

    标识符

    1

    Ussuri 中已支持

    vnfProvider

    字符串

    1

    Ussuri 中已支持

    vnfProductName

    字符串

    1

    Ussuri 中已支持

    vnfSoftwareVersion

    版本

    1

    Ussuri 中已支持

    vnfdVersion

    版本

    1

    Ussuri 中已支持

    vnfPkgId

    标识符

    1

    vnfConfigurableProperties

    KeyValuePairs

    0..1

    vimConnectionInfo

    VimConnectionInfo

    0..N -> 0..1

    instantiationState

    Enum

    1

    Ussuri 中已支持

    instantiatedVnfInfo

    结构

    0..1

    Ussuri 中已支持

    >flavourId

    IdentifierInVnfd

    1

    Ussuri 中已支持

    >vnfState

    VnfOperationalStateType

    1

    Ussuri 中已支持

    >scaleStatus

    ScaleInfo

    0..N

    >extCpInfo

    VnfExtCpInfo

    1..N

    Ussuri 中已支持

    >extVirtualLinkInfo

    ExtVirtualLinkInfo

    0..N

    Ussuri 中已支持

    >extManagedVirtualLinkInfo

    ExtManagedVirtualLinkInfo

    0..N

    Ussuri 中已支持

    >monitoringParameters

    MonitoringParameter

    0..N

    >localizationLanguage

    字符串

    0..1

    >vnfcResourceInfo

    VnfcResourceInfo

    0..N

    Ussuri 中已支持

    >vnfVirtualLinkResourceInfo

    VnfVirtualLinkResourceInfo

    0..N

    Ussuri 中已支持

    >virtualStorageResourceInfo

    VirtualStorageResourceInfo

    0..N

    Ussuri 中已支持

    >vnfcInfo

    VnfcInfo

    0..N

    metadata

    KeyValuePairs

    0..1

    extensions

    KeyValuePairs

    0..1

    _links

    结构

    1

    Ussuri 中已支持

    >self

    链接

    1

    Ussuri 中已支持

    >indicators

    链接

    0..1

    >instantiate

    链接

    0..1

    Ussuri 中已支持

    >terminate

    链接

    0..1

    Ussuri 中已支持

    >scale

    链接

    0..1

    >scaleToLevel

    链接

    0..1

    >changeFlavour

    链接

    0..1

    >heal

    链接

    0..1

    Ussuri 中已支持

    >operate

    链接

    0..1

    >changeExtConn

    链接

    0..1

  • 名称:实例化 VNF 任务
    描述: 此任务资源表示“实例化 VNF”操作。客户端可以使用此资源来实例化 VNF 实例。
    方法类型: POST
    资源的 URL:/vnflcm/v1/vnf_instances/{vnfInstanceId}/instantiate
    此资源的资源 URI 变量:

    名称

    定义

    vnfInstanceId

    要实例化的 VNF 实例的标识符。

    请求:

    数据类型

    基数

    描述

    InstantiateVnfRequest

    1

    传递给 instantiate 任务的参数。

    属性名称

    数据类型

    基数

    Victoria 中的支持

    描述

    flavourId

    IdentifierInVnfd

    1

    Ussuri 中已支持

    要实例化的 VNF 部署 flavor 的标识符。

    instantiationLevelId

    IdentifierInVnfd

    0..1

    Ussuri 中已支持

    要实例化的部署 flavor 的实例化级别标识符。如果未提供,则实例化 VNFD 中声明的默认实例化级别。

    extVirtualLinks

    ExtVirtualLinkData

    0..N

    Ussuri 中已支持

    有关连接到 VNF 的外部 VL 的信息。

    vimConnectionInfo

    VimConnectionInfo

    0..N -> 0..1

    Ussuri 中已支持

    用于管理 VNF 实例资源的 VIM 连接信息。在 U 版本中,仅接受 0..1 VIMConnectionInfo。

    additionalParams

    KeyValuePairs

    0..1

    Ussuri 中已支持

    实例化过程的附加参数,特定于正在实例化的 VNF。

    extManagedVirtualLinks

    ExtManagedVirtualLinkData

    0..N

    Ussuri 中已支持

    localizationLanguage

    字符串

    0..1

    extensions

    KeyValuePairs

    0..1

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202
    错误:400、401、403、404、409

    请求已被接受处理,但处理尚未完成。

  • 名称: 终止 VNF 任务
    描述: 此任务资源表示“终止 VNF”操作。客户端可以使用此资源来终止 VNF 实例。
    方法类型: POST
    资源的 URL:/vnflcm/v1/vnf_instances/{vnfInstanceId}/terminate
    此资源的资源 URI 变量:

    名称

    描述

    vnfInstanceId

    要终止的 VNF 实例的标识符。

    请求:

    数据类型

    基数

    描述

    TerminateVnfRequest

    1

    传递给 Terminate VNF 任务的参数。

    属性名称

    数据类型

    可能的值

    基数

    支持

    描述

    terminationType

    Enum (内联)

    FORCEFUL GRACEFUL

    1

    Ussuri 中已支持

    指示请求强制终止还是优雅终止。
    - FORCEFUL:VNFM 将立即关闭 VNF 并释放资源。
    - GRACEFUL:VNFM 将首先安排将 VNF 退出服务。完成退出服务操作后,它将等待 gracefulTerminationTimeout 中指定的时间,然后 VNFM 将关闭 VNF 并释放资源。

    additionalParams

    KeyValuePairs

    0..1

    终止过程的附加参数,特定于正在终止的 VNF。

    gracefulTerminationTimeout

    Integer

    0..1

    Ussuri 中已支持

    此属性仅在优雅终止的情况下适用。它定义了在关闭 VNF 并释放资源之前等待 VNF 退出服务的时间。单位为秒。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202
    错误:400、401、403、404、409

    请求已被接受处理,但处理尚未完成。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

先前创建的 VNF 将不允许使用新引入的 API 进行管理。

开发人员影响

实现

负责人

主要负责人

Keiko Kuriu <keiko.kuriu.wa@hco.ntt.co.jp>

工作项

  • 将新的 REST API 属性添加到 Tacker-server。

  • 添加新的单元和功能测试。

  • 更改 API Tacker 文档。

依赖项

“修改 VNF”在“Proposed change”中引用的是 spec [5] 中提出的基于 ETSI SOL 的 API。

测试

将为 VNF 实例的 VNF 生命周期管理添加单元和功能测试用例。

文档影响

将添加完整的用户指南,以说明如何使用示例调用 VNF 实例的 VNF 生命周期管理。

参考资料