Merge "Enhance ChangeCurrentVNFPackage API"
This commit is contained in:
commit
762649479b
|
@ -0,0 +1,516 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
|
||||
===================================
|
||||
Enhance ChangeCurrentVNFPackage API
|
||||
===================================
|
||||
|
||||
Blueprints: https://blueprints.launchpad.net/tacker/+spec/enhance-change-package
|
||||
|
||||
This specification enhances the ChangeCurrentVNFPackage API.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
The ChangeCurrentVNFPackage API is defined in ETSI NFV-SOL003
|
||||
v3.3.1 [#ETSI-NFV-SOL003-v3.3.1]_, according to the VNF software modification
|
||||
procedure in ETSI NFV-IFA007 v3.3.1 [#ETSI-NFV-IFA007-v3.3.1]_.
|
||||
Tacker supports the ChangeCurrentVNFPackage operation in Yoga release,
|
||||
but Tacker has supported software image update case only and
|
||||
lacks some parameters.
|
||||
The following cases will be supported.
|
||||
|
||||
#. Change OpenStack flavor
|
||||
#. Change external/internal Virtual Links(VL) and Connection Points(CP)
|
||||
#. Add other ChangeCurrentVNFPackage API parameters
|
||||
|
||||
.. note::
|
||||
|
||||
Yoga release only supports `RollingUpdate` process [#SPEC-Upgrade-Vnf-Pkg]_.
|
||||
This spec does not target the update process enhancement.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
(1) Add a function and VNF package samples to change OpenStack flavor
|
||||
---------------------------------------------------------------------
|
||||
This function can change the OpenStack flavor and provide the vertical
|
||||
scaling of resources such as vMemory and vCPU in ChangeCurrentVNFPackage API.
|
||||
This function will be implemented by using different HEAT input-parameters
|
||||
in User Data [#Tacker_User_Data]_. We also aim to add these samples to
|
||||
tacker documents. See the below.
|
||||
|
||||
.. note::
|
||||
|
||||
``computeFlavourId`` such as "m1.tiny" in HEAT input-parameters is
|
||||
set by VNFDs (``requested_additional_capability_name``) or Grant
|
||||
response. The information about flavor is managed in OpenStack Nova.
|
||||
|
||||
* BaseHOT
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: Test Base HOT
|
||||
|
||||
parameters:
|
||||
nfv:
|
||||
type: json
|
||||
|
||||
resources:
|
||||
VDU1:
|
||||
type: VDU1.yaml
|
||||
properties:
|
||||
flavor: { get_param: [ nfv, VDU, VDU1, computeFlavourId ] }
|
||||
image: { get_param: [ nfv, VDU, VDU1, vcImageId] }
|
||||
name: VDU1
|
||||
availability_zone: { get_param: [ nfv, VDU, VDU1, locationConstraints ] }
|
||||
|
||||
VDU2:
|
||||
type: VDU2.yaml
|
||||
properties:
|
||||
flavor: { get_param: [ nfv, VDU, VDU2, computeFlavourId ] }
|
||||
image: { get_param: [ nfv, VDU, VDU2, vcImageId] }
|
||||
name: VDU2
|
||||
availability_zone: { get_param: [ nfv, VDU, VDU2, locationConstraints ] }
|
||||
|
||||
|
||||
* Before: `input_params.yaml`
|
||||
|
||||
"computeFlavourId" parameters of VDU1 and VDU2 are "m1.tiny".
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"VDU": {
|
||||
{
|
||||
"VDU1": {
|
||||
"computeFlavourId": "m1.tiny",
|
||||
"locationConstraints": "nova"
|
||||
},
|
||||
"VDU1-VirtualStorage": {
|
||||
"vcImageId": "56c7b026-a23e-49e5-96c6-05ab90186965"
|
||||
},
|
||||
"VDU2": {
|
||||
"computeFlavourId": "m1.tiny",
|
||||
"locationConstraints": "nova"
|
||||
},
|
||||
"VDU2-VirtualStorage": {
|
||||
"vcImageId": "6b8a14f0-1b40-418a-b650-ae4a0378daa5"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
* After: `scale_up_input_params.yaml`
|
||||
|
||||
VDU2 will change new OpenStack flavor for scale-up ("m1.tiny"->"m1.small").
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"VDU": {
|
||||
{
|
||||
"VDU1": {
|
||||
"computeFlavourId": "m1.tiny",
|
||||
"locationConstraints": "nova"
|
||||
},
|
||||
"VDU1-VirtualStorage": {
|
||||
"vcImageId": "56c7b026-a23e-49e5-96c6-05ab90186965"
|
||||
},
|
||||
"VDU2": {
|
||||
"computeFlavourId": "m1.small",
|
||||
"locationConstraints": "nova"
|
||||
},
|
||||
"VDU2-VirtualStorage": {
|
||||
"vcImageId": "6b8a14f0-1b40-418a-b650-ae4a0378daa5"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(2) Add a function to change external/internal Network
|
||||
------------------------------------------------------
|
||||
The following operations will be supported by using additional
|
||||
ChangeCurrentVNFPackage API parameters
|
||||
(``extVirtualLinks``, ``extManagedVirtualLinks``),
|
||||
modified HOT input-parameters or BaseHOT templates.
|
||||
|
||||
.. note::
|
||||
|
||||
In NFV SOL, an external NW is defined as being created or deleted
|
||||
without VNF LCM operations.Therefore, ChangeCurrentVNFPackage API
|
||||
will operate modification/additions/deletion of External CPs only.
|
||||
|
||||
|
||||
* Change external CP
|
||||
|
||||
* Modify external CP
|
||||
* Add external CP
|
||||
* Delete external CP
|
||||
|
||||
.. note::
|
||||
|
||||
If ``extVirtualLinks -> extLinkPorts`` is present,
|
||||
"Add and Delete" means "Connect and Disconnect" external CP.
|
||||
Because in this case, externally provided link ports are
|
||||
used to connect/disconnect external CPs to the external VL.
|
||||
|
||||
* Change internal VL
|
||||
|
||||
* Modify internal VL
|
||||
* Add internal VL
|
||||
* Delete internal VL
|
||||
|
||||
* Change internal CP
|
||||
|
||||
* Modify internal CP
|
||||
* Add internal CP
|
||||
* Delete internal CP
|
||||
|
||||
There are several ways to change networks.
|
||||
An example to modify external CP is described below.
|
||||
|
||||
* BaseHOT
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: Test Base HOT
|
||||
|
||||
parameters:
|
||||
nfv:
|
||||
type: json
|
||||
|
||||
resources:
|
||||
VDU1:
|
||||
type: OS::Nova::Server
|
||||
properties:
|
||||
networks:
|
||||
- port: { get_param: [ nfv, CP, VDU1_CP1, port ] }
|
||||
|
||||
* Before: `VnfInstance`
|
||||
|
||||
`VDU1_CP1` is connected to the external VL
|
||||
"67c837dc-c247-4a3e-ac0f-5603bfef1ba3".
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
"instantiatedVnfInfo": {
|
||||
"extVirtualLinkInfo": [
|
||||
{
|
||||
"currentVnfExtCpData": [
|
||||
{
|
||||
"cpConfig": {
|
||||
"VDU1_CP1": {
|
||||
"cpProtocolData": [
|
||||
{
|
||||
"ipOverEthernet": {
|
||||
"ipAddresses": [
|
||||
{
|
||||
"numDynamicAddresses": 1,
|
||||
"subnetId": "0cc4d7e2-37c5-49f0-98d2-da945b5841e5",
|
||||
"type": "IPV4"
|
||||
}
|
||||
]
|
||||
},
|
||||
"layerProtocol": "IP_OVER_ETHERNET"
|
||||
}
|
||||
],
|
||||
"linkPortId": "1f330fd3-b037-4d42-993f-8df45b0efa99",
|
||||
"parentCpConfigId": "a0eab66b-e82f-4a42-a2e5-57d0b02abab3"
|
||||
}
|
||||
},
|
||||
"cpdId": "VDU1_CP1"
|
||||
}
|
||||
],
|
||||
"extLinkPorts": [
|
||||
{
|
||||
"cpInstanceId": "cp-req-1f330fd3-b037-4d42-993f-8df45b0efa99",
|
||||
"id": "1f330fd3-b037-4d42-993f-8df45b0efa99",
|
||||
"resourceHandle": {
|
||||
"resourceId": "04ab6361-7e6c-4255-a10c-2ab1a6daa4c2"
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "3d0d9c9b-dbbc-41d6-84ef-1bf2529753d5",
|
||||
"resourceHandle": {
|
||||
"resourceId": "67c837dc-c247-4a3e-ac0f-5603bfef1ba3",
|
||||
"resourceProviderId": "Company",
|
||||
"vimConnectionId": "02ef2cca-d853-4e90-950a-a6d0ce86ec3a"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
* After: `extVirtualLinks` in the "ChangeCurrentVnfPkgRequest"
|
||||
|
||||
`VDU1_CP1` is disconnected and reconnected to
|
||||
the external VL "d703f250-7d54-45b3-b29e-2ef8a5e5f6a1".
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
"extVirtualLinks": [
|
||||
{
|
||||
"id": "3d0d9c9b-dbbc-41d6-84ef-1bf2529753d5",
|
||||
"vimConnectionId": "02ef2cca-d853-4e90-950a-a6d0ce86ec3a",
|
||||
"resourceProviderId": "Company",
|
||||
"resourceId": "d703f250-7d54-45b3-b29e-2ef8a5e5f6a1",
|
||||
"extCps": [
|
||||
{
|
||||
"cpdId": "VDU1_CP1",
|
||||
"cpConfig": {
|
||||
"VDU1_CP1": {
|
||||
"parentCpConfigId": "2254b5d5-35f7-4d7e-b467-0ef17866ef1d",
|
||||
"linkPortId": "5353df3d-16de-4789-8a57-0623b5c83700",
|
||||
"cpProtocolData": [
|
||||
{
|
||||
"layerProtocol": "IP_OVER_ETHERNET",
|
||||
"ipOverEthernet": {
|
||||
"ipAddresses": [
|
||||
{
|
||||
"type": "IPV4",
|
||||
"numDynamicAddresses": 1,
|
||||
"subnetId": "5156e206-c513-41ff-a6e6-b45516046188"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"extLinkPorts": [
|
||||
{
|
||||
"id": "5353df3d-16de-4789-8a57-0623b5c83700",
|
||||
"resourceHandle": {
|
||||
"resourceId": "0ec87b04-c441-4859-8a44-53e28f685ea2"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
.. note::
|
||||
|
||||
``extVirtualLinks`` might be omitted if the entries in the list are unchanged.
|
||||
|
||||
|
||||
(3) Add ChangeCurrentVNFPackage API parameters
|
||||
----------------------------------------------
|
||||
|
||||
ChangeCurrentVNFPackage API parameters that are not
|
||||
implemented by Tacker will be supported.
|
||||
|
||||
* ChangeCurrentVnfPkgRequest
|
||||
|
||||
.. list-table::
|
||||
:widths: 15 10 30 30
|
||||
:header-rows: 1
|
||||
|
||||
* - Attribute name
|
||||
- Data type
|
||||
- Cardinality
|
||||
- Description
|
||||
* - extVirtualLinks
|
||||
- ExtVirtualLinkData
|
||||
- 0..N
|
||||
- Information about external VLs to connect the VNF to.
|
||||
* - extManagedVirtualLinks
|
||||
- ExtManagedVirtualLinkData
|
||||
- 0..N
|
||||
- Information about internal VLs that are managed by the NFVO.
|
||||
* - vimConnectionInfo
|
||||
- map (VimConnectionInfo)
|
||||
- 0..N
|
||||
- "vimConnectionInfo" attribute array in "VnfInstance".
|
||||
* - extensions
|
||||
- KeyValuePairs
|
||||
- 0..1
|
||||
- "extensions" attribute in "VnfInstance".
|
||||
* - vnfConfigurableProperties
|
||||
- KeyValuePairs
|
||||
- 0..1
|
||||
- "vnfConfigurableProperties" attribute in "VnfInstance".
|
||||
|
||||
.. note::
|
||||
|
||||
Tacker applies the ``vimConnectionInfo``, ``extensions``
|
||||
and ``vnfConfigurableProperties`` attributes in the
|
||||
"ChangeCurrentVnfPkgRequest" data structure in the payload body
|
||||
to the existing attributes from the "VnfInstance" data structure
|
||||
according to the rules of JSON Merge Patch(IETF RFC 7396 [#IETF-RFC-7396]_).
|
||||
Tacker also needs to unify the implemented merge policies of
|
||||
"VnfInfoModificationRequest" to the above policy.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
The following RESTful API will be updated.
|
||||
This RESTful API will be based on ETSI NFV-SOL003
|
||||
v3.3.1 [#ETSI-NFV-SOL003-v3.3.1]_.
|
||||
|
||||
* | **Name**: change current VNF Package
|
||||
| **Description**: Request to change current VNF package by vnfd ID.
|
||||
| **Method type**: POST
|
||||
| **URL**: /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_vnfpkg
|
||||
| **Request**:
|
||||
|
||||
.. list-table::
|
||||
:widths: 15 10 30
|
||||
:header-rows: 1
|
||||
|
||||
* - Data type
|
||||
- Cardinality
|
||||
- Description
|
||||
* - ChangeCurrentVnfPkgRequest
|
||||
- 1
|
||||
- Parameters for the change current VNF package.
|
||||
|
||||
.. list-table::
|
||||
:widths: 15 15 10 30 10 10
|
||||
:header-rows: 1
|
||||
|
||||
* - Attribute name
|
||||
- Data type
|
||||
- Cardinality
|
||||
- Parameter description
|
||||
- Supported in (Y)
|
||||
- Supported in (Z)
|
||||
* - vnfdId
|
||||
- Identifier
|
||||
- 1
|
||||
- Identifier of the VNFD which defines the destination VNF Package
|
||||
for the change.
|
||||
- Yes
|
||||
- Yes
|
||||
* - extVirtualLinks
|
||||
- ExtVirtualLinkData
|
||||
- 0..N
|
||||
- Information about external VLs to connect the VNF to.
|
||||
- No
|
||||
- Yes
|
||||
* - extManagedVirtualLinks
|
||||
- ExtManagedVirtualLinkData
|
||||
- 0..N
|
||||
- Information about internal VLs that are managed by the NFVO.
|
||||
- No
|
||||
- Yes
|
||||
* - vimConnectionInfo
|
||||
- map (VimConnectionInfo)
|
||||
- 0..N
|
||||
- "vimConnectionInfo" attribute array in "VnfInstance".
|
||||
- No
|
||||
- Yes
|
||||
* - additionalParams
|
||||
- KeyValuePairs
|
||||
- 0..1
|
||||
- Additional parameters passed by the NFVO as input to the process.
|
||||
- Yes
|
||||
- Yes
|
||||
* - extensions
|
||||
- KeyValuePairs
|
||||
- 0..1
|
||||
- "extensions" attribute in "VnfInstance".
|
||||
- No
|
||||
- Yes
|
||||
* - vnfConfigurableProperties
|
||||
- KeyValuePairs
|
||||
- 0..1
|
||||
- "vnfConfigurableProperties" attribute in "VnfInstance".
|
||||
- No
|
||||
- Yes
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
Primary assignee:
|
||||
Yuta Kazato <yuta.kazato.nw@hco.ntt.co.jp>
|
||||
|
||||
Hirofumi Noguchi <hirofumi.noguchi.rs@hco.ntt.co.jp>
|
||||
|
||||
Other contributors:
|
||||
Hiroo Kitamura <hiroo.kitamura@ntt-at.co.jp>
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Implement additional ChangeCurrentVNFPackage API parameters
|
||||
in tacker-server and tacker-conductor.
|
||||
* Implement additional functions of upgrade VNF operations.
|
||||
* Add and update unit and functional tests.
|
||||
* Add and update sample vnf packages.
|
||||
* Update the Tacker User Guide: ChangeCurrentVNFPackage API.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
* Change current VNF package (/vnf_instances/{vnfInstanceId}/
|
||||
change_vnfpkg POST) [#ETSI-NFV-SOL003-v3.3.1]_
|
||||
|
||||
* Tacker SPEC: Support ChangeCurrentVNFPackage for
|
||||
VNF software modification [#SPEC-Upgrade-Vnf-Pkg]_
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Unit and functional test cases will be added and
|
||||
updated for the ChangeCurrentVNFPackage API.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Description about additional upgrade VNF operations
|
||||
and ChangeCurrentVNFPackage API parameters will be added to
|
||||
the Tacker User Guide.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [#ETSI-NFV-SOL003-v3.3.1] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. [#ETSI-NFV-IFA007-v3.3.1] https://www.etsi.org/deliver/etsi_gs/NFV-IFA/001_099/007/03.03.01_60/gs_nfv-ifa007v030301p.pdf
|
||||
.. [#Tacker_User_Data] https://docs.openstack.org/tacker/latest/user/userdata_script.html
|
||||
.. [#IETF-RFC-7396] https://tools.ietf.org/html/rfc7396
|
||||
.. [#SPEC-Upgrade-Vnf-Pkg] https://specs.openstack.org/openstack/tacker-specs/specs/yoga/upgrade-vnf-package.html
|
Loading…
Reference in New Issue