Merge "Support individual VNFC management via Heat"
This commit is contained in:
commit
2b19a45f85
|
@ -0,0 +1,660 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
|
||||
===========================================
|
||||
Support individual VNFC management via Heat
|
||||
===========================================
|
||||
|
||||
.. Blueprints:
|
||||
|
||||
https://blueprints.launchpad.net/tacker/+spec/individual-vnfc-management
|
||||
|
||||
This specification proposes new functionality about
|
||||
individual VNFC management via OpenStack Heat.
|
||||
This proposal focuses on v2 VNF Lifecycle management (LCM) API
|
||||
and adds new sample BaseHOT, corresponding UserData script,
|
||||
and utility functions for UserData class [#Tacker-userdata_script]_.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
ETSI NFV SOL002 v3.3.1 [#NFV-SOL002_331]_ and
|
||||
SOL003 v3.3.1 [#NFV-SOL003_331]_
|
||||
define an element called VNF Component (VNFC).
|
||||
VNFC is a unit of a virtual computer such as VM and Pod,
|
||||
and VNF is composed of one or more VNFC.
|
||||
Tacker's VNF LCM API has supported
|
||||
the VNF instances consisting of multiple VNFCs
|
||||
by using the AutoScalingGroup [#OpenStack_Resource_Types_AutoScalingGroup]_
|
||||
provided by OpenStack Heat.
|
||||
|
||||
Following shows the sample BaseHOT with AutoScalingGroup.
|
||||
|
||||
* top HOT
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: 'Simple Base HOT for Sample VNF'
|
||||
|
||||
parameters:
|
||||
nfv:
|
||||
type: json
|
||||
|
||||
resources:
|
||||
VDU1_scale_group:
|
||||
type: OS::Heat::AutoScalingGroup
|
||||
properties:
|
||||
min_size: 1
|
||||
max_size: 3
|
||||
desired_capacity: { get_param: [ nfv, VDU, VDU1, desired_capacity ] }
|
||||
resource:
|
||||
type: VDU1.yaml
|
||||
properties:
|
||||
name: {get_param: [ nfv, VDU, VDU1, computeName ] }
|
||||
flavor: { get_param: [ nfv, VDU, VDU1, computeFlavourId ] }
|
||||
image: { get_param: [ nfv, VDU, VDU1, vcImageId ] }
|
||||
zone: { get_param: [ nfv, VDU, VDU1, locationConstraints] }
|
||||
net: { get_param: [ nfv, CP, VDU1_CP1, network] }
|
||||
|
||||
* nested HOT (VDU1.yaml specified in above top HOT)
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: 'VDU1 HOT for Sample VNF'
|
||||
|
||||
parameters:
|
||||
name:
|
||||
type: string
|
||||
flavor:
|
||||
type: string
|
||||
image:
|
||||
type: string
|
||||
zone:
|
||||
type: string
|
||||
net:
|
||||
type: string
|
||||
|
||||
resources:
|
||||
VDU1:
|
||||
type: OS::Nova::Server
|
||||
properties:
|
||||
name: { get_param: name }
|
||||
flavor: { get_param: flavor }
|
||||
image: { get_param: image }
|
||||
networks:
|
||||
- port:
|
||||
get_resource: VDU1_CP1
|
||||
|
||||
availability_zone: { get_param: zone }
|
||||
|
||||
VDU1_CP1:
|
||||
type: OS::Neutron::Port
|
||||
properties:
|
||||
network: { get_param: net }
|
||||
|
||||
|
||||
HEAT API (stack create, stack update, etc.) generates
|
||||
as many resources (VNFCs) as the "desired_capacity".
|
||||
Since properties are applied to all VNFCs uniformly,
|
||||
individual settings and updates cannot be made to individual VNFC.
|
||||
|
||||
It causes following two problems.
|
||||
|
||||
1. Service interruption by re-creating all VNFCs
|
||||
------------------------------------------------
|
||||
|
||||
AutoScalingGroup causes the service interruption in
|
||||
"VNF software modification not assisted by NFV-MANO"
|
||||
described in ETSI NFV IFA007 v3.6.1 B.2 [#NFV-IFA007_361]_.
|
||||
|
||||
In this scenario, after directly updating the VM's configuration
|
||||
from a component outside MANO,
|
||||
Modify operation updates the VNF Instance's information
|
||||
in VNFM for subsequent LCM integrity.
|
||||
Then subsequent Scale or Heal operation creates resources
|
||||
with the new image and
|
||||
re-create all VNFCs created by AutoScalingGroup simultaneously
|
||||
even if they are not scale-out targets or heal targets.
|
||||
This causes service interruption, which is unacceptable on commercial systems.
|
||||
Details of this problem can be found in the Proposed change chapter.
|
||||
|
||||
.. note:: Tacker has supported
|
||||
"VNF software modification assisted by NFV MANO
|
||||
via change of current VNF Package"
|
||||
described in IFA007 v3.6.1 B.3 [#NFV-IFA007_361]_
|
||||
by the rolling update operation of ChangeCurrentVNFPackage API.
|
||||
|
||||
2. Restriction for anti-affinity between VNFCs
|
||||
----------------------------------------------
|
||||
|
||||
When "ZONE" is specified as ``PlacementConstraint.scope``
|
||||
and VNFM obtains the zone from NFVO,
|
||||
AutoScalingGroup applies it to all VNFCs.
|
||||
That is, all VNFCs are deployed on the same zone
|
||||
even if anti-affinity is specified by VNFD or Grant.
|
||||
This behavior violates the standard specification.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
change of the sequence
|
||||
----------------------
|
||||
|
||||
This proposal changes the sequence of software update as follows.
|
||||
|
||||
Sequence before changing
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following sequence omits the notification process.
|
||||
|
||||
.. seqdiag::
|
||||
|
||||
seqdiag {
|
||||
node_width = 80;
|
||||
edge_length = 100;
|
||||
|
||||
EM; Client; NFVO; "Tacker common process"; "Tacker UserData script";
|
||||
Heat; VDU1-VNFC1; VDU1-VNFC2;
|
||||
|
||||
=== Instantiate VNF ===
|
||||
|
||||
"Client" -> "Tacker common process"
|
||||
[label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"];
|
||||
"Client" <-- "Tacker common process" [label = "Response 202 Accepted"];
|
||||
"Tacker common process" ->> "Tacker common process"
|
||||
[label = "calculate the number of VMs"];
|
||||
"NFVO" <- "Tacker common process" [label = "POST /grants"];
|
||||
"NFVO" --> "Tacker common process"
|
||||
[label = "201 Created with OpenStack Glance imageid"];
|
||||
"Tacker common process" -> "Tacker UserData script"
|
||||
[label = "request, instance, grantRequest, grant, tmp_csar_dir"];
|
||||
"Tacker common process" <-- "Tacker UserData script"
|
||||
[label = "HOT and corresponding input-parameter including desired_capacity"];
|
||||
"Tacker common process" -> "Heat"
|
||||
[label = "POST /v1/{tenant_id}/stacks --parameter
|
||||
imageid=<original imageid>; desired_capacity=1"];
|
||||
"Heat" -> "VDU1-VNFC1" [label = "create VM"];
|
||||
"Heat" <-- "VDU1-VNFC1" [label = ""];
|
||||
"Tacker common process" <-- "Heat" [label = ""];
|
||||
|
||||
=== Update internal configuration on VNFC ===
|
||||
|
||||
"EM" -> "VDU1-VNFC1" [label = "update the internal configuration"];
|
||||
"EM" <-- "VDU1-VNFC1" [label = ""];
|
||||
|
||||
=== Modify the VNF Instance's information in Tacker DB ===
|
||||
|
||||
"Client" -> "Tacker common process"
|
||||
[label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"];
|
||||
"Tacker common process" -> "Tacker common process"
|
||||
[label = "change vnfdid of the vnfInstance.
|
||||
new vnfd includes identifier of the new image."];
|
||||
"Client" <-- "Tacker common process" [label = "Response 202 Accepted"];
|
||||
|
||||
=== Scale-out the VNF ===
|
||||
|
||||
"Client" -> "Tacker common process"
|
||||
[label = "/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"];
|
||||
"Client" <-- "Tacker common process" [label = "Response 202 Accepted"];
|
||||
"NFVO" <- "Tacker common process" [label = "POST /grants"];
|
||||
"NFVO" --> "Tacker common process"
|
||||
[label = "201 Created with new OpenStack Glance imageid"];
|
||||
"Tacker common process" -> "Tacker UserData script"
|
||||
[label = "request, instance, grantRequest, grant, tmp_csar_dir"];
|
||||
"Tacker UserData script" -> "Tacker UserData script"
|
||||
[label = "calculate the number of VMs"];
|
||||
"Tacker common process" <-- "Tacker UserData script"
|
||||
[label = "HOT and corresponding input-paramaeter including desired_capacity"];
|
||||
"Tacker common process" -> "Heat"
|
||||
[label = "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}
|
||||
--existing --parameter imageid=<new imageid>; desired_capacity=2"];
|
||||
"Heat" -> "VDU1-VNFC1" [label = "re-create VM"];
|
||||
"Heat" <-- "VDU1-VNFC1" [label = ""];
|
||||
"Heat" -> "VDU1-VNFC2" [label = "create VM"];
|
||||
"Heat" <-- "VDU1-VNFC2" [label = ""];
|
||||
"Tacker common process" <-- "Heat" [label = ""];
|
||||
}
|
||||
|
||||
|
||||
The procedure consists of the following steps as illustrated in above sequence:
|
||||
|
||||
Instantiate VNF
|
||||
|
||||
#. Client sends Tacker common process a POST request
|
||||
for the Instantiate VNF Instance.
|
||||
#. The number of VMs is calculated by multiplying
|
||||
"instantiationLevelId" described in InstantiateVnfRequest
|
||||
and "number_of_instances" described in the VNFD.
|
||||
#. Tacker common process and NFVO exchange granting information.
|
||||
#. Tacker UserData script makes HOT and corresponding input-parameters.
|
||||
#. Tacker common process sends Heat stack-create request with
|
||||
the "Glance imageid" and "desired_capacity" of AutoScalingGroup.
|
||||
#. Heat creates VNFC1 belonging to VDU1.
|
||||
|
||||
Update internal configuration on VNFC and
|
||||
the VNF Instance's information in Tacker DB
|
||||
|
||||
#. Element Manager (EM) updates the internal configuration on VNFC1
|
||||
by accessing the guest OS.
|
||||
#. Client sends Tacker common process a PATCH request
|
||||
for the Modify VNF Information.
|
||||
#. Tacker common process updates vnfdid of the VNF Instance.
|
||||
The identifiers of the new software image
|
||||
having updated configuration are described in the new VNFD.
|
||||
|
||||
Scale-out the VNF
|
||||
|
||||
#. Client sends Tacker common process a POST request
|
||||
for the Scale-out VNF Instance.
|
||||
#. The number of VMs is calculated by multiplying
|
||||
"number_of_steps" described in Scale VNF request
|
||||
and "number_of_instances" described in the VNFD.
|
||||
#. Tacker common process and NFVO exchange granting information.
|
||||
Grant from NFVO contains the new Glance imageid for VNFC.
|
||||
#. Tacker UserData script makes HOT and corresponding input-parameters.
|
||||
#. Tacker common process sends Heat stack-update request with
|
||||
the "Glance imageid" and "desired_capacity" of AutoScalingGroup.
|
||||
#. Heat re-creates VNFC1 using the new software image.
|
||||
#. Heat creates VNFC2 using the new software image.
|
||||
|
||||
|
||||
Sequence after changing
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following sequence omits the notification process.
|
||||
|
||||
Changes are highlighted in red boxes.
|
||||
|
||||
.. seqdiag::
|
||||
|
||||
seqdiag {
|
||||
node_width = 80;
|
||||
edge_length = 100;
|
||||
|
||||
EM; Client; NFVO; "Tacker common process"; "Tacker UserData script";
|
||||
Heat; VDU1-VNFC1; VDU1-VNFC2;
|
||||
|
||||
=== Instantiate VNF ===
|
||||
|
||||
"Client" -> "Tacker common process"
|
||||
[label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/instantiate"];
|
||||
"Client" <-- "Tacker common process" [label = "Response 202 Accepted"];
|
||||
"Tacker common process" ->> "Tacker common process"
|
||||
[label = "calculate the number of VMs"];
|
||||
"NFVO" <- "Tacker common process" [label = "POST /grants"];
|
||||
"NFVO" --> "Tacker common process"
|
||||
[label = "201 Created with OpenStack Glance imageid"];
|
||||
"Tacker common process" -> "Tacker UserData script"
|
||||
[label = "request, instance, grantRequest, grant, tmp_csar_dir"];
|
||||
"Tacker common process" <-- "Tacker UserData script"
|
||||
[label = "adjusted HOT and corresponding input-parameter",
|
||||
leftnote = "Tacker UserData script makes adjusted HOT"];
|
||||
"Tacker common process" -> "Heat"
|
||||
[label = "POST /v1/{tenant_id}/stacks --parameter imageid=<original imageid>"];
|
||||
"Heat" -> "VDU1-VNFC1" [label = "create VM"];
|
||||
"Heat" <-- "VDU1-VNFC1" [label = ""];
|
||||
"Tacker common process" <-- "Heat" [label = ""];
|
||||
|
||||
=== Update internal configuration on VNFC ===
|
||||
|
||||
"EM" -> "VDU1-VNFC1" [label = "update the internal configuration"];
|
||||
"EM" <-- "VDU1-VNFC1" [label = ""];
|
||||
|
||||
=== Modify the VNF Instance's information in Tacker DB ===
|
||||
|
||||
"Client" -> "Tacker common process"
|
||||
[label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"];
|
||||
"Tacker common process" -> "Tacker common process"
|
||||
[label = "change vnfdid of the vnfInstance.
|
||||
new vnfd includes identifier of the new image."];
|
||||
"Client" <-- "Tacker common process" [label = "Response 202 Accepted"];
|
||||
|
||||
=== Scale-out the VNF ===
|
||||
|
||||
"Client" -> "Tacker common process"
|
||||
[label = "/vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"];
|
||||
"Client" <-- "Tacker common process" [label = "Response 202 Accepted"];
|
||||
"NFVO" <- "Tacker common process" [label = "POST /grants"];
|
||||
"NFVO" --> "Tacker common process"
|
||||
[label = "201 Created with new OpenStack Glance imageid"];
|
||||
"Tacker common process" -> "Tacker UserData script"
|
||||
[label = "request, instance, grantRequest, grant, tmp_csar_dir"];
|
||||
"Tacker UserData script" -> "Tacker UserData script"
|
||||
[label = "calculate the number of VMs"];
|
||||
"Tacker common process" <-- "Tacker UserData script"
|
||||
[label = "adjusted HOT and corresponding input-parameter",
|
||||
leftnote = "Tacker UserData script makes adjusted HOT"];
|
||||
"Tacker common process" -> "Heat"
|
||||
[label = "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}
|
||||
--existing --parameter imageid=<new imageid>"];
|
||||
"Heat" -> "VDU1-VNFC2" [label = "create VM"];
|
||||
"Heat" <-- "VDU1-VNFC2" [label = ""];
|
||||
"Tacker common process" <-- "Heat" [label = ""];
|
||||
}
|
||||
|
||||
|
||||
The procedure consists of the following steps as illustrated in above sequence:
|
||||
|
||||
Instantiate VNF
|
||||
|
||||
#. Client sends Tacker common process a POST request
|
||||
for the Instantiate VNF Instance.
|
||||
#. The number of VMs is calculated by multiplying
|
||||
"instantiationLevelId" described in InstantiateVnfRequest
|
||||
and "number_of_instances" described in VNFD.
|
||||
#. Tacker common process and NFVO exchange granting information.
|
||||
#. Tacker UserData script makes adjusted HOT and corresponding input-parameters.
|
||||
#. Tacker common process sends Heat stack-create request
|
||||
with the "Glance imageid".
|
||||
#. Heat creates VNFC1 belonging to VDU1.
|
||||
|
||||
Update internal configuration on VNFC
|
||||
and the VNF Instance's information in Tacker DB
|
||||
|
||||
#. Element Manager (EM) updates the internal configuration on VNFC1
|
||||
by accessing the guest OS.
|
||||
#. Client sends Tacker common process a PATCH request for the Modify VNF Information.
|
||||
#. Tacker common process updates vnfdid of the VNF Instance.
|
||||
The identifiers of the new software image
|
||||
having updated configuration are described in the new VNFD.
|
||||
|
||||
Scale-out the VNF
|
||||
|
||||
#. Client sends Tacker common process a POST request
|
||||
for the Scale-out VNF Instance.
|
||||
#. The number of VMs is calculated by multiplying
|
||||
"number_of_steps" described in Scale VNF request
|
||||
and "number_of_instances" described in VNFD.
|
||||
#. Tacker common process and NFVO exchange granting information.
|
||||
grant from NFVO contains new Glance imageid for VNFC.
|
||||
#. Tacker UserData script makes adjusted HOT and
|
||||
corresponding input-parameters.
|
||||
#. Tacker common process sends Heat stack-update request
|
||||
with the "Glance imageid" to target VNFC.
|
||||
#. Heat creates VNFC2 belonging to VDU1.
|
||||
|
||||
|
||||
Adjusted HOT
|
||||
------------
|
||||
|
||||
Tacker's UserData script generates adjusted HOT from BaseHOT.
|
||||
Individual VNFC definitions are described in adjusted HOT,
|
||||
and individual input-parameters for them can be specified.
|
||||
Therefore, Tacker can manage individual VNFC by using adjusted HOT.
|
||||
For example, Tacker can change the software image of only heal target VNFC.
|
||||
Also, Tacker can specify the different availability zone for each VNFC.
|
||||
|
||||
Since the proposed change does not affect Tacker-common process,
|
||||
Tacker can support both BaseHOT with AutoScalingGroup
|
||||
and BaseHOT without AutoScalingGroup.
|
||||
|
||||
BaseHOT
|
||||
^^^^^^^
|
||||
|
||||
* top HOT
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: Test Base HOT
|
||||
|
||||
parameters:
|
||||
nfv:
|
||||
type: json
|
||||
|
||||
resources:
|
||||
VDU1:
|
||||
type: VDU1.yaml
|
||||
properties:
|
||||
name: { get_param: [ nfv, VDU, VDU1, computeName ] }
|
||||
flavor: { get_param: [ nfv, VDU, VDU1, computeFlavourId ] }
|
||||
image: { get_param: [ nfv, VDU, VDU1, vcImageId ] }
|
||||
zone: { get_param: [ nfv, VDU, VDU1, locationConstraints] }
|
||||
net: { get_param: [ nfv, CP, VDU1_CP1, network] }
|
||||
|
||||
* nested HOT (VDU1.yaml specified in above top HOT)
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: 'VDU1 HOT for Sample VNF'
|
||||
|
||||
parameters:
|
||||
name:
|
||||
type: string
|
||||
flavor:
|
||||
type: string
|
||||
image:
|
||||
type: string
|
||||
zone:
|
||||
type: string
|
||||
net:
|
||||
type: string
|
||||
|
||||
resources:
|
||||
VDU1:
|
||||
type: OS::Nova::Server
|
||||
properties:
|
||||
name: { get_param: name }
|
||||
flavor: { get_param: flavor }
|
||||
image: { get_param: image }
|
||||
networks:
|
||||
- port:
|
||||
get_resource: VDU1_CP1
|
||||
|
||||
availability_zone: { get_param: zone }
|
||||
|
||||
VDU1_CP1:
|
||||
type: OS::Neutron::Port
|
||||
properties:
|
||||
network: { get_param: net }
|
||||
|
||||
* Input-parameter
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
"nfv": {
|
||||
"VDU": {
|
||||
"VDU1": {
|
||||
"computeName": "VDU1",
|
||||
"computeFlavourId": "m1.tiny",
|
||||
"vcImageId": "6b8a14f0-1b40-418a-b650-ae4a0378daa5",
|
||||
"locationConstraints": "zone-x"
|
||||
}
|
||||
},
|
||||
"CP": {
|
||||
"VDU1_CP1": {
|
||||
"network": "67c837dc-c247-4a3e-ac0f-5603bfef1ba3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Adjusted HOT
|
||||
^^^^^^^^^^^^
|
||||
|
||||
* top HOT
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
heat_template_version: 2013-05-23
|
||||
description: Test Base HOT
|
||||
|
||||
parameters:
|
||||
nfv:
|
||||
type: json
|
||||
|
||||
resources:
|
||||
VDU1-0:
|
||||
type: VDU1.yaml
|
||||
properties:
|
||||
name: { get_param: [ nfv, VDU, VDU1-0, computeName ] }
|
||||
flavor: { get_param: [ nfv, VDU, VDU1-0, computeFlavourId ] }
|
||||
image: { get_param: [ nfv, VDU, VDU1-0, vcImageId ] }
|
||||
zone: { get_param: [ nfv, VDU, VDU1-0, locationConstraints ] }
|
||||
net: { get_param: [ nfv, CP, VDU1_CP1-0, network ] }
|
||||
VDU1-1:
|
||||
type: VDU1.yaml
|
||||
properties:
|
||||
name: { get_param: [ nfv, VDU, VDU1-1, computeName ] }
|
||||
flavor: { get_param: [ nfv, VDU,VDU1-1, computeFlavourId ] }
|
||||
image: { get_param: [ nfv, VDU,VDU1-1, vcImageId ] }
|
||||
zone: { get_param: [ nfv, VDU,VDU1-1, locationConstraints ] }
|
||||
net: { get_param: [ nfv, CP, VDU1_CP1-1,network ] }
|
||||
|
||||
* nested HOT
|
||||
|
||||
Only the top HOT is changed to the adjusted HOT.
|
||||
Nested HOT is unchanged from BaseHOT.
|
||||
|
||||
* Input-parameter
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
"nfv": {
|
||||
"VDU": {
|
||||
"VDU1-0": {
|
||||
"computeName": "VDU1-0",
|
||||
"computeFlavourId": "m1.tiny",
|
||||
"vcImageId": "6b8a14f0-1b40-418a-b650-ae4a0378daa5",
|
||||
"locationConstraints": "zone-x"
|
||||
},
|
||||
"VDU1-1": {
|
||||
"computeName": "VDU1-1",
|
||||
"computeFlavourId": "m1.large",
|
||||
"vcImageId": "0ef0597c-4aab-4235-8513-bf5d8304fe64",
|
||||
"locationConstraints": "zone-y"
|
||||
}
|
||||
},
|
||||
"CP": {
|
||||
"VDU1_CP1-0": {
|
||||
"network": "67c837dc-c247-4a3e-ac0f-5603bfef1ba3"
|
||||
},
|
||||
"VDU1_CP1-1": {
|
||||
"network": "4d8aa289-21eb-4997-86f2-49a884f78d0b"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Following is the requirements of UserData script.
|
||||
|
||||
* UserData script calculates the number of VNFCs on the basis of
|
||||
the number of ``VnfInstance.instantiatedVnfInfo.vnfcResourceInfo``,
|
||||
``Grant.addResources``, and ``Grant.removeResources``
|
||||
similar to the method of calculating desired_capacity.
|
||||
`get_param_capacity` [#userdata_get_param_capacity]_
|
||||
, which is one of utility functions
|
||||
for UserData class can be used to get the number of resources.
|
||||
|
||||
* UserData script describes the same number of resources
|
||||
as VNFC to adjusted HOT.
|
||||
|
||||
* UserData scripts create the resource id of VNFC (e.g. VDU1-0, VDU-1-1).
|
||||
* Properties of resources are copied from BaseHOT.
|
||||
|
||||
* UserData script makes the input-parameter corresponding to Adjusted HOT.
|
||||
|
||||
.. note::
|
||||
There is a difference in scale-in operation with and without AutoScalingGroup.
|
||||
Basically, VNFCs are deleted in order from the latest in scale-in operation.
|
||||
In the case of using AutoScalingGroup, the latest resource is determined
|
||||
on the basis of the `creation_time` by OpenStack Nova.
|
||||
Since `creation_time` is updated by heal operation,
|
||||
the order of VNFCs is changed dynamically.
|
||||
On the other hand, in the case of the not using AutoScalingGroup,
|
||||
the latest resource is determined by the resource-id (e.g. VDU1-0, VDU1-1).
|
||||
Thus the order of the VNFc is not changed by heal operation when not using
|
||||
AutoScalingGroup.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Hirofumi Noguchi <hirofumi.noguchi.rs@hco.ntt.co.jp>
|
||||
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Add new VNF package containing new BaseHOT and new UserData scripts.
|
||||
* Add new functional tests.
|
||||
* Add new utility functions making adjusted HOT.
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
========
|
||||
|
||||
Functional test cases will be added for Instantiate and Scale VNF.
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
New utility functions for UserData class will be described
|
||||
in UserData script manual.
|
||||
|
||||
References
|
||||
==========
|
||||
.. [#Tacker-userdata_script]
|
||||
https://docs.openstack.org/tacker/latest/user/userdata_script.html
|
||||
.. [#NFV-SOL002_331]
|
||||
https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||
.. [#NFV-SOL003_331]
|
||||
https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. [#OpenStack_Resource_Types_AutoScalingGroup]
|
||||
https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Heat::AutoScalingGroup
|
||||
.. [#NFV-IFA007_361]
|
||||
https://docbox.etsi.org/ISG/NFV/Open/Publications_pdf/Specs-Reports/NFV-IFA%20007v3.6.1%20-%20GS%20-%20Or-Vnfm%20ref%20point%20Spec.pdf
|
||||
.. [#userdata_get_param_capacity] https://docs.openstack.org/tacker/latest/user/userdata_script.html#def-get-param-capacity-vdu-name-inst-grant-req
|
Loading…
Reference in New Issue