基于 ETSI NFV-SOL 规范支持 VNF 的 LCM 通知¶
https://blueprints.launchpad.net/tacker/+spec/support-etsi-nfv-specs
NFV 架构框架内的 ETSI 规范 [1] 描述了基于行业需求、SDN/NFV 厂商和电信运营商反馈的 NFV 开发和使用的主要方面。这些规范包括 REST API 和数据模型架构,供 NFV 用户和开发人员在相关产品中使用。
问题描述¶
在当前的基于 ETSI NFV-SOL 的 Tacker 实现中,Tacker 使用其自身的 API 来描述 VNF 生命周期变更通知,即告知接收方 LCM 操作已更改的能力。
然而,这些操作与当前的 ETSI NFV 数据模型不一致。因此,可能与 第三方 VNF [4] 缺乏兼容性,因为它们是根据 ETSI NFV 规范开发的。支持关键的 ETSI NFV 规范将显著减少 Tacker 集成到电信生产网络的工作量,并简化未来标准的进一步开发和支持。
提议的变更¶
引入新的接口到 VNFM,以便通知 VNF 实例的 VNF 生命周期管理操作状态。通过这些接口提供的操作是
订阅 (GET/POST/DELETE)
通知端点 (POST)
单个订阅 (GET)
单个 VNF 实例 (GET)
1)管理订阅流程¶
注册订阅
删除订阅
显示订阅
列出订阅
VNFM 预先保存了消费者通过“Subscription API”发送的回调 URL。
通知与收到的 Subscription 请求关联的 ID 的发布者。
对于已注册的 Subscription 状态,允许通过指定 ID 进行读取,读取所有 ID 数据以及删除指定的 ID。
2)发送通知流程¶
根据序列的进度状态,VNFM 发送通知 (Notify) 以通知状态更改并更新内部 operation_status。
前提条件:请求节点之前已订阅与 VNF 生命周期管理相关的通知。
当 LCM 请求被接受时,操作状态将发送到通过“Subscription API”注册订阅的消费者。这将为每个注册发送。
可以通知以下操作状态:STARTING/PROCESSING/COMPLETED/ROLLINGBACK/ROLLEDBACK/FAILED_TEMP
STARTING 状态由 Tacker Server 发送,其他 Operation_state 通知由 Tacker-Conductor 发送。
修改 VNF 不发送 STARTING 状态。
接收到通知信息的 NFVO 向 Tacker 发送 204 No Content。
3) 带有通知的 LCM 操作流程¶
实例化 VNF
缩放 VNF
修复 VNF
终止 VNF
修改 VNF
回滚
4) 带有通知的 VNF 实例资源流程¶
CereateVNFRequest
DeleteVNFRequest
5)获取操作状态流程¶
可以从 VNFM 获取操作状态。
传输源节点指定在订阅时发出的 vnfLcmOpOccId,并读取 Subscription 状态中的资源信息。
如果 VNFM 信息读取成功,则响应 200 OK。
备选方案¶
无
数据模型影响¶
在 ‘tacker’ 数据库中添加以下新表。相应的模式如下详细说明:-
- 添加的表格列表
vnf_lcm_filters
添加的表格详情
vnf_lcm_filters
id id varchar(36) Not Null subscription_uuid subscription_uuid varchar(36) Not Null filter filter json Not Null notification_types notification_types MEDIUMBLOB notification_types_len notification_types_len int operation_types operation_types MEDIUMBLOB operation_types_len operation_types_len int
subscription_uuid 将是 vnf_lcm_subscriptions.`id` 的外键。此表具有当前的 LCM 状态。用于累积每个事件信息的表。
vnf_lcm_op_occs
id id varchar(36) Not Null operation_state operation_state varchar(16) Not Null state_entered_time state_entered_time datetime Not Null start_time start_time datetime Not Null vnf_instance_id vnf_instance_id varchar(36) Not Null operation operation varchar(16) Not Null is_cancel_pending is_cancel_pending tinyint(1) Not Null is_automatic_invocation is_automatic_invocation tinyint(1) Not Null operation_params operation_params json error error json resource_changes resource_changes json error_point error_point int changed_info changed_info json created_at created_at datetime Not Null updated_at updated_at datetime deleted_at deleted_at datetime deleted deleted tinyint(1) Not Null
vnf_instance_id 将是 vnf_instances.`id` 的外键。此表具有当前的操作发生状态
vnf_lcm_subscriptions
id id varchar(36) Not Null callback_uri callback_uri varchar(255) Not Null subscription_authentication subscription_authentication json deleted deleted tinyint(1)
此表具有 Subscription 的注册信息
REST API 影响¶
将添加以下 restFul API。此 restFul API 将基于 ETSI NFV SOL002 [2] 和 SOL003 [3]。
- 名称:Subscriptions描述: 订阅与 VNF 生命周期管理相关的通知方法类型: POST资源的 URL:/vnflcm/v1/subscriptions请求:
数据类型
基数
描述
LccnSubscriptionRequest
1
订阅的参数。
属性名称
数据类型
基数
受支持于 (V)
filter
LifecycleChangeNotificationFilter
0..1
是
callbackUri
Uri
1
是
authentication
SubscriptionAuthentication
0..1
是
响应:数据类型
基数
响应代码
描述
LccnSubscription
n/a
成功 201重定向 303错误 4xx已成功创建订阅。
- 名称:列出 Subscriptions描述:请求列出所有现有的订阅方法类型: GET资源的 URL:/vnflcm/v1/subscriptions请求:
数据类型
基数
描述
受支持于 (V)
filter
0..1
筛选列出订阅
否
响应:数据类型
基数
响应代码
描述
LccnSubscription
n/a
成功 200错误 400 4xx已成功查询订阅列表。
- 名称:查询 Subscriptions描述:请求通过其 id 显示单个订阅资源方法类型: GET资源的 URL:/vnflcm/v1/subscriptions/{subscriptionId}请求:
名称
描述
subscriptionId
订阅的标识符。
响应:数据类型
基数
响应代码
描述
LccnSubscription
n/a
成功 200错误 400 4xx操作已成功完成。
- 名称:删除 Subscriptions描述:请求通过其 id 删除单个订阅资源方法类型:DELETE资源的 URL:/vnflcm/v1/subscriptions/{subscriptionId}请求:
名称
描述
subscriptionId
订阅的标识符。
响应:数据类型
基数
响应代码
描述
n/a
n/a
成功 204错误 400 4xx单个订阅资源已成功删除。
- 名称: 通知端点描述:发送与 VNF 生命周期更改相关的通知方法类型: POST资源的 URL: 资源 URI 由客户端在创建订阅时提供。请求:
数据类型
基数
描述
VnfLcmOperationOccurrenceNotification
1
关于由 VNF LCM 操作发生触发的生命周期变化的通知。
VnfIdentifierCreationNotification
1
关于 VNF 标识符的创建及其相关的单个 VNF 实例资源的通知。
VnfIdentifierDeletionNotification
1
关于 VNF 标识符及其相关的单个 VNF 实例资源的删除的通知。
属性名称
数据类型
基数
受支持于 (V)
id
标识符
1
是
notificationType
字符串
1
是
subscriptionId
标识符
1
是
timeStamp
DateTime
1
是
notificationStatus
Enum (内联)
1
是
operationState
LcmOperationStateType
1
是
vnfInstanceId
标识符
1
是
operation
LcmOperationType
1
是
isAutomaticInvocation
布尔值
1
是
vnfLcmOpOccId
标识符
1
是
affectedVnfcs
AffectedVnfc
0..N
是
affectedVirtualLinks
AffectedVirtualLink
0..N
是
affectedVirtualStorages
AffectedVirtualStorage
0..N
是
changedInfo
VnfInfoModifications
0..1
是
changedExtConnectivity
ExtVirtualLinkInfo
0..N
否
error
ProblemDetails
0..1
是
_links
LccnLinks
1
是
响应:数据类型
基数
响应代码
描述
n/a
n/a
成功 204错误 4xx通知已成功传递。
注意
virtualLinkDescId 是 SOL003 版本 2.6.1 中包含的属性之一,已被移除。但是,为了使 Tacker 能够扩展广泛的 NFV 兼容产品,virtualLinkDescId 将在 Victoria 版本中得到支持。
- 名称: 查询 VNF 事件描述:请求通过其 id 显示单个 VNF 生命周期管理操作发生情况方法类型: GET资源的 URL: /vnflcm/v1/vnf_lcm_op_occs/{vnfLcmOpOccId}响应:
数据类型
基数
响应代码
描述
VnfLcmOpOcc
1
成功 200错误 4xx操作已成功完成。
属性名称
数据类型
基数
受支持于 (V)
id
标识符
1
是
operationState
LcmOperationStateType
1
是
stateEnteredTime
DateTime
1
是
startTime
DateTime
1
是
vnfInstanceId
标识符
1
是
grantId
标识符
1
否
operation
LcmOperationType
1
是
isAutomaticInvocation
布尔值
1
是
operationParams
Object
1
是
isCancelPending
布尔值
0..N
否
cancelMode
CancelModeType
0..N
否
error
ProblemDetails
0..N
是
resourceChanges
结构(内联)
0..1
是
changedInfo
VnfInfoModifications
0..N
否
changedExtConnectivity
ExtVirtualLinkInfo
0..1
否
_links
LccnLinks
1
是
安全影响¶
无
通知影响¶
Tacker 将创建一个新的订阅,以订阅与 VNF 生命周期更改相关的通知,并向消费者发送通知。
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
先前创建的 VNF 将不允许使用新引入的 API 进行管理。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Keiko Kuriu <keiko.kuriu.wa@hco.ntt.co.jp>
工作项¶
为 VNF 实例的 LCM 通知接口向 Tacker-server 添加新的 REST API 端点。
添加 Tacker 消费用于通知的 Rest API 的功能
添加新的单元和功能测试。
更改 API Tacker 文档。
依赖项¶
无
测试¶
将为 VNF 实例的 VNF 生命周期管理添加单元和功能测试用例。
文档影响¶
将添加完整的用户指南,以说明如何使用示例调用 VNF 实例的 VNF 生命周期管理。