ETSI NFV-SOL VNF 错误处理

本文档描述了在 Tacker v2 API 中 VNF 的错误处理方式。

注意

本文档的内容已确认使用以下 VNF 包有效。

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

执行“实例化 VNF”过程中的步骤,直到ETSI NFV-SOL VNF 部署为带有 LCM 操作用户数据的虚拟机。换句话说,在“终止 VNF”之后的过程不会执行。

VNF 错误处理流程

如前提条件中所述,在执行错误处理之前必须先创建 VNF。

CLI 命令的详细信息请参见 使用 v2 Tacker 进行 VNF 生命周期管理

有一些操作可以用于 VNF 的错误处理。

  • 回滚 VNF 生命周期管理操作

  • 使 VNF 生命周期管理操作失败

  • 重试 VNF 生命周期管理操作

为了执行错误处理,有必要指定 VNF_LCM_OP_OCC_ID,这是目标 LCM 操作的 ID。首先,将描述指定 ID 的方法。

识别 VNF_LCM_OP_OCC_ID

可以通过 CLI 获取 VNF_LCM_OP_OCC_ID。

CLI 命令的详细信息请参见 使用 v2 Tacker 进行 VNF 生命周期管理

在检查“VNF_LCM_OP_OCC_ID”之前,您应该先获取 VNF_INSTANCE_ID。

$ openstack vnflcm op list --os-tacker-api-version 2

结果

+--------------------------------------+-----------------+--------------------------------------+-------------+
| ID                                   | Operation State | VNF Instance ID                      | Operation   |
+--------------------------------------+-----------------+--------------------------------------+-------------+
| a7f80542-faeb-4324-ba82-c6214307e864 | FAILED_TEMP     | 385fc2ff-1ef5-42f4-8196-3d913160074d | INSTANTIATE |
+--------------------------------------+-----------------+--------------------------------------+-------------+

只有当 operationStateFAILED_TMP 时,才能执行错误处理。

如果已注册 Subscription,则导致 FAILED_TEMP 的上述操作将向 Subscription 的 callbackUri 发送“Notification”。

此“Notification”中包含的 vnfLcmOpOccId 对应于 VNF_LCM_OP_OCC_ID。

有关此处使用的 API 的详细信息,请参阅 VNF LCM v2 API

回滚 VNF LCM 操作

LCM 操作

回滚的描述

先决条件

后置条件

实例化

VNFM 移除所有 VM 和资源。
例如,Tacker 执行 Heat stack-delete 以删除目标 VM。

FAILED_TEMP

ROLLED_BACK 或 FAILED_TEMP

扩展

VNFM 撤销扩展操作中 VM 和资源的更改。
结果是,最新的 VNFc(VM)将被删除。
例如,Tacker 撤销 desired_capacity 并执行 Heat stack-update。

FAILED_TEMP

ROLLED_BACK 或 FAILED_TEMP

修改

VNFM 撤销 VNF 实例信息的更新。

FAILED_TEMP

ROLLED_BACK 或 FAILED_TEMP

更改外部连接

VNFM 撤销 VNF 实例的外部连接的更改。
例如,Tacker 撤销 stack 参数并执行 Heat stack-update。

FAILED_TEMP

ROLLED_BACK 或 FAILED_TEMP

更换当前 VNF 包

VNFM 撤销 VNF 实例的当前 VNF 包的更改。
例如,Tacker 撤销 stack 参数并执行 Heat stack-update。

FAILED_TEMP

ROLLED_BACK 或 FAILED_TEMP

注意

在某些情况下,更改外部连接的回滚无法恢复虚拟资源的 IP 地址和端口 ID。如果操作在执行 VIM 处理之前失败:更新 stack,则 IP 地址和端口 ID 将由其回滚操作恢复。否则,动态 IP 地址和端口 ID 将不会被回滚操作恢复。

本手册将以下操作作为回滚操作的用例进行描述。

  • “实例化 VNF”失败

  • 回滚 VNF 生命周期管理操作

  • 删除 VNF

如下所示,如果“实例化 VNF”失败,在执行“回滚 VNF 生命周期管理操作”之前,无法执行“删除 VNF”。

$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Failed to delete vnf instance with ID '385fc2ff-1ef5-42f4-8196-3d913160074d': Other LCM operation of vnfInstance 385fc2ff-1ef5-42f4-8196-3d913160074d is in progress.
Failed to delete 1 of 1 vnf instances.

因此,使用以下 CLI 命令执行“回滚 VNF 生命周期管理操作”。

$ openstack vnflcm op rollback VNF_LCM_OP_OCC_ID --os-tacker-api-version 2

结果

Rollback request for LCM operation a7f80542-faeb-4324-ba82-c6214307e864 has been accepted

如果“回滚 VNF 生命周期管理操作”成功,则“删除 VNF”也将成功。

$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Vnf instance '385fc2ff-1ef5-42f4-8196-3d913160074d' is deleted successfully

使 VNF LCM 操作失败

LCM 操作

失败的描述

先决条件

后置条件

实例化

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

终止

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

修复

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

规模

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

修改

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

更改外部连接

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

更换当前 VNF 包

Tacker 只是在 Tacker-DB 上将 LCM 操作状态更改为“FAILED”。

FAILED_TEMP

FAILED

本手册将以下操作作为失败操作的用例进行描述。

  • “实例化 VNF”失败

  • 使 VNF 生命周期管理操作失败

  • 删除 VNF

如下所示,如果“实例化 VNF”失败,在执行“使 VNF 生命周期管理操作失败”之后,无法执行“删除 VNF”。

$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Failed to delete vnf instance with ID '385fc2ff-1ef5-42f4-8196-3d913160074d': Other LCM operation of vnfInstance 385fc2ff-1ef5-42f4-8196-3d913160074d is in progress.
Failed to delete 1 of 1 vnf instances.

因此,使用以下 CLI 命令执行“使 VNF 生命周期管理操作失败”。

$ openstack vnflcm op fail VNF_LCM_OP_OCC_ID \
  --fit-width --os-tacker-api-version 2

结果

+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                   | Value                                                                                                                                                                                                                            |
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Error                   | {                                                                                                                                                                                                                                |
|                         |     "title": "Stack create failed",                                                                                                                                                                                              |
|                         |     "status": 422,                                                                                                                                                                                                               |
|                         |     "detail": "Resource CREATE failed: resources.wifiut5qtngn: resources.VDU1_scale_group.Property error: resources.VDU1_CP1.properties.network: Error validating value 'errornetwork': Unable to find network with name or id   |
|                         | 'errornetwork'"                                                                                                                                                                                                                  |
|                         | }                                                                                                                                                                                                                                |
| ID                      | a7f80542-faeb-4324-ba82-c6214307e864                                                                                                                                                                                             |
| Is Automatic Invocation | False                                                                                                                                                                                                                            |
| Is Cancel Pending       | False                                                                                                                                                                                                                            |
| Links                   | {                                                                                                                                                                                                                                |
|                         |     "self": {                                                                                                                                                                                                                    |
|                         |         "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864"                                                                                                                           |
|                         |     },                                                                                                                                                                                                                           |
|                         |     "vnfInstance": {                                                                                                                                                                                                             |
|                         |         "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/385fc2ff-1ef5-42f4-8196-3d913160074d"                                                                                                                             |
|                         |     },                                                                                                                                                                                                                           |
|                         |     "retry": {                                                                                                                                                                                                                   |
|                         |         "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864/retry"                                                                                                                     |
|                         |     },                                                                                                                                                                                                                           |
|                         |     "rollback": {                                                                                                                                                                                                                |
|                         |         "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864/rollback"                                                                                                                  |
|                         |     },                                                                                                                                                                                                                           |
|                         |     "fail": {                                                                                                                                                                                                                    |
|                         |         "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_lcm_op_occs/a7f80542-faeb-4324-ba82-c6214307e864/fail"                                                                                                                      |
|                         |     }                                                                                                                                                                                                                            |
|                         | }                                                                                                                                                                                                                                |
| Operation               | INSTANTIATE                                                                                                                                                                                                                      |
| Operation State         | FAILED                                                                                                                                                                                                                           |
| Start Time              | 2023-11-14T04:32:57Z                                                                                                                                                                                                             |
| State Entered Time      | 2023-11-14T04:32:57Z                                                                                                                                                                                                             |
| VNF Instance ID         | 385fc2ff-1ef5-42f4-8196-3d913160074d                                                                                                                                                                                             |
| grantId                 | 008eccda-5466-4820-ae76-bdce6e128d8c                                                                                                                                                                                             |
| operationParams         | {                                                                                                                                                                                                                                |
|                         |     "flavourId": "simple"                                                                                                                                                                                                        |
|                         | }                                                                                                                                                                                                                                |
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

如果“使 VNF 生命周期管理操作失败”成功,则“删除 VNF”也将成功。

$ openstack vnflcm delete VNF_INSTANCE_ID --os-tacker-api-version 2

结果

Vnf instance '385fc2ff-1ef5-42f4-8196-3d913160074d' is deleted successfully

重试 VNF LCM 操作

LCM 操作

失败的描述

先决条件

后置条件

实例化

VNFM 重试实例化操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

终止

VNFM 重试终止操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

修复

VNFM 重试 Heal 操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

规模

VNFM 重试 Scale 操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

修改

VNFM 重试 Modify 操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

更改外部连接

VNFM 重试更改外部连接操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

更换当前 VNF 包

VNFM 重试更改当前 VNF 包操作。

FAILED_TEMP

COMPLETED 或 FAILED_TEMP

本手册将以下操作作为重试操作的用例进行描述。

  • “实例化 VNF”失败

  • 重试 VNF 生命周期管理操作

如下所示,如果“实例化 VNF”失败,如果您想重新执行之前的(失败的)操作,则执行“重试”操作。

因此,使用以下 CLI 命令执行“重试 VNF 生命周期管理操作”。

$ openstack vnflcm op retry VNF_LCM_OP_OCC_ID --os-tacker-api-version 2

结果

Retry request for LCM operation a7f80542-faeb-4324-ba82-c6214307e864 has been accepted

如果“重试 VNF 生命周期管理操作”成功,则另一个 LCM 可以正常运行。

MgmtDriver 的错误处理

错误处理包括重试、回滚和失败操作。

  • 对于失败操作,它在执行时不会执行 LCM,因此不需要使用 MgmtDriver。

  • 对于重试操作,它在执行时将再次执行 LCM,因此只要 LCM 配置了 MgmtDriver,MgmtDriver 也会在重试操作期间被调用,无需额外配置。

  • 对于回滚操作,由于 NFV-SOL001 v2.6.16.7 接口 类型 中没有定义 rollback_startrollback_end,因此在执行回滚操作时,MgmtDriver 将不会被调用。

在回滚操作中调用 MgmtDriver 之前,必须修改 VNF 包中的 VNFD。

注意

在 MgmtDriver 中,用户将 LCM 失败时需要保留的数据保存在 user_script_err_handling_data 变量中。它保存在相应的 VNF_LCM_OP_OCC 中,可以通过 显示 VNF LCM OP OCC 查看。

在错误处理(重试或回滚)期间,使用 user_script_err_handling_data 变量中的数据执行相应的处理。

VNF 包的修改

用户在创建 VNF 包 时需要进行以下修改。

回滚操作目前支持多个 回滚 VNF LCM 操作。以下以实例化和扩展的回滚操作为例,演示如何修改 VNFD。

注意

以下提供了需要修改的示例文件 v2_sample2_df_simple.yamlv2_sample2_types.yaml,它们存储在 VNF 包的 Definitions 目录中。

  • v2_sample2_df_simple.yaml 中,需要在 topology_template.node_templates.VNF.interfaces.Vnflcm 下添加 xxx_rollback_startxxx_rollback_end

    以下是 v2_sample2_df_simple.yaml 的内容,未修改的部分被替换为“...

    topology_template:
      ...
      node_templates:
        VNF:
          type: company.provider.VNF
          properties:
            flavour_description: A simple flavour
          interfaces:
            Vnflcm:
              instantiate_start:
                implementation: mgmt-driver-script
              instantiate_end:
                implementation: mgmt-driver-script
              heal_start:
                implementation: mgmt-driver-script
              heal_end:
                implementation: mgmt-driver-script
              scale_start:
                implementation: mgmt-driver-script
              scale_end:
                implementation: mgmt-driver-script
              terminate_start:
                implementation: mgmt-driver-script
              terminate_end:
                implementation: mgmt-driver-script
              change_external_connectivity_start:
                implementation: mgmt-driver-script
              change_external_connectivity_end:
                implementation: mgmt-driver-script
              modify_information_start:
                implementation: mgmt-driver-script
              modify_information_end:
                implementation: mgmt-driver-script
              instantiate_rollback_start:
                implementation: mgmt-driver-script
              instantiate_rollback_end:
                implementation: mgmt-driver-script
              scale_rollback_start:
                implementation: mgmt-driver-script
              scale_rollback_end:
                implementation: mgmt-driver-script
          artifacts:
            mgmt-driver-script:
              description: Sample MgmtDriver Script
              type: tosca.artifacts.Implementation.Python
              file: ../Scripts/mgmt_driver_script.py
    

    注意

    如果在 VNFD 中添加了 xxx_startxxx_end 的一些定义,则还必须在 MgmtDriver 中添加相应的 xxx_startxxx_end 函数。

  • v2_sample2_types.yaml 中,需要在 node_types.company.provider.VNF.interfaces.Vnflcm 下添加 interface_types 的定义,并修改 type 的定义。

    以下是 v2_sample2_types.yaml 的内容,未修改的部分被替换为“...

    interface_types:
      sample.test.Vnflcm:
        derived_from: tosca.interfaces.nfv.Vnflcm
        instantiate_start:
          description: Invoked before instantiate
        instantiate_end:
          description: Invoked after instantiate
        heal_start:
          description: Invoked before heal
        heal_end:
          description: Invoked after heal
        scale_start:
          description: Invoked before scale
        scale_end:
          description: Invoked after scale
        terminate_start:
          description: Invoked before terminate
        terminate_end:
          description: Invoked after terminate
        change_external_connectivity_start:
          description: Invoked before change_external_connectivity
        change_external_connectivity_end:
          description: Invoked after change_external_connectivity
        modify_information_start:
          description: Invoked before modify_information
        modify_information_end:
          description: Invoked after modify_information
        instantiate_rollback_start:
          description: Invoked before instantiate_rollback
        instantiate_rollback_end:
          description: Invoked after instantiate_rollback
        scale_rollback_start:
          description: Invoked before scale_rollback
        scale_rollback_end:
          description: Invoked after scale_rollback
    
    node_types:
      company.provider.VNF:
        ...
        interfaces:
          Vnflcm:
            type: sample.test.Vnflcm
    

完成上述修改后,可以在错误处理中调用 MgmtDriver。

注意

在错误处理过程中,MgmtDriver 的具体操作需要由用户或提供商自定义。