支持 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 实例资源创建流程¶
客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的创建 VNF 请求。
VNFM 创建 VNF 实例资源和相关的 VNF 实例标识符。
VNFM 返回“201 Created”响应。
如有必要,VNFM 执行 SPEC support-sol003-vnfm-operations 中描述的包获取过程,以及 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。
2) VNF 实例实例化流程¶
客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的实例化 VNF 请求。
VNFM 返回“202 Accepted”响应。
VNFM 和 NFVO 交换授权信息。
VNFM 调用 MgmtDriver 和 VnfLcmDriver。
如有必要,VNFM 执行 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。
3) VNF 实例终止流程¶
客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的终止 VNF 请求。
VNFM 返回“202 Accepted”响应。
VNFM 和 NFVO 交换授权信息。
VNFM 调用 MgmtDriver 和 VnfLcmDriver。
如有必要,VNFM 执行 SPEC support-notification-api-based-on-etsi-nfv-sol 中描述的通知过程。
4) VNF 实例资源删除流程¶
客户端发送带有 API 主要版本(包含在 URI 中)为“v2”的删除 VNF 请求。
VNFM 删除“VNF 实例资源”和相关的 VNF 实例标识符。
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 版本。
实现¶
负责人¶
工作项¶
将新的版本 API 端点添加到 Tacker-server。
添加新的单元和功能测试。
更新 Tacker 的 API 文档。
依赖项¶
无
测试¶
将为 VNF 实例的 VNF 生命周期管理添加单元和功能测试用例。
文档影响¶
将添加完整的用户指南,以说明如何使用示例调用 VNF 实例的 VNF 生命周期管理。
参考资料¶
https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/03.04.01_60/gs_nfv-sol013v030401p.pdf