diff --git a/api-ref/source/v2/parameters_vnflcm.yaml b/api-ref/source/v2/parameters_vnflcm.yaml index 580170b97..cc053a0c7 100644 --- a/api-ref/source/v2/parameters_vnflcm.yaml +++ b/api-ref/source/v2/parameters_vnflcm.yaml @@ -621,6 +621,14 @@ graceful_termination_timeout: in: body required: false type: integer +grant_id: + description: | + Identifier of the grant related to this VNF LCM operation occurrence. + Shall be set to the value of the "id" attribute in the "Grant" + representing the associated "Individual Grant", if such grant exists. + in: body + required: false + type: string instantiated_vnf_info: description: | Information specific to an instantiated VNF instance. This attribute shall @@ -718,7 +726,7 @@ link_port_id: in: body required: false type: string -localizataion_language: +localization_language: description: | Localization language of the VNF to be instantiated. The value shall comply with the format defined in @@ -801,6 +809,19 @@ parent_cp_config_id: in: body required: false type: string +removed_storage_resource_ids: + description: | + References to VirtualStorage resources that + have been removed. + The value contains the identifier of a + VirtualStorageResourceInfo item that has been + removed from the VNFC, and might no longer + exist in the VnfInstance. + It shall be provided if at least one storage + resource was removed from the VNFC. + in: body + required: false + type: array resource_changes: description: | This attribute contains information about the cumulative diff --git a/api-ref/source/v2/samples/vnflcm/fail-vnflcm-operation-occurrence-response.json b/api-ref/source/v2/samples/vnflcm/fail-vnflcm-operation-occurrence-response.json new file mode 100644 index 000000000..b1eb1a06b --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/fail-vnflcm-operation-occurrence-response.json @@ -0,0 +1,248 @@ +{ + "_links": { + "fail": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/9b475d28-5acb-4c3b-95dd-fec2b2319643/fail" + }, + "retry": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/9b475d28-5acb-4c3b-95dd-fec2b2319643/retry" + }, + "rollback": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/9b475d28-5acb-4c3b-95dd-fec2b2319643/rollback" + }, + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/9b475d28-5acb-4c3b-95dd-fec2b2319643" + }, + "vnfInstance": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/10ed068e-1284-48f2-9b6e-1c443ace9cc6" + } + }, + "error": { + "detail": "instantiate_end failed: b'test instantiate_end error'", + "status": 422, + "title": "Mgmt driver execution failed" + }, + "grantId": "f7437546-5c4d-4860-85b4-9e7dc5fe8e67", + "id": "9b475d28-5acb-4c3b-95dd-fec2b2319643", + "isAutomaticInvocation": false, + "isCancelPending": false, + "operation": "INSTANTIATE", + "operationParams": { + "additionalParams": { + "lcm-operation-user-data": "./UserData/userdata_default.py", + "lcm-operation-user-data-class": "DefaultUserData" + }, + "extManagedVirtualLinks": [ + { + "id": "ac9eff82-9406-42f0-88ae-1be9d89eb917", + "resourceId": "b3f18cea-a773-4f46-8fa1-9357df2ce360", + "vnfVirtualLinkDescId": "internalVL1" + } + ], + "extVirtualLinks": [ + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP1_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP1" + }, + { + "cpConfig": { + "VDU2_CP1_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.0.102" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "id": "789ecc10-4285-43fe-b8e3-b0e7d4a5cd79", + "resourceId": "7d16f94d-d4c9-412b-a2f5-0321131e9e4d" + }, + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "f6208fae-87fa-473f-bc96-441a75a19d09", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.102" + ], + "subnetId": "f6208fae-87fa-473f-bc96-441a75a19d09", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "id": "cd8aa4ce-a17f-47d8-b3fb-6102ce17f355", + "resourceId": "67f4ca33-4142-4d1a-afb0-978365e31aa2" + } + ], + "flavourId": "simple", + "instantiationLevelId": "instantiation_level_1", + "vimConnectionInfo": { + "vim1": { + "accessInfo": { + "password": "devstack", + "project": "nfv", + "projectDomain": "Default", + "region": "RegionOne", + "userDomain": "Default", + "username": "nfv_user" + }, + "interfaceInfo": { + "endpoint": "http://localhost/identity/v3" + }, + "vimId": "0f093d21-cd8f-4826-aeee-27cd9305a209", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + } + }, + "operationState": "FAILED", + "resourceChanges": { + "affectedVirtualLinks": [ + { + "changeType": "ADDED", + "id": "e2cc5431-eb8d-4208-b8e1-3b766c123279", + "networkResource": { + "resourceId": "d2565a88-aea8-4999-b52f-a220b59df5ea", + "vimConnectionId": "0f093d21-cd8f-4826-aeee-27cd9305a209", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPortIds": [ + "69081627-7f06-42fd-af9c-3f79d44fb8c3", + "46dd1aec-0ae1-4cff-8d5d-81c671f4aaad" + ], + "vnfVirtualLinkDescId": "internalVL3" + }, + { + "changeType": "ADDED", + "id": "b5d1f4b8-fb87-4155-a4e9-6619a1b7097f", + "networkResource": { + "resourceId": "d785e039-215c-4e6e-951c-79959d8c531c", + "vimConnectionId": "0f093d21-cd8f-4826-aeee-27cd9305a209", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPortIds": [ + "7d244233-7244-4a40-9e4f-7aec929401ab", + "fd61f725-28b7-44a5-ba02-652846bef719" + ], + "vnfVirtualLinkDescId": "internalVL2" + } + ], + "affectedVirtualStorages": [ + { + "changeType": "ADDED", + "id": "55cf75b7-6c73-455e-8bd2-07f31047672d", + "storageResource": { + "resourceId": "5c6956bc-9e1b-490f-8592-a490da200a2c", + "vimConnectionId": "0f093d21-cd8f-4826-aeee-27cd9305a209", + "vimLevelResourceType": "OS::Cinder::Volume" + }, + "virtualStorageDescId": "VirtualStorage" + } + ], + "affectedVnfcs": [ + { + "affectedVnfcCpIds": [ + "a84df9fb-b81a-49be-a010-3082e6d2adbe", + "77bfa29d-9fbe-42f2-9892-af98a2507d59", + "4f0173ce-a624-4173-8e4b-a37667e04a80", + "3057e251-8546-4f61-96e4-ea6c1af886cf", + "7b31dd26-a2af-4e47-921d-5695ac101028" + ], + "changeType": "ADDED", + "computeResource": { + "resourceId": "c9920a04-cf74-4e42-be89-a2fec2f89e48", + "vimConnectionId": "0f093d21-cd8f-4826-aeee-27cd9305a209", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "43c29ba1-6037-49a6-a73a-b83484e7dc4e", + "vduId": "VDU2" + }, + { + "addedStorageResourceIds": [ + "55cf75b7-6c73-455e-8bd2-07f31047672d" + ], + "affectedVnfcCpIds": [ + "defd21b3-d0e2-4eb4-8433-e4b555e5926b", + "60eb1d2b-11cf-4bb3-90c6-83096bd7d2a0", + "d7c68605-3022-41a4-a4bf-44cc76aa9d28", + "efb91c15-9ddc-435b-aded-33203b9061b6", + "95ad30b9-87e9-4695-be38-59298dc86cb6" + ], + "changeType": "ADDED", + "computeResource": { + "resourceId": "dd5731bb-50f1-47e5-b1bf-ae0c34fd646e", + "vimConnectionId": "0f093d21-cd8f-4826-aeee-27cd9305a209", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "d9d06660-35d2-4c90-b9f0-139f38731e75", + "vduId": "VDU1" + } + ] + }, + "startTime": "2021-12-20T15:36:13Z", + "stateEnteredTime": "2021-12-20T15:36:13Z", + "vnfInstanceId": "10ed068e-1284-48f2-9b6e-1c443ace9cc6" +} \ No newline at end of file diff --git a/api-ref/source/v2/samples/vnflcm/list-vnflcm-operation-occurrence-response.json b/api-ref/source/v2/samples/vnflcm/list-vnflcm-operation-occurrence-response.json index e7cdb59b0..9be4c7194 100644 --- a/api-ref/source/v2/samples/vnflcm/list-vnflcm-operation-occurrence-response.json +++ b/api-ref/source/v2/samples/vnflcm/list-vnflcm-operation-occurrence-response.json @@ -2,6 +2,15 @@ [ { "_links": { + "fail": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5/fail" + }, + "retry": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5/retry" + }, + "rollback": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5/rollback" + }, "self": { "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5" }, @@ -9,11 +18,16 @@ "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/e00f0d64-d7a3-459b-8a51-b402d5344296" } }, + "grantId": "30bdaa69-ef80-4545-9298-428b70ce8e4a", "id": "a790879c-05f9-4475-9c90-1677452d3eb5", "isAutomaticInvocation": false, "isCancelPending": false, "operation": "INSTANTIATE", "operationParams": { + "additionalParams": { + "lcm-operation-user-data": "./UserData/userdata_default.py", + "lcm-operation-user-data-class": "DefaultUserData" + }, "extManagedVirtualLinks": [ { "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", @@ -141,6 +155,166 @@ } } }, + "operationState": "PROCESSING", + "startTime": "2021-12-20T07:55:55Z", + "stateEnteredTime": "2021-12-20T07:55:55Z", + "vnfInstanceId": "f68c329d-2fca-4178-9a38-e21ee8c01606" + }, + { + "_links": { + "fail": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/fdd8bdf4-8f7b-4237-99d3-c87c0910571d/fail" + }, + "retry": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/fdd8bdf4-8f7b-4237-99d3-c87c0910571d/retry" + }, + "rollback": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/fdd8bdf4-8f7b-4237-99d3-c87c0910571d/rollback" + }, + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/fdd8bdf4-8f7b-4237-99d3-c87c0910571d" + }, + "vnfInstance": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/c256d5c2-f29e-474c-bced-cbc6d9e2b00b" + } + }, + "grantId": "3aa7d8cd-6f85-4d7f-859a-eb26481157e6", + "id": "fdd8bdf4-8f7b-4237-99d3-c87c0910571d", + "isAutomaticInvocation": false, + "isCancelPending": false, + "operation": "INSTANTIATE", + "operationParams": { + "additionalParams": { + "lcm-operation-user-data": "./UserData/userdata_default.py", + "lcm-operation-user-data-class": "DefaultUserData" + }, + "extManagedVirtualLinks": [ + { + "id": "46653630-2b7f-493c-8dec-c2c6e2fd98c8", + "resourceId": "6c85c8bd-91f3-48b4-bc4b-030bbdfb1a8d", + "vnfVirtualLinkDescId": "internalVL1" + } + ], + "extVirtualLinks": [ + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP1_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP1" + }, + { + "cpConfig": { + "VDU2_CP1_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.0.102" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "id": "bec04b02-273f-4eb3-a18d-af695c4399bf", + "resourceId": "576075c2-d33e-4002-8d85-9c906cf63ed7" + }, + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "afc77fd6-1bf6-4db9-b285-6799642cbfd2", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.102" + ], + "subnetId": "afc77fd6-1bf6-4db9-b285-6799642cbfd2", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "id": "625f6da9-6a01-480e-8ecb-1ef8122ad224", + "resourceId": "c84bc776-69ed-4ec9-886e-c594d9ebe38f" + } + ], + "flavourId": "simple", + "instantiationLevelId": "instantiation_level_1", + "vimConnectionInfo": { + "vim1": { + "accessInfo": { + "password": "devstack", + "project": "nfv", + "projectDomain": "Default", + "region": "RegionOne", + "userDomain": "Default", + "username": "nfv_user" + }, + "interfaceInfo": { + "endpoint": "http://localhost/identity/v3" + }, + "vimId": "fc734abb-2d1b-4032-b594-88c33634e023", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + } + }, "operationState": "COMPLETED", "resourceChanges": { "affectedVirtualLinks": [ diff --git a/api-ref/source/v2/samples/vnflcm/show-vnflcm-operation-occurrence-response.json b/api-ref/source/v2/samples/vnflcm/show-vnflcm-operation-occurrence-response.json index e37ca56c2..0eb79ce50 100644 --- a/api-ref/source/v2/samples/vnflcm/show-vnflcm-operation-occurrence-response.json +++ b/api-ref/source/v2/samples/vnflcm/show-vnflcm-operation-occurrence-response.json @@ -1,5 +1,14 @@ { "_links": { + "fail": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5/fail" + }, + "retry": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5/retry" + }, + "rollback": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5/rollback" + }, "self": { "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5" }, @@ -7,11 +16,16 @@ "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/e00f0d64-d7a3-459b-8a51-b402d5344296" } }, + "grantId": "f848dd6c-6393-4104-8bfe-df764a042563", "id": "a790879c-05f9-4475-9c90-1677452d3eb5", "isAutomaticInvocation": false, "isCancelPending": false, "operation": "INSTANTIATE", "operationParams": { + "additionalParams": { + "lcm-operation-user-data": "./UserData/userdata_default.py", + "lcm-operation-user-data-class": "DefaultUserData" + }, "extManagedVirtualLinks": [ { "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", diff --git a/api-ref/source/v2/vnflcm.inc b/api-ref/source/v2/vnflcm.inc index 937849bcc..0f96e207e 100644 --- a/api-ref/source/v2/vnflcm.inc +++ b/api-ref/source/v2/vnflcm.inc @@ -9,14 +9,8 @@ This interface manages the VNF lifecycle management operations of VNF instances. This interface allows the NFVO to invoke VNF lifecycle management operations of VNF instances towards the VNFM. -.. note:: - TODO: Xena release does not support version 2 vnflcm APIs of - scale vnf, heal vnf, change external vnf connectivity, - rollback, retry and fail. - The version 2 of these APIs will be supported in future releases. - -Creates a new VNF instance resource (v2) -======================================== +Create a new VNF instance resource (v2) +======================================= .. rest_method:: POST /vnflcm/v2/vnf_instances @@ -167,7 +161,7 @@ Request Parameters - interfaceInfo: vim_connection_info_interface_info - accessInfo: vim_connection_info_access_info - extra: vim_connection_info_extra - - localizationLanguage: localizataion_language + - localizationLanguage: localization_language - additionalParams: vnf_instance_additional_params - extensions: vnf_instance_extensions - vnfConfigurableProperties: vnf_instance_vnf_configurable_properties @@ -258,7 +252,7 @@ Request Parameters - vnfInstanceId: vnf_instance_id -Show VNF Instance (v2) +Show VNF instance (v2) ====================== .. rest_method:: GET /vnflcm/v2/vnf_instances/{vnfInstanceId} @@ -404,7 +398,7 @@ Response Example .. literalinclude:: samples/vnflcm/show-vnf-instance-response.json :language: javascript -List VNF Instance (v2) +List VNF instance (v2) ====================== .. rest_method:: GET /vnflcm/v2/vnf_instances @@ -599,6 +593,7 @@ Response Parameters - stateEnteredTime: state_entered_time - startTime: start_time - vnfInstanceId: vnf_lcm_vnf_instance_id + - grantId: grant_id - operation: operation - isAutomaticInvocation: is_automatic_invocation - operationParams: operation_params @@ -618,6 +613,7 @@ Response Parameters - vimLevelResourceType: resource_handle_vim_level_resource_type - affectedVnfcCpIds: affected_vnfc_cp_ids - addedStorageResourceIds: added_storage_resource_ids + - removedStorageResourceIds: removed_storage_resource_ids - affectedVirtualLinks: affected_virtual_links - id: affected_virtual_links_id - vnfVirtualLinkDescId: vnf_virtual_link_resource_info_vnf_virtual_link_desc_id @@ -693,6 +689,7 @@ Response Parameters - stateEnteredTime: state_entered_time - startTime: start_time - vnfInstanceId: vnf_lcm_vnf_instance_id + - grantId: grant_id - operation: operation - isAutomaticInvocation: is_automatic_invocation - operationParams: operation_params @@ -712,6 +709,7 @@ Response Parameters - vimLevelResourceType: resource_handle_vim_level_resource_type - affectedVnfcCpIds: affected_vnfc_cp_ids - addedStorageResourceIds: added_storage_resource_ids + - removedStorageResourceIds: removed_storage_resource_ids - affectedVirtualLinks: affected_virtual_links - id: affected_virtual_links_id - vnfVirtualLinkDescId: vnf_virtual_link_resource_info_vnf_virtual_link_desc_id @@ -737,6 +735,154 @@ Response Example .. literalinclude:: samples/vnflcm/list-vnflcm-operation-occurrence-response.json :language: javascript +Retry a VNF LCM operation occurrence (v2) +========================================= + +.. rest_method:: POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/retry + +The POST method starts retrying a VNF lifecycle operation if that operation +has experienced a temporary failure, i.e. the related +"Individual VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 202 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 409 + - 422 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfLcmOpOccId: vnf_lcm_op_occ_id + +Fail a VNF LCM operation occurrence (v2) +======================================== + +.. rest_method:: POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/fail + +The POST method marks a VNF lifecycle management operation occurrence +as "finally failed" if that operation occurrence is in "FAILED_TEMP" state. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 406 + - 409 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfLcmOpOccId: vnf_lcm_op_occ_id + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: vnf_lcm_op_occ_id_response + - operationState: operation_state + - stateEnteredTime: state_entered_time + - startTime: start_time + - vnfInstanceId: vnf_instance_id + - grantId: grant_id + - operation: operation + - isAutomaticInvocation: is_automatic_invocation + - operationParams: operation_params + - isCancelPending: is_cancel_pending + - error: error + - title: error_title + - status: error_status + - detail: error_detail + - resourceChanges: resource_changes + - affectedVnfcs: affected_vnfcs + - id: affected_vnfcs_id + - vduId: affected_vnfcs_vdu_id + - changeType: affected_vnfcs_change_type + - computeResource: vnfc_resource_info_compute_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - affectedVnfcCpIds: affected_vnfc_cp_ids + - addedStorageResourceIds: added_storage_resource_ids + - removedStorageResourceIds: removed_storage_resource_ids + - affectedVirtualLinks: affected_virtual_links + - id: affected_virtual_links_id + - vnfVirtualLinkDescId: vnf_virtual_link_resource_info_vnf_virtual_link_desc_id + - changeType: affected_virtual_links_change_type + - networkResource: vnf_virtual_link_resource_info_network_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - affectedVirtualStorages: affected_virtual_storages + - id: affected_virtual_storages_id + - virtualStorageDescId: affected_virtual_storages_virtual_storage_desc_id + - changeType: affected_virtual_storages_change_type + - storageResource: virtual_storage_resource_info_storage_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/fail-vnflcm-operation-occurrence-response.json + :language: javascript + +Rollback a VNF LCM operation occurrence (v2) +============================================ + +.. rest_method:: POST /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId}/rollback + +The POST method starts rolling back a VNF lifecycle operation if that operation +has experienced a temporary failure, i.e. the related +"Individual VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. +In case of rolling back an occurrence of the "InstantiateVnf" operation, +the VNFM shall request to the VIM the release of the virtualised +resources that were allocated for the related VNF instance. +The "rollback" task shall be supported by the VNFM for any VNF LCM operation occurrence +that represents an "InstantiateVnf" operation in FAILED_TEMP state. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 202 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 409 + - 422 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfLcmOpOccId: vnf_lcm_op_occ_id Create a new subscription (v2) ============================== diff --git a/doc/source/cli/cli-etsi-vnflcm.rst b/doc/source/cli/cli-etsi-vnflcm.rst index 66767fad4..982b420ad 100644 --- a/doc/source/cli/cli-etsi-vnflcm.rst +++ b/doc/source/cli/cli-etsi-vnflcm.rst @@ -24,13 +24,10 @@ CLI Reference for VNF Lifecycle Management Commands with **\-\-os-tacker-api-version 2** call version 2 vnflcm APIs. .. note:: - Xena release does not support version 2 vnflcm APIs of - scale vnf, heal vnf, change external vnf connectivity, - rollback, retry and fail. - The version 2 of these APIs will be supported in future releases. - Also, in Xena release, version 2 vnflcm APIs of instantiate vnf - and terminate vnf only support VNF, not CNF. - CNF will be supported by version 2 vnflcm APIs in future releases. + In Yoga release, version 2 vnflcm APIs of instantiate vnf, + terminate vnf, scale vnf, heal vnf, change external vnf connectivity, + rollback, retry and fail only support VNF, not CNF. CNF will be supported + by version 2 vnflcm APIs in future releases. 1. Create VNF Identifier ^^^^^^^^^^^^^^^^^^^^^^^^ @@ -412,6 +409,8 @@ Help: 10. Rollback VNF Lifecycle Management Operation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The `VNF_LCM_OP_OCC_ID` is the ID for the target lifecycle temporary failed. + .. code-block:: console $ openstack vnflcm op rollback VNF_LCM_OP_OCC_ID @@ -441,7 +440,7 @@ Help: 11. Retry ^^^^^^^^^ - The `VNF_LCM_OP_OCC_ID` is the ID for the target lifecycle temporary failed. +The `VNF_LCM_OP_OCC_ID` is the ID for the target lifecycle temporary failed. .. code-block:: console @@ -474,7 +473,7 @@ Help: 12. Fail ^^^^^^^^ - The `VNF_LCM_OP_OCC_ID` is the ID for the target lifecycle temporary failed. +The `VNF_LCM_OP_OCC_ID` is the ID for the target lifecycle temporary failed. .. code-block:: console diff --git a/doc/source/user/etsi_vnf_error_handling.rst b/doc/source/user/etsi_vnf_error_handling.rst index bc43df3a6..1918076a4 100644 --- a/doc/source/user/etsi_vnf_error_handling.rst +++ b/doc/source/user/etsi_vnf_error_handling.rst @@ -4,12 +4,6 @@ ETSI NFV-SOL VNF error-handling This document describes how to error-handling VNF in Tacker. -.. note:: - Rollback and retry are NOT supported in version 2 vnflcm APIs in Xena yet. - So, You should recover it by yourself instead if instantiation is failed via v2 API. - The recovering process may include deleting a stack via HEAT API. - - Prerequisites ------------- @@ -237,12 +231,56 @@ the **callbackUri** set in 'Create a new subscription'. **vnfLcmOpOccId** included in this 'Notification' corresponds to VNF_LCM_OP_OCC_ID. -See `Tacker API reference`_. for details on the APIs used here. +See `VNF LCM v1 API`_ and `VNF LCM v2 API`_ +for details on the APIs used here. Rollback VNF LCM Operation ~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. note:: + Rollback of Scale-Out has a difference in operation result between v1 and v2. + In v1, the oldest VNFc(VM) is deleted. In v2, the newest VNFc(VM) is deleted. + +.. list-table:: + :widths: 10 40 15 15 10 10 + :header-rows: 1 + + * - LCM Operation + - Description of Rollback + - Precondition + - Postcondition + - Support in v1 + - Support in v2 + * - Instantiate + - | VNFM removes all VMs and resources. + | e.g. Tacker executes Heat stack-delete for deletion of the target VM. + - FAILED_TEMP + - ROLLED_BACK or FAILED_TEMP + - X + - X + * - Scale-out + - | VNFM reverts changes of VMs and resources specified in the middle of scale-out operation. + | There are differences in the operation results of v1 and v2. See note. + | e.g. Tacker reverts desired_capacity and executes Heat stack-update. + - FAILED_TEMP + - ROLLED_BACK or FAILED_TEMP + - X + - X + * - Modify + - VNFM reverts the update of the VNF instance information. + - FAILED_TEMP + - ROLLED_BACK or FAILED_TEMP + - + - X + * - Change external connectivity + - | VNFM reverts changes of the external connectivity for VNF instances. + | e.g. Tacker reverts stack parameters and executes Heat stack-update. + - FAILED_TEMP + - ROLLED_BACK or FAILED_TEMP + - + - X + This manual describes the following operations as use cases for rollback operations. @@ -296,7 +334,54 @@ Result: Fail VNF LCM Operation -~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~ + +.. list-table:: + :widths: 10 40 15 15 10 10 + :header-rows: 1 + + * - LCM Operation + - Description of Fail + - Precondition + - Postcondition + - Support in v1 + - Support in v2 + * - Instantiate + - Tacker simply changes LCM operation state to "FAILED" on Tacker-DB. + - FAILED_TEMP + - FAILED + - X + - X + * - Terminate + - Tacker simply changes LCM operation state to "FAILED" on Tacker-DB. + - FAILED_TEMP + - FAILED + - X + - X + * - Heal + - Tacker simply changes LCM operation state to "FAILED" on Tacker-DB. + - FAILED_TEMP + - FAILED + - X + - X + * - Scale + - Tacker simply changes LCM operation state to "FAILED" on Tacker-DB. + - FAILED_TEMP + - FAILED + - X + - X + * - Modify + - Tacker simply changes LCM operation state to "FAILED" on Tacker-DB. + - FAILED_TEMP + - FAILED + - X + - X + * - Change external connectivity + - Tacker simply changes LCM operation state to "FAILED" on Tacker-DB. + - FAILED_TEMP + - FAILED + - X + - X This manual describes the following operations as use cases for fail operations. @@ -353,6 +438,53 @@ Result: Retry VNF LCM Operation ~~~~~~~~~~~~~~~~~~~~~~~ +.. list-table:: + :widths: 10 40 15 15 10 10 + :header-rows: 1 + + * - LCM Operation + - Description of Fail + - Precondition + - Postcondition + - Support in v1 + - Support in v2 + * - Instantiate + - VNFM retries a Instantiate operation. + - FAILED_TEMP + - COMPLETED or FAILED_TEMP + - X + - X + * - Terminate + - VNFM retries a Terminate operation. + - FAILED_TEMP + - COMPLETED or FAILED_TEMP + - X + - X + * - Heal + - VNFM retries a Heal operation. + - FAILED_TEMP + - COMPLETED or FAILED_TEMP + - X + - X + * - Scale + - VNFM retries a Scale operation. + - FAILED_TEMP + - COMPLETED or FAILED_TEMP + - X + - X + * - Modify + - VNFM retries a Modify operation. + - FAILED_TEMP + - COMPLETED or FAILED_TEMP + - X + - X + * - Change external connectivity + - VNFM retries a Change external connectivity operation. + - FAILED_TEMP + - COMPLETED or FAILED_TEMP + - X + - X + This manual describes the following operations as use cases for retry operations. @@ -380,6 +512,7 @@ Result: If "Retry VNF lifecycle management operation" is successful, then another LCM can be operational. -.. _Tacker API reference : https://docs.openstack.org/api-ref/nfv-orchestration/v1/index.html +.. _VNF LCM v1 API : https://docs.openstack.org/api-ref/nfv-orchestration/v1/vnflcm.html +.. _VNF LCM v2 API : https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html .. _Keystone API reference : https://docs.openstack.org/api-ref/identity/v3/#password-authentication-with-scoped-authorization