From f24afcf70595151c7230792f518bc9f05284066d Mon Sep 17 00:00:00 2001 From: Hirofumi Noguchi Date: Wed, 8 Sep 2021 18:32:33 +0900 Subject: [PATCH] Add documents for multi-version API support This patch provides Tacker documents for multi-version API support. VNF LCM API Version 2 is added to API Reference and the page hierarchy is changed for readability. Also, the Show VNF LCM Versions command is added to Command-Line Interface Reference. Furthermore, a manual of the Userdata script is added to Tacker User Guide. Implements: blueprint multi-version-api Implements: blueprint support-nfv-solv3-start-and-terminate-vnf Implements: blueprint support-nfv-solv3-query-vnf-instances Implements: blueprint support-nfv-solv3-query-operation-occurrences Implements: blueprint support-nfv-solv3-subscriptions Change-Id: I603e32090303af080b17e549a0caf7e862aa7e1e --- api-ref/source/index.rst | 17 +- api-ref/source/v1/{index.rst => legacy.rst} | 8 +- api-ref/source/v1/parameters_vnflcm.yaml | 2 +- .../source/v1/parameters_vnflcm_versions.yaml | 44 + .../list-vnflcm-version-response.json | 13 + .../show-vnflcm-version-response.json | 9 + api-ref/source/v1/status.yaml | 2 +- api-ref/source/v1/vnflcm.rst | 9 + api-ref/source/v1/vnflcm_versions.inc | 97 ++ api-ref/source/v1/vnflcm_versions.rst | 9 + api-ref/source/v1/vnfpkgm.rst | 9 + api-ref/source/v2/parameters_vnflcm.yaml | 1426 +++++++++++++++++ .../vnflcm/create-subscription-request.json | 3 + .../vnflcm/create-subscription-response.json | 10 + .../vnflcm/create-vnf-instance-request.json | 5 + .../vnflcm/create-vnf-instance-response.json | 22 + .../instantiate-vnf-instance-request.json | 128 ++ .../vnflcm/list-subscription-response.json | 12 + .../vnflcm/list-vnf-instance-response.json | 473 ++++++ ...-vnflcm-operation-occurrence-response.json | 232 +++ .../vnflcm/show-subscription-response.json | 10 + .../vnflcm/show-vnf-instance-response.json | 471 ++++++ ...-vnflcm-operation-occurrence-response.json | 229 +++ .../terminate-vnf-instance-request.json | 4 + api-ref/source/v2/status.yaml | 88 + api-ref/source/v2/vnflcm.inc | 939 +++++++++++ api-ref/source/v2/vnflcm.rst | 9 + doc/source/cli/cli-etsi-vnflcm.rst | 78 + doc/source/user/etsi_vnf_error_handling.rst | 6 + doc/source/user/resources.rst | 12 +- doc/source/user/userdata_script.rst | 309 ++++ doc/source/user/vnf-package.rst | 13 +- 32 files changed, 4687 insertions(+), 11 deletions(-) rename api-ref/source/v1/{index.rst => legacy.rst} (72%) create mode 100644 api-ref/source/v1/parameters_vnflcm_versions.yaml create mode 100644 api-ref/source/v1/samples/vnflcm_versions/list-vnflcm-version-response.json create mode 100644 api-ref/source/v1/samples/vnflcm_versions/show-vnflcm-version-response.json create mode 100644 api-ref/source/v1/vnflcm.rst create mode 100644 api-ref/source/v1/vnflcm_versions.inc create mode 100644 api-ref/source/v1/vnflcm_versions.rst create mode 100644 api-ref/source/v1/vnfpkgm.rst create mode 100644 api-ref/source/v2/parameters_vnflcm.yaml create mode 100644 api-ref/source/v2/samples/vnflcm/create-subscription-request.json create mode 100644 api-ref/source/v2/samples/vnflcm/create-subscription-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/create-vnf-instance-request.json create mode 100644 api-ref/source/v2/samples/vnflcm/create-vnf-instance-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/instantiate-vnf-instance-request.json create mode 100644 api-ref/source/v2/samples/vnflcm/list-subscription-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/list-vnf-instance-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/list-vnflcm-operation-occurrence-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/show-subscription-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/show-vnf-instance-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/show-vnflcm-operation-occurrence-response.json create mode 100644 api-ref/source/v2/samples/vnflcm/terminate-vnf-instance-request.json create mode 100644 api-ref/source/v2/status.yaml create mode 100644 api-ref/source/v2/vnflcm.inc create mode 100644 api-ref/source/v2/vnflcm.rst create mode 100644 doc/source/user/userdata_script.rst diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index 62412bec1..887665add 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -2,7 +2,22 @@ NFV Orchestration Service APIs ============================== +NFV Orchestration API v1.0 +-------------------------- + .. toctree:: :maxdepth: 1 - v1/index + v1/legacy + v1/vnfpkgm + v1/vnflcm_versions + v1/vnflcm + +NFV Orchestration API v2.0 +-------------------------- + +.. toctree:: + :maxdepth: 1 + + v1/vnflcm_versions + v2/vnflcm diff --git a/api-ref/source/v1/index.rst b/api-ref/source/v1/legacy.rst similarity index 72% rename from api-ref/source/v1/index.rst rename to api-ref/source/v1/legacy.rst index 1f1c86a6e..ba0c41f2e 100644 --- a/api-ref/source/v1/index.rst +++ b/api-ref/source/v1/legacy.rst @@ -1,8 +1,8 @@ :tocdepth: 2 -########################## -NFV Orchestration API v1.0 -########################## +################# +Legacy Tacker API +################# .. rest_expand_all:: @@ -19,5 +19,3 @@ NFV Orchestration API v1.0 .. include:: classifiers.inc .. include:: nsds.inc .. include:: nss.inc -.. include:: vnf_packages.inc -.. include:: vnflcm.inc \ No newline at end of file diff --git a/api-ref/source/v1/parameters_vnflcm.yaml b/api-ref/source/v1/parameters_vnflcm.yaml index 726f23c60..4d54100a5 100644 --- a/api-ref/source/v1/parameters_vnflcm.yaml +++ b/api-ref/source/v1/parameters_vnflcm.yaml @@ -1341,7 +1341,7 @@ vnf_link_port_cp_instance_id: instance. The value refers to an "extCpInfo" item in the VnfInstance or a - "vnfcCpInfo" item of a "vnfcResouceInfo" item in the VnfInstance. + "vnfcCpInfo" item of a "vnfcResourceInfo" item in the VnfInstance. in: body required: false type: string diff --git a/api-ref/source/v1/parameters_vnflcm_versions.yaml b/api-ref/source/v1/parameters_vnflcm_versions.yaml new file mode 100644 index 000000000..ab4a04121 --- /dev/null +++ b/api-ref/source/v1/parameters_vnflcm_versions.yaml @@ -0,0 +1,44 @@ +# variables in header + +api_Major_Version: + description: | + Indicates the major version of API. + in: path + required: true + type: string + +# variables in body + +api_Versions: + description: | + Version(s) supported for the API signalled by the uriPrefix attribute. + in: body + required: true + type: Structure (inlined) +isDeprecated: + description: | + This attribute indicates whether use of the version signalled + by the version attribute is deprecated (true) or not (false). + in: body + required: false + type: boolean +retirementDate: + description: | + The date and time after which the API version will no longer be + supported. This attribute may be included if the value of the isDeprecated + attribute is set to true and shall be absent otherwise. + in: body + required: false + type: datetime +uriPrefix: + description: | + URI prefix for the API. + in: body + required: true + type: string +version: + description: | + Supported version. + in: body + required: true + type: String diff --git a/api-ref/source/v1/samples/vnflcm_versions/list-vnflcm-version-response.json b/api-ref/source/v1/samples/vnflcm_versions/list-vnflcm-version-response.json new file mode 100644 index 000000000..3d55628ad --- /dev/null +++ b/api-ref/source/v1/samples/vnflcm_versions/list-vnflcm-version-response.json @@ -0,0 +1,13 @@ +{ + "uriPrefix": "/vnflcm", + "apiVersions": [ + { + "version": "1.3.0", + "isDeprecated": false + }, + { + "version": "2.0.0", + "isDeprecated": false + } + ] +} diff --git a/api-ref/source/v1/samples/vnflcm_versions/show-vnflcm-version-response.json b/api-ref/source/v1/samples/vnflcm_versions/show-vnflcm-version-response.json new file mode 100644 index 000000000..21c568076 --- /dev/null +++ b/api-ref/source/v1/samples/vnflcm_versions/show-vnflcm-version-response.json @@ -0,0 +1,9 @@ +{ + "uriPrefix": "/vnflcm/v1", + "apiVersions": [ + { + "version": "1.3.0", + "isDeprecated": false + } + ] +} diff --git a/api-ref/source/v1/status.yaml b/api-ref/source/v1/status.yaml index cb550868a..e320da2e3 100644 --- a/api-ref/source/v1/status.yaml +++ b/api-ref/source/v1/status.yaml @@ -63,7 +63,7 @@ 409: default: | This operation conflicted with another operation on this resource. - duplcate_zone: | + duplicate_zone: | There is already a zone with this name. 416: default: | diff --git a/api-ref/source/v1/vnflcm.rst b/api-ref/source/v1/vnflcm.rst new file mode 100644 index 000000000..fc0ae7272 --- /dev/null +++ b/api-ref/source/v1/vnflcm.rst @@ -0,0 +1,9 @@ +:tocdepth: 2 + +##################################################################### +Virtualized Network Function Lifecycle Management Interface (VNF LCM) +##################################################################### + +.. rest_expand_all:: + +.. include:: vnflcm.inc diff --git a/api-ref/source/v1/vnflcm_versions.inc b/api-ref/source/v1/vnflcm_versions.inc new file mode 100644 index 000000000..886ace0d2 --- /dev/null +++ b/api-ref/source/v1/vnflcm_versions.inc @@ -0,0 +1,97 @@ +.. -*- rst -*- + +============================================================== +Virtualized Network Function Lifecycle Management API Versions +============================================================== + +List VNFLCM API versions +======================== + +.. rest_method:: GET /vnflcm/api_versions + +This method retrieves the list of all supported versions for +VNF LCM API. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + + +Request Example +--------------- + +.. literalinclude:: samples/vnflcm/create-vnf-instance-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm_versions.yaml + + - uriPrefix: uriPrefix + - apiVersions: api_Versions + - \>version: version + - \>isDeprecated: isDeprecated + - \>retirementDate: retirementDate + + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm_versions/list-vnflcm-version-response.json + :language: javascript + +Show VNFLCM API versions +======================== + +.. rest_method:: GET /vnflcm/{apiMajorVersion}/api_versions + +This method retrieves the list of supported versions for +VNF LCM API corresponding to the {apiMajorVersion}. + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm_versions.yaml + + - apiMajorVersion: api_Major_Version + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm_versions.yaml + + - uriPrefix: uriPrefix + - apiVersions: api_Versions + - \>version: version + - \>isDeprecated: isDeprecated + - \>retirementDate: retirementDate + + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm_versions/show-vnflcm-version-response.json + :language: javascript + diff --git a/api-ref/source/v1/vnflcm_versions.rst b/api-ref/source/v1/vnflcm_versions.rst new file mode 100644 index 000000000..d48a8b899 --- /dev/null +++ b/api-ref/source/v1/vnflcm_versions.rst @@ -0,0 +1,9 @@ +:tocdepth: 2 + +############################################################################# +Virtualized Network Function Lifecycle Management Versions (VNF LCM versions) +############################################################################# + +.. rest_expand_all:: + +.. include:: vnflcm_versions.inc diff --git a/api-ref/source/v1/vnfpkgm.rst b/api-ref/source/v1/vnfpkgm.rst new file mode 100644 index 000000000..519134df7 --- /dev/null +++ b/api-ref/source/v1/vnfpkgm.rst @@ -0,0 +1,9 @@ +:tocdepth: 2 + +#################################################### +Virtualized Network Function Packages (VNF packages) +#################################################### + +.. rest_expand_all:: + +.. include:: vnf_packages.inc diff --git a/api-ref/source/v2/parameters_vnflcm.yaml b/api-ref/source/v2/parameters_vnflcm.yaml new file mode 100644 index 000000000..580170b97 --- /dev/null +++ b/api-ref/source/v2/parameters_vnflcm.yaml @@ -0,0 +1,1426 @@ +# variables in header + +subscription_id: + description: | + Identifier of the subscription. + in: path + required: true + type: string +vnf_instance_id: + description: | + Identifier of the VNF instance. + in: path + required: true + type: string +vnf_lcm_op_occ_id: + description: | + Identifier of the VNF lifecycle management operation occurrence. + in: path + required: true + type: string + +# variables in body +added_storage_resource_ids: + description: | + References to VirtualStorage resources that + have been added. + Each value refers to a + VirtualStorageResourceInfo item in the + VnfInstance that was added to the VNFC. + It shall be provided if at least one storage + resource was added to the VNFC. + in: body + required: false + type: array +address_range: + description: | + An IP address range to be used, e.g. in case + of egress connections. + in: body + required: false + type: object +affected_virtual_links: + description: | + Information about VL instances that were affected during + the lifecycle operation. + in: body + required: false + type: array +affected_virtual_links_change_type: + description: | + Signals the type of change. + Permitted values: + + ADDED + + REMOVED + + MODIFIED + + TEMPORARY + + LINK_PORT_ADDED + + LINK_PORT_REMOVED + + For a temporary resource, an + AffectedVirtualLink structure exists as long as + the temporary resource exists. + in: body + required: true + type: string +affected_virtual_links_id: + description: | + Identifier of the virtual link instance, identifying + the applicable "vnfVirtualLinkResourceInfo" + entry in the "VnfInstance" data type. + in: body + required: true + type: string +affected_virtual_storages: + description: | + Information about virtualised storage instances that were + affected during the lifecycle operation. + in: body + required: false + type: array +affected_virtual_storages_change_type: + description: | + Signals the type of change. + Permitted values: + + ADDED + + REMOVED + + MODIFIED + + TEMPORARY + + For a temporary resource, an + AffectedVirtualStorage structure exists as long + as the temporary resource exists. + in: body + required: true + type: string +affected_virtual_storages_id: + description: | + Identifier of the storage instance, identifying the + applicable "virtualStorageResourceInfo" entry + in the "VnfInstance" data type. + in: body + required: true + type: string +affected_virtual_storages_virtual_storage_desc_id: + description: | + Identifier of the related VirtualStorage + descriptor in the VNFD. + in: body + required: true + type: string +affected_vnfc_cp_ids: + description: | + Identifiers of CP(s) of the VNFC instance that + were affected by the change. + Shall be present for those affected CPs of the + VNFC instance that are associated to an + external CP of the VNF instance. + May be present for further affected CPs of the + VNFC instance. + in: body + required: false + type: array +affected_vnfcs: + description: | + Information about VNFC instances that were affected + during the lifecycle operation. + in: body + required: false + type: array +affected_vnfcs_change_type: + description: | + Signals the type of change. + Permitted values: + + ADDED + + REMOVED + + MODIFIED + + TEMPORARY + + For a temporary resource, an AffectedVnfc + structure exists as long as the temporary + resource exists. + in: body + required: true + type: string +affected_vnfcs_id: + description: | + Identifier of the Vnfc instance, identifying the + applicable "vnfcResourceInfo" entry in the + "VnfInstance" data type. + in: body + required: true + type: string +affected_vnfcs_vdu_id: + description: | + Identifier of the related VDU in the VNFD. + in: body + required: true + type: string +authentication: + description: | + Authentication parameters to configure the use of + Authorization when sending notifications + corresponding to this subscription. + This attribute shall only be present if the subscriber + requires authorization of notifications. + in: body + required: false + type: object +authentication_auth_type: + description: | + Defines the types of Authentication/Authorization which + the API consumer is willing to accept when receiving a + notification. + Permitted values: + + BASIC: In every HTTP request to the + notification endpoint, use HTTP Basic + authentication with the client credentials. + + OAUTH2_CLIENT_CREDENTIALS: In every + HTTP request to the notification endpoint, use + an OAuth 2.0 bearer token, obtained using the + client credentials grant type. + + TLS_CERT: Every HTTP request to the + notification endpoint is sent over a mutually + authenticated TLS session, i.e. not only the + server is authenticated, but also the client is + authenticated during the TLS tunnel setup. + in: body + required: true + type: array +authentication_params_basic: + description: | + Parameters for authentication/authorization using BASIC. + Shall be present if authType is "BASIC" and the + contained information has not been provisioned out of + band. Shall be absent otherwise. + in: body + required: false + type: object +authentication_params_basic_password: + description: | + Password to be used in HTTP Basic authentication. + Shall be present if it has not been provisioned out of band. + in: body + required: false + type: string +authentication_params_basic_user_name: + description: | + Username to be used in HTTP Basic authentication. + Shall be present if it has not been provisioned out of band. + in: body + required: false + type: string +authentication_params_oauth2_client_credentials: + description: | + Parameters for authentication/authorization using + OAUTH2_CLIENT_CREDENTIALS. + Shall be present if authType is + "OAUTH2_CLIENT_CREDENTIALS" and the contained + information has not been provisioned out of band. + Shall be absent otherwise. + in: body + required: false + type: object +authentication_params_oauth2_client_credentials_client_id: + description: | + Client identifier to be used in the access token request + of the OAuth 2.0 client credentials grant type. Shall be + present if it has not been provisioned out of band. + in: body + required: false + type: string +authentication_params_oauth2_client_credentials_client_password: + description: | + Client password to be used in the access token request + of the OAuth 2.0 client credentials grant type. Shall be + present if it has not been provisioned out of band. + in: body + required: false + type: string +authentication_params_oauth2_client_credentials_token_endpoint: + description: | + The token endpoint from which the access token can be + obtained. Shall be present if it has not been provisioned + out of band. + in: body + required: false + type: string +callback_uri: + description: | + The URI of the endpoint to send the notification to. + in: body + required: true + type: string +cp_config: + description: | + List of instance data that need to be configured on the CP instances + created from the respective CPD. + in: body + required: true + type: map +cp_protocol_data: + description: | + Parameters for configuring the network protocols on the link port that + connects the CP to a VL. + in: body + required: false + type: array +cpd_id: + description: | + The identifier of the CPD in the VNFD. + in: body + required: true + type: string +current_vnf_ext_cp_data: + description: | + Allows the API consumer to read the current CP + configuration information for the connection of external + CPs to the external virtual link. + in: body + required: true + type: object +error: + description: | + If "operationState" is "FAILED_TEMP" or "FAILED" or + "operationState" is "PROCESSING" or "ROLLING_BACK" + and previous value of "operationState" was + "FAILED_TEMP", this attribute shall be present and + contain error information, unless it has been requested to + be excluded via an attribute selector. + in: body + required: false + type: object +error_detail: + description: | + A human-readable explanation specific to this occurrence + of the problem. + in: body + required: true + type: string +error_status: + description: | + The HTTP status code for this occurrence of the problem. + in: body + required: true + type: string +error_title: + description: | + A URI reference according to IETF RFC 3986 that + identifies the problem type. It is encouraged that the URI + provides human-readable documentation for the problem + (e.g. using HTML) when dereferenced. When this + member is not present, its value is assumed to be + "about:blank". + in: body + required: false + type: string +ext_cp_info: + description: | + Information about the external CPs exposed by the VNF instance. + in: body + required: true + type: array +ext_cp_info_associated_vnfc_cp_id: + description: | + Identifier of the "vnfcCpInfo" structure in + "VnfcResourceInfo" structure that represents the + VNFC CP which is exposed by this external CP + instance. Shall be present in case this CP instance + maps to a VNFC CP. + in: body + required: false + type: string +ext_cp_info_cp_config_id: + description: | + Identifier that references the applied + "VnfExtCpConfig" entry in the "cpConfig" map of the + "currentVnfExtCpData" in the "ExtVirtualLinkInfo" + structure. + in: body + required: true + type: string +ext_cp_info_cp_protocol_info: + description: | + Network protocol information for this CP. + in: body + required: true + type: array +ext_cp_info_cpd_id: + description: | + Identifier of the external CPD, VnfExtCpd, in the VNFD. + An identifier that is unique for the respective type within a VNF + instance, but that need not be globally unique. Representation: string of + variable length. + in: body + required: true + type: string +ext_cp_info_ext_link_port_id: + description: | + Identifier of the "extLinkPortInfo" structure inside the "extVirtualLinkInfo" + structure. Shall be present if the CP is associated to a link port. + in: body + required: false + type: string +ext_cp_info_id: + description: | + Identifier of the external CP instance and the related information instance. + in: body + required: true + type: string +ext_cps: + description: | + External CPs of the VNF to be connected to this external VL. + in: body + required: true + type: array +ext_link_port_id: + description: | + Identifier of this link port as provided by the entity that has created the + link port. + in: body + required: true + type: string +ext_link_port_resource_handle: + description: | + Reference to the virtualised resource realizing this link port. + in: body + required: true + type: object +ext_link_ports: + description: | + Externally provided link ports to be used to connect external connection + points to this external VL. If this attribute is not present, the VNFM + shall create the link ports on the external VL. + in: body + required: false + type: array +ext_managed_multisite_virtual_link_id: + description: | + Identifier of the externally-managed multi-site VL + instance. The identifier is assigned by the NFV-MANO + entity that manages the externally managed multi-site VL + instance. It shall be present when the present externally- + managed internal VL (indicated by + extManagedVirtualLinkId) is part of a multi-site VL, e.g. in + support of multi-site VNF spanning several VIMs. All + externally-managed internal VL instances corresponding + to an internal VL created based on the same + virtualLinkDescId shall refer to the same + extManagedMultisiteVirtualLinkId. + in: body + required: false + type: string +ext_managed_virtual_link_data_id: + description: | + The identifier of the externally-managed internal VL instance. The + identifier is assigned by the NFV-MANO entity that manages this + VL instance. + in: body + required: true + type: string +ext_managed_virtual_link_data_resource_id: + description: | + The identifier of the resource in the scope of the VIM or the + resource provider. + in: body + required: true + type: string +ext_managed_virtual_link_data_vnf_link_port: + description: | + Externally provided link ports to be used to connect + VNFC connection points to this externally-managed VL + on this network resource. If this attribute is not present, + the VNFM shall create the link ports on the externally- + managed VL. + in: body + required: false + type: object +ext_managed_virtual_link_info: + description: | + Information about the externally-managed internal VLs of the VNF instance. + in: body + required: false + type: array +ext_managed_virtual_link_info_id: + description: | + Identifier of the externally-managed internal VL and the related + externally-managed VL information instance. The identifier is assigned + by the NFV-MANO entity that manages this VL instance. + in: body + required: true + type: string +ext_managed_virtual_link_info_network_resource: + description: | + Reference to the VirtualNetwork resource. + in: body + required: true + type: object +ext_managed_virtual_link_info_vnf_virtual_link_desc_id: + description: | + Identifier of the VNF Virtual Link Descriptor (VLD) in the VNFD. + in: body + required: true + type: string +ext_managed_virtual_links: + description: | + List of information about internal VLs that are managed by the NFVO. + in: body + required: false + type: array +ext_virtual_link_info: + description: | + Information about the external VLs the VNF instance is connected to. + in: body + required: false + type: array +ext_virtual_link_info_ext_link_ports: + description: | + Link ports of this VL. + in: body + required: false + type: array +ext_virtual_link_info_ext_link_ports_cp_instance_id: + description: | + Identifier of the external CP of the VNF connected to this link port. + There shall be at most one link port associated with any external + connection point instance. + The value refers to an "extCpInfo" item in the VnfInstance. + in: body + required: false + type: string +ext_virtual_link_info_ext_link_ports_id: + description: | + Identifier of this link port as provided by the entity that + has created the link port. + in: body + required: true + type: string +ext_virtual_link_info_id: + description: | + Identifier of the external VL and the related external VL information + instance. The identifier is assigned by the NFV-MANO entity that manages + this VL instance. + in: body + required: true + type: string +ext_virtual_links: + description: | + Information about external VLs to connect the VNF to. + in: body + required: false + type: array +ext_virtual_links_id: + description: | + The identifier of the external VL instance. The identifier is assigned + by the NFV-MANO entity that manages this VL instance. + in: body + required: true + type: string +ext_virtual_links_resource_id: + description: | + The identifier of the resource in the scope of the VIM or the + resource provider. + in: body + required: true + type: string +filter: + description: | + Filter settings for this subscription, to define the + subset of all notifications this subscription relates + to. A particular notification is sent to the subscriber + if the filter matches, or if there is no filter. + in: body + required: false + type: object +filter_notification_types: + description: | + Match particular notification types. + Permitted values: + + VnfLcmOperationOccurrenceNotification + + VnfIdentifierCreationNotification + + VnfIdentifierDeletionNotification + in: body + required: false + type: array +filter_operation_states: + description: | + Match particular LCM operation state + values as reported in notifications of type + VnfLcmOperationOccurrenceNotification. + May be present if the "notificationTypes" + attribute contains the value + "VnfLcmOperationOccurrenceNotification" and + shall be absent otherwise. + in: body + required: false + type: array +filter_operation_types: + description: | + Match particular VNF lifecycle operation types for + the notification of type + VnfLcmOperationOccurrenceNotification. + May be present if the "notificationTypes" attribute + contains the value + "VnfLcmOperationOccurrenceNotification", and + shall be absent otherwise. + in: body + required: false + type: array +fixed_addresses: + description: | + Fixed addresses to assign (from the subnet defined by "subnetId" + if provided). + Exactly one of "fixedAddresses" or "numDynamicAddresses" shall be present. + in: body + required: false + type: array +flavour_id: + description: | + Identifier of the VNF deployment flavour to be instantiated. + in: body + required: true + type: string +flavour_id_response: + description: | + Identifier of the VNF deployment flavour applied to this VNF instance. + in: body + required: true + type: string +graceful_termination_timeout: + description: | + This attribute is only applicable in case of graceful termination. + It defines the time to wait for the VNF to be taken out of service + before shutting down the VNF and releasing the resources. + + The unit is seconds. + + If not given and the "terminationType" attribute is set to "GRACEFUL", + it is expected that the VNFM waits for the successful taking out of + service of the VNF, no matter how long it takes, before shutting down + the VNF and releasing the resources. + in: body + required: false + type: integer +instantiated_vnf_info: + description: | + Information specific to an instantiated VNF instance. This attribute shall + be present if the instantiateState attribute value is INSTANTIATED. + in: body + required: false + type: object +instantiation_level_id: + description: | + Identifier of the instantiation level of the deployment flavour to be + instantiated. If not present, the default instantiation level as declared + in the VNFD is instantiated. + in: body + required: false + type: string +ip_address_type: + description: | + The type of the IP addresses. Permitted values: IPV4, IPV6. + in: body + required: true + type: string +ip_addresses: + description: | + List of IP addresses to assign to the CP instance. Each entry represents + IP address data for fixed or dynamic IP address assignment per subnet. + + If this attribute is not present, no IP address shall be assigned. + in: body + required: false + type: array +ip_addresses_cp_info: + description: | + Addresses assigned to the CP instance. Each entry represents IP + addresses assigned by fixed or dynamic IP address assignment per + subnet. + in: body + required: false + type: array +ip_over_ethernet: + description: | + Network address data for IP over Ethernet to assign to the extCP instance. + Shall be present if layerProtocol is equal to "IP_OVER_ETHERNET", and + shall be absent otherwise. + in: body + required: false + type: object +ip_over_ethernet_cp_info: + description: | + IP addresses over Ethernet to assign to the extCP instance. Shall be + present if layerProtocol is equal to "IP_OVER_ETHERNET", and shall + be absent otherwise. + in: body + required: false + type: object +is_automatic_invocation: + description: | + Set to true if this VNF LCM operation occurrence has + been triggered by an automated procedure inside the + VNFM (i.e. ScaleVnf triggered by autoscale, + or HealVnf triggered by auto-heal). + Set to false otherwise. + in: body + required: true + type: boolean +is_cancel_pending: + description: | + If the VNF LCM operation occurrence is in "STARTING", + "PROCESSING" or "ROLLING_BACK" state and the + operation is being cancelled, this attribute shall be set to + true. Otherwise, it shall be set to false. + in: body + required: true + type: boolean +layer_protocol: + description: | + Identifier of layer(s) and protocol(s). + + Permitted values: IP_OVER_ETHERNET + in: body + required: true + type: string +layer_protocol_cp_info: + description: | + The identifier of layer(s) and protocol(s) associated to the network + address information. + + Permitted values: IP_OVER_ETHERNET + in: body + required: true + type: string +link_port_id: + description: | + Identifier of a pre-configured link port to which the external CP will + be associated. See note. + in: body + required: false + type: string +localizataion_language: + description: | + Localization language of the VNF to be instantiated. + The value shall comply with the format defined in + IETF RFC 5646 [3]. + in: body + required: false + type: string +mac_address: + description: | + MAC address. If this attribute is not present, it shall be chosen by the + VIM. At least one of "macAddress" or "ipAddresses" shall be present. + in: body + required: false + type: string +max_address: + description: | + Highest IP address belonging to the range. + in: body + required: true + type: string +min_address: + description: | + Lowest IP address belonging to the range. + in: body + required: true + type: string +num_dynamic_addresses: + description: | + Number of set the dynamic address. + Exactly one of "fixedAddresses" or "numDynamicAddresses" shall be present. + in: body + required: false + type: int +operation: + description: | + Type of the actual LCM operation represented by this + VNF LCM operation occurrence. + in: body + required: true + type: string +operation_params: + description: | + Input parameters of the LCM operation. This attribute + shall be formatted according to the request data type of + the related LCM operation. + The following mapping between operationType and the + data type of this attribute shall apply: + + INSTANTIATE: InstantiateVnfRequest + + SCALE: ScaleVnfRequest + + HEAL: HealVnfRequest + + TERMINATE: TerminateVnfRequest + + MODIFY_INFO: VnfInfoModificationRequest + + This attribute shall be present if this data type is returned + in a response to reading an individual resource, and may + be present according to the chosen attribute selector + parameter if this data type is returned in a response to a + query of a container resource. + in: body + required: false + type: object +operation_state: + description: | + The state of the LCM operation. + in: body + required: true + type: string +parent_cp_config_id: + description: | + Value of the key that identifies the "VnfExtCpConfig" map + entry which corresponds to the parent port of the trunk. + Only present in "VnfExtCpConfig" structures that provide + configuration information for a CP which represents a + sub-port in a trunk, and if parent ports are supported. + in: body + required: false + type: string +resource_changes: + description: | + This attribute contains information about the cumulative + changes to virtualised resources that were performed so + far by the LCM operation since its start, if applicable. + in: body + required: false + type: object +resource_handle: + description: | + Reference to the resource realizing this VL. + in: body + required: true + type: object +resource_handle_resource_id: + description: | + Identifier of the resource in the scope of the VIM or the resource + provider. + in: body + required: true + type: string +resource_handle_vim_level_resource_type: + description: | + Type of the resource in the scope of the VIM or the resource provider. + in: body + required: false + type: string +resource_provider_id: + description: | + Identifies the entity responsible for the management of + this resource. + This attribute shall only be supported and present if + VNF-related resource management in indirect mode is + applicable. + in: body + required: false + type: string +segmentation_id: + description: | + Identification of the network segment to which + the Cp instance connects to. + in: body + required: false + type: string +start_time: + description: | + Date-time of the start of the operation. + in: body + required: true + type: string +state_entered_time: + description: | + Date-time when the current state has been entered. + in: body + required: true + type: string +subnet_id: + description: | + Subnet defined by the identifier of the subnet resource in the VIM. + In case this attribute is present, IP addresses from that subnet will be + assigned; otherwise, IP addresses not bound to a subnet will be assigned. + in: body + required: false + type: string +subscription_id_response: + description: | + Identifier of this subscription resource. + in: body + required: true + type: string +termination_type: + description: | + Indicates whether forceful or graceful termination is requested. + Permitted values: + + FORCEFUL: The VNFM will shut down the VNF and release the resources + immediately after accepting the request. + + GRACEFUL: The VNFM will first arrange to take the VNF out of service + after accepting the request. Once the operation of taking the VNF out of + service finishes (irrespective of whether it has succeeded or failed) or + once the timer value specified in the "gracefulTerminationTimeout" + attribute expires, the VNFM will shut down the VNF and release the + resources. + in: body + required: true + type: enum +verbosity: + description: | + This attribute signals the requested verbosity of + LCM operation occurrence notifications. If it is not + present, it shall default to the value "FULL". + in: body + required: true + type: enum +vim_connection_id: + description: | + Identifier of the VIM connection to manage the resource. + This attribute shall only be supported and present if VNF related + resource management in direct mode is applicable. + in: body + required: false + type: string +vim_connection_info_access_info: + description: | + Authentication credentials for accessing the VIM, and other access-related + information such as tenants or infrastructure resource groups (see note). + The applicable keys are dependent on the content of vimType. + + If the VimConnectionInfo structure is part of an HTTP response payload + body, sensitive attributes that are children of this attributes + (such as passwords) shall not be included. + + If the VimConnectionInfo structure is part of an HTTP request payload + body, sensitive attributes that are children of this attribute (such as + passwords) shall be present if they have not been provisioned out of band. + in: body + required: false + type: key value pairs +vim_connection_info_extra: + description: | + VIM type specific additional information. The applicable + structure, and whether or not this attribute is available, is + dependent on the content of vimType. + in: body + required: false + type: key value pairs +vim_connection_info_interface_info: + description: | + Information about the interface or interfaces to the VIM, if + applicable, such as the URI of an interface endpoint to + communicate with the VIM. The applicable keys are + dependent on the content of vimType. + + Alternatively, such information may have been configured + into the VNFM and bound to the vimId. + in: body + required: false + type: key value pairs +vim_connection_info_vim_id: + description: | + The identifier of the VIM instance. This identifier is managed by + the NFVO. + + Shall be present to address additional information about the VIM + if such information has been configured into the VNFM by means outside + the scope of the present document, and should be absent otherwise. + in: body + required: false + type: string +vim_connection_info_vim_type: + description: | + Discriminator for the different types of the VIM information. + + The value of this attribute determines the structure of the + "interfaceInfo" and "accessInfo" attributes, based on the type of the VIM. + + The set of permitted values is expected to change over time as new + types or versions of VIMs become available. + in: body + required: false + type: string +virtual_storage_resource_info: + description: | + Information about the virtualised storage resources used as storage for + the VNF instance. + in: body + required: false + type: array +virtual_storage_resource_info_id: + description: | + Identifier of this VirtualStorageResourceInfo instance. + in: body + required: true + type: string +virtual_storage_resource_info_storage_resource: + description: | + Reference to the VirtualStorage resource. + in: body + required: true + type: object +virtual_storage_resource_info_virtual_storage_desc_id: + description: | + Identifier of the VirtualStorageDesc in the VNFD. + in: body + required: true + type: string +vnf_instance_additional_params: + description: | + Additional input parameters for the flavour change + process, specific to the VNF being modified, as declared + in the VNFD as part of "ChangeVnfFlavourOpConfig". + in: body + required: false + type: key value pairs +vnf_instance_create_request_description: + description: | + Human-readable description of the VNF instance to be created. + in: body + required: false + type: string +vnf_instance_create_request_metadata: + description: | + This attribute provides values for the "metadata" attribute in "VnfInstance". + in: body + required: false + type: key value pairs +vnf_instance_create_request_name: + description: | + Human-readable name of the VNF instance to be created. + in: body + required: false + type: string +vnf_instance_create_request_vnfd_id: + description: | + Identifier that identifies the VNFD which defines the VNF instance to be created. + in: body + required: true + type: string +vnf_instance_description: + description: | + Human-readable description of the VNF instance. + in: body + required: false + type: string +vnf_instance_extensions: + description: | + description + in: body + required: false + type: key value pairs +vnf_instance_id_response: + description: | + Identifier of the VNF instance. + in: body + required: true + type: string +vnf_instance_ids: + description: | + If present, match VNF instances with an instance identifier listed + in this attribute. + in: body + required: false + type: array +vnf_instance_instantiation_state: + description: | + The instantiation state of the VNF instance. + + NOT_INSTANTIATED: The VNF instance is terminated or not instantiated. + + INSTANTIATED: The VNF instance is instantiated. + in: body + required: true + type: string +vnf_instance_links: + description: | + Links to resources related to this resource. + in: body + required: true + type: object +vnf_instance_metadata: + description: | + Additional VNF-specific attributes that provide metadata describing + the VNF instance. These attributes represent values that are stored + persistently in the VnfInstance structure for consumption by functional + blocks that invoke the VNF lifecycle management interface. They are not + consumed by the VNFM, or the lifecycle management scripts. + Modifying the values of these attributes has no effect on the VNF + instance, it only affects the information represented in the VnfInstance + structure. + in: body + required: false + type: key value pairs +vnf_instance_name: + description: | + Name of the VNF instance. + in: body + required: false + type: string +vnf_instance_names: + description: | + If present, match VNF instances with a VNF Instance Name listed + in this attribute. + in: body + required: false + type: array +vnf_instance_subscription_filter: + description: | + Filter criteria to select VNF instances + about which to notify. + in: body + required: false + type: object +vnf_instance_terminate_request_additional_params: + description: | + Additional parameters passed by the NFVO as input to + the termination process, specific to the VNF being + terminated, as declared in the VNFD as part of + "TerminateVnfOpConfig". + in: body + required: false + type: key value pairs +vnf_instance_vim_connection_info: + description: | + Information about VIM connections to be used for managing the resources + for the VNF instance, or refer to external / externally-managed virtual links. + + This attribute shall only be supported and may be present if VNF-related + resource management in direct mode is applicable. + in: body + required: false + type: map +vnf_instance_vnf_configurable_properties: + description: | + If present, this attribute provides modifications to + the values of the "vnfConfigurableProperties" + attribute in "VnfInstance". + Provisions for handling VNF configurable + properties during the operation, and needed + passed parameter values in case of conflicts. + in: body + required: false + type: key value pairs +vnf_instance_vnf_product_name: + description: | + Name to identify the VNF Product. The value is copied from the VNFD. + in: body + required: true + type: string +vnf_instance_vnf_provider: + description: | + Provider of the VNF and the VNFD. The value is copied from the VNFD. + in: body + required: true + type: string +vnf_instance_vnf_software_version: + description: | + Software version of the VNF. The value is copied from the VNFD. + in: body + required: true + type: string +vnf_instance_vnfd_id: + description: | + Identifier of the VNFD on which the VNF instance is based. + in: body + required: true + type: string +vnf_instance_vnfd_version: + description: | + Identifies the version of the VNFD. The value is copied from the VNFD. + in: body + required: true + type: string +vnf_lcm_op_occ_id_response: + description: | + Identifier of this VNF lifecycle management operation occurrence. + in: body + required: true + type: string +vnf_lcm_vnf_instance_id: + description: | + Identifier of the VNF instance to which the operation applies. + in: body + required: true + type: string +vnf_link_port_cp_instance_id: + description: | + When the link port is used for external connectivity by the VNF, this + attribute represents the identifier associated with this link port. + + When the link port is used for internal connectivity in the VNF, this + attribute represents the VNFC CP to be connected to this link port. + + Shall be present when the link port is used for external connectivity + by the VNF. + + May be present if used to reference a VNFC CP instance. + There shall be at most one link port associated with any external + connection point instance or internal connection point (i.e. VNFC CP) + instance. + + The value refers to an "extCpInfo" item in the VnfInstance or a + "vnfcCpInfo" item of a "vnfcResourceInfo" item in the VnfInstance. + in: body + required: false + type: string +vnf_link_port_cp_instance_type: + description: | + Type of the CP instance that is identified by cpInstanceId. + + Shall be present if "cpInstanceId" is present and shall + be absent otherwise. + + Permitted values: + + VNFC_CP: The link port is connected to a VNFC CP. + + EXT_CP: The link port is associated to an external CP. + in: body + required: false + type: enum +vnf_link_port_id: + description: | + Identifier of this link port as provided by the entity that has created + the link port. + in: body + required: true + type: string +vnf_link_port_ids: + description: | + Identifiers of the link ports of the affected VL + related to the change. Each identifier + references a "VnfLinkPortInfo" structure. + Shall be set when changeType is equal to + "LINK_PORT_ADDED" or + "LINK_PORT_REMOVED", and the related + "VnfLinkPortInfo" structures are present (case + "added") or have been present (case + "removed") in the "VnfVirtualLinkResourceInfo" + or "ExtManagedVirtualLinkInfo" structures that + are represented by the + "vnfVirtualLinkResourceInfo" or + "extManagedVirtualLinkInfo" attribute in the + "VnfInstance" structure. + in: body + required: false + type: string +vnf_link_port_resource_handle: + description: | + Reference to the virtualised network resource realizing this link port. + in: body + required: true + type: object +vnf_link_ports: + description: | + Links ports of this VL. + in: body + required: false + type: array +vnf_product_name: + description: | + Name of the VNF product to match. + in: body + required: true + type: string +vnf_product_versions: + description: | + If present, match VNF instances that belong to VNF products + with certain versions and a certain product name, from one + particular provider. + in: body + required: false + type: array +vnf_product_vnf_software_version: + description: | + Software version to match. + in: body + required: true + type: string +vnf_products: + description: | + If present, match VNF instances that belong to VNF products + with certain product names, from one particular provider. + in: body + required: false + type: array +vnf_products_from_providers: + description: | + If present, match VNF instances that belong to VNF products + from certain providers. + in: body + required: false + type: array +vnf_provider: + description: | + Name of the VNF provider to match. + in: body + required: true + type: string +vnf_state: + description: | + State of the VNF instance. + in: body + required: false + type: string +vnf_subscription_create_request_verbosity: + description: | + This attribute signals the requested verbosity of + LCM operation occurrence notifications. If it is not + present, it shall default to the value "FULL". + in: body + required: false + type: enum +vnf_virtual_link_desc_id: + description: | + The identifier of the VLD in the VNFD for this VL. + in: body + required: true + type: string +vnf_virtual_link_resource_info: + description: | + Information about the virtualised network + resources used by the VLs of the VNF instance. + in: body + required: false + type: array +vnf_virtual_link_resource_info_id: + description: | + Identifier of this VnfVirtualLinkResourceInfo instance. + in: body + required: true + type: string +vnf_virtual_link_resource_info_network_resource: + description: | + Reference to the VirtualNetwork resource. + in: body + required: true + type: object +vnf_virtual_link_resource_info_vnf_virtual_link_desc_id: + description: | + Identifier of the VNF Virtual Link Descriptor (VLD) in the + VNFD. + in: body + required: true + type: string +vnfc_cp_info_cpd_id: + description: | + Identifier of the VDU CPD, cpdId, in the VNFD. + in: body + required: true + type: string +vnfc_cp_info_id: + description: | + Identifier of this VNFC CP instance and the associated array entry. + in: body + required: true + type: string +vnfc_cp_info_vnf_ext_cp_id: + description: | + When the VNFC CP is exposed as external CP of the VNF, the + identifier of this external VNF CP. + in: body + required: false + type: string +vnfc_info: + description: | + Information about the VNFC instances. + in: body + required: array + type: string +vnfc_info_id: + description: | + Identifier of the VNFC instance. + in: body + required: true + type: string +vnfc_info_vdu_id: + description: | + Reference to the applicable VDU information element in the VNFD. + in: body + required: true + type: string +vnfc_info_vnfc_state: + description: | + State of the VNFC instance. + Permitted values: + + STARTED: The VNFC instance is up and running. + + STOPPED: The VNFC instance has been shut down. + in: body + required: true + type: string +vnfc_resource_info: + description: | + Information about the virtualised compute and storage resources used by + the VNFCs of the VNF instance. + in: body + required: false + type: array +vnfc_resource_info_compute_resource: + description: | + Reference to the VirtualCompute resource. + in: body + required: true + type: object +vnfc_resource_info_id: + description: | + Identifier of this VnfcResourceInfo instance. + in: body + required: true + type: string +vnfc_resource_info_vdu_id: + description: | + Reference to the applicable VDU in the VNFD. + in: body + required: true + type: string +vnfc_resource_info_vnfc_cp_info: + description: | + CPs of the VNFC instance. + Shall be present when that particular CP + of the VNFC instance is associated to an external CP of the VNF + instance. + May be present otherwise. + in: body + required: false + type: array +vnfd_ids: + description: | + If present, match VNF instances that were created based on a VNFD + identified by one of the vnfdId values listed in this attribute. + in: body + required: false + type: string +vnfd_versions: + description: | + If present, match VNF instances that belong to VNF products with + certain VNFD versions, a certain software version and a certain + product name, from one particular provider. + in: body + required: false + type: array diff --git a/api-ref/source/v2/samples/vnflcm/create-subscription-request.json b/api-ref/source/v2/samples/vnflcm/create-subscription-request.json new file mode 100644 index 000000000..b7882bb19 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/create-subscription-request.json @@ -0,0 +1,3 @@ +{ + "callbackUri": "http://127.0.0.1/" +} diff --git a/api-ref/source/v2/samples/vnflcm/create-subscription-response.json b/api-ref/source/v2/samples/vnflcm/create-subscription-response.json new file mode 100644 index 000000000..d6438ed3a --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/create-subscription-response.json @@ -0,0 +1,10 @@ +{ + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/subscriptions/084cf869-d787-4c1a-b43b-405a25ed98da" + } + }, + "callbackUri": "http://127.0.0.1/", + "id": "084cf869-d787-4c1a-b43b-405a25ed98da", + "verbosity": "FULL" +} diff --git a/api-ref/source/v2/samples/vnflcm/create-vnf-instance-request.json b/api-ref/source/v2/samples/vnflcm/create-vnf-instance-request.json new file mode 100644 index 000000000..e0b0080d5 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/create-vnf-instance-request.json @@ -0,0 +1,5 @@ +{ + "vnfInstanceDescription": "test sample1", + "vnfInstanceName": "sample1", + "vnfdId": "da459819-a2eb-442b-b9a2-0c1c02466baf" +} diff --git a/api-ref/source/v2/samples/vnflcm/create-vnf-instance-response.json b/api-ref/source/v2/samples/vnflcm/create-vnf-instance-response.json new file mode 100644 index 000000000..2c2d6a93c --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/create-vnf-instance-response.json @@ -0,0 +1,22 @@ +{ + "_links": { + "instantiate": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/99e2bae9-45d3-4ca1-83f4-34d44ca25bee/instantiate" + }, + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/99e2bae9-45d3-4ca1-83f4-34d44ca25bee" + } + }, + "extensions": {}, + "id": "99e2bae9-45d3-4ca1-83f4-34d44ca25bee", + "instantiationState": "NOT_INSTANTIATED", + "metadata": {}, + "vnfConfigurableProperties": {}, + "vnfInstanceDescription": "test sample1", + "vnfInstanceName": "sample1", + "vnfProductName": "Sample VNF", + "vnfProvider": "Company", + "vnfSoftwareVersion": "1.0", + "vnfdId": "da459819-a2eb-442b-b9a2-0c1c02466baf", + "vnfdVersion": "1.0" +} diff --git a/api-ref/source/v2/samples/vnflcm/instantiate-vnf-instance-request.json b/api-ref/source/v2/samples/vnflcm/instantiate-vnf-instance-request.json new file mode 100644 index 000000000..18d3e2cb8 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/instantiate-vnf-instance-request.json @@ -0,0 +1,128 @@ +{ + "extManagedVirtualLinks": [ + { + "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", + "resourceId": "11f8a056-0495-4ca6-8de9-94402604663f", + "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.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "id": "b0b2f836-a275-4374-834e-ed336a563b1e", + "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d" + }, + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "id": "6766a8d4-cad1-43f1-b0cb-ce0ef9267661", + "resourceId": "5af7e28a-e744-4b4f-a1a4-c7d0f7d93cd7" + } + ], + "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": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + } +} diff --git a/api-ref/source/v2/samples/vnflcm/list-subscription-response.json b/api-ref/source/v2/samples/vnflcm/list-subscription-response.json new file mode 100644 index 000000000..bcf02ea5e --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/list-subscription-response.json @@ -0,0 +1,12 @@ +[ + { + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/subscriptions/cd87e3d6-9bbe-4ad1-bb21-0f5c3e4e777d" + } + }, + "callbackUri": "http://127.0.0.1/", + "id": "cd87e3d6-9bbe-4ad1-bb21-0f5c3e4e777d", + "verbosity": "FULL" + } +] diff --git a/api-ref/source/v2/samples/vnflcm/list-vnf-instance-response.json b/api-ref/source/v2/samples/vnflcm/list-vnf-instance-response.json new file mode 100644 index 000000000..e90bea971 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/list-vnf-instance-response.json @@ -0,0 +1,473 @@ +[ + { + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/99e2bae9-45d3-4ca1-83f4-34d44ca25bee" + }, + "terminate": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/99e2bae9-45d3-4ca1-83f4-34d44ca25bee/terminate" + } + }, + "extensions": {}, + "id": "99e2bae9-45d3-4ca1-83f4-34d44ca25bee", + "instantiatedVnfInfo": { + "extCpInfo": [ + { + "associatedVnfcCpId": "f52ba062-48fc-4ff1-bad0-e3a5b29d50bd", + "cpConfigId": "VDU2_CP2_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "addresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU2_CP2", + "extLinkPortId": "c9008244-6561-49cf-a9a3-6218034e6b02", + "id": "ef2c2ee9-6cdb-4d68-b091-b8a4babdced5" + }, + { + "associatedVnfcCpId": "30711c7a-f02b-4ae5-ac9f-eb61828e0f5e", + "cpConfigId": "VDU2_CP1_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "addresses": [ + "10.10.0.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU2_CP1", + "extLinkPortId": "c19db045-8526-4d2d-8daf-819905f9b3fb", + "id": "96d97d70-c431-4a78-8072-42a974d525aa" + }, + { + "associatedVnfcCpId": "bdf62eb2-c2cb-4a11-84b7-eda2526c8d11", + "cpConfigId": "VDU1_CP1_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "isDynamic": true, + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU1_CP1", + "extLinkPortId": "51043a84-78f4-4bbe-832d-a7fcfbd3cb23", + "id": "2c3a08c9-ab43-4bb8-a4b9-b1d9c2c6ff94" + }, + { + "associatedVnfcCpId": "1cb04dd2-3a28-4be5-8b87-74a21fbb62dc", + "cpConfigId": "VDU1_CP2_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "isDynamic": true, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU1_CP2", + "extLinkPortId": "f190426f-63a7-42a5-ad12-44c6bc464f13", + "id": "f8428c7d-2268-40f9-9bea-fa9539d118be" + } + ], + "extManagedVirtualLinkInfo": [ + { + "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", + "networkResource": { + "resourceId": "11f8a056-0495-4ca6-8de9-94402604663f" + }, + "vnfLinkPorts": [ + { + "cpInstanceId": "1c55be13-988f-4499-a8e5-3a9f2d0d3913", + "cpInstanceType": "VNFC_CP", + "id": "b8b0430e-169c-442a-9c48-8fb8c4c3db4d", + "resourceHandle": { + "resourceId": "7fe18c76-85eb-4e90-ba95-df6e6bad2cd6", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "ab497ce5-b57e-48d1-8bc1-8f58eac6b45d", + "cpInstanceType": "VNFC_CP", + "id": "2950622a-ded8-4160-88dc-2bf0f02529dd", + "resourceHandle": { + "resourceId": "07dc4096-49c7-478d-986a-fd132efd573a", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "vnfVirtualLinkDescId": "internalVL1" + } + ], + "extVirtualLinkInfo": [ + { + "currentVnfExtCpData": [ + { + "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.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "extLinkPorts": [ + { + "cpInstanceId": "96d97d70-c431-4a78-8072-42a974d525aa", + "id": "c19db045-8526-4d2d-8daf-819905f9b3fb", + "resourceHandle": { + "resourceId": "c1f49f87-37ff-437b-84a0-91a346fdec55", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "2c3a08c9-ab43-4bb8-a4b9-b1d9c2c6ff94", + "id": "51043a84-78f4-4bbe-832d-a7fcfbd3cb23", + "resourceHandle": { + "resourceId": "88bc7eee-0893-4892-b0d3-d58d1c2293a8", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "id": "b0b2f836-a275-4374-834e-ed336a563b1e", + "resourceHandle": { + "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d" + } + }, + { + "currentVnfExtCpData": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "extLinkPorts": [ + { + "cpInstanceId": "ef2c2ee9-6cdb-4d68-b091-b8a4babdced5", + "id": "c9008244-6561-49cf-a9a3-6218034e6b02", + "resourceHandle": { + "resourceId": "3c89dfce-2039-41ad-a60b-6be6488bbca6", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "f8428c7d-2268-40f9-9bea-fa9539d118be", + "id": "f190426f-63a7-42a5-ad12-44c6bc464f13", + "resourceHandle": { + "resourceId": "a0db5863-e420-4191-a2bb-c8536b091bda", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "id": "6766a8d4-cad1-43f1-b0cb-ce0ef9267661", + "resourceHandle": { + "resourceId": "5af7e28a-e744-4b4f-a1a4-c7d0f7d93cd7" + } + } + ], + "flavourId": "simple", + "virtualStorageResourceInfo": [ + { + "id": "0357ecab-bdd8-403f-a91b-b80f287b536f", + "storageResource": { + "resourceId": "0ea498c7-a740-4b16-b8fd-93dbd5d8ee7d", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Cinder::Volume" + }, + "virtualStorageDescId": "VirtualStorage" + } + ], + "vnfState": "STARTED", + "vnfVirtualLinkResourceInfo": [ + { + "id": "e651053a-e17e-47e3-9665-6ec028873040", + "networkResource": { + "resourceId": "98d5c67b-c7f8-4293-890c-011184b6574b", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPorts": [ + { + "cpInstanceId": "b1cab6ba-c571-4fbf-80fd-f8e67b9fbf68", + "cpInstanceType": "VNFC_CP", + "id": "d5ec9027-dba4-4b53-be4a-7bbad1ab9f51", + "resourceHandle": { + "resourceId": "42fe1697-30a7-4a79-8547-71de0c43c8b5", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "f495eec3-1420-467c-b126-19abf8396e11", + "cpInstanceType": "VNFC_CP", + "id": "a5f21c6d-3ba4-4843-b3cc-cc4c8b37be72", + "resourceHandle": { + "resourceId": "5bd09199-1409-46b1-9cd4-191e3fb7c9cb", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "vnfVirtualLinkDescId": "internalVL2" + }, + { + "id": "5efa5ab4-4237-4b41-9e39-7f4565992acc", + "networkResource": { + "resourceId": "be459310-e24d-4430-a0b9-b9ad391f4e5e", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPorts": [ + { + "cpInstanceId": "e8111f5b-a713-4f40-a64d-fab56d038487", + "cpInstanceType": "VNFC_CP", + "id": "c02a75f8-a809-49c6-b6dc-bbda31928ef0", + "resourceHandle": { + "resourceId": "86c5a181-4232-4937-ba73-5c494f0d267a", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "16686d29-8491-41f8-8f2c-6d091f83592f", + "cpInstanceType": "VNFC_CP", + "id": "bfb260e7-cfdd-45ee-8fb9-64f51d8c2064", + "resourceHandle": { + "resourceId": "de311602-f52b-44a7-af11-15b97ca28beb", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "vnfVirtualLinkDescId": "internalVL3" + } + ], + "vnfcInfo": [ + { + "id": "12e3f94b-8177-4621-8476-f9af72dddcaa", + "vduId": "VDU2", + "vnfcResourceInfoId": "d0c3f928-adca-4c9b-aaa3-1a8b43a9460d", + "vnfcState": "STARTED" + }, + { + "id": "7ba99664-517a-45bd-b69c-7375018a2e2e", + "vduId": "VDU1", + "vnfcResourceInfoId": "60d4ffe7-275c-458d-9f40-0a7b43f895fd", + "vnfcState": "STARTED" + } + ], + "vnfcResourceInfo": [ + { + "computeResource": { + "resourceId": "edda96a2-b4c2-48ca-a06f-31976f9d9653", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "d0c3f928-adca-4c9b-aaa3-1a8b43a9460d", + "vduId": "VDU2", + "vnfcCpInfo": [ + { + "cpdId": "VDU2_CP1", + "id": "30711c7a-f02b-4ae5-ac9f-eb61828e0f5e", + "vnfExtCpId": "96d97d70-c431-4a78-8072-42a974d525aa" + }, + { + "cpdId": "VDU2_CP2", + "id": "f52ba062-48fc-4ff1-bad0-e3a5b29d50bd", + "vnfExtCpId": "ef2c2ee9-6cdb-4d68-b091-b8a4babdced5" + }, + { + "cpdId": "VDU2_CP3", + "id": "1c55be13-988f-4499-a8e5-3a9f2d0d3913", + "vnfLinkPortId": "b8b0430e-169c-442a-9c48-8fb8c4c3db4d" + }, + { + "cpdId": "VDU2_CP4", + "id": "b1cab6ba-c571-4fbf-80fd-f8e67b9fbf68", + "vnfLinkPortId": "d5ec9027-dba4-4b53-be4a-7bbad1ab9f51" + }, + { + "cpdId": "VDU2_CP5", + "id": "e8111f5b-a713-4f40-a64d-fab56d038487", + "vnfLinkPortId": "c02a75f8-a809-49c6-b6dc-bbda31928ef0" + } + ] + }, + { + "computeResource": { + "resourceId": "66a84389-8234-4394-929f-68e0ea77fde1", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "60d4ffe7-275c-458d-9f40-0a7b43f895fd", + "storageResourceIds": [ + "0357ecab-bdd8-403f-a91b-b80f287b536f" + ], + "vduId": "VDU1", + "vnfcCpInfo": [ + { + "cpdId": "VDU1_CP1", + "id": "bdf62eb2-c2cb-4a11-84b7-eda2526c8d11", + "vnfExtCpId": "2c3a08c9-ab43-4bb8-a4b9-b1d9c2c6ff94" + }, + { + "cpdId": "VDU1_CP2", + "id": "1cb04dd2-3a28-4be5-8b87-74a21fbb62dc", + "vnfExtCpId": "f8428c7d-2268-40f9-9bea-fa9539d118be" + }, + { + "cpdId": "VDU1_CP3", + "id": "ab497ce5-b57e-48d1-8bc1-8f58eac6b45d", + "vnfLinkPortId": "2950622a-ded8-4160-88dc-2bf0f02529dd" + }, + { + "cpdId": "VDU1_CP4", + "id": "f495eec3-1420-467c-b126-19abf8396e11", + "vnfLinkPortId": "a5f21c6d-3ba4-4843-b3cc-cc4c8b37be72" + }, + { + "cpdId": "VDU1_CP5", + "id": "16686d29-8491-41f8-8f2c-6d091f83592f", + "vnfLinkPortId": "bfb260e7-cfdd-45ee-8fb9-64f51d8c2064" + } + ] + } + ] + }, + "instantiationState": "INSTANTIATED", + "metadata": {}, + "vimConnectionInfo": { + "vim1": { + "accessInfo": { + "project": "nfv", + "projectDomain": "Default", + "region": "RegionOne", + "userDomain": "Default", + "username": "nfv_user" + }, + "interfaceInfo": { + "endpoint": "http://localhost/identity/v3" + }, + "vimId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + }, + "vnfConfigurableProperties": {}, + "vnfInstanceDescription": "test sample1", + "vnfInstanceName": "sample1", + "vnfProductName": "Sample VNF", + "vnfProvider": "Company", + "vnfSoftwareVersion": "1.0", + "vnfdId": "da459819-a2eb-442b-b9a2-0c1c02466baf", + "vnfdVersion": "1.0" + } +] 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 new file mode 100644 index 000000000..e7cdb59b0 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/list-vnflcm-operation-occurrence-response.json @@ -0,0 +1,232 @@ + +[ + { + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5" + }, + "vnfInstance": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/e00f0d64-d7a3-459b-8a51-b402d5344296" + } + }, + "id": "a790879c-05f9-4475-9c90-1677452d3eb5", + "isAutomaticInvocation": false, + "isCancelPending": false, + "operation": "INSTANTIATE", + "operationParams": { + "extManagedVirtualLinks": [ + { + "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", + "resourceId": "11f8a056-0495-4ca6-8de9-94402604663f", + "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.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "id": "b0b2f836-a275-4374-834e-ed336a563b1e", + "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d" + }, + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "id": "6766a8d4-cad1-43f1-b0cb-ce0ef9267661", + "resourceId": "5af7e28a-e744-4b4f-a1a4-c7d0f7d93cd7" + } + ], + "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": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + } + }, + "operationState": "COMPLETED", + "resourceChanges": { + "affectedVirtualLinks": [ + { + "changeType": "ADDED", + "id": "74411165-b969-4539-99a9-3ffdbc8b1ae7", + "networkResource": { + "resourceId": "5f4cc2e3-7bce-4e90-ad1a-0d43812a4af5", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPortIds": [ + "5cf5bba1-3481-4233-a42f-98284c91b6a4", + "68f63717-9e01-4e4e-a3f4-c64e6e0f7a49" + ], + "vnfVirtualLinkDescId": "internalVL2" + }, + { + "changeType": "ADDED", + "id": "5b696739-1a38-4df2-8f95-f3826fc3b0b7", + "networkResource": { + "resourceId": "349a4dbb-41e9-4db9-b044-0653507b9728", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPortIds": [ + "474caf76-c227-4b84-9aa8-bb9814488917", + "9fe46983-9497-4377-a959-765734ef7871" + ], + "vnfVirtualLinkDescId": "internalVL3" + } + ], + "affectedVirtualStorages": [ + { + "changeType": "ADDED", + "id": "359a20f2-2c66-49b4-bc4e-3cf673513688", + "storageResource": { + "resourceId": "496a70a0-c9df-43ce-8e49-3c708583eef0", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Cinder::Volume" + }, + "virtualStorageDescId": "VirtualStorage" + } + ], + "affectedVnfcs": [ + { + "affectedVnfcCpIds": [ + "e3ba03a1-f8a6-4468-ab97-0e24a8c5ad37", + "e23bf017-6979-48a1-805b-ed459eb78071", + "33a8397b-7f0c-4db7-85eb-8d8c19a35f9e", + "7e9e3e7e-5ba5-4f12-ba1c-fa865719391f", + "bf741bec-5294-4ae6-9486-51a1ebdb3ad7" + ], + "changeType": "ADDED", + "computeResource": { + "resourceId": "7fceb009-ed81-4b95-ad4d-8487870cac48", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "c4453bf6-d185-4d4f-9e6b-fb745bf21229", + "vduId": "VDU2" + }, + { + "addedStorageResourceIds": [ + "359a20f2-2c66-49b4-bc4e-3cf673513688" + ], + "affectedVnfcCpIds": [ + "5c0b46c4-3e08-4397-bbab-89bc196b5abd", + "c3efc6e9-1abc-407c-8421-101730cd8204", + "26847d0b-a64a-4c28-90db-25ed3d101741", + "b1647921-08b2-4cfa-a553-ebf333e602e4", + "29125d8c-d84e-4055-a76a-beed1912bca3" + ], + "changeType": "ADDED", + "computeResource": { + "resourceId": "2f0f1954-0b5f-48a6-8591-f05ca2c3c74e", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "795985f6-f2c1-4a32-b318-6ac424ddf2bf", + "vduId": "VDU1" + } + ] + }, + "startTime": "2021-09-06T07:07:15Z", + "stateEnteredTime": "2021-09-06T07:07:15Z", + "vnfInstanceId": "e00f0d64-d7a3-459b-8a51-b402d5344296" + } +] diff --git a/api-ref/source/v2/samples/vnflcm/show-subscription-response.json b/api-ref/source/v2/samples/vnflcm/show-subscription-response.json new file mode 100644 index 000000000..e8be5d3b8 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/show-subscription-response.json @@ -0,0 +1,10 @@ +{ + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/subscriptions/cd87e3d6-9bbe-4ad1-bb21-0f5c3e4e777d" + } + }, + "callbackUri": "http://127.0.0.1/", + "id": "cd87e3d6-9bbe-4ad1-bb21-0f5c3e4e777d", + "verbosity": "FULL" +} diff --git a/api-ref/source/v2/samples/vnflcm/show-vnf-instance-response.json b/api-ref/source/v2/samples/vnflcm/show-vnf-instance-response.json new file mode 100644 index 000000000..c95cfbd72 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/show-vnf-instance-response.json @@ -0,0 +1,471 @@ +{ + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/99e2bae9-45d3-4ca1-83f4-34d44ca25bee" + }, + "terminate": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/99e2bae9-45d3-4ca1-83f4-34d44ca25bee/terminate" + } + }, + "extensions": {}, + "id": "99e2bae9-45d3-4ca1-83f4-34d44ca25bee", + "instantiatedVnfInfo": { + "extCpInfo": [ + { + "associatedVnfcCpId": "f52ba062-48fc-4ff1-bad0-e3a5b29d50bd", + "cpConfigId": "VDU2_CP2_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "addresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU2_CP2", + "extLinkPortId": "c9008244-6561-49cf-a9a3-6218034e6b02", + "id": "ef2c2ee9-6cdb-4d68-b091-b8a4babdced5" + }, + { + "associatedVnfcCpId": "30711c7a-f02b-4ae5-ac9f-eb61828e0f5e", + "cpConfigId": "VDU2_CP1_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "addresses": [ + "10.10.0.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU2_CP1", + "extLinkPortId": "c19db045-8526-4d2d-8daf-819905f9b3fb", + "id": "96d97d70-c431-4a78-8072-42a974d525aa" + }, + { + "associatedVnfcCpId": "bdf62eb2-c2cb-4a11-84b7-eda2526c8d11", + "cpConfigId": "VDU1_CP1_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "isDynamic": true, + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU1_CP1", + "extLinkPortId": "51043a84-78f4-4bbe-832d-a7fcfbd3cb23", + "id": "2c3a08c9-ab43-4bb8-a4b9-b1d9c2c6ff94" + }, + { + "associatedVnfcCpId": "1cb04dd2-3a28-4be5-8b87-74a21fbb62dc", + "cpConfigId": "VDU1_CP2_1", + "cpProtocolInfo": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "isDynamic": true, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ], + "cpdId": "VDU1_CP2", + "extLinkPortId": "f190426f-63a7-42a5-ad12-44c6bc464f13", + "id": "f8428c7d-2268-40f9-9bea-fa9539d118be" + } + ], + "extManagedVirtualLinkInfo": [ + { + "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", + "networkResource": { + "resourceId": "11f8a056-0495-4ca6-8de9-94402604663f" + }, + "vnfLinkPorts": [ + { + "cpInstanceId": "1c55be13-988f-4499-a8e5-3a9f2d0d3913", + "cpInstanceType": "VNFC_CP", + "id": "b8b0430e-169c-442a-9c48-8fb8c4c3db4d", + "resourceHandle": { + "resourceId": "7fe18c76-85eb-4e90-ba95-df6e6bad2cd6", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "ab497ce5-b57e-48d1-8bc1-8f58eac6b45d", + "cpInstanceType": "VNFC_CP", + "id": "2950622a-ded8-4160-88dc-2bf0f02529dd", + "resourceHandle": { + "resourceId": "07dc4096-49c7-478d-986a-fd132efd573a", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "vnfVirtualLinkDescId": "internalVL1" + } + ], + "extVirtualLinkInfo": [ + { + "currentVnfExtCpData": [ + { + "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.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "extLinkPorts": [ + { + "cpInstanceId": "96d97d70-c431-4a78-8072-42a974d525aa", + "id": "c19db045-8526-4d2d-8daf-819905f9b3fb", + "resourceHandle": { + "resourceId": "c1f49f87-37ff-437b-84a0-91a346fdec55", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "2c3a08c9-ab43-4bb8-a4b9-b1d9c2c6ff94", + "id": "51043a84-78f4-4bbe-832d-a7fcfbd3cb23", + "resourceHandle": { + "resourceId": "88bc7eee-0893-4892-b0d3-d58d1c2293a8", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "id": "b0b2f836-a275-4374-834e-ed336a563b1e", + "resourceHandle": { + "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d" + } + }, + { + "currentVnfExtCpData": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "extLinkPorts": [ + { + "cpInstanceId": "ef2c2ee9-6cdb-4d68-b091-b8a4babdced5", + "id": "c9008244-6561-49cf-a9a3-6218034e6b02", + "resourceHandle": { + "resourceId": "3c89dfce-2039-41ad-a60b-6be6488bbca6", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "f8428c7d-2268-40f9-9bea-fa9539d118be", + "id": "f190426f-63a7-42a5-ad12-44c6bc464f13", + "resourceHandle": { + "resourceId": "a0db5863-e420-4191-a2bb-c8536b091bda", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "id": "6766a8d4-cad1-43f1-b0cb-ce0ef9267661", + "resourceHandle": { + "resourceId": "5af7e28a-e744-4b4f-a1a4-c7d0f7d93cd7" + } + } + ], + "flavourId": "simple", + "virtualStorageResourceInfo": [ + { + "id": "0357ecab-bdd8-403f-a91b-b80f287b536f", + "storageResource": { + "resourceId": "0ea498c7-a740-4b16-b8fd-93dbd5d8ee7d", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Cinder::Volume" + }, + "virtualStorageDescId": "VirtualStorage" + } + ], + "vnfState": "STARTED", + "vnfVirtualLinkResourceInfo": [ + { + "id": "e651053a-e17e-47e3-9665-6ec028873040", + "networkResource": { + "resourceId": "98d5c67b-c7f8-4293-890c-011184b6574b", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPorts": [ + { + "cpInstanceId": "b1cab6ba-c571-4fbf-80fd-f8e67b9fbf68", + "cpInstanceType": "VNFC_CP", + "id": "d5ec9027-dba4-4b53-be4a-7bbad1ab9f51", + "resourceHandle": { + "resourceId": "42fe1697-30a7-4a79-8547-71de0c43c8b5", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "f495eec3-1420-467c-b126-19abf8396e11", + "cpInstanceType": "VNFC_CP", + "id": "a5f21c6d-3ba4-4843-b3cc-cc4c8b37be72", + "resourceHandle": { + "resourceId": "5bd09199-1409-46b1-9cd4-191e3fb7c9cb", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "vnfVirtualLinkDescId": "internalVL2" + }, + { + "id": "5efa5ab4-4237-4b41-9e39-7f4565992acc", + "networkResource": { + "resourceId": "be459310-e24d-4430-a0b9-b9ad391f4e5e", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPorts": [ + { + "cpInstanceId": "e8111f5b-a713-4f40-a64d-fab56d038487", + "cpInstanceType": "VNFC_CP", + "id": "c02a75f8-a809-49c6-b6dc-bbda31928ef0", + "resourceHandle": { + "resourceId": "86c5a181-4232-4937-ba73-5c494f0d267a", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + }, + { + "cpInstanceId": "16686d29-8491-41f8-8f2c-6d091f83592f", + "cpInstanceType": "VNFC_CP", + "id": "bfb260e7-cfdd-45ee-8fb9-64f51d8c2064", + "resourceHandle": { + "resourceId": "de311602-f52b-44a7-af11-15b97ca28beb", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Port" + } + } + ], + "vnfVirtualLinkDescId": "internalVL3" + } + ], + "vnfcInfo": [ + { + "id": "12e3f94b-8177-4621-8476-f9af72dddcaa", + "vduId": "VDU2", + "vnfcResourceInfoId": "d0c3f928-adca-4c9b-aaa3-1a8b43a9460d", + "vnfcState": "STARTED" + }, + { + "id": "7ba99664-517a-45bd-b69c-7375018a2e2e", + "vduId": "VDU1", + "vnfcResourceInfoId": "60d4ffe7-275c-458d-9f40-0a7b43f895fd", + "vnfcState": "STARTED" + } + ], + "vnfcResourceInfo": [ + { + "computeResource": { + "resourceId": "edda96a2-b4c2-48ca-a06f-31976f9d9653", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "d0c3f928-adca-4c9b-aaa3-1a8b43a9460d", + "vduId": "VDU2", + "vnfcCpInfo": [ + { + "cpdId": "VDU2_CP1", + "id": "30711c7a-f02b-4ae5-ac9f-eb61828e0f5e", + "vnfExtCpId": "96d97d70-c431-4a78-8072-42a974d525aa" + }, + { + "cpdId": "VDU2_CP2", + "id": "f52ba062-48fc-4ff1-bad0-e3a5b29d50bd", + "vnfExtCpId": "ef2c2ee9-6cdb-4d68-b091-b8a4babdced5" + }, + { + "cpdId": "VDU2_CP3", + "id": "1c55be13-988f-4499-a8e5-3a9f2d0d3913", + "vnfLinkPortId": "b8b0430e-169c-442a-9c48-8fb8c4c3db4d" + }, + { + "cpdId": "VDU2_CP4", + "id": "b1cab6ba-c571-4fbf-80fd-f8e67b9fbf68", + "vnfLinkPortId": "d5ec9027-dba4-4b53-be4a-7bbad1ab9f51" + }, + { + "cpdId": "VDU2_CP5", + "id": "e8111f5b-a713-4f40-a64d-fab56d038487", + "vnfLinkPortId": "c02a75f8-a809-49c6-b6dc-bbda31928ef0" + } + ] + }, + { + "computeResource": { + "resourceId": "66a84389-8234-4394-929f-68e0ea77fde1", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "60d4ffe7-275c-458d-9f40-0a7b43f895fd", + "storageResourceIds": [ + "0357ecab-bdd8-403f-a91b-b80f287b536f" + ], + "vduId": "VDU1", + "vnfcCpInfo": [ + { + "cpdId": "VDU1_CP1", + "id": "bdf62eb2-c2cb-4a11-84b7-eda2526c8d11", + "vnfExtCpId": "2c3a08c9-ab43-4bb8-a4b9-b1d9c2c6ff94" + }, + { + "cpdId": "VDU1_CP2", + "id": "1cb04dd2-3a28-4be5-8b87-74a21fbb62dc", + "vnfExtCpId": "f8428c7d-2268-40f9-9bea-fa9539d118be" + }, + { + "cpdId": "VDU1_CP3", + "id": "ab497ce5-b57e-48d1-8bc1-8f58eac6b45d", + "vnfLinkPortId": "2950622a-ded8-4160-88dc-2bf0f02529dd" + }, + { + "cpdId": "VDU1_CP4", + "id": "f495eec3-1420-467c-b126-19abf8396e11", + "vnfLinkPortId": "a5f21c6d-3ba4-4843-b3cc-cc4c8b37be72" + }, + { + "cpdId": "VDU1_CP5", + "id": "16686d29-8491-41f8-8f2c-6d091f83592f", + "vnfLinkPortId": "bfb260e7-cfdd-45ee-8fb9-64f51d8c2064" + } + ] + } + ] + }, + "instantiationState": "INSTANTIATED", + "metadata": {}, + "vimConnectionInfo": { + "vim1": { + "accessInfo": { + "project": "nfv", + "projectDomain": "Default", + "region": "RegionOne", + "userDomain": "Default", + "username": "nfv_user" + }, + "interfaceInfo": { + "endpoint": "http://localhost/identity/v3" + }, + "vimId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + }, + "vnfConfigurableProperties": {}, + "vnfInstanceDescription": "test sample1", + "vnfInstanceName": "sample1", + "vnfProductName": "Sample VNF", + "vnfProvider": "Company", + "vnfSoftwareVersion": "1.0", + "vnfdId": "da459819-a2eb-442b-b9a2-0c1c02466baf", + "vnfdVersion": "1.0" +} 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 new file mode 100644 index 000000000..e37ca56c2 --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/show-vnflcm-operation-occurrence-response.json @@ -0,0 +1,229 @@ +{ + "_links": { + "self": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_lcm_op_occs/a790879c-05f9-4475-9c90-1677452d3eb5" + }, + "vnfInstance": { + "href": "http://127.0.0.1:9890/v2/vnflcm/vnf_instances/e00f0d64-d7a3-459b-8a51-b402d5344296" + } + }, + "id": "a790879c-05f9-4475-9c90-1677452d3eb5", + "isAutomaticInvocation": false, + "isCancelPending": false, + "operation": "INSTANTIATE", + "operationParams": { + "extManagedVirtualLinks": [ + { + "id": "7a6fe192-c34b-4029-937d-f1a2e7a00f5a", + "resourceId": "11f8a056-0495-4ca6-8de9-94402604663f", + "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.101" + ], + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP1" + } + ], + "id": "b0b2f836-a275-4374-834e-ed336a563b1e", + "resourceId": "1948231e-bbf0-4ff9-a692-40f8d6d5c90d" + }, + { + "extCps": [ + { + "cpConfig": { + "VDU1_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "numDynamicAddresses": 1, + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU1_CP2" + }, + { + "cpConfig": { + "VDU2_CP2_1": { + "cpProtocolData": [ + { + "ipOverEthernet": { + "ipAddresses": [ + { + "fixedAddresses": [ + "10.10.1.101" + ], + "subnetId": "1d4877ea-b810-4093-95de-bee62b2363f1", + "type": "IPV4" + } + ] + }, + "layerProtocol": "IP_OVER_ETHERNET" + } + ] + } + }, + "cpdId": "VDU2_CP2" + } + ], + "id": "6766a8d4-cad1-43f1-b0cb-ce0ef9267661", + "resourceId": "5af7e28a-e744-4b4f-a1a4-c7d0f7d93cd7" + } + ], + "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": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + } + }, + "operationState": "COMPLETED", + "resourceChanges": { + "affectedVirtualLinks": [ + { + "changeType": "ADDED", + "id": "74411165-b969-4539-99a9-3ffdbc8b1ae7", + "networkResource": { + "resourceId": "5f4cc2e3-7bce-4e90-ad1a-0d43812a4af5", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPortIds": [ + "5cf5bba1-3481-4233-a42f-98284c91b6a4", + "68f63717-9e01-4e4e-a3f4-c64e6e0f7a49" + ], + "vnfVirtualLinkDescId": "internalVL2" + }, + { + "changeType": "ADDED", + "id": "5b696739-1a38-4df2-8f95-f3826fc3b0b7", + "networkResource": { + "resourceId": "349a4dbb-41e9-4db9-b044-0653507b9728", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Neutron::Net" + }, + "vnfLinkPortIds": [ + "474caf76-c227-4b84-9aa8-bb9814488917", + "9fe46983-9497-4377-a959-765734ef7871" + ], + "vnfVirtualLinkDescId": "internalVL3" + } + ], + "affectedVirtualStorages": [ + { + "changeType": "ADDED", + "id": "359a20f2-2c66-49b4-bc4e-3cf673513688", + "storageResource": { + "resourceId": "496a70a0-c9df-43ce-8e49-3c708583eef0", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Cinder::Volume" + }, + "virtualStorageDescId": "VirtualStorage" + } + ], + "affectedVnfcs": [ + { + "affectedVnfcCpIds": [ + "e3ba03a1-f8a6-4468-ab97-0e24a8c5ad37", + "e23bf017-6979-48a1-805b-ed459eb78071", + "33a8397b-7f0c-4db7-85eb-8d8c19a35f9e", + "7e9e3e7e-5ba5-4f12-ba1c-fa865719391f", + "bf741bec-5294-4ae6-9486-51a1ebdb3ad7" + ], + "changeType": "ADDED", + "computeResource": { + "resourceId": "7fceb009-ed81-4b95-ad4d-8487870cac48", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "c4453bf6-d185-4d4f-9e6b-fb745bf21229", + "vduId": "VDU2" + }, + { + "addedStorageResourceIds": [ + "359a20f2-2c66-49b4-bc4e-3cf673513688" + ], + "affectedVnfcCpIds": [ + "5c0b46c4-3e08-4397-bbab-89bc196b5abd", + "c3efc6e9-1abc-407c-8421-101730cd8204", + "26847d0b-a64a-4c28-90db-25ed3d101741", + "b1647921-08b2-4cfa-a553-ebf333e602e4", + "29125d8c-d84e-4055-a76a-beed1912bca3" + ], + "changeType": "ADDED", + "computeResource": { + "resourceId": "2f0f1954-0b5f-48a6-8591-f05ca2c3c74e", + "vimConnectionId": "03e608b2-e7d4-44fa-bd84-74fb24be3ed5", + "vimLevelResourceType": "OS::Nova::Server" + }, + "id": "795985f6-f2c1-4a32-b318-6ac424ddf2bf", + "vduId": "VDU1" + } + ] + }, + "startTime": "2021-09-06T07:07:15Z", + "stateEnteredTime": "2021-09-06T07:07:15Z", + "vnfInstanceId": "e00f0d64-d7a3-459b-8a51-b402d5344296" +} diff --git a/api-ref/source/v2/samples/vnflcm/terminate-vnf-instance-request.json b/api-ref/source/v2/samples/vnflcm/terminate-vnf-instance-request.json new file mode 100644 index 000000000..afa4daa6a --- /dev/null +++ b/api-ref/source/v2/samples/vnflcm/terminate-vnf-instance-request.json @@ -0,0 +1,4 @@ +{ + "gracefulTerminationTimeout": 10, + "terminationType": "GRACEFUL" +} diff --git a/api-ref/source/v2/status.yaml b/api-ref/source/v2/status.yaml new file mode 100644 index 000000000..d1d2105b3 --- /dev/null +++ b/api-ref/source/v2/status.yaml @@ -0,0 +1,88 @@ +################# +# Success Codes # +################# +200: + default: | + Request was successful. +201: + default: | + Resource was created and is ready to use. +202: + default: | + Request was accepted for processing, but the processing has not been + completed. A 'location' header is included in the response which contains + a link to check the progress of the request. +204: + default: | + The server has fulfilled the request by deleting the resource. +206: + default: | + Partial Content, The server has fulfilled the partial GET request for the + resource. +300: + default: | + There are multiple choices for resources. The request has to be more + specific to successfully retrieve one of these resources. +302: + default: | + The response is about a redirection hint. The header of the response + usually contains a 'location' value where requesters can check to track + the real location of the resource. +303: + default: | + The server is redirecting the user agent to a different resource, as indicated + by a URI in the Location header field, which is intended to provide an indirect + response to the original request. + +################# +# Error Codes # +################# + +400: + default: | + Some content in the request was invalid. + resource_signal: | + The target resource doesn't support receiving a signal. +401: + default: | + User must authenticate before making a request. +403: + default: | + Policy does not allow current user to do this operation. +404: + default: | + The requested resource could not be found. +405: + default: | + Method is not valid for this endpoint. +406: + default: | + Not Acceptable, the requested resource is only capable of generating + content not acceptable according to the 'Accept' headers sent in the + request. +409: + default: | + This operation conflicted with another operation on this resource. + duplicate_zone: | + There is already a zone with this name. +416: + default: | + Requested Range Not Satisfiable, A server SHOULD return a response with + this status code if a request included a Range request-header field, + and none of the range-specifier values in this field overlap the current + extent of the selected resource, and the request did not include an + If-Range request-header field. +422: + default: | + The content type of the payload body is supported and the payload body of a + request contains syntactically correct data (e.g. well-formed JSON) but the data + cannot be processed (e.g. because it fails validation against a schema). +500: + default: | + Something went wrong inside the service. This should not happen usually. + If it does happen, it means the server has experienced some serious + problems. +503: + default: | + Service is not available. This is mostly caused by service configuration + errors which prevents the service from successful start up. diff --git a/api-ref/source/v2/vnflcm.inc b/api-ref/source/v2/vnflcm.inc new file mode 100644 index 000000000..937849bcc --- /dev/null +++ b/api-ref/source/v2/vnflcm.inc @@ -0,0 +1,939 @@ +.. -*- rst -*- + +===================================================================== +Virtualized Network Function Lifecycle Management Interface (VNF LCM) +===================================================================== + +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) +======================================== + +.. rest_method:: POST /vnflcm/v2/vnf_instances + +The POST method creates a new VNF instance resource. + +As the result of successfully executing this method, a new Individual VNF +instance resource shall have been created, and the value of the +instantiationState attribute in the representation of that resource shall be +NOT_INSTANTIATED. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 201 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + - 406 + - 422 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfdId: vnf_instance_create_request_vnfd_id + - vnfInstanceName: vnf_instance_create_request_name + - vnfInstanceDescription: vnf_instance_create_request_description + - metadata: vnf_instance_create_request_metadata + +Request Example +--------------- + +.. literalinclude:: samples/vnflcm/create-vnf-instance-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: vnf_instance_id_response + - vnfInstanceName: vnf_instance_name + - vnfInstanceDescription: vnf_instance_description + - vnfdId: vnf_instance_vnfd_id + - vnfProvider: vnf_instance_vnf_provider + - vnfProductName: vnf_instance_vnf_product_name + - vnfSoftwareVersion: vnf_instance_vnf_software_version + - vnfdVersion: vnf_instance_vnfd_version + - vnfConfigurableProperties: vnf_instance_vnf_configurable_properties + - instantiationState: vnf_instance_instantiation_state + - metadata: vnf_instance_metadata + - extensions: vnf_instance_extensions + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/create-vnf-instance-response.json + :language: javascript + +Instantiate a VNF instance (v2) +=============================== + +.. rest_method:: POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate + +The POST method instantiates a VNF instance. + +Once the VNFM has successfully completed the underlying VNF LCM operation +occurrence, it shall set the instantiationState attribute to the value +INSTANTIATED and the vnfState attribute to the value STARTED in the +representation of the Individual VNF instance resource. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 202 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + - 404 + - 406 + - 409 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfInstanceId: vnf_instance_id + - flavourId: flavour_id + - instantiationLevelId: instantiation_level_id + - extVirtualLinks: ext_virtual_links + - id: ext_virtual_links_id + - vimConnectionId: vim_connection_id + - resourceProviderId: resource_provider_id + - resourceId: ext_virtual_links_resource_id + - extCps: ext_cps + - cpdId: cpd_id + - cpConfig: cp_config + - parentCpConfigId: parent_cp_config_id + - linkPortId: link_port_id + - cpProtocolData: cp_protocol_data + - layerProtocol: layer_protocol + - ipOverEthernet: ip_over_ethernet + - macAddress: mac_address + - segmentationId: segmentation_id + - ipAddresses: ip_addresses + - type: ip_address_type + - fixedAddresses: fixed_addresses + - numDynamicAddresses: num_dynamic_addresses + - addressRange: address_range + - minAddress: min_address + - maxAddress: max_address + - subnetId: subnet_id + - extLinkPorts: ext_link_ports + - id: ext_link_port_id + - resourceHandle: ext_link_port_resource_handle + - vimConnectionId: vim_connection_id + - resourceProviderId: resource_provider_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - extManagedVirtualLinks: ext_managed_virtual_links + - id: ext_managed_virtual_link_data_id + - vnfVirtualLinkDescId: vnf_virtual_link_desc_id + - vimConnectionId: vim_connection_id + - resourceProviderId: resource_provider_id + - resourceId: ext_managed_virtual_link_data_resource_id + - vnfLinkPort: ext_managed_virtual_link_data_vnf_link_port + - vnfLinkPortId: vnf_link_port_id + - resourceHandle: vnf_link_port_resource_handle + - vimConnectionId: vim_connection_id + - resourceProviderId: resource_provider_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - extManagedMultisiteVirtualLinkId: ext_managed_multisite_virtual_link_id + - vimConnectionInfo: vnf_instance_vim_connection_info + - vimId: vim_connection_info_vim_id + - vimType: vim_connection_info_vim_type + - interfaceInfo: vim_connection_info_interface_info + - accessInfo: vim_connection_info_access_info + - extra: vim_connection_info_extra + - localizationLanguage: localizataion_language + - additionalParams: vnf_instance_additional_params + - extensions: vnf_instance_extensions + - vnfConfigurableProperties: vnf_instance_vnf_configurable_properties + + +Request Example +--------------- + +.. literalinclude:: samples/vnflcm/instantiate-vnf-instance-request.json + :language: javascript + +Terminate a VNF instance (v2) +============================= + +.. rest_method:: POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/terminate + +This task resource represents the "Terminate VNF" operation. The client can +use this resource to terminate a VNF instance. + +The POST method terminates a VNF instance. + +Once the VNFM has successfully completed the underlying VNF LCM operation +occurrence, it shall set the instantiationState attribute in the +representation of the Individual VNF instance resource to the value +NOT_INSTANTIATED. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 202 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + - 404 + - 406 + - 409 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfInstanceId: vnf_instance_id + - terminationType: termination_type + - gracefulTerminationTimeout: graceful_termination_timeout + - additionalParams: vnf_instance_terminate_request_additional_params + + +Request Example +--------------- + +.. literalinclude:: samples/vnflcm/terminate-vnf-instance-request.json + :language: javascript + + +Delete a VNF instance (v2) +========================== + +.. rest_method:: DELETE /vnflcm/v2/vnf_instances/{vnfInstanceId} + +This method deletes an "Individual VNF instance" resource. + +As the result of successfully executing this method, the +"Individual VNF instance" resource shall not exist any longer. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 204 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 406 + - 409 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfInstanceId: vnf_instance_id + +Show VNF Instance (v2) +====================== + +.. rest_method:: GET /vnflcm/v2/vnf_instances/{vnfInstanceId} + +Show information of given individual VNF instance. + +The GET method retrieves information about a VNF instance by reading +an "Individual VNF instance" resource. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 406 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - vnfInstanceId: vnf_instance_id + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: vnf_instance_id + - vnfInstanceName: vnf_instance_name + - vnfInstanceDescription: vnf_instance_description + - vnfdId: vnf_instance_vnfd_id + - vnfProvider: vnf_instance_vnf_provider + - vnfProductName: vnf_instance_vnf_product_name + - vnfSoftwareVersion: vnf_instance_vnf_software_version + - vnfdVersion: vnf_instance_vnfd_version + - vnfConfigurableProperties: vnf_instance_vnf_configurable_properties + - vimConnectionInfo: vnf_instance_vim_connection_info + - vimId: vim_connection_info_vim_id + - vimType: vim_connection_info_vim_type + - interfaceInfo: vim_connection_info_interface_info + - accessInfo: vim_connection_info_access_info + - instantiationState: vnf_instance_instantiation_state + - instantiatedVnfInfo: instantiated_vnf_info + - flavourId: flavour_id_response + - vnfState: vnf_state + - extCpInfo: ext_cp_info + - id: ext_cp_info_id + - cpdId: ext_cp_info_cpd_id + - cpConfigId: ext_cp_info_cp_config_id + - cpProtocolInfo: ext_cp_info_cp_protocol_info + - layerProtocol: layer_protocol_cp_info + - ipOverEthernet: ip_over_ethernet_cp_info + - ipAddresses: ip_addresses_cp_info + - type: ip_address_type + - addresses: fixed_addresses + - subnetId: subnet_id + - extLinkPortId: ext_cp_info_ext_link_port_id + - associatedVnfcCpId: ext_cp_info_associated_vnfc_cp_id + - extVirtualLinkInfo: ext_virtual_link_info + - id: ext_virtual_link_info_id + - resourceHandle: resource_handle + - resourceId: resource_handle_resource_id + - extLinkPorts: ext_virtual_link_info_ext_link_ports + - id: ext_virtual_link_info_ext_link_ports_id + - resourceHandle: resource_handle + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - cpInstanceId: ext_virtual_link_info_ext_link_ports_cp_instance_id + - currentVnfExtCpData: current_vnf_ext_cp_data + - cpdId: cpd_id + - cpConfig: cp_config + - cpProtocolData: cp_protocol_data + - layerProtocol: layer_protocol + - ipOverEthernet: ip_over_ethernet + - ipAddresses: ip_addresses + - type: ip_address_type + - numDynamicAddresses: num_dynamic_addresses + - extManagedVirtualLinkInfo: ext_managed_virtual_link_info + - id: ext_managed_virtual_link_info_id + - vnfVirtualLinkDescId: ext_managed_virtual_link_info_vnf_virtual_link_desc_id + - networkResource: ext_managed_virtual_link_info_network_resource + - resourceId: resource_handle_resource_id + - vnfLinkPorts: vnf_link_ports + - id: vnf_link_port_id + - resourceHandle: vnf_link_port_resource_handle + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - cpInstanceId: vnf_link_port_cp_instance_id + - cpInstanceType: vnf_link_port_cp_instance_type + - vnfcResourceInfo: vnfc_resource_info + - id: vnfc_resource_info_id + - vduId: vnfc_resource_info_vdu_id + - computeResource: vnfc_resource_info_compute_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - vnfcCpInfo: vnfc_resource_info_vnfc_cp_info + - id: vnfc_cp_info_id + - cpdId: vnfc_cp_info_cpd_id + - vnfExtCpId: vnfc_cp_info_vnf_ext_cp_id + - vnfVirtualLinkResourceInfo: vnf_virtual_link_resource_info + - id: vnf_virtual_link_resource_info_id + - vnfVirtualLinkDescId: vnf_virtual_link_resource_info_vnf_virtual_link_desc_id + - networkResource: vnf_virtual_link_resource_info_network_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - vnfLinkPorts: vnf_link_ports + - id: vnf_link_port_id + - resourceHandle: vnf_link_port_resource_handle + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - cpInstanceId: vnf_link_port_cp_instance_id + - cpInstanceType: vnf_link_port_cp_instance_type + - virtualStorageResourceInfo: virtual_storage_resource_info + - id: virtual_storage_resource_info_id + - virtualStorageDescId: virtual_storage_resource_info_virtual_storage_desc_id + - storageResource: virtual_storage_resource_info_storage_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - metadata: vnf_instance_metadata + - vnfcInfo: vnfc_info + - id: vnfc_info_id + - vduId: vnfc_info_vdu_id + - vnfcResourceInfoId: vnfc_resource_info_id + - vnfcState: vnfc_info_vnfc_state + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/show-vnf-instance-response.json + :language: javascript + +List VNF Instance (v2) +====================== + +.. rest_method:: GET /vnflcm/v2/vnf_instances + +The GET method queries information about multiple VNF instances. +It supports attribute-based filtering and +attribute selectors defined in ETSI NFV SOL013 v3.4.1. +The detail of attribute-based filtering is described in +SOL013 v3.4.1 clause 5.2. + +An attribute selector allows the API consumer to choose +which attributes it wants to be contained in the response. +*all_fields*, *fields*, *exclude_fields* and *exclude_default* +can be set as query parameters. + +The following attributes shall be excluded +from the VnfInstance structure in the +response body if this parameter is provided, +or none of the parameters "all_fields", +"fields", "exclude_fields", "exclude_default" are provided: +- vnfConfigurableProperties +- vimConnectionInfo +- instantiatedVnfInfo +- metadata +- extensionsby default + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + - 406 + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: vnf_instance_id + - vnfInstanceName: vnf_instance_name + - vnfInstanceDescription: vnf_instance_description + - vnfdId: vnf_instance_vnfd_id + - vnfProvider: vnf_instance_vnf_provider + - vnfProductName: vnf_instance_vnf_product_name + - vnfSoftwareVersion: vnf_instance_vnf_software_version + - vnfdVersion: vnf_instance_vnfd_version + - vnfConfigurableProperties: vnf_instance_vnf_configurable_properties + - vimConnectionInfo: vnf_instance_vim_connection_info + - vimId: vim_connection_info_vim_id + - vimType: vim_connection_info_vim_type + - interfaceInfo: vim_connection_info_interface_info + - accessInfo: vim_connection_info_access_info + - instantiationState: vnf_instance_instantiation_state + - instantiatedVnfInfo: instantiated_vnf_info + - flavourId: flavour_id_response + - vnfState: vnf_state + - extCpInfo: ext_cp_info + - id: ext_cp_info_id + - cpdId: ext_cp_info_cpd_id + - cpConfigId: ext_cp_info_cp_config_id + - cpProtocolInfo: ext_cp_info_cp_protocol_info + - layerProtocol: layer_protocol_cp_info + - ipOverEthernet: ip_over_ethernet_cp_info + - ipAddresses: ip_addresses_cp_info + - type: ip_address_type + - addresses: fixed_addresses + - subnetId: subnet_id + - extLinkPortId: ext_cp_info_ext_link_port_id + - associatedVnfcCpId: ext_cp_info_associated_vnfc_cp_id + - extVirtualLinkInfo: ext_virtual_link_info + - id: ext_virtual_link_info_id + - resourceHandle: resource_handle + - resourceId: resource_handle_resource_id + - extLinkPorts: ext_virtual_link_info_ext_link_ports + - id: ext_virtual_link_info_ext_link_ports_id + - resourceHandle: resource_handle + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - cpInstanceId: ext_virtual_link_info_ext_link_ports_cp_instance_id + - currentVnfExtCpData: current_vnf_ext_cp_data + - cpdId: cpd_id + - cpConfig: cp_config + - cpProtocolData: cp_protocol_data + - layerProtocol: layer_protocol + - ipOverEthernet: ip_over_ethernet + - ipAddresses: ip_addresses + - type: ip_address_type + - numDynamicAddresses: num_dynamic_addresses + - extManagedVirtualLinkInfo: ext_managed_virtual_link_info + - id: ext_managed_virtual_link_info_id + - vnfVirtualLinkDescId: ext_managed_virtual_link_info_vnf_virtual_link_desc_id + - networkResource: ext_managed_virtual_link_info_network_resource + - resourceId: resource_handle_resource_id + - vnfLinkPorts: vnf_link_ports + - id: vnf_link_port_id + - resourceHandle: vnf_link_port_resource_handle + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - cpInstanceId: vnf_link_port_cp_instance_id + - cpInstanceType: vnf_link_port_cp_instance_type + - vnfcResourceInfo: vnfc_resource_info + - id: vnfc_resource_info_id + - vduId: vnfc_resource_info_vdu_id + - computeResource: vnfc_resource_info_compute_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - vnfcCpInfo: vnfc_resource_info_vnfc_cp_info + - id: vnfc_cp_info_id + - cpdId: vnfc_cp_info_cpd_id + - vnfExtCpId: vnfc_cp_info_vnf_ext_cp_id + - vnfVirtualLinkResourceInfo: vnf_virtual_link_resource_info + - id: vnf_virtual_link_resource_info_id + - vnfVirtualLinkDescId: vnf_virtual_link_resource_info_vnf_virtual_link_desc_id + - networkResource: vnf_virtual_link_resource_info_network_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - vnfLinkPorts: vnf_link_ports + - id: vnf_link_port_id + - resourceHandle: vnf_link_port_resource_handle + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - cpInstanceId: vnf_link_port_cp_instance_id + - cpInstanceType: vnf_link_port_cp_instance_type + - virtualStorageResourceInfo: virtual_storage_resource_info + - id: virtual_storage_resource_info_id + - virtualStorageDescId: virtual_storage_resource_info_virtual_storage_desc_id + - storageResource: virtual_storage_resource_info_storage_resource + - vimConnectionId: vim_connection_id + - resourceId: resource_handle_resource_id + - vimLevelResourceType: resource_handle_vim_level_resource_type + - metadata: vnf_instance_metadata + - vnfcInfo: vnfc_info + - id: vnfc_info_id + - vduId: vnfc_info_vdu_id + - vnfcResourceInfoId: vnfc_resource_info_id + - vnfcState: vnfc_info_vnfc_state + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/list-vnf-instance-response.json + :language: javascript + + +Show VNF LCM operation occurrence (v2) +====================================== + +.. rest_method:: GET /vnflcm/v2/vnf_lcm_op_occs/{vnfLcmOpOccId} + +The client can use this method to retrieve status information about a VNF lifecycle management operation occurrence +by reading an "Individual VNF LCM operation occurrence" resource. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 406 + +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_lcm_vnf_instance_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 + - 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 + - vnfLinkPortIds: vnf_link_port_ids + - 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/show-vnflcm-operation-occurrence-response.json + :language: javascript + +List VNF LCM operation occurrence (v2) +====================================== + +.. rest_method:: GET /vnflcm/v2/vnf_lcm_op_occs + +The API consumer can use this method to query status information about multiple VNF lifecycle management operation +occurrences. + +It supports attribute-based filtering and +attribute selectors defined in ETSI NFV SOL013 v3.4.1. +The detail of attribute-based filtering is described in +SOL013 v3.4.1 clause 5.2. + +An attribute selector allows the API consumer to choose +which attributes it wants to be contained in the response. +*all_fields*, *fields*, *exclude_fields* and *exclude_default* +can be set as query parameters. + +The following attributes shall be excluded from the VnfLcmOpOcc structure in the +response body if this parameter is provided, or none of the parameters "all_fields," +"fields", "exclude_fields", "exclude_default" are provided: +- operationParams +- error +- resourceChanges +- changedInfo +- changedExtConnectivity. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + - 406 + +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_lcm_vnf_instance_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 + - 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 + - vnfLinkPortIds: vnf_link_port_ids + - 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/list-vnflcm-operation-occurrence-response.json + :language: javascript + + +Create a new subscription (v2) +============================== + +.. rest_method:: POST /vnflcm/v2/subscriptions + +The POST method creates a new subscription. + +As the result of successfully executing this method, a new "Individual subscription" resource +shall have been created. This method shall not trigger any notification. + +Creation of two "Individual subscription" resources with the same callbackURI and the same filter can result in +performance degradation and will provide duplicates of notifications to the NFVO, and might make sense only in very +rare use cases. Consequently, the VNFM may either allow creating an "Individual subscription" resource if another +Individual subscription resource with the same filter and callbackUri already exists (in which case it shall return the +201 Created response code), or may decide to not create a duplicate "Individual subscription" resource (in which case +it shall return a "303 See Other" response code referencing the existing "Individual subscription" resource with the same +filter and callbackUri). + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 201 + +.. rest_status_code:: error status.yaml + + - 401 + - 406 + - 422 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - filter: filter + - vnfInstanceSubscriptionFilter: vnf_instance_subscription_filter + - vnfdIds: vnfd_ids + - vnfProductsFromProviders: vnf_products_from_providers + - vnfProvider: vnf_provider + - vnfProducts: vnf_products + - vnfProductName: vnf_product_name + - versions: vnf_product_versions + - vnfSoftwareVersion: vnf_product_vnf_software_version + - vnfdVersions: vnfd_versions + - vnfInstanceIds: vnf_instance_ids + - vnfInstanceName: vnf_instance_names + - notificationTypes: filter_notification_types + - operationTypes: filter_operation_types + - operationStates: filter_operation_states + - callbackUri : callback_uri + - authentication: authentication + - authType: authentication_auth_type + - paramsBasic: authentication_params_basic + - userName: authentication_params_basic_user_name + - password: authentication_params_basic_password + - paramsOauth2ClientCredentials: authentication_params_oauth2_client_credentials + - clientId: authentication_params_oauth2_client_credentials_client_id + - clientPassword: authentication_params_oauth2_client_credentials_client_password + - tokenEndpoint: authentication_params_oauth2_client_credentials_token_endpoint + - verbosity: vnf_subscription_create_request_verbosity + +Request Example +--------------- + +.. literalinclude:: samples/vnflcm/create-subscription-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: subscription_id_response + - callbackUri: callback_uri + - verbosity: verbosity + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/create-subscription-response.json + :language: javascript + +Delete a subscription +========================= + +.. rest_method:: DELETE /vnflcm/v2/subscriptions/{subscriptionId} + +The DELETE method terminates an individual subscription. + +As the result of successfully executing this method, the "Individual subscription" resource shall not exist any longer. +This means that no notifications for that subscription shall be sent to the formerly-subscribed API consumer. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 204 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 406 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - subscriptionId: subscription_id + +Show subscription (v2) +====================== + +.. rest_method:: GET /vnflcm/v2/subscriptions/{subscriptionId} + +The GET method retrieves information about a subscription by reading an "Individual subscription" resource. + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 401 + - 404 + - 406 + +Request Parameters +------------------ + +.. rest_parameters:: parameters_vnflcm.yaml + + - subscriptionId: subscription_id + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: subscription_id_response + - callbackUri: callback_uri + - verbosity: verbosity + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/show-subscription-response.json + :language: javascript + +List subscription (v2) +====================== + +.. rest_method:: GET /vnflcm/v2/subscriptions + +The GET method queries the list of active subscriptions of the functional block that invokes the method. +It can be used e.g. for resynchronization after error situations. + +It supports attribute-based filtering in ETSI NFV SOL013 v3.4.1. +The detail of attribute-based filtering is described in +SOL013 v3.4.1 clause 5.2. + + +Response Codes +-------------- + +.. rest_status_code:: success status.yaml + + - 200 + +.. rest_status_code:: error status.yaml + + - 400 + - 401 + - 406 + +Response Parameters +------------------- + +.. rest_parameters:: parameters_vnflcm.yaml + + - id: subscription_id_response + - callbackUri: callback_uri + - verbosity: verbosity + - _links: vnf_instance_links + +Response Example +---------------- + +.. literalinclude:: samples/vnflcm/list-subscription-response.json + :language: javascript diff --git a/api-ref/source/v2/vnflcm.rst b/api-ref/source/v2/vnflcm.rst new file mode 100644 index 000000000..8518e463c --- /dev/null +++ b/api-ref/source/v2/vnflcm.rst @@ -0,0 +1,9 @@ +:tocdepth: 2 + +######################################################################## +Virtualized Network Function Lifecycle Management Interface (VNF LCM) v2 +######################################################################## + +.. rest_expand_all:: + +.. include:: vnflcm.inc diff --git a/doc/source/cli/cli-etsi-vnflcm.rst b/doc/source/cli/cli-etsi-vnflcm.rst index 54289ddbc..66767fad4 100644 --- a/doc/source/cli/cli-etsi-vnflcm.rst +++ b/doc/source/cli/cli-etsi-vnflcm.rst @@ -17,6 +17,20 @@ A default VIM should be registered according to :doc:`cli-legacy-vim`. CLI Reference for VNF Lifecycle Management ------------------------------------------ +.. note:: + Commands call version 1 vnflcm APIs by default. + You can call the specific version of vnflcm APIs + by using the option **\-\-os-tacker-api-version**. + 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. 1. Create VNF Identifier ^^^^^^^^^^^^^^^^^^^^^^^^ @@ -695,4 +709,68 @@ Help: optional arguments: -h, --help show this help message and exit + +15. Show VNF LCM API versions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: console + + $ openstack vnflcm versions + + +Result: + +.. code-block:: console + + $ openstack vnflcm versions + +-------------+--------------------------------------------------------------------------------------------+ + | Field | Value | + +-------------+--------------------------------------------------------------------------------------------+ + | uriPrefix | /vnflcm | + | apiVersions | [{'version': '1.3.0', 'isDeprecated': False}, {'version': '2.0.0', 'isDeprecated': False}] | + +-------------+--------------------------------------------------------------------------------------------+ + + +.. note:: + The command with **\-\-major-version** narrows down the + obtained major versions to show. + + +.. code-block:: console + + $ openstack vnflcm versions --major-version 1 + +-------------+-----------------------------------------------+ + | Field | Value | + +-------------+-----------------------------------------------+ + | uriPrefix | /vnflcm/v1 | + | apiVersions | [{'version': '1.3.0', 'isDeprecated': False}] | + +-------------+-----------------------------------------------+ + +.. code-block:: console + + $ openstack vnflcm versions --major-version 2 + +-------------+-----------------------------------------------+ + | Field | Value | + +-------------+-----------------------------------------------+ + | uriPrefix | /vnflcm/v2 | + | apiVersions | [{'version': '2.0.0', 'isDeprecated': False}] | + +-------------+-----------------------------------------------+ + + +Help: + +.. code-block:: console + + $ openstack vnflcm versions --help + usage: openstack vnflcm versions [-h] [-f {json,shell,table,value,yaml}] [-c COLUMN] + [--noindent] [--prefix PREFIX] [--max-width ] + [--fit-width] [--print-empty] [--major-version ] + + Show VnfLcm Api versions + + optional arguments: + -h, --help show this help message and exit + --major-version + Show only specify major version. + .. _About aspect id : https://docs.openstack.org/tacker/latest/user/etsi_vnf_scaling.html#how-to-identify-aspect-id diff --git a/doc/source/user/etsi_vnf_error_handling.rst b/doc/source/user/etsi_vnf_error_handling.rst index 417f9cf87..bc43df3a6 100644 --- a/doc/source/user/etsi_vnf_error_handling.rst +++ b/doc/source/user/etsi_vnf_error_handling.rst @@ -4,6 +4,12 @@ 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 ------------- diff --git a/doc/source/user/resources.rst b/doc/source/user/resources.rst index 7c5f5dbae..56ab0a16e 100644 --- a/doc/source/user/resources.rst +++ b/doc/source/user/resources.rst @@ -7,7 +7,7 @@ Tacker mainly consists of two resources: * Network Functions Virtualisation Orchestrator (NFVO) * Virtualised Network Function Manager (VNFM) -*VNFO* is functional block that manages the Network Service (NS) lifecycle and +*NFVO* is functional block that manages the Network Service (NS) lifecycle and coordinates the management of NS lifecycle, VNF lifecycle (supported by the VNFM) and NFVI resources (supported by the VIM) to ensure an optimized allocation of the necessary resources and connectivity. @@ -41,6 +41,16 @@ VNF, VNFD vnfd-sol001 +UserData +"""""""" + +.. toctree:: + :maxdepth: 1 + + userdata_script + + + Legacy Tacker Resources ----------------------- diff --git a/doc/source/user/userdata_script.rst b/doc/source/user/userdata_script.rst new file mode 100644 index 000000000..0c3b32ed3 --- /dev/null +++ b/doc/source/user/userdata_script.rst @@ -0,0 +1,309 @@ +============================ +UserData script (VNF LCM v2) +============================ + +This document describes the requirements of userdata script +how to make it for VNF LCM version 2. + +Userdata script enables operators to flexibly customize VIM input parameter +in LCM operations. + +If you would like to know how to deploy VNF using userdata script, +please check `ETSI NFV-SOL VNF Deployment as VM with LCM Operation User Data`_ +or like to know how to make VNF packages including userdata script, +please check `VNF Package manual`_. + + +Requirements +============ + +Userdata script must be described according to the following rules. + +Userdata class needs to be defined in userdata script file. +Any file name and class name are acceptable. + +.. note:: + The names of the file and class have to correspond to following + request parameters of LCM API, + "lcm-operation-user-data", "lcm-operation-user-data-class". + + +userdata class must inherit "userdata_utils.AbstractUserData", +then functions have to be implemented. + +Since latest Tacker supports userdata script for only instantiating vnf, +**def instantiate(req, inst, grant_req, grant, tmp_csar_dir)** +only can be implemented. +Followings are the requirement of **def instantiate()** + +Input of instantiate() +---------------------- + +The function can use the following input data. +The details of data types are defined in ETSI NFV SOL documents. + +- req: InstantiateVnfRequest +- inst: VnfInstance +- grant_req: GrantRequest +- grant: Grants +- tmp_csar_dir: the temporary path of csar expanded by Tacker. + + +Output of instantiate() +----------------------- + +The function must return the following structure. +Data are for stack create API in HEAT. +The requirements of HEAT API are described in +`reference of Orchestration Service API v1 +"POST /v1/{tenant_id}/stacks"`_ + +fields = {'template': value, 'parameters': value, 'files': value} + +- template: Dump of top HOT file. +- parameters: Input parameters for Heat API. +- files: Dump of all nested HOT files in the package. + +Following shows sample output. + +.. code-block:: python + + fields = { + 'template': yaml.safe_dump(top_hot), + 'parameters': {'nfv': nfv_dict}, + 'files': {} + } + for key, value in hot_dict.get('files', {}).items(): + fields['files'][key] = yaml.safe_dump(value) + + return fields + + +Sample userdata script +====================== + +If users do not specify the userdata in instantiate VNF request, +the default process runs according to the following script. + +The script can be used as a sample for making the original userdata script. +It obtains HEAT input parameters such as +*computeFlavourId*, *vcImageId*, *locationConstraints*, +*network*, *subnet*, and *fixed_ips* +from VNFD, parameters of Instantiate request and Grant. + +.. literalinclude:: ../../../tacker/sol_refactored/infra_drivers/openstack/userdata_default.py + :language: python + +The following is sample Base HOT corresponding to above sample userdata script. + +**top Base HOT** + +.. literalinclude:: ../../../tacker/tests/functional/sol_v2/samples/sample1/contents/BaseHOT/simple/sample1.yaml + :language: yaml + +**nested Base HOT** + +.. literalinclude:: ../../../tacker/tests/functional/sol_v2/samples/sample1/contents/BaseHOT/simple/nested/VDU1.yaml + :language: yaml + + +Utility functions for userdata class +==================================== + +Tacker provides the following utility functions +for the userdata script. +Following functions can be called in userdata class. + + +def get_vnfd(vnfd_id, csar_dir) +------------------------------- + +Get vnfd in yaml format. + +**vnf_id**: vnfid +, **csar_dir**: the path of csar. + +It returns an instance of `**Vnfd** class`_. + + +def init_nfv_dict(hot_template) +------------------------------- + +Find the parameter specified by **get_param** in the HOT template +and get the dict of the nfv structure for the HEAT input parameter. + +**hot_template**: HOT in yaml format. + +It returns **the dict of nfv structure**. + + +def get_param_flavor(vdu_name, req, vnfd, grant) +------------------------------------------------ + +Get flavor of VDU. If Grant contains the flavor, it is returned. +Otherwise, flavor is obtained from vnfd and returned. + +**vdu_name**: the name of VDU +, **req**: InstantiateVnfRequest +, **vnfd**: vnfd +, **grant**: Grants + +It returns **vimFlavourId** + + +def get_param_image(vdu_name, req, vnfd, grant) +----------------------------------------------- + +Get software image of VDU. +If Grant contains the glance-imageId corresponding to the VDU, it is returned. +Otherwise, name of software image is obtained from vnfd and returned. + +**vdu_name**: the name of VDU +, **req**: InstantiateVnfRequest +, **vnfd**: vnfd +, **grant**: Grants + +It returns **image ID** or **image name**. + + +def get_param_zone(vdu_name, grant_req, grant) +---------------------------------------------- + +Get zone id of VDU. + +**vdu_name**: the name of VDU +, **req**: InstantiateVnfRequest +, **vnfd**: vnfd +, **grant**: Grants + +It returns **zone id**. + + +def _get_fixed_ips_from_extcp(extcp) +------------------------------------ + +Get list of fixed address and subnet from extcp. +**extcp** is instantiateVnfRequest > extVirtualLinks > extcps +defined in `ETSI NFV SOL003`_. + +It returns the list of fixed address and subnet. + + +def get_param_network(cp_name, grant, req) +------------------------------------------ + +Get network resourceId of CP. + +**cp_name**: the name of CP +, **grant**: Grants +, **req**: InstantiateVnfRequest + +It returns network resourceId. + + +def get_param_fixed_ips(cp_name, grant, req) +-------------------------------------------- + +Get fixed IP addresses of CP. + +**cp_name**: the name of CP +, **grant**: Grants +, **req**: InstantiateVnfRequest + +It returns fixed IP address of CP. + + +def apply_ext_managed_vls(hot_dict, req, grant) +----------------------------------------------- + +Modify HOT to apply externally provided extmanaged +internal virtual link (extmanagedVL). + +ExtmanagedVL is created by VNFM when instantiating VNF +or externally created and specified +by Grants or InstantiateVnfRequest. +Since one HOT can correspond to only one of the cases, +this function modifies HOT for the former case to for the latter case. + +The Following shows the sample HOT description. + +- Input HOT + +.. code-block:: yaml + + heat_template_version: 2013-05-23 + description: 'Simple Base HOT for Sample VNF' + + resources: + VDU1: + type: OS::Nova::Server + properties: + flavor: { get_param: [ nfv, VDU, VDU2, computeFlavourId ] } + image: { get_param: [ nfv, VDU, VDU2, vcImageId] } + networks: + - port: + get_resource: VDU1_CP1 + + VDU1_CP1: + type: OS::Neutron::Port + properties: + network: { get_resource: internalVL1 } + + internalVL1: + type: OS::Neutron::Net + + outputs: {} + +- Output HOT + +.. code-block:: yaml + + heat_template_version: 2013-05-23 + description: 'Simple Base HOT for Sample VNF' + + resources: + VDU1: + type: OS::Nova::Server + properties: + flavor: { get_param: [ nfv, VDU, VDU2, computeFlavourId ] } + image: { get_param: [ nfv, VDU, VDU2, vcImageId] } + networks: + - port: + get_resource: VDU1_CP1 + + + VDU1_CP1: + type: OS::Neutron::Port + properties: + network: network_id + + outputs: {} + + +vnfd.get_base_hot(flavour_id) +------------------------------ + +Get HOT dict. + +**flavour_id**: flavour_id of vnf instance. + +It returns HOT dict with the following structure. +**dict = {'template':tophot, 'Files'{file 1:, file2:...}}** + + +vnf_instance_utils.json_merge_patch(target, patch) +--------------------------------------------------- + +Get the result of json_merge_patch (IETF RFC 7396). + +**target**: merge target +, **patch**: applied patch + +It returns the result of json_merge_patch (IETF RFC 7396). + + +.. _ETSI NFV-SOL VNF Deployment as VM with LCM Operation User Data: https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_user_data.html +.. _VNF Package manual: https://docs.openstack.org/tacker/latest/user/vnf-package.html +.. _reference of Orchestration Service API v1 "POST /v1/{tenant_id}/stacks": https://docs.openstack.org/api-ref/orchestration/v1/?expanded=create-stack-detail#create-stack +.. _**Vnfd** class: ../../../tacker/sol_refactored/common/vnfd_utils.py +.. _ETSI NFV SOL003: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_NFV-SOL003v030301p.pdf diff --git a/doc/source/user/vnf-package.rst b/doc/source/user/vnf-package.rst index f40a5e6f8..7bf2bd404 100644 --- a/doc/source/user/vnf-package.rst +++ b/doc/source/user/vnf-package.rst @@ -14,6 +14,10 @@ are available: * CSAR with TOSCA-Metadata directory * CSAR zip without TOSCA-Metadata directory +.. note:: VNF LCM API version 1 supports both structures. + VNF LCM API version 2 supports only + *CSAR with TOSCA-Metadata directory*. + .. note:: For more detailed definitions of CSAR, see section 16 in `TOSCA-Simple-Profile-YAML-v1.1`_. @@ -308,8 +312,13 @@ can be assigned. The trade-off between being able to write scripts freely and limiting operations is an issue for the future. +.. note:: User data script is incompatible between VNF LCM API version 1 and 2 + due to different requirements for them. -Example: +The requirements of User data script for VNF LCM API version 2 is described +in :doc:`./userdata_script`. + +Following shows an example of user data script for VNF LCM API version 1. .. code-block:: python @@ -400,4 +409,4 @@ YAML file. The contents is exactly same as described in the previous section. .. _NFV-SOL004 v2.6.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/004/02.06.01_60/gs_NFV-SOL004v020601p.pdf .. _NFV-SOL005 v2.6.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/005/02.06.01_60/gs_NFV-SOL005v020601p.pdf .. _NFV-SOL014 v2.8.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/014/02.08.01_60/gs_NFV-SOL014v020801p.pdf - +.. _UserData script (VNF LCM v2):