支持 ETSI NFV-SOL_v3 错误处理操作

https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-error-handling

本规范支持符合 ETSI NFV SOL v3 的新型 VNF 生命周期管理 API。它添加了涉及错误处理操作(重试、失败、回滚)的 API 新版本。

问题描述

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

支持关键的 ETSI NFV 规范将显著减少 Tacker 集成到电信生产网络的工作量,并简化未来标准的进一步开发和支持。为了将 Tacker 集成到各种产品中,它应该符合多个版本的 ETSI NFV SOL 规范。Tacker 已经支持 ETSI NFV SOL002 v2.6.1 [2] 和 SOL003 v2.6.1 [3] 中定义的 VNF 生命周期管理操作。此外,Xena 版本支持 ETSI NFV SOL002 v3.3.1 [4] 和 SOL003 v3.3.1 [5] 中定义的 VNF 生命周期管理操作的一部分。支持的 API 的详细信息在 Tacker Xena 规范中描述 [6] [7]。Tacker 应该支持 ETSI NFV SOL002/003 v3.3.1 中定义的更多 VNF 生命周期管理操作。

提议的变更

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

此接口支持以下涉及生命周期管理操作错误处理的 API。

  • 重试操作 (POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/retry)

  • 失败操作 (POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/fail)

  • 回滚操作 (POST /vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback)

1) 重试操作流程

可以执行重试操作的 LCM 操作包括实例化、终止、修复、扩展、修改和更改外部连接性。

../../_images/0144.png

该过程包括以下步骤,如图所示

先决条件:VNF 生命周期管理操作实例处于 FAILED_TEMP 状态。

  1. 客户端向“重试操作”资源发送一个带有空主体的 POST 请求。

  2. VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。

  3. 重试成功后,VNFM 会向端点(例如客户端)发送带有“COMPLETED”状态的 VNF 生命周期管理操作实例通知,以指示操作已成功完成。

  4. 重试不成功后,VNFM 会向端点(例如客户端)发送带有“FAILED_TEMP”状态的 VNF 生命周期管理操作实例通知,以指示操作的中间错误(重试失败)。

后置条件:VNF 生命周期管理操作实例处于以下状态之一:FAILED_TEMP、COMPLETED。

注意

有关重试过程的详细信息,请参阅规范 [6] [8],每个 VNF 生命周期管理操作都有不同的规范。

2) 失败操作流程

可以执行失败操作的 LCM 操作包括实例化、终止、修复、扩展、修改和更改外部连接性。

../../_images/0228.png

该过程包括以下步骤,如图所示

先决条件:VNF 生命周期管理操作实例处于 FAILED_TEMP 状态。

  1. 客户端向“失败操作”资源发送一个带有空主体的 POST 请求。

  2. VNFM 将操作标记为失败。

  3. VNFM 会向端点(例如客户端)发送带有“FAILED”状态的 VNF 生命周期管理操作实例通知,以指示操作的最终失败。

后置条件:VNF 生命周期管理操作实例处于 FAILED 状态。

3) 回滚操作流程

可以执行回滚操作的 LCM 操作包括实例化、扩展、修改和更改外部连接性。

当收到回滚请求时,VNFM 会在终止时正常停止生命周期操作。如下所示,每个 VNF 生命周期管理操作的回滚流程都有所不同。

当在 VNF 实例化期间执行回滚操作时,VNFM 会删除所有 VM 和资源。

../../_images/0316.png

当为扩展 VNF 操作执行回滚操作时,VNFM 会恢复在扩展操作过程中指定的 VM 和资源的更改。

../../_images/0411.png

当在修改 VNF 信息期间执行回滚操作时,VNFM 仅更新操作的状态。

../../_images/058.png

当在更改外部 VNF 连接性期间执行回滚操作时,VNFM 会恢复 VNF 实例的外部连接性的更改。

../../_images/065.png

该过程包括以下步骤,如上述序列所示

先决条件:VNF 生命周期管理操作实例处于 FAILED_TEMP 状态。

  1. 客户端向“回滚操作”资源发送一个带有空主体的 POST 请求。

  2. VNFM 会向端点(例如客户端)发送带有“ROLLING_BACK”状态的 VNF 生命周期管理操作实例通知,以指示生命周期管理操作的处理实例。

  3. 回滚成功后,VNFM 会向端点(例如客户端)发送带有“ROLLED_BACK”状态的 VNF 生命周期管理操作实例通知,以指示操作已成功完成。

  4. 回滚不成功后,VNFM 会向端点(例如客户端)发送带有“FAILED_TEMP”状态的 VNF 生命周期管理操作实例通知,以指示操作的中间错误(回滚失败)。

后置条件:VNF 生命周期管理操作实例处于以下状态之一:FAILED_TEMP、ROLLED_BACK。

注意

API v1 支持实例化和扩展的回滚操作。API v1 不支持修改和更改外部连接性的回滚操作。

数据模型影响

此更改不会影响数据模型。由于 Xena 版本已经支持 SOL002 v3.3.1 [4] 和 SOL003 v3.3.1 [5] 中定义的所有属性,因此不需要更改数据对象和数据库表。

REST API 影响

应在 API 验证中支持所有定义的属性。

  • 名称:重试 VNF LCM 操作实例
    描述:请求重试 VNF LCM 操作实例
    方法类型: POST
    资源的 URL:/vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/retry
    请求:此资源的资源 URI 变量

    名称

    描述

    vnfLcmOpOccId

    要重试的 VNF 生命周期管理操作实例的标识符。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    n/a

    成功:202

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

    ProblemDetails

    0..1

    错误:404

    错误:API 生产者未找到目标资源的当前表示形式,或不愿意公开该资源。此错误的通用原因及其处理方式在 ETSI GS NFV-SOL 013 的 6.4 条中指定 [9],尚未完成。

    ProblemDetails

    1

    错误: 409

    错误:由于与 VNF LCM 操作实例资源的当前状态冲突,因此当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条

    错误:4xx、5xx

    错误:ETSI GS NFV-SOL 013 [9] 的 6.4 条中定义的任何通用错误响应代码都可能返回。

  • 名称:标记 VNF LCM 操作实例为“FAILED”
    描述:请求将 VNF LCM 操作实例标记为“FAILED”。
    方法类型: POST
    资源的 URL:/vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/fail
    请求:此资源的资源 URI 变量

    名称

    描述

    vnfLcmOpOccId

    要标记为“failed”的关联 VNF 生命周期管理操作实例的标识符。

    响应:

    数据类型

    基数

    响应代码

    描述

    VnfLcmOpOcc

    1

    成功: 200

    VNF 生命周期管理操作实例的状态已成功更改。

    ProblemDetails

    0..1

    错误:404

    错误:API 生产者未找到目标资源的当前表示形式,或不愿意公开该资源。此错误的通用原因及其处理方式在 ETSI GS NFV-SOL 013 的 6.4 条中指定 [9],尚未完成。

    ProblemDetails

    1

    错误: 409

    错误:由于与 VNF LCM 操作实例资源的当前状态冲突,因此当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条

    错误:4xx、5xx

    错误:ETSI GS NFV-SOL 013 [9] 的 6.4 条中定义的任何通用错误响应代码都可能返回。

    属性名称

    数据类型

    基数

    在 API v2 中支持

    在 API v1 中支持

    描述

    id

    标识符

    1

    operationState

    LcmOperationStateType

    1

    stateEnteredTime

    DateTime

    1

    startTime

    DateTime

    1

    vnfInstanceId

    标识符

    1

    grantId

    标识符

    0..1

    operation

    LcmOperationType

    1

    在 SOL 002/003 中,定义了 11 种类型的值。请参阅注释。

    isAutomaticInvocation

    布尔值

    1

    operationParams

    Object

    0..1

    isCancelPending

    布尔值

    1

    cancelMode

    CancelModeType

    0..1

    在 SOL 002/003 中,定义了 2 种类型的值:FORCEFUL、GRACEFUL

    error

    ProblemDetails

    0..1

    >type

    URI

    0..1

    >title

    字符串

    0..1

    >status

    Integer

    1

    >detail

    字符串

    1

    >instance

    URI

    0..N

    >附加属性

    未指定。

    0..N

    resourceChanges

    结构 (内联)

    0..1

    >affectedVnfcs

    AffectedVnfc

    0..N

    >>id

    IdentifierInVnf

    1

    >>vduId

    IdentifierInVnfd

    1

    >>vnfdId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >>changeType

    Enum (内联)

    1

    允许的值:ADDED、REMOVED、MODIFIED、TEMPORARY

    >>computeResource

    ResourceHandle

    1

    >>>vimConnectionId

    标识符

    0..1

    >>>resourceProviderId

    标识符

    0..1

    >>>resourceId

    IdentifierInVim

    1

    >>>vimLevelResourceType

    字符串

    0..1

    >>resourceDefinitionId

    IdentifierLocal

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >>zoneId

    标识符

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >>metadata

    KeyValuePairs

    0..1

    >>affectedVnfcCPIds

    IdentifierInVnf

    0..N

    >>addedStorageResourceIds

    VnfVirtualLinkResourceInfo

    0..N

    >>removedStorageResourceIds

    IdentifierInVnf

    0..N

    >affectedVirtualLinks

    AffectedVirtualLink

    0..N

    >>id

    IdentifierInVnf

    1

    >>vnfVirtualLinkDescId

    IdentifierInVnfd

    1

    >>vnfdId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >>changeType

    Enum (内联)

    1

    允许的值:ADDED、REMOVED、MODIFIED、TEMPORARY、LINK_PORT_ADDED、LINK_PORT_REMOVED

    >>networkResource

    resourceHandle

    1

    >>>vimConnectionId

    标识符

    0..1

    >>>resourceProviderId

    标识符

    0..1

    >>>resourceId

    IdentifierInVim

    1

    >>>vimLevelResourceType

    字符串

    0..1

    >>vnfLinkPortIds

    IdentifierInVnf

    0..N

    >>resourceDefinitionId

    IdentifierLocal

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >>zoneId

    标识符

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >>metadata

    KeyValuePairs

    0..1

    >affectedExtLinkPorts

    AffectedExtLinkPort

    0..N

    未定义

    API v2 中的新属性。

    >>id

    IdentifierInVnf

    1

    未定义

    API v2 中的新属性。

    >>changeType

    Enum (内联)

    1

    未定义

    允许的值:ADD、REMOVED
    API v2 中的新属性。

    >>extCpInstanceId

    IdentifierInVnf

    1

    未定义

    API v2 中的新属性。

    >>resourceHandle

    ResourceHandle

    1

    未定义

    API v2 中的新属性。

    >>>vimConnectionId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >>>resourceProviderId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >>>resourceId

    IdentifierInVim

    1

    未定义

    API v2 中的新属性。

    >>>vimLevelResourceType

    字符串

    0..1

    未定义

    API v2 中的新属性。

    >>resourceDefinitionId

    IdentifierLocal

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >affectedVirtualStorages

    AffectedVirtualStorage

    0..N

    >>id

    IdentifierInVnf

    1

    >>VirtualStorageDescId

    IdentifierInVnfd

    1

    >>vnfdId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >>changeType

    Enum (内联)

    1

    允许的值:ADDED、REMOVED、MODIFIED、TEMPORARY

    >>storageResource

    resourceHandle

    1

    >>>vimConnectionId

    标识符

    0..1

    >>>resourceProviderId

    标识符

    0..1

    >>>resourceId

    IdentifierInVim

    1

    >>>vimLevelResourceType

    字符串

    0..1

    >>resourceDefinitionId

    IdentifierLocal

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >>zoneId

    标识符

    0..1

    未定义

    此属性仅在 SOL 003 中定义。
    API v2 中的新属性。

    >>metadata

    KeyValuePairs

    0..1

    changedInfo

    VnfInfoModifications

    0..1

    >vnfInstanceName

    字符串

    0..1

    >vnfInstanceDescription

    字符串

    0..1

    >vnfConfigurableProperties

    KeyValuePairs

    0..1

    >metadata

    KeyValuePairs

    0..1

    >extensions

    KeyValuePairs

    0..1

    >vimConnectionInfo

    map(vimConnectionInfo)

    0..N

    此属性仅在 SOL 003 中定义。

    >>vimId

    标识符

    0..1

    >>vimType

    字符串

    1

    >>interfaceInfo

    KeyValuePairs

    0..1

    >>accessInfo

    KeyValuePairs

    0..1

    >>extra

    KeyValuePairs

    0..1

    >vnfdId

    标识符

    0..1

    >vnfProvider

    字符串

    0..1

    >vnfProductName

    字符串

    0..1

    >vnfSoftwareVersion

    版本

    0..1

    >vnfdVersion

    版本

    0..1

    >vnfcInfoModifications

    VnfcInfoModifications

    0..N

    未定义

    此属性仅在 SOL 002 中定义。
    API v2 中的新属性。

    >>id

    IdentifierInVnf

    1

    未定义

    API v2 中的新属性。

    >>vnfcConfigurableProperties

    KeyValuePairs

    1

    未定义

    API v2 中的新属性。

    changedExtConnectivity

    ExtVirtualLinkInfo

    0..N

    >id

    标识符

    1

    >resourceHandle

    ResourceHandle

    1

    >>vimConnectionId

    标识符

    0..1

    >>resourceProviderId

    标识符

    0..1

    >>resourceId

    IdentifierInVim

    1

    >>vimLevelResourceType

    字符串

    0..1

    >extLinkPorts

    ExtLinkPortInfo

    0..N

    >>id

    标识符

    1

    >>resourceHandle

    ResourceHandle

    1

    >>>vimConnectionId

    标识符

    0..1

    >>>resourceProviderId

    标识符

    0..1

    >>>resourceId

    IdentifierInVim

    1

    >>>vimLevelResourceType

    字符串

    0..1

    >>cpInstanceId

    IdentifierInVnf

    0..1

    >currentVnfExtCpData

    VnfExtCpData

    1..N

    未定义

    API v2 中的新属性。

    >>cpdId

    IdentifierInVnfd

    1

    未定义

    API v2 中的新属性。

    >>cpConfig

    map(VnfExtCpConfig)

    1..N

    未定义

    API v2 中的新属性。

    >>>parentCpConfigId

    IdentifierInVnf

    0..1

    未定义

    API v2 中的新属性。

    >>>linkPortId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >>>cpProtocolData

    CpProtocolData

    0..N

    未定义

    API v2 中的新属性。

    >>>>layerProtocol

    Enum (内联)

    1

    未定义

    允许的值:IP_OVER_ETHERNET
    API v2 中的新属性。

    >>>>ipOverEthernet

    IpOverEthernetAddressData

    0..1

    未定义

    API v2 中的新属性。

    >>>>>macAddress

    MacAddress

    0..1

    未定义

    API v2 中的新属性。

    >>>>>segmentationId

    字符串

    0..1

    未定义

    API v2 中的新属性。

    >>>>>ipAddresses

    结构 (内联)

    0..N

    未定义

    API v2 中的新属性。

    >>>>>>type

    Enum (内联)

    1

    未定义

    允许的值:IPV4、IPV6
    API v2 中的新属性。

    >>>>>>fixedAddresses

    IpAddress

    0..N

    未定义

    API v2 中的新属性。

    >>>>>>numDynamicAddresses

    Integer

    0..1

    未定义

    API v2 中的新属性。

    >>>>>>addressRange

    结构 (内联)

    0..1

    未定义

    API v2 中的新属性。

    >>>>>>>minAddress

    IpAddress

    1

    未定义

    API v2 中的新属性。

    >>>>>>>maxAddress

    IpAddress

    1

    未定义

    API v2 中的新属性。

    >>>>>>subnetId

    IdentifierInVim

    0..1

    未定义

    API v2 中的新属性。

    modificationsTriggeredByVnfPkgChange

    ModificationsTriggeredByVnfPkgChange

    0..1

    未定义

    API v2 中的新属性。

    >vnfConfigurableProperties

    KeyValuePairs

    0..1

    未定义

    API v2 中的新属性。

    >metadata

    KeyValuePairs

    0..1

    未定义

    API v2 中的新属性。

    >extensions

    KeyValuePairs

    0..1

    未定义

    API v2 中的新属性。

    >vnfdId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    >vnfProvider

    字符串

    0..1

    未定义

    API v2 中的新属性。

    >vnfProductName

    字符串

    0..1

    未定义

    API v2 中的新属性。

    >vnfSoftwareVersion

    版本

    0..1

    未定义

    API v2 中的新属性。

    >vnfdVersion

    版本

    0..1

    未定义

    API v2 中的新属性。

    vnfSnapshotInfoId

    标识符

    0..1

    未定义

    API v2 中的新属性。

    _links

    结构 (内联)

    1

    >self

    链接

    1

    >vnfInstance

    链接

    1

    >grant

    链接

    0..1

    >cancel

    链接

    0..1

    >retry

    链接

    0..1

    >rollback

    链接

    0..1

    >fail

    链接

    0..1

    >vnfSnapshot

    链接

    0..1

    未定义

    API v2 中的新属性。

    注意

    LcmOperationType 定义了 VNF 生命周期管理操作实例资源和 VNF 生命周期管理操作实例通知中表示 VNF 生命周期操作类型的允许值。它应符合以下表格中定义的规定。

    描述

    INSTANTIATE

    表示“实例化 VNF”LCM 操作。

    SCALE

    表示“扩展 VNF”LCM 操作。

    SCALE_TO_LEVEL

    表示“扩展 VNF 到级别”LCM 操作。

    CHANGE_FLAVOUR

    表示“更改 VNF 规格”LCM 操作。

    TERMINATE

    表示“终止 VNF”LCM 操作。

    HEAL

    表示“修复 VNF”LCM 操作。

    OPERATE

    表示“操作 VNF”LCM 操作。

    CHANGE_EXT_CONN

    表示“更改外部 VNF 连接性”LCM 操作。

    MODIFY_INFO

    表示“修改 VNF 信息”LCM 操作。

    CREATE_SNAPSHOT

    表示“创建 VNF 快照”LCM 操作。

    REVERT_TO_SNAPSHOT

    表示“恢复到 VNF 快照”LCM 操作。

    CHANGE_VNFPKG

    表示“更改当前 VNF 包”LCM 操作。

  • 名称:回滚 VNF LCM 操作实例
    描述:请求回滚 VNF LCM 操作实例
    方法类型: POST
    资源的 URL:/vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback
    此资源的资源 URI 变量:

    名称

    描述

    vnfLcmOpOccId

    要回滚的 VNF 生命周期管理操作实例的标识符。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    n/a

    成功:202

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

    ProblemDetails

    0..1

    错误:404

    错误:API 生产者未找到目标资源的当前表示形式,或不愿意公开该资源。此错误的通用原因及其处理方式在 ETSI GS NFV-SOL 013 的 6.4 条中指定 [9],尚未完成。

    ProblemDetails

    1

    错误: 409

    错误:由于与 VNF LCM 操作实例资源的当前状态冲突,因此当前无法执行该操作。

    ProblemDetails

    请参阅 [9] 的 6.4 条

    错误:4xx、5xx

    错误:ETSI GS NFV-SOL 013 [9] 的 6.4 条中定义的任何通用错误响应代码都可能返回。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

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

工作项

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

  • 实现 Tacker-conductor 的新型 API 处理过程。

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

  • 更新 Tacker 的 API 参考。

依赖项

  • 实例化/终止操作

    依赖于规范“支持 NFV SOL_v3 的启动和终止” [6]

  • 扩展/修复/修改/更改外部 VNF 连接操作

    依赖于规范“增强 NFV SOL_v3 LCM 操作” [8]

测试

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

文档影响

需要将新的支持的 API 添加到 Tacker API 参考中。

参考资料