支持 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 操作包括实例化、终止、修复、扩展、修改和更改外部连接性。
该过程包括以下步骤,如图所示
先决条件:VNF 生命周期管理操作实例处于 FAILED_TEMP 状态。
客户端向“重试操作”资源发送一个带有空主体的 POST 请求。
VNFM 向端点(例如客户端)发送带有“PROCESSING”状态的 VNF 生命周期管理操作发生通知,以指示生命周期管理操作的处理。
重试成功后,VNFM 会向端点(例如客户端)发送带有“COMPLETED”状态的 VNF 生命周期管理操作实例通知,以指示操作已成功完成。
重试不成功后,VNFM 会向端点(例如客户端)发送带有“FAILED_TEMP”状态的 VNF 生命周期管理操作实例通知,以指示操作的中间错误(重试失败)。
后置条件:VNF 生命周期管理操作实例处于以下状态之一:FAILED_TEMP、COMPLETED。
2) 失败操作流程¶
可以执行失败操作的 LCM 操作包括实例化、终止、修复、扩展、修改和更改外部连接性。
该过程包括以下步骤,如图所示
先决条件:VNF 生命周期管理操作实例处于 FAILED_TEMP 状态。
客户端向“失败操作”资源发送一个带有空主体的 POST 请求。
VNFM 将操作标记为失败。
VNFM 会向端点(例如客户端)发送带有“FAILED”状态的 VNF 生命周期管理操作实例通知,以指示操作的最终失败。
后置条件:VNF 生命周期管理操作实例处于 FAILED 状态。
3) 回滚操作流程¶
可以执行回滚操作的 LCM 操作包括实例化、扩展、修改和更改外部连接性。
当收到回滚请求时,VNFM 会在终止时正常停止生命周期操作。如下所示,每个 VNF 生命周期管理操作的回滚流程都有所不同。
当在 VNF 实例化期间执行回滚操作时,VNFM 会删除所有 VM 和资源。
当为扩展 VNF 操作执行回滚操作时,VNFM 会恢复在扩展操作过程中指定的 VM 和资源的更改。
当在修改 VNF 信息期间执行回滚操作时,VNFM 仅更新操作的状态。
当在更改外部 VNF 连接性期间执行回滚操作时,VNFM 会恢复 VNF 实例的外部连接性的更改。
该过程包括以下步骤,如上述序列所示
先决条件:VNF 生命周期管理操作实例处于 FAILED_TEMP 状态。
客户端向“回滚操作”资源发送一个带有空主体的 POST 请求。
VNFM 会向端点(例如客户端)发送带有“ROLLING_BACK”状态的 VNF 生命周期管理操作实例通知,以指示生命周期管理操作的处理实例。
回滚成功后,VNFM 会向端点(例如客户端)发送带有“ROLLED_BACK”状态的 VNF 生命周期管理操作实例通知,以指示操作已成功完成。
回滚不成功后,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、REMOVEDAPI 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_ETHERNETAPI 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、IPV6API 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 条中定义的任何通用错误响应代码都可能返回。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
工作项¶
将新的版本 API 端点添加到 Tacker-server。
实现 Tacker-conductor 的新型 API 处理过程。
添加新的单元和功能测试。
更新 Tacker 的 API 参考。
依赖项¶
测试¶
将为 VNF 实例的 VNF 生命周期管理添加单元和功能测试用例。
文档影响¶
需要将新的支持的 API 添加到 Tacker API 参考中。