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
This commit is contained in:
Hirofumi Noguchi 2021-09-08 18:32:33 +09:00 committed by Yasufumi Ogawa
parent fa73e438cc
commit 34eaab611e
32 changed files with 4687 additions and 11 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,13 @@
{
"uriPrefix": "/vnflcm",
"apiVersions": [
{
"version": "1.3.0",
"isDeprecated": false
},
{
"version": "2.0.0",
"isDeprecated": false
}
]
}

View File

@ -0,0 +1,9 @@
{
"uriPrefix": "/vnflcm/v1",
"apiVersions": [
{
"version": "1.3.0",
"isDeprecated": false
}
]
}

View File

@ -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: |

View File

@ -0,0 +1,9 @@
:tocdepth: 2
#####################################################################
Virtualized Network Function Lifecycle Management Interface (VNF LCM)
#####################################################################
.. rest_expand_all::
.. include:: vnflcm.inc

View File

@ -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

View File

@ -0,0 +1,9 @@
:tocdepth: 2
#############################################################################
Virtualized Network Function Lifecycle Management Versions (VNF LCM versions)
#############################################################################
.. rest_expand_all::
.. include:: vnflcm_versions.inc

View File

@ -0,0 +1,9 @@
:tocdepth: 2
####################################################
Virtualized Network Function Packages (VNF packages)
####################################################
.. rest_expand_all::
.. include:: vnf_packages.inc

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
{
"callbackUri": "http://127.0.0.1/"
}

View File

@ -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"
}

View File

@ -0,0 +1,5 @@
{
"vnfInstanceDescription": "test sample1",
"vnfInstanceName": "sample1",
"vnfdId": "da459819-a2eb-442b-b9a2-0c1c02466baf"
}

View File

@ -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"
}

View File

@ -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"
}
}
}

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -0,0 +1,4 @@
{
"gracefulTerminationTimeout": 10,
"terminationType": "GRACEFUL"
}

View File

@ -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.

View File

@ -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

View File

@ -0,0 +1,9 @@
:tocdepth: 2
########################################################################
Virtualized Network Function Lifecycle Management Interface (VNF LCM) v2
########################################################################
.. rest_expand_all::
.. include:: vnflcm.inc

View File

@ -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 <integer>]
[--fit-width] [--print-empty] [--major-version <major-version>]
Show VnfLcm Api versions
optional arguments:
-h, --help show this help message and exit
--major-version <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

View File

@ -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
-------------

View File

@ -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
-----------------------

View File

@ -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

View File

@ -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):