基于 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)管理订阅流程

  • 注册订阅

../../_images/0116.png
  • 删除订阅

../../_images/0210.png
  • 显示订阅

../../_images/036.png
  • 列出订阅

../../_images/044.png
  • 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

../../_images/053.png
  • 修改 VNF

../../_images/06.png
  • 回滚

../../_images/07.png

4) 带有通知的 VNF 实例资源流程

  • CereateVNFRequest

../../_images/08.png
  • DeleteVNFRequest

../../_images/09.png

5)获取操作状态流程

可以从 VNFM 获取操作状态。

../../_images/10.png
  • 传输源节点指定在订阅时发出的 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 生命周期管理。

参考资料