ETSI NFV-SOL VNF 错误处理¶
本文档描述了在 Tacker v1 API 中 VNF 的错误处理方式。
注意
这是 Tacker v1 API 的文档。有关 Tacker v2 API,请参阅 ETSI NFV-SOL VNF 错误处理。
先决条件¶
应安装以下软件包
tacker
python-tackerclient
应根据 VIM 管理 注册默认 VIM。
下面使用的 VNF 包(sample_vnf_package_csar.zip)是通过参考 VNF 包 准备的。
从“注册 VIM”到“实例化 VNF”的准备恢复操作的流程,基本参考 ETSI NFV-SOL VNF 部署为使用 TOSCA 的 VM 或 ETSI NFV-SOL VNF 部署为使用 LCM 操作用户数据的 VM。
此过程使用示例 VNF 包。
VNF 错误处理流程¶
如“先决条件”中所述,在执行错误处理之前必须先创建 VNF。
CLI 命令的详细信息在 使用 v1 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 命令的详细信息在 使用 v1 Tacker 进行 VNF 生命周期管理 中描述。
在检查“VNF_LCM_OP_OCC_ID”之前,您应该先获取 VNF_INSTANCE_ID。
$ openstack vnflcm op list
结果
$ openstack vnflcm op list
+--------------------------------------+-----------------+--------------------------------------+-------------+
| ID | Operation State | VNF Instance ID | Operation |
+--------------------------------------+-----------------+--------------------------------------+-------------+
| c7afb90a-351b-4d33-a945-8f937deeadb4 | FAILED_TEMP | d45ae5cb-121b-4420-bc97-6a00f5fa63b6 | INSTANTIATE |
+--------------------------------------+-----------------+--------------------------------------+-------------+
只有当 operationState 为 FAILED_TMP 时,才能执行错误处理。
如果已注册 Subscription,则上述导致 FAILED_TEMP 的操作将向 Subscription 的 callbackUri 发送“Notification”。
此“Notification”中包含的 vnfLcmOpOccId 对应于 VNF_LCM_OP_OCC_ID。
有关此处使用的 API 的详细信息,请参阅 VNF LCM v1 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 |
本手册将以下操作描述为回滚操作的用例。
“实例化 VNF”失败
回滚 VNF 生命周期管理操作
删除 VNF
如下所示,如果“实例化 VNF”失败,在执行“回滚 VNF 生命周期管理操作”之前,无法执行“删除 VNF”。
$ openstack vnflcm delete VNF_INSTANCE_ID
结果
Failed to delete vnf instance with ID 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6': Vnf d45ae5cb-121b-4420-bc97-6a00f5fa63b6 in status ERROR. Cannot delete while the vnf is in this state.
Failed to delete 1 of 1 vnf instances.
因此,使用以下 CLI 命令执行“回滚 VNF 生命周期管理操作”。
$ openstack vnflcm op rollback VNF_LCM_OP_OCC_ID
结果
Rollback request for LCM operation c7afb90a-351b-4d33-a945-8f937deeadb4 has been accepted
如果“回滚 VNF 生命周期管理操作”成功,则“删除 VNF”也将成功。
$ openstack vnflcm delete VNF_INSTANCE_ID
结果
Vnf instance 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6' 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”失败
使 VNF 生命周期管理操作失败
删除 VNF
如下所示,如果“实例化 VNF”失败,在执行“使 VNF 生命周期管理操作失败”之后,无法执行“删除 VNF”。
$ openstack vnflcm delete VNF_INSTANCE_ID
结果
Failed to delete vnf instance with ID 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6': Vnf d45ae5cb-121b-4420-bc97-6a00f5fa63b6 in status ERROR. Cannot delete while the vnf is in this state.
Failed to delete 1 of 1 vnf instances.
因此,使用以下 CLI 命令执行“使 VNF 生命周期管理操作失败”。
$ openstack vnflcm op fail VNF_LCM_OP_OCC_ID
结果
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Error | { |
| | "title": "", |
| | "status": 500, |
| | "detail": "ProblemDetails(created_at=<?>,deleted=0,deleted_at=<?>,detail='Vnf instantiation wait failed for vnf d45ae5cb-121b-4420-bc97-6a00f5fa63b6, error: VNF Create Resource CREATE failed: ResourceInError: |
| | resources.VDU1.resources.ril4bssciahp.resources.VDU1: Went to status ERROR due to \"Message: Build of instance 6dacc4a4-948f-4f40-97cf-2caeecbba013 aborted: privsep helper command exited non-zero (1), Code: |
| | 500\"',status=500,title='',updated_at=<?>)" |
| | } |
| ID | c7afb90a-351b-4d33-a945-8f937deeadb4 |
| Is Automatic Invocation | False |
| Is Cancel Pending | False |
| Links | { |
| | "self": { |
| | "href": "https://:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4" |
| | }, |
| | "vnfInstance": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/d45ae5cb-121b-4420-bc97-6a00f5fa63b6" |
| | }, |
| | "retry": { |
| | "href": "https://:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/retry" |
| | }, |
| | "rollback": { |
| | "href": "https://:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/rollback" |
| | }, |
| | "grant": { |
| | "href": "https://:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/grant" |
| | }, |
| | "fail": { |
| | "href": "https://:9890/vnflcm/v1/vnf_lcm_op_occs/c7afb90a-351b-4d33-a945-8f937deeadb4/fail" |
| | } |
| | } |
| Operation | INSTANTIATE |
| Operation State | FAILED |
| Start Time | 2023-12-27 07:05:59+00:00 |
| State Entered Time | 2024-01-18 01:40:55.105358+00:00 |
| VNF Instance ID | d45ae5cb-121b-4420-bc97-6a00f5fa63b6 |
| grantId | None |
| operationParams | "{\"flavourId\": \"simple\", \"instantiationLevelId\": \"instantiation_level_1\", \"extVirtualLinks\": [{\"id\": \"91bcff6d-4703-4ba9-b1c2-009e6db92a9c\", \"resourceId\": \"3019b1e7-99d8-4748-97ac-104922bc78d9\", |
| | \"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", \"extCps\": [{\"cpdId\": \"VDU1_CP1\", \"cpConfig\": [{\"linkPortId\": \"6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f\"}]}, {\"cpdId\": \"VDU2_CP1\", \"cpConfig\": |
| | [{\"linkPortId\": \"02d867e7-b955-4b4a-b92f-c78c7ede63bf\"}]}], \"extLinkPorts\": [{\"id\": \"6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f\", \"resourceHandle\": {\"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", |
| | \"resourceId\": \"972a375d-921f-46f5-bfdb-19af95fc49e1\"}}, {\"id\": \"02d867e7-b955-4b4a-b92f-c78c7ede63bf\", \"resourceHandle\": {\"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", \"resourceId\": |
| | \"b853b5c5-cd97-4dfb-8750-cac6e5c62477\"}}]}, {\"id\": \"a96d2f5b-c01a-48e1-813c-76132965042c\", \"resourceId\": \"589a045a-65d9-4f4d-a9b3-35aa655374d0\", \"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", |
| | \"extCps\": [{\"cpdId\": \"VDU1_CP2\", \"cpConfig\": [{\"cpProtocolData\": [{\"layerProtocol\": \"IP_OVER_ETHERNET\", \"ipOverEthernet\": {\"ipAddresses\": [{\"type\": \"IPV4\", \"fixedAddresses\": [\"22.22.1.10\"], |
| | \"subnetId\": \"d290cae3-0dbc-44a3-a043-1a50ded04a64\"}]}}]}]}, {\"cpdId\": \"VDU2_CP2\", \"cpConfig\": [{\"cpProtocolData\": [{\"layerProtocol\": \"IP_OVER_ETHERNET\", \"ipOverEthernet\": {\"ipAddresses\": [{\"type\": |
| | \"IPV4\", \"fixedAddresses\": [\"22.22.1.20\"], \"subnetId\": \"d290cae3-0dbc-44a3-a043-1a50ded04a64\"}]}}]}]}]}], \"extManagedVirtualLinks\": [{\"id\": \"8f9d8da0-2386-4f00-bbb0-860f50d32a5a\", \"vnfVirtualLinkDescId\": |
| | \"internalVL1\", \"resourceId\": \"0e498d08-ed3a-4212-83e0-1b6808f6fcb6\"}, {\"id\": \"11d68761-aab7-419c-955c-0c6497f13692\", \"vnfVirtualLinkDescId\": \"internalVL2\", \"resourceId\": \"38a8d4ba- |
| | ac1b-41a2-a92b-ff2a3e5e9b12\"}], \"vimConnectionInfo\": [{\"id\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", \"vimType\": \"ETSINFV.OPENSTACK_KEYSTONE.V_2\", \"vimConnectionId\": \"79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56\", |
| | \"interfaceInfo\": {\"endpoint\": \"http://127.0.0.1/identity\"}, \"accessInfo\": {\"username\": \"nfv_user\", \"region\": \"RegionOne\", \"password\": \"devstack\", \"tenant\": \"1994d69783d64c00aadab564038c2fd7\"}}], |
| | \"additionalParams\": {\"lcm-operation-user-data\": \"./UserData/lcm_user_data.py\", \"lcm-operation-user-data-class\": \"SampleUserData\"}}" |
| resourceChanges | {} |
+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
如果“使 VNF 生命周期管理操作失败”成功,则“删除 VNF”也将成功。
$ openstack vnflcm delete VNF_INSTANCE_ID
结果
Vnf instance 'd45ae5cb-121b-4420-bc97-6a00f5fa63b6' 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”失败
重试 VNF 生命周期管理操作
如下所示,如果“实例化 VNF”失败,如果您想重新执行之前的(失败的)操作,则执行“重试”操作。
因此,使用以下 CLI 命令执行“重试 VNF 生命周期管理操作”。
$ openstack vnflcm op retry VNF_LCM_OP_OCC_ID
结果
Retry request for LCM operation c7afb90a-351b-4d33-a945-8f937deeadb4 has been accepted
如果“重试 VNF 生命周期管理操作”成功,则另一个 LCM 可以正常运行。