支持 NFV SOL_v3 的启动和终止

https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-start-and-terminate-vnf

本规范支持符合 ETSI NFV SOL v3 的新型 VNF 生命周期管理 API。它添加了与启动 VNF 和终止 VNF 相关的 API 的新版本。

问题描述

ETSI 规范在 NFV 架构框架内 [1] 描述了基于行业需求、SDN/NFV 供应商和电信运营商反馈的 NFV 开发和使用的主要方面。这些规范包括 REST API 和数据模型架构,这些架构被 NFV 用户和开发人员用于相关产品。

支持关键的 ETSI NFV 规范将显著减少 Tacker 集成到电信生产网络的工作量,并简化未来标准的进一步开发和支持。在 Wallaby 版本中,ETSI NFV SOL002 v2.6.1 [2] 和 SOL003 v2.6.1 [3] 中定义的 VNF 生命周期管理操作已得到支持。然而,NFV 持续开发新的规范,因此应符合多个版本的 ETSI NFV SOL 规范。Tacker 将支持 ETSI NFV SOL002 v3.3.1 [4] 和 SOL003 v3.3.1 [5] 中定义的 VNF 生命周期管理操作。

提议的变更

由于 ETSI NFV SOL v3 中指定的 VNF 生命周期管理接口版本为“2.0.0”,因此 URI 中包含的 API 主要版本应设置为“v2”。支持 v2 API 涉及更改某些属性的数据类型以及添加或删除属性。为了避免对现有实现产生影响,与“v1”对应的 API 应实现为独立于“v1”的过程。

以下是此接口支持的示例 API。

  • 创建 VNF 标识符

  • 实例化 VNF

  • 终止 VNF

  • 删除 VNF 标识符

1) VNF 实例资源创建流程

../../_images/0136.png
  1. 客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的创建 VNF 请求。

  2. VNFM 创建 VNF 实例资源和相关的 VNF 实例标识符。

  3. VNFM 返回“201 Created”响应。

如有必要,VNFM 执行 SPEC support-sol003-vnfm-operations 中描述的包获取过程,以及 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。

2) VNF 实例实例化流程

../../_images/0223.png
  1. 客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的实例化 VNF 请求。

  2. VNFM 返回“202 Accepted”响应。

  3. VNFM 和 NFVO 交换授权信息。

  4. VNFM 调用 MgmtDriver 和 VnfLcmDriver。

如有必要,VNFM 执行 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。

3) VNF 实例终止流程

../../_images/0312.png
  1. 客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的终止 VNF 请求。

  2. VNFM 返回“202 Accepted”响应。

  3. VNFM 和 NFVO 交换授权信息。

  4. VNFM 调用 MgmtDriver 和 VnfLcmDriver。

如有必要,VNFM 执行 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。

4) VNF 实例资源删除流程

../../_images/048.png
  1. 客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的删除 VNF 请求。

  2. VNFM 删除“VNF 实例资源”和相关的 VNF 实例标识符。

  3. VNFM 返回带有空有效负载体的“204 No Content”响应。

如有必要,VNFM 执行 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。

数据模型影响

在本规范中,与 ETSI NFV SOL002 v3.3.1 [4] 和 SOL003 v3.3.1 [5] 一起,应在 API 验证中支持所有定义的属性。此外,应在数据库中实现响应中的所有数据模型,以实现 VNF 生命周期管理逻辑的灵活更改。

从上述观点来看,更改数据库表有两个动机。

第一种动机是支持 v2 API 中的新属性。根据 SOL v3,从 v2 API 中添加了新属性。但是,由于所有新属性都在当前 JSON 数据类型中描述,因此无需更改数据模型。

第二种动机是支持 SOL 文档中定义的所有属性。在 v1 API 中,API 验证中支持的属性有限,并存储在数据库中。需要更改数据库表以存储其他支持的属性。

以下是 v2 API 的数据库表。作为参考信息,还显示了与 v1 API 的差异。

注意

由于 Tacker 为每个主要版本管理单独的数据库,因此它们的设计或更改不会相互影响。

  • VnfInstance

    v1 API (vnf_instances)

    v2 API (VnfInstanceV2)

    从 v1 API 的更改

    数据类型

    id

    id

    数据类型已更改

    varchar(36) NOT NULL -> varchar(255) NOT NULL

    vnf_instance_name

    vnfInstanceName

    已重命名

    <no_changed>

    vnf_instance_description

    vnfInstanceDescription

    已重命名且数据类型已更改

    varchar(1024) DEFAULT NULL -> text DEFAULT NULL

    vnfd_id

    vnfdId

    已重命名且数据类型已更改

    varchar(36) NOT NULL -> varchar(255) NOT NULL

    vnf_provider

    vnfProvider

    已重命名

    <no_changed>

    vnf_product_name

    vnfProductName

    已重命名

    <no_changed>

    vnf_software_version

    vnfSoftwareVersion

    已重命名

    <no_changed>

    vnfd_version

    vnfdVersion

    已重命名

    <no_changed>

    vnfConfigurableProperties

    已添加

    json DEFAULT NULL

    vim_connection_info

    vimConnectionInfo

    已重命名

    <no_changed>

    instantiation_state

    instantiationState

    数据类型已更改

    varchar(255) NOT NULL -> enum(‘NOT_INSTANTIATED’,’INSTANTIATED’) NOT NULL

    instantiatedVnfInfo

    已添加
    instantiatedVnfInfo 字段与 v1 API 中的 vnf_instantiated_info 对应,合并到 VnfInstanceV2 表中,并直接存储 json 数据。

    json DEFAULT NULL

    vnf_metadata

    metadata

    已重命名

    <no_changed>

    extensions

    已添加

    json DEFAULT NULL

    task_state

    已删除

    tenant_id

    已删除

    vnf_pkg_id

    已删除

    created_at

    已删除

    updated_at

    已删除

    deleted_at

    已删除

    deleted

    已删除

  • VnfLcmOpOcc

    v1 API (vnf_lcm_op_occs)

    v2 API (VnfLcmOpOccV2)

    从 v1 API 的更改

    数据类型

    id

    id

    数据类型已更改

    varchar(36) NOT NULL -> varchar(255) NOT NULL

    operation_state

    operationState

    已重命名且数据类型已更改

    varchar(16) DEFAULT NULL -> enum(‘STARTING’,’PROCESSING’,’COMPLETED’,’FAILED_TEMP’,’FAILED’,’ROLLING_BACK’,’ROLLED_BACK’) NOT NULL

    state_entered_time

    stateEnteredTime

    已重命名

    <no_changed>

    start_time

    startTime

    已重命名

    <no_changed>

    vnf_instance_id

    vnfInstanceId

    已重命名且数据类型已更改

    varchar(36) NOT NULL -> varchar(255) NOT NULL

    grant_id

    grantId

    数据类型已更改

    varchar(36) NOT NULL -> varchar(255) NOT NULL

    operation

    operation

    数据类型已更改

    varchar(16) DEFAULT NULL -> enum(‘INSTANTIATE’,’SCALE’,’SCALE_TO_LEVEL’,’CHANGE_FLAVOUR’,’TERMINATE’,’HEAL’,’OPERATE’,’CHANGE_EXT_CONN’,’MODIFY_INFO’,’CREATE_SNAPSHOT’,’REVERT_TO_SNAPSHOT’,’CHANGE_VNFPKG’) NOT NULL

    is_automatic_invocation

    isAutomaticInvocation

    已重命名

    <no_changed>

    operation_params

    operationParams

    已重命名

    <no_changed>

    is_cancel_pending

    isCancelPending

    已重命名

    <no_changed>

    cancelMode

    已添加

    enum(‘GRACEFUL’,’FORCEFUL’) DEFAULT NULL

    error

    error

    <no_changed>

    <no_changed>

    resource_changes

    resourceChanges

    已重命名

    <no_changed>

    changed_info

    changedInfo

    已重命名

    <no_changed>

    changed_ext_connectivity

    changedExtConnectivity

    已重命名

    <no_changed>

    modificationsTriggeredByVnfPkgChange

    已添加
    SOL003 v3.3.1 [5] “F.2.1 FEAT02: VNF Software modification” 中定义的新字段。

    json DEFAULT NULL

    vnfSnapshotInfoId

    已添加
    SOL003 v3.3.1 [5] “F.2.4 FEAT15: VNF snapshotting” 中定义的新字段。

    varchar(255) DEFAULT NULL

    error_point

    已删除

    created_at

    已删除

    updated_at

    已删除

    deleted_at

    已删除

    deleted

    已删除

REST API 影响

应在 API 验证中支持所有定义的属性。“_link” 属性是唯一的例外,因为并非 VNF 生命周期管理接口中的所有操作都已实现。应过滤掉未实现操作的某些链接。

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

    数据类型

    基数

    描述

    CreateVnfRequest

    1

    VNF 创建参数。

    属性名称

    数据类型

    基数

    在 API v2 (Xena) 中支持

    在 API v1 (Wallaby) 中支持

    vnfdId

    标识符

    1

    vnfInstanceName

    字符串

    0..1

    vnfInstanceDescription

    字符串

    0..1

    metadata

    KeyValuePairs

    0..1

    响应:

    数据类型

    基数

    响应代码

    描述

    VnfInstance

    1

    成功: 201

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

    ProblemDetails

    1

    错误: 422

    有效负载体的内容类型受支持,并且请求的有效负载体包含语法上正确的数据,但无法处理该数据。

    ProblemDetails

    请参阅 [6] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [6]

    属性名称

    数据类型

    基数

    在 API v2 (Xena) 中支持

    在 API v1 (Wallaby) 中支持

    描述

    id

    标识符

    1

    vnfInstanceName

    字符串

    0..1

    vnfInstanceDescription

    字符串

    0..1

    vnfdId

    标识符

    1

    vnfProvider

    字符串

    1

    vnfProductName

    字符串

    1

    vnfSoftwareVersion

    版本

    1

    vnfdVersion

    版本

    1

    vnfConfigurableProperties

    KeyValuePairs

    0..1

    vimConnectionInfo

    map(VimConnectionInfo)

    0..N

    在 API v2 中,数据类型已从 VimConnectionInfo 更改为 map(VimConnectionInfo)。

    instantiationState

    Enum

    1

    metadata

    KeyValuePairs

    0..1

    extensions

    KeyValuePairs

    0..1

    _links

    结构 (内联)

    1

    >self

    链接

    1

    >indicators

    链接

    0..1

    >instantiate

    链接

    0..1

    >terminate

    链接

    0..1

    >scale

    链接

    0..1

    >scaleToLevel

    链接

    0..1

    >changeFlavour

    链接

    0..1

    >heal

    链接

    0..1

    >operate

    链接

    0..1

    >changeExtConn

    链接

    0..1

    >createSnapshot

    链接

    0..1

    API v2 中的新属性。

    >revertToSnapshot

    链接

    0..1

    API v2 中的新属性。

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

    名称

    定义

    vnfInstanceId

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

    请求:

    数据类型

    基数

    描述

    InstantiateVnfRequest

    1

    传递给实例化任务的参数。

    属性名称

    数据类型

    基数

    在 API v2 (Xena) 中支持

    在 API v1 (Wallaby) 中支持

    描述

    flavourId

    IdentifierInVnfd

    1

    instantiationLevelId

    IdentifierInVnfd

    0..1

    extVirtualLinks

    ExtVirtualLinkData

    0..N

    extManagedVirtualLinks

    ExtManagedVirtualLinkData

    0..N

    vimConnectionInfo

    map(VimConnectionInfo)

    0..N

    在 API v2 中,数据类型已从 VimConnectionInfo 更改为 map(VimConnectionInfo)。

    localizationLanguage

    字符串

    0..1

    additionalParams

    KeyValuePairs

    0..1

    extensions

    KeyValuePairs

    0..1

    vnfConfigurableProperties

    KeyValuePairs

    0..1

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202

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

    ProblemDetails

    1

    错误: 409

    由于资源的状态冲突,当前无法执行该操作。

    ProblemDetails

    请参阅 [6] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [6]

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

    名称

    描述

    vnfInstanceId

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

    请求:

    数据类型

    基数

    描述

    TerminateVnfRequest

    1

    传递给终止 VNF 任务的参数。

    属性名称

    数据类型

    基数

    在 API v2 (Xena) 中支持

    在 API v1 (Wallaby) 中支持

    terminationType

    Enum (内联)

    1

    gracefulTerminationTimeout

    Integer

    0..1

    additionalParams

    KeyValuePairs

    0..1

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:202

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

    ProblemDetails

    请参阅 [6] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [6]

  • 名称: 删除 VNF 实例
    描述: 请求通过其 ID 删除 VNF 实例资源
    方法类型:DELETE
    资源的 URL: /vnflcm/v2/vnf_instances/{vnfInstanceId}
    此资源的资源 URI 变量:

    名称

    描述

    vnfInstanceId

    VNF 实例的标识符。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:204

    VNF 实例资源和相关的 VNF 标识符已成功删除。

    ProblemDetails

    1

    错误: 409

    由于资源的状态冲突,当前无法执行该操作。

    ProblemDetails

    请参阅 [6] 的 6.4 条

    错误:4xx、5xx

    可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [6]

安全影响

通知影响

其他最终用户影响

可以使用 CLI 选项在 v1 API 和 v2 API 之间切换。

性能影响

其他部署者影响

开发人员影响

  • python-tackerclient 需要支持一个新属性来设置 API 版本。

实现

负责人

野口宏文 <hirofumi.noguchi.rs@hco.ntt.co.jp>

工作项

  • 将新的版本 API 端点添加到 Tacker-server。

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

  • 更新 Tacker 的 API 文档。

依赖项

测试

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

文档影响

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

参考资料