ETSI NFV-SOL VNF Healing¶
本文档描述了在 Tacker v1 API 中如何修复 VNF。
注意
这是 Tacker v1 API 的文档。有关 Tacker v2 API,请参阅 ETSI NFV-SOL VNF Healing。
概述¶
下图显示了 VNF 修复的概述。
请求修复 VNF
用户通过请求
heal VNF,使用 tacker-client 请求 tacker-server 修复 VNF 或所有 VNF。调用 OpenStack Heat API
收到 tacker-client 的请求后,tacker-server 会将其重定向到 tacker-conductor。在 tacker-conductor 中,请求会再次根据实例化参数的内容重定向到适当的基础设施驱动程序(在本例中为 OpenStack 基础设施驱动程序)。然后,OpenStack 基础设施驱动程序调用 OpenStack Heat API。
重新创建虚拟机
OpenStack Heat 根据 API 调用重新创建虚拟机。
先决条件¶
应安装以下软件包
tacker
python-tackerclient
应根据 VIM 管理 注册默认 VIM。
下面使用的 VNF 包(sample_vnf_package_csar.zip)是通过参考 VNF 包 准备的。
从“注册 VIM”到“实例化 VNF”的修复操作的准备过程,基本上参考 ETSI NFV-SOL VNF 部署为使用 TOSCA 的虚拟机 或 ETSI NFV-SOL VNF 部署为使用 LCM 操作用户数据的虚拟机。
此过程使用示例 VNF 包。
修复目标 VNF 实例¶
假设存在以下 VNF 实例,将修复此实例。
$ openstack vnflcm show VNF_INSTANCE_ID
结果
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
| ID | c3f9c200-7f52-42c5-9c64-6032faa3faf8 |
| Instantiated Vnf Info | { |
| | "flavourId": "simple", |
| | "vnfState": "STARTED", |
| | "scaleStatus": [ |
| | { |
| | "aspectId": "worker_instance", |
| | "scaleLevel": 0 |
| | } |
| | ], |
| | "extCpInfo": [ |
| | { |
| | "id": "d7c14d6f-3bac-4e11-a512-5101b4933545", |
| | "cpdId": "VDU1_CP1", |
| | "extLinkPortId": null, |
| | "associatedVnfcCpId": "b0f677ce-93db-416a-839b-998707338d14", |
| | "cpProtocolInfo": [] |
| | }, |
| | { |
| | "id": "e3513495-c555-4a1f-a9cc-07a0feae2720", |
| | "cpdId": "VDU2_CP1", |
| | "extLinkPortId": null, |
| | "associatedVnfcCpId": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
| | "cpProtocolInfo": [] |
| | }, |
| | { |
| | "id": "53c187aa-d05c-4995-9518-3119ac02ee66", |
| | "cpdId": "VDU1_CP2", |
| | "extLinkPortId": null, |
| | "associatedVnfcCpId": "b0f677ce-93db-416a-839b-998707338d14", |
| | "cpProtocolInfo": [ |
| | { |
| | "layerProtocol": "IP_OVER_ETHERNET", |
| | "ipOverEthernet": { |
| | "macAddress": null, |
| | "ipAddresses": [ |
| | { |
| | "type": "IPV4", |
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
| | "isDynamic": false, |
| | "addresses": [ |
| | "22.22.1.10" |
| | ] |
| | } |
| | ] |
| | } |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40", |
| | "cpdId": "VDU2_CP2", |
| | "extLinkPortId": null, |
| | "associatedVnfcCpId": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
| | "cpProtocolInfo": [ |
| | { |
| | "layerProtocol": "IP_OVER_ETHERNET", |
| | "ipOverEthernet": { |
| | "macAddress": null, |
| | "ipAddresses": [ |
| | { |
| | "type": "IPV4", |
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
| | "isDynamic": false, |
| | "addresses": [ |
| | "22.22.1.20" |
| | ] |
| | } |
| | ] |
| | } |
| | } |
| | ] |
| | } |
| | ], |
| | "extVirtualLinkInfo": [ |
| | { |
| | "id": "91bcff6d-4703-4ba9-b1c2-009e6db92a9c", |
| | "resourceHandle": { |
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9", |
| | "vimLevelResourceType": null |
| | }, |
| | "extLinkPorts": [ |
| | { |
| | "id": "6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f", |
| | "resourceHandle": { |
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "resourceId": "972a375d-921f-46f5-bfdb-19af95fc49e1", |
| | "vimLevelResourceType": null |
| | }, |
| | "cpInstanceId": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40" |
| | }, |
| | { |
| | "id": "02d867e7-b955-4b4a-b92f-c78c7ede63bf", |
| | "resourceHandle": { |
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "resourceId": "b853b5c5-cd97-4dfb-8750-cac6e5c62477", |
| | "vimLevelResourceType": null |
| | }, |
| | "cpInstanceId": "9fcec4e1-e808-4dc6-b048-79ec88d0aa40" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "a96d2f5b-c01a-48e1-813c-76132965042c", |
| | "resourceHandle": { |
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "resourceId": "589a045a-65d9-4f4d-a9b3-35aa655374d0", |
| | "vimLevelResourceType": null |
| | } |
| | } |
| | ], |
| | "extManagedVirtualLinkInfo": [ |
| | { |
| | "id": "8f9d8da0-2386-4f00-bbb0-860f50d32a5a", |
| | "vnfVirtualLinkDescId": "internalVL1", |
| | "networkResource": { |
| | "vimConnectionId": null, |
| | "resourceId": "0e498d08-ed3a-4212-83e0-1b6808f6fcb6", |
| | "vimLevelResourceType": "OS::Neutron::Net" |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "f5de777b-22e9-480a-a044-5359cc8b6263", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "ddb45b78-385d-4c18-aec3-10bf6bafb840", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "a98f1c4b-f4c9-4603-8813-4a9dbb003950" |
| | }, |
| | { |
| | "id": "d754bcb0-5ab4-4715-9469-e946ec69733e", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "29de4ae6-1004-4607-9023-818efacba3ce", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "c408c3a8-924b-4570-a896-ddb5bd56d14a" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "11d68761-aab7-419c-955c-0c6497f13692", |
| | "vnfVirtualLinkDescId": "internalVL2", |
| | "networkResource": { |
| | "vimConnectionId": null, |
| | "resourceId": "38a8d4ba-ac1b-41a2-a92b-ff2a3e5e9b12", |
| | "vimLevelResourceType": "OS::Neutron::Net" |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "1b664cfb-6c8b-4f02-a535-f683fe414e31", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "2215cb28-9876-4c43-a71d-c63ae42a7ab4", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "f16e20d7-cb86-4b4d-a4fa-f27802eaf628" |
| | }, |
| | { |
| | "id": "65c35b4c-1a8b-4495-a396-73d09f4cebea", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "0019f288-38b3-4247-89fc-51ecf7663401", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "269b2b44-7577-45b5-8038-1e67d34dea41" |
| | } |
| | ] |
| | } |
| | ], |
| | "vnfcResourceInfo": [ |
| | { |
| | "id": "b0f677ce-93db-416a-839b-998707338d14", |
| | "vduId": "VDU1", |
| | "computeResource": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "2bd41386-1971-425c-9f27-310c7a4d6181", |
| | "vimLevelResourceType": "OS::Nova::Server" |
| | }, |
| | "storageResourceIds": [], |
| | "vnfcCpInfo": [ |
| | { |
| | "id": "c86cef0a-150d-4eff-a21f-a48c6fcfa258", |
| | "cpdId": "VDU1_CP1", |
| | "vnfExtCpId": "6b7c0b3a-cc2d-4b94-9f6f-81df69a7cc2f", |
| | "vnfLinkPortId": "f2105dd9-fed4-43dd-8d74-fcf0199cb716" |
| | }, |
| | { |
| | "id": "426c0473-2de1-42dc-ae1f-ff4cf4d8b29b", |
| | "cpdId": "VDU1_CP2", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "9925668e-ceea-45ef-817a-25d19572a494", |
| | "cpProtocolInfo": [ |
| | { |
| | "layerProtocol": "IP_OVER_ETHERNET", |
| | "ipOverEthernet": { |
| | "macAddress": null, |
| | "ipAddresses": [ |
| | { |
| | "type": "IPV4", |
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
| | "isDynamic": false, |
| | "addresses": [ |
| | "22.22.1.10" |
| | ] |
| | } |
| | ] |
| | } |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "a98f1c4b-f4c9-4603-8813-4a9dbb003950", |
| | "cpdId": "VDU1_CP3", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "f5de777b-22e9-480a-a044-5359cc8b6263" |
| | }, |
| | { |
| | "id": "f16e20d7-cb86-4b4d-a4fa-f27802eaf628", |
| | "cpdId": "VDU1_CP4", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "1b664cfb-6c8b-4f02-a535-f683fe414e31" |
| | }, |
| | { |
| | "id": "89dd97c3-ef2d-4df5-a18a-f542e573a5bd", |
| | "cpdId": "VDU1_CP5", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "1a8d6c49-40bb-4f24-96e7-6efba6001671" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "9da6945b-d9a3-4001-a03a-7b239b7e7084", |
| | "vduId": "VDU2", |
| | "computeResource": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "777515dd-35c9-4f06-ad6b-f79323097e0f", |
| | "vimLevelResourceType": "OS::Nova::Server" |
| | }, |
| | "storageResourceIds": [], |
| | "vnfcCpInfo": [ |
| | { |
| | "id": "12ea4352-66a5-47a4-989f-d4d06d5bab1a", |
| | "cpdId": "VDU2_CP1", |
| | "vnfExtCpId": "02d867e7-b955-4b4a-b92f-c78c7ede63bf", |
| | "vnfLinkPortId": "6043706d-6173-40ef-8bc5-519868ce9fe4" |
| | }, |
| | { |
| | "id": "b6a56d88-da99-4036-872f-f10759b00ed8", |
| | "cpdId": "VDU2_CP2", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "bfd0d3ad-1f9c-4102-b446-c7f33881b136", |
| | "cpProtocolInfo": [ |
| | { |
| | "layerProtocol": "IP_OVER_ETHERNET", |
| | "ipOverEthernet": { |
| | "macAddress": null, |
| | "ipAddresses": [ |
| | { |
| | "type": "IPV4", |
| | "subnetId": "d290cae3-0dbc-44a3-a043-1a50ded04a64", |
| | "isDynamic": false, |
| | "addresses": [ |
| | "22.22.1.20" |
| | ] |
| | } |
| | ] |
| | } |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "c408c3a8-924b-4570-a896-ddb5bd56d14a", |
| | "cpdId": "VDU2_CP3", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "d754bcb0-5ab4-4715-9469-e946ec69733e" |
| | }, |
| | { |
| | "id": "269b2b44-7577-45b5-8038-1e67d34dea41", |
| | "cpdId": "VDU2_CP4", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "65c35b4c-1a8b-4495-a396-73d09f4cebea" |
| | }, |
| | { |
| | "id": "bb1ed2d3-da19-4b45-b326-cf9e76fd788a", |
| | "cpdId": "VDU2_CP5", |
| | "vnfExtCpId": null, |
| | "vnfLinkPortId": "46cd8f09-d877-491b-8928-345ec6461637" |
| | } |
| | ] |
| | } |
| | ], |
| | "vnfVirtualLinkResourceInfo": [ |
| | { |
| | "id": "b3244c22-2365-476e-bc7b-40cbaee45ce1", |
| | "vnfVirtualLinkDescId": "internalVL1", |
| | "networkResource": { |
| | "vimConnectionId": null, |
| | "resourceId": "0e498d08-ed3a-4212-83e0-1b6808f6fcb6", |
| | "vimLevelResourceType": "OS::Neutron::Net" |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "f5de777b-22e9-480a-a044-5359cc8b6263", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "ddb45b78-385d-4c18-aec3-10bf6bafb840", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "a98f1c4b-f4c9-4603-8813-4a9dbb003950" |
| | }, |
| | { |
| | "id": "d754bcb0-5ab4-4715-9469-e946ec69733e", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "29de4ae6-1004-4607-9023-818efacba3ce", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "c408c3a8-924b-4570-a896-ddb5bd56d14a" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "c9182342-bfc4-4ba8-9e26-02fd0565db4d", |
| | "vnfVirtualLinkDescId": "internalVL2", |
| | "networkResource": { |
| | "vimConnectionId": null, |
| | "resourceId": "38a8d4ba-ac1b-41a2-a92b-ff2a3e5e9b12", |
| | "vimLevelResourceType": "OS::Neutron::Net" |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "1b664cfb-6c8b-4f02-a535-f683fe414e31", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "2215cb28-9876-4c43-a71d-c63ae42a7ab4", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "f16e20d7-cb86-4b4d-a4fa-f27802eaf628" |
| | }, |
| | { |
| | "id": "65c35b4c-1a8b-4495-a396-73d09f4cebea", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "0019f288-38b3-4247-89fc-51ecf7663401", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "269b2b44-7577-45b5-8038-1e67d34dea41" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "81ed1791-a1c2-46fb-a999-dd9d601b06ec", |
| | "vnfVirtualLinkDescId": "internalVL3", |
| | "networkResource": { |
| | "vimConnectionId": null, |
| | "resourceId": "", |
| | "vimLevelResourceType": null |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "1a8d6c49-40bb-4f24-96e7-6efba6001671", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "84d7fc8c-fb52-4593-875b-bf303ec5fc8c", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "89dd97c3-ef2d-4df5-a18a-f542e573a5bd" |
| | }, |
| | { |
| | "id": "46cd8f09-d877-491b-8928-345ec6461637", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "65650d05-a562-4c5f-84d2-e9304ef68377", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "bb1ed2d3-da19-4b45-b326-cf9e76fd788a" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "1d1a0824-5c4d-461e-9a29-5e72db1e5855", |
| | "vnfVirtualLinkDescId": "91bcff6d-4703-4ba9-b1c2-009e6db92a9c", |
| | "networkResource": { |
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "resourceId": "3019b1e7-99d8-4748-97ac-104922bc78d9", |
| | "vimLevelResourceType": "OS::Neutron::Net" |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "f2105dd9-fed4-43dd-8d74-fcf0199cb716", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "f0cf8bfd-261a-4c54-b783-42cce6d90859", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "c86cef0a-150d-4eff-a21f-a48c6fcfa258" |
| | }, |
| | { |
| | "id": "6043706d-6173-40ef-8bc5-519868ce9fe4", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "6a349003-66a1-4bfa-bd4b-83705957482a", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "12ea4352-66a5-47a4-989f-d4d06d5bab1a" |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "d8fc6199-c9d6-4e74-b896-c44018fa4382", |
| | "vnfVirtualLinkDescId": "a96d2f5b-c01a-48e1-813c-76132965042c", |
| | "networkResource": { |
| | "vimConnectionId": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "resourceId": "589a045a-65d9-4f4d-a9b3-35aa655374d0", |
| | "vimLevelResourceType": "OS::Neutron::Net" |
| | }, |
| | "vnfLinkPorts": [ |
| | { |
| | "id": "9925668e-ceea-45ef-817a-25d19572a494", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "53700068-3c4b-444b-b4eb-bbaa887a0e28", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "426c0473-2de1-42dc-ae1f-ff4cf4d8b29b" |
| | }, |
| | { |
| | "id": "bfd0d3ad-1f9c-4102-b446-c7f33881b136", |
| | "resourceHandle": { |
| | "vimConnectionId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "resourceId": "136f1448-feb7-480d-8d92-15d7e4d02f37", |
| | "vimLevelResourceType": "OS::Neutron::Port" |
| | }, |
| | "cpInstanceId": "b6a56d88-da99-4036-872f-f10759b00ed8" |
| | } |
| | ] |
| | } |
| | ], |
| | "vnfcInfo": [ |
| | { |
| | "id": "b9b73267-40ce-468f-87ab-a6653cee664f", |
| | "vduId": "VDU1", |
| | "vnfcState": "STARTED" |
| | }, |
| | { |
| | "id": "1842c052-b6af-45bb-b976-f99cd1212182", |
| | "vduId": "VDU2", |
| | "vnfcState": "STARTED" |
| | } |
| | ], |
| | "additionalParams": { |
| | "lcm-operation-user-data": "./UserData/lcm_user_data.py", |
| | "lcm-operation-user-data-class": "SampleUserData" |
| | } |
| | } |
| Instantiation State | INSTANTIATED |
| Links | { |
| | "self": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8" |
| | }, |
| | "terminate": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/terminate" |
| | }, |
| | "scale": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/scale" |
| | }, |
| | "heal": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/heal" |
| | }, |
| | "changeExtConn": { |
| | "href": "https://:9890/vnflcm/v1/vnf_instances/c3f9c200-7f52-42c5-9c64-6032faa3faf8/change_ext_conn" |
| | } |
| | } |
| VIM Connection Info | [ |
| | { |
| | "id": "79a97d01-e5f3-4eaa-b2bc-8f513ecb8a56", |
| | "vimId": null, |
| | "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_2", |
| | "interfaceInfo": { |
| | "endpoint": "http://127.0.0.1/identity" |
| | }, |
| | "accessInfo": { |
| | "region": "RegionOne", |
| | "tenant": "1994d69783d64c00aadab564038c2fd7", |
| | "password": "devstack", |
| | "username": "nfv_user" |
| | }, |
| | "extra": {} |
| | }, |
| | { |
| | "id": "700a68db-0789-49e0-97d5-9824d5eeb272", |
| | "vimId": "c637c425-62e8-432f-94f4-bff8d3323e29", |
| | "vimType": "openstack", |
| | "interfaceInfo": {}, |
| | "accessInfo": {}, |
| | "extra": {} |
| | } |
| | ] |
| VNF Configurable Properties | |
| VNF Instance Description | |
| VNF Instance Name | vnf-c3f9c200-7f52-42c5-9c64-6032faa3faf8 |
| VNF Package ID | c92757ec-1408-481a-91f7-7f3b2831eb28 |
| VNF Product Name | Sample VNF |
| VNF Provider | Company |
| VNF Software Version | 1.0 |
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d7000321 |
| VNFD Version | 1.0 |
| metadata | tenant=nfv |
+-----------------------------+----------------------------------------------------------------------------------------------------------------------+
注意
“VNF 实例名称”的值对应于 Heat 管理的“堆栈名称”。在本手册中,它对应于 vnf-c3f9c200-7f52-42c5-9c64-6032faa3faf8。
VNF 修复流程¶
如 先决条件 和 修复目标 VNF 实例 中所述,在修复之前必须实例化 VNF。
CLI 命令的详细信息在 使用 v1 Tacker 进行 VNF 生命周期管理 中描述。
VNF 修复有两种主要方法。
修复整个 VNF
使用 VNFC 实例指定修复
注意
VNFC 是“VNF 组件”,并且一个 VNFC 基本对应于 VNF 中的一个 VDU。有关 VNFC 的更多信息,请参阅 NFV-SOL002 v2.6.1。
如何修复整个 VNF¶
在修复整个 VNF 时,将从 Tacker 到 Heat 执行以下 API。有关 Heat API 的详细信息,请参阅 Heat API 参考。
堆栈删除
堆栈创建
执行 Heat CLI 命令,并在修复之前和之后检查堆栈的“ID”和“堆栈状态”。这是为了确认堆栈“ID”在修复之前和之后发生了变化,并且重新创建已成功完成。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考。
修复前堆栈信息
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
结果
+--------------------------------------+---------------------------------------------+-----------------+
| ID | Stack Name | Stack Status |
+--------------------------------------+---------------------------------------------+-----------------+
| 00d1871d-4acc-4d6b-99bc-cc68ad0b8a6a | vnflcm_c3f9c200-7f52-42c5-9c64-6032faa3faf8 | CREATE_COMPLETE |
+--------------------------------------+---------------------------------------------+-----------------+
执行整个 VNF 的修复
$ openstack vnflcm heal VNF_INSTANCE_ID
结果
Heal request for VNF Instance 0c3644ff-b207-4a6a-9d3a-d1295cda153a has been accepted.
修复后堆栈信息
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
结果
+--------------------------------------+---------------------------------------------+-----------------+
| ID | Stack Name | Stack Status |
+--------------------------------------+---------------------------------------------+-----------------+
| c220dd92-034e-4e7f-bea3-e5e7e95b145c | vnflcm_c3f9c200-7f52-42c5-9c64-6032faa3faf8 | CREATE_COMPLETE |
+--------------------------------------+---------------------------------------------+-----------------+
注意
“ID”已从修复前的 ID 更改。“堆栈状态”过渡到 CREATE_COMPLETE。
如何使用 VNFC 实例指定修复¶
从 修复目标 VNF 实例 中的“已实例化 Vnf 信息”中提取 vnfcResourceInfo -> id 的值。这是 VNFC 实例 ID。
$ openstack vnflcm show c3f9c200-7f52-42c5-9c64-6032faa3faf8 \
-f json | jq '."Instantiated Vnf Info".vnfcResourceInfo[].id'
"b0f677ce-93db-416a-839b-998707338d14"
"9da6945b-d9a3-4001-a03a-7b239b7e7084"
本手册展示了将 VDU1 作为 VNFC 进行修复的示例。在本手册中,b0f677ce-93db-416a-839b-998707338d14 对应于 VDU1 的 VNFC 实例 ID。
当使用 VNFC 实例指定修复时,将从 Tacker 到 Heat 执行以下 API。有关 Heat API 的详细信息,请参阅 Heat API 参考。
堆栈资源标记为不健康
堆栈更新
执行 Heat CLI 命令,并在修复之前和之后检查 VDU1 的 physical_resource_id 和 resource_status。这是为了确认此 VDU1 的资源 ID 在修复之前和之后发生了变化,并且重新创建已成功完成。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考。
注意
请注意,Tacker 管理的“vnfc-instance-id”和 Heat 管理的“physical-resource-id”是不同的。
修复前 VDU1 信息
$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
-c physical_resource_id -c resource_name -c resource_status -c resource_type
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
-c physical_resource_id -c resource_name -c resource_status -c resource_type
结果
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| physical_resource_id | ed781426-c59d-4c32-8bc3-e26144167220 |
| resource_name | VDU1 |
| resource_status | CREATE_COMPLETE |
| resource_type | OS::Nova::Server |
+----------------------+--------------------------------------+
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| physical_resource_id | 2d4715e6-1e0e-449e-91b5-a6c162adbb39 |
| resource_name | VDU1-VirtualStorage |
| resource_status | CREATE_COMPLETE |
| resource_type | OS::Cinder::Volume |
+----------------------+--------------------------------------+
使用 VNFC 实例修复可以控制修复的 VNFC(s) 是否重新创建相关的 Cinder 块存储。
这通过 Heal 请求中的 additionalParams 内部的可选键来完成。键名称由运算符可配置,并且如果请求省略该键,则应用可配置的默认值 [Conf-Options]。
请求键(可配置):从
additionalParams读取的键由 VNFM 上的[vnf_lcm] heal_include_block_storage_key配置。默认情况下,它是tacker_extension_heal_include_block_storage。默认行为(可配置):如果请求不包含该键,则行为由
[vnf_lcm] heal_vnfc_block_storage决定。
警告
默认行为(当未提供该键时)和键名称本身取决于 tacker.conf。如果您不确定,请联系您的环境管理员。
在下面的示例中,参数名称显示为 tacker_extension_heal_include_block_storage。
示例:重新创建存储(布尔值 true)
{
"additionalParams": {
"tacker_extension_heal_include_block_storage": true
}
}
示例:不重新创建存储(布尔值 false)
{
"additionalParams": {
"tacker_extension_heal_include_block_storage": false
}
}
修复 VDU1
$ openstack vnflcm heal VNF_INSTANCE_ID --vnfc-instance VNFC_INSTANCE_ID \
--additional-param-file heal-params.json \
结果
Heal request for VNF Instance c3f9c200-7f52-42c5-9c64-6032faa3faf8 has been accepted.
注意
可以在“--vnfc-instance”选项中指定多个 VNFC 实例 ID。
修复后 VDU1 信息
$ openstack stack resource show HEAT_STACK_ID VDU1_SERVER_NAME \
-c physical_resource_id -c resource_name -c resource_status -c resource_type
$ openstack stack resource show HEAT_STACK_ID VDU1_VOLUME_NAME \
-c physical_resource_id -c resource_name -c resource_status -c resource_type
结果
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| physical_resource_id | ed781426-c59d-4c32-8bc3-e26144167220 |
| resource_name | VDU1 |
| resource_status | UPDATE_COMPLETE |
| resource_type | OS::Nova::Server |
+----------------------+--------------------------------------+
重新创建存储
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| physical_resource_id | 2d4715e6-1e0e-449e-91b5-a6c162adbb39 |
| resource_name | VDU1-VirtualStorage |
| resource_status | UPDATE_COMPLETE |
| resource_type | OS::Cinder::Volume |
+----------------------+--------------------------------------+
不重新创建存储
+----------------------+--------------------------------------+
| Field | Value |
+----------------------+--------------------------------------+
| physical_resource_id | 2d4715e6-1e0e-449e-91b5-a6c162adbb39 |
| resource_name | VDU1-VirtualStorage |
| resource_status | CREATE_COMPLETE |
| resource_type | OS::Cinder::Volume |
+----------------------+--------------------------------------+
注意
“physical_resource_id”未从修复前的 ID 更改。“resource_status”过渡到 UPDATE_COMPLETE。