Update docs of User guide and API reference

This patch provides the following User guide and
API documentation updates.

API doc:
* Fix the description of "extensions" which is
  the Request Parameter for the "Instantiate VNF"
* Add "extVirtualLinks" which is the Request
  parameter for the "Change Current VNF package"

CLI doc:
* Fix Change Current VNF package operations
  for refactoring and adding modifying external NW
* Add Heal/Scale/Rollback operation commands in v2 LCM API
* Add LCM operations using Helm chart for v2 LCM API

Closes-Bug: #1981533
Implements: blueprint support-nfv-solv3-scale-vnf
Implements: blueprint support-nfv-solv3-heal-vnf
Implements: blueprint support-nfv-solv3-error-handling
Implements: blueprint helmchart-k8s-vim
Implements: blueprint enhance-change-package
Co-Author: Hirofumi Noguchi <hirofumi.noguchi.rs@hco.ntt.co.jp>
Change-Id: I95df17a29afc6aa425f93235ac006e14719e2b0b
This commit is contained in:
Yuta Kazato 2022-09-08 16:30:05 +09:00 committed by Hirofumi Noguchi
parent 0f5b388576
commit b80d278851
16 changed files with 1706 additions and 715 deletions

View File

@ -294,6 +294,18 @@ change_current_vnf_package_additional_params:
in: body
required: false
type: key value pairs
change_current_vnf_package_vim_connection_info:
description: |
Information about VIM connections to be used for managing the resources
for the VNF instance, or refer to external / externally-managed virtual links.
This attribute shall only be supported and may be present if VNF-related
resource management in direct mode is applicable.
The VNFM shall apply the content of this attribute to the
"vimConnectionInfo" attribute of "VnfInstance"
according to the rules of JSON Merge Patch.
in: body
required: false
type: map
change_ext_vnf_connectivity_additional_params:
description: |
Additional parameters passed by the NFVO as input to the process,
@ -1281,7 +1293,20 @@ vnf_instance_description:
type: string
vnf_instance_extensions:
description: |
description
Additional VNF-specific attributes that affect
the lifecycle management of this VNF instance.
These attributes represent values that are
stored persistently in the VnfInstance
structure for consumption by the VNFM or
the lifecycle management scripts during the
execution of VNF lifecycle management operations.
Modifying the values of these attributes has
no direct effect on the VNF instance;
however, the modified attribute values can
be considered during subsequent VNF
lifecycle management operations, which
means that the modified values can indirectly
affect the configuration of the VNF instance.
in: body
required: false
type: key value pairs

View File

@ -1,11 +1,10 @@
{
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
"additionalParams": {
"upgrade_type": "RollingUpdate",
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
"lcm-operation-coordinate-old-vnf-class": "CoordinateOldVnf",
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
"lcm-operation-coordinate-new-vnf-class": "CoordinateNewVnf",
"vdu_params": [{
"vdu_id": "VDU1",
"old_vnfc_param": {
@ -31,5 +30,195 @@
"password": "ubuntu"
}
}]
},
"extVirtualLinks": [
{
"extCps": [
{
"cpConfig": {
"VDU1_CP1": {
"cpProtocolData": [
{
"ipOverEthernet": {
"ipAddresses": [
{
"numDynamicAddresses": 1,
"subnetId": "9df49e05-4288-48d3-bbb5-9ae902d98506",
"type": "IPV4"
}
]
},
"layerProtocol": "IP_OVER_ETHERNET"
}
],
"parentCpConfigId": "6274c3fa-1cec-41cc-add2-fc8808793cf7"
}
},
"cpdId": "VDU1_CP1"
},
{
"cpConfig": {
"VDU2_CP1-1": {
"cpProtocolData": [
{
"ipOverEthernet": {
"ipAddresses": [
{
"numDynamicAddresses": 1,
"subnetId": "9df49e05-4288-48d3-bbb5-9ae902d98506",
"type": "IPV4"
}
]
},
"layerProtocol": "IP_OVER_ETHERNET"
}
],
"linkPortId": "315a2b77-8076-49df-84fe-45579faf4085",
"parentCpConfigId": "99f8ba42-3619-4fbd-81a5-999c3767237b"
}
},
"cpdId": "VDU2_CP1-1"
},
{
"cpConfig": {
"VDU2_CP1-2": {
"cpProtocolData": [
{
"ipOverEthernet": {
"ipAddresses": [
{
"numDynamicAddresses": 1,
"subnetId": "9df49e05-4288-48d3-bbb5-9ae902d98506",
"type": "IPV4"
}
]
},
"layerProtocol": "IP_OVER_ETHERNET"
}
],
"linkPortId": "63e41d9c-2b34-45e9-be79-13bdf9f8b3a3",
"parentCpConfigId": "3b55b051-c5cb-41cf-bc0e-ea71e95d2636"
}
},
"cpdId": "VDU2_CP1-2"
}
],
"extLinkPorts": [
{
"id": "315a2b77-8076-49df-84fe-45579faf4085",
"resourceHandle": {
"resourceId": "1cb1fb17-1a8f-4052-8599-ec6858da3659"
}
},
{
"id": "63e41d9c-2b34-45e9-be79-13bdf9f8b3a3",
"resourceHandle": {
"resourceId": "dummy-id"
}
}
],
"id": "38a38351-fbed-4637-8dcd-01ca1f69d4bb",
"resourceId": "bbe38e96-8395-4b7f-a7da-67058922df1c",
"resourceProviderId": "Company",
"vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1"
},
{
"extCps": [
{
"cpConfig": {
"VDU1_CP2": {
"cpProtocolData": [
{
"ipOverEthernet": {
"ipAddresses": [
{
"numDynamicAddresses": 1,
"subnetId": "775cdf14-a942-4358-a3f2-60ad423f6ad2",
"type": "IPV4"
}
]
},
"layerProtocol": "IP_OVER_ETHERNET"
}
],
"parentCpConfigId": "c09646b2-8a91-4af3-8260-71cfa865a5b1"
}
},
"cpdId": "VDU1_CP2"
},
{
"cpConfig": {
"VDU2_CP2": {
"cpProtocolData": [
{
"ipOverEthernet": {
"ipAddresses": [
{
"fixedAddresses": [
"100.100.100.12"
],
"subnetId": "775cdf14-a942-4358-a3f2-60ad423f6ad2",
"type": "IPV4"
},
{
"numDynamicAddresses": 1,
"subnetId": "15cd2e7e-add5-42cd-b790-2fe734fcc7dc",
"type": "IPV6"
}
],
"macAddress": "fa:16:3e:fa:22:75"
},
"layerProtocol": "IP_OVER_ETHERNET"
}
],
"parentCpConfigId": "40820a06-be32-4ea1-ae38-5f164c8de178"
}
},
"cpdId": "VDU2_CP2"
}
],
"id": "97a82200-328a-44f6-98cb-bfdf27c359c1",
"resourceId": "b47d25bd-f1d8-4136-b7e7-ac8754977661",
"resourceProviderId": "Company",
"vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1"
}
],
"vimConnectionInfo": {
"vim1": {
"accessInfo": {
"password": "devstack",
"project": "nfv",
"projectDomain": "Default",
"region": "RegionOne",
"userDomain": "Default",
"username": "nfv_user"
},
"extra": {
"new-key": "new-val"
},
"interfaceInfo": {
"endpoint": "http://localhost/identity/v3"
},
"vimId": "defb2f96-5670-4bef-8036-27bf61267fc1",
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3"
},
"vim2": {
"accessInfo": {
"password": "dummy_password",
"project": "dummy_project",
"projectDomain": "Default",
"region": "RegionOne",
"userDomain": "Default",
"username": "dummy_user"
},
"extra": {
"dummy-key": "dummy-val"
},
"interfaceInfo": {
"endpoint": "http://localhost/identity/v3"
},
"vimId": "c8dbc7c0-a4f4-4bff-8075-4cb555e63b7b",
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3"
}
}
}
}

View File

@ -831,6 +831,8 @@ Request Parameters
- vnfInstanceId: vnf_instance_id
- vnfdId: change_vnfpkg_vnfd_id
- extVirtualLinks: ext_virtual_links
- vimConnectionInfo: change_current_vnf_package_vim_connection_info
- additionalParams: change_current_vnf_package_additional_params
Request Example

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,41 @@
@startuml
frame "python-tackerclient" {
component "tacker-client" as client {
package "VNF Package" as vnfpkg {
file "VNFD" as vnfd
file "CNF\nDefinition" as cnfd
}
file "Instantiate\nparameters" as inst_param
}
}
frame "tacker" {
component "tacker-server" {
component "server" as serv
}
component "tacker-conductor" {
component "conductor" as cond
component "Helm\ninfra-driver" as infra
}
}
node "Helm"
node "Kubernetes\nCluster\n(Master)" as k8s_m
cloud "Hardware Resources" as hw {
node "Kubernetes\nCluster\n(Worker)" as k8s_w {
node "Pod" as ins1
}
}
'# Relationships
vnfpkg --> serv: 1. Request\n create VNF
inst_param --> serv: 2. Request\n instantiate VNF
serv --> cond
cond --> infra
infra --> Helm: 3. Execute Helm command
Helm -right-> k8s_m: 4. Call Kubernetes\n API
k8s_m --> ins1: 5. Create a Pod
@enduml

View File

@ -74,10 +74,6 @@ definition file before running command for changing the VNF package.
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
"additionalParams": {
"upgrade_type": "RollingUpdate",
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
"lcm-operation-coordinate-old-vnf-class": "CoordinateOldVnf",
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
"lcm-operation-coordinate-new-vnf-class": "CoordinateNewVnf",
"lcm-kubernetes-def-files": ["Files/new_kubernetes/new_deployment.yaml"],
"vdu_params": [{
"vdu_id": "VDU1"
@ -93,13 +89,15 @@ definition file before running command for changing the VNF package.
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
"additionalParams": {
"upgrade_type": "RollingUpdate",
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
"lcm-operation-coordinate-old-vnf-class": "CoordinateOldVnf",
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
"lcm-operation-coordinate-new-vnf-class": "CoordinateNewVnf"
}
}
.. note::
Unlike Change Current Vnf Package for VNF,
coordination scripts are not supported for CNF.
Therefore, lcm-operation-coordinate files need not be
specified by `additionalParams`.
You can set following parameter in additionalParams:
.. list-table:: additionalParams
@ -112,60 +110,12 @@ You can set following parameter in additionalParams:
* - upgrade_type
- 1
- Type of file update operation method. Specify Blue-Green or Rolling update.
* - lcm-operation-coordinate-old-vnf
- 1
- The file path of the script that simulates the behavior of CoordinateVNF for old VNF.
* - lcm-operation-coordinate-old-vnf-class
- 1
- The class name of CoordinateVNF for old VNF.
* - lcm-operation-coordinate-new-vnf
- 1
- The file path of the script that simulates the behavior of CoordinateVNF for new VNF.
* - lcm-operation-coordinate-new-vnf-class
- 1
- The class name of CoordinateVNF for new VNF.
* - vdu_params
- 0..N
- VDU information of target VDU to update. Specifying a vdu_params is required for OpenStack VIM and not required for Kubernetes VIM.
- 1..N
- VDU information of target VDU to update.
* - > vdu_id
- 1
- VDU name of target VDU to update.
* - > old_vnfc_param
- 0..1
- Old VNFC connection information. Required for ssh connection in CoordinateVNF operation for application configuration to VNFC.
* - >> cp-name
- 1
- Connection point name of old VNFC to update.
* - >> username
- 1
- User name of old VNFC to update.
* - >> password
- 1
- Password of old VNFC to update.
* - > new_vnfc_param
- 0..1
- New VNFC connection information. Required for ssh connection in CoordinateVNF operation for application configuration to VNFC.
* - >> cp-name
- 1
- Connection point name of new VNFC to update.
* - >> username
- 1
- User name of new VNFC to update.
* - >> password
- 1
- Password of new VNFC to update.
* - external_lb_param
- 0..1
- Load balancer information that requires configuration changes. Required only for the Blue-Green deployment process of OpenStack VIM.
* - > ip_address
- 1
- IP address of load balancer server.
* - > username
- 1
- User name of load balancer server.
* - > password
- 1
- Password of load balancer server.
.. note:: ``sample_param_file_for_specified_resources.json`` contains
all optional parameters.
@ -175,13 +125,6 @@ You can set following parameter in additionalParams:
OpenStack VIM. And you only need to set this parameter when you need to
update the path of the manifest file of the deployment resource.
* ``vdu_params`` is VDU information of target VDU to update.
Specifying a ``vdu_params`` is required for OpenStack VIM and not
required for Kubernetes VIM.
* ``lcm-operation-coordinate-old-vnf`` and
``lcm-operation-coordinate-new-vnf`` are unique implementations of Tacker
to simulate the coordination interface in `ETSI SOL002 v3.5.1`_. Mainly a
script that can communicate with the VM after the VM is created, perform
special customization of the VM or confirm the status of the VM.
.. note:: Currently, this operation only supports some functions of
``Change Current VNF Package``.

View File

@ -417,6 +417,11 @@ In the example of this procedure, specify the ID
``686b356f-8096-4e24-99e5-3c81d36341be`` of the first ``vnfcResourceInfo`` as
``VNFC_INATANCE_ID``.
.. note:: In the case of version 1 API,
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcResourceInfo.id``.
In the case of version 2 API,
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcInfo.id``.
.. code-block:: console
$ openstack vnflcm heal 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 --vnfc-instance 686b356f-8096-4e24-99e5-3c81d36341be

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
===================================================================
===============================================
ETSI NFV-SOL CNF (Containerized VNF) Deployment
===================================================================
===============================================
This section covers how to deploy ETSI NFV-SOL containerized VNF
in Tacker using Kubernetes VIM.
@ -41,7 +41,7 @@ The following figure shows an overview of the CNF deployment.
Prepare Kubernetes VIM
=======================
1. Create a Config File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~
Before register a Kubernetes VIM to tacker, we should create config file.
The following ``vim-k8s.yaml`` file provides necessary information to
@ -51,28 +51,13 @@ parameters that can be obtained from the Kubernetes Master-node.
For specific methods of obtaining "bearer_token" and "ssl_ca_cert",
please refer to [#first]_.
By using ``extra`` field, we can register VIM with Helm installed as
the control target of Tacker.
.. note::
* ``extra`` is an optional parameter.
* For VIM using Helm, the following preconditions need to be met:
* Use the specified user to login through ssh to execute the CLI
command of Helm.
* The specified user has sudo execution permissions for the
mkdir/chown/rm commands and does not require a password.
* Create the /var/tacker/helm directory on VIM as the transfer
destination for Helm chart files.
.. code-block:: console
$ cat vim-k8s.yaml
auth_url: "https://192.168.33.100:6443"
project_name: "default"
bearer_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBRVDgxQkV5VDNVR1M1WGEwUFYxSXFkZFhJWDYzNklvMEp2WklLMnNFdk0ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi12cnpoaiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImNhY2VmMzEzLTMzYjYtNDQ5MS1iMWUyLTg0NmQ2N2E0OTdkNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.R76VIWVZnQxa9NG02HIqux1xTJG4i7dkXsp52T4UU8bvNfsfi18kW_p3ZvaNTxw0yABBcmkYZoOBe4MNP5cTP6TtR_ERZoA5QCViasW_u36rSTBT0-MHRPbkXjJYetzYaFYUO-DlJd3194yOtVHtrxUd8D31qw0f1FlP8BHxblDjZkYlgYSjHCxcwEdwlnYaa0SiH2kl6_oCBRFg8cUfXDeTOmH9XEfdrJ6ubJ4OyqG6YjfiKDDiEHgIehy7s7vZGVwVIPy6EhT1YSOIhY5aF-G9nQSg-GK1V9LIq7petFoW_MIEt0yfNQVXy2D1tBhdJEa1bgtVsLmdlrNVf-m3uA"
ssl_ca_cert: "-----BEGIN CERTIFICATE-----nID
ssl_ca_cert: "-----BEGIN CERTIFICATE-----
MIICwjCCAaqgAwIBAgIBADANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDEwdrdWJl
LWNhMB4XDTIwMDgyNjA5MzIzMVoXDTMwMDgyNDA5MzIzMVowEjEQMA4GA1UEAxMH
a3ViZS1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxkeE16lPAd
@ -90,72 +75,6 @@ the control target of Tacker.
2ZrqgOcTmyFzFh9h2dj1DJWvCvExybRmzWK1e8JMzTb40MEApyY=
-----END CERTIFICATE-----"
type: "kubernetes"
extra:
helm_info:
masternode_ip:
- "192.168.33.100"
masternode_username: "helm_user"
masternode_password: "helm_pass"
In addition to using ``bearer_token`` to authenticate with Kubernetes ,
OpenID token [#sixth]_ is also supported. The following sample specifies
``oidc_token_url``, ``client_id``, ``client_secret``, ``username``, ``password``
instead of ``bearer_token`` for OpenID token authentication.
Before using OpenID token authentication, additional settings are required.
Please refer to [#seventh]_, and how to get the values of the ``oidc_token_url``,
``client_id``, ``client_secret``, ``username``, ``password`` and ``ssl_ca_cert``
parameters is documented.
The SSL certificates of Kubernetes and OpenID provider are concatenated
in ``ssl_ca_cert``.
.. code-block:: console
$ cat vim-k8s.yaml
auth_url: "https://192.168.33.100:6443"
project_name: "default"
oidc_token_url: "https://192.168.33.100:8443/realms/oidc/protocol/openid-connect/token"
client_id: "tacker"
client_secret: "A93HfOUpySm6BjPug9PJdJumjEGUJMhc"
username: "end-user"
password: "end-user"
ssl_ca_cert: "-----BEGIN CERTIFICATE-----
MIICwjCCAaqgAwIBAgIBADANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDEwdrdWJl
LWNhMB4XDTIwMDgyNjA5MzIzMVoXDTMwMDgyNDA5MzIzMVowEjEQMA4GA1UEAxMH
a3ViZS1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxkeE16lPAd
pfJj5GJMvZJFcX/CD6EB/LUoKwGmqVoOUQPd3b/NGy+qm+3bO9EU73epUPsVaWk2
Lr+Z1ua7u+iib/OMsfsSXMZ5OEPgd8ilrTGhXOH8jDkif9w1NtooJxYSRcHEwxVo
+aXdIJhqKdw16NVP/elS9KODFdRZDfQ6vU5oHSg3gO49kgv7CaxFdkF7QEHbchsJ
0S1nWMPAlUhA5b8IAx0+ecPlMYUGyGQIQgjgtHgeawJebH3PWy32UqfPhkLPzxsy
TSxk6akiXJTg6mYelscuxPLSe9UqNvHRIUoad3VnkF3+0CJ1z0qvfWIrzX3w92/p
YsDBZiP6vi8CAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMB
Af8wDQYJKoZIhvcNAQELBQADggEBAIbv2ulEcQi019jKz4REy7ZyH8+ExIUBBuIz
InAkfxNNxV83GkdyA9amk+LDoF/IFLMltAMM4b033ZKO5RPrHoDKO+xCA0yegYqU
BViaUiEXIvi/CcDpT9uh2aNO8wX5T/B0WCLfWFyiK+rr9qcosFYxWSdU0kFeg+Ln
YAaeFY65ZWpCCyljGpr2Vv11MAq1Tws8rEs3rg601SdKhBmkgcTAcCzHWBXR1P8K
rfzd6h01HhIomWzM9xrP2/2KlYRvExDLpp9qwOdMSanrszPDuMs52okXgfWnEqlB
2ZrqgOcTmyFzFh9h2dj1DJWvCvExybRmzWK1e8JMzTb40MEApyY=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIC7TCCAdWgAwIBAgIUQK2k5uNvlRLx43LI/t3a2/A/3iQwDQYJKoZIhvcNAQEL
BQAwFTETMBEGA1UEAxMKa3ViZXJuZXRlczAeFw0yMjA4MDQwNjIwNTFaFw0yMzA4
MDQwNjIwNTFaMBMxETAPBgNVBAMMCEtleWNsb2FrMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAni7HWLn2IpUImGO1sbBf/XuqATkXSeIIRuQuFymwYPoX
BP7RowzrbfF9KUwdIKlz9IXjqb1hplumiqNy1Sc7MmrTY9Fj87MNAMlnCIvyWkjE
XVXWxGef49mqc85P2K1iuAsr2R7sDrv7SC0ch+lHclOjGDmCjKOk8qF3kD1LATWg
zf42aXb4nNF9kyIOPEbI+jX4PWhAQpEz5nIG+xIRjTHGfacjpeg0+XOK21wLAuQB
fqebJ6GxX4OzB37ZtLLgrKyBYWaWuYkWbexVRM3wEvQu8ENkvhV017iPuPHSxNWx
Y8z072XMs9j8XRQD65EVqObXyizotPRJF4slEJ9qMQIDAQABozcwNTAJBgNVHRME
AjAAMAsGA1UdDwQEAwIF4DAbBgNVHREEFDAShwR/AAABhwTAqAIhhwQKCgCMMA0G
CSqGSIb3DQEBCwUAA4IBAQBebjmNHd8sJXjvPQc3uY/3KSDpk9AYfYzhUZvcvLNg
z0llFqXHaFlMqHTsz1tOH4Ns4PDKKoRT0JIKC1FkvjzqgL+X2jWFS0NRoNyd3W3B
yHLEL7MdQqDR+tZX02EGfaGXjuy8GHIU4J2hXhohmpn6ntfiRONfY8jaEjIecPFS
IwZWXNhsDESa1zuDe0PatES/Ati8bAUpN2rb/7rsE/AeM5GXpQfOKV0XxdIeBZ82
Vf5cUDWPipvq2Q9KS+yrTvEObGtA6gKhQ4bpz3MieU3N8AtQpEKtROH7mJWMHyl2
roD1k8KeJlfvR/XcVTGFcgIdNLfKIdd99Xfi4gSaIKuw
-----END CERTIFICATE-----"
type: "kubernetes"
2. Register Kubernetes VIM
~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -205,7 +124,6 @@ the [1. Create a config file] chapter.
| auth_url | https://192.168.33.100:6443 |
| created_at | 2020-10-19 08:08:12.116040 |
| description | |
| extra | helm_info=masternode_ip=['192.168.33.100'], masternode_password=helm_user, masternode_username=helm_pass |
| id | 8d8373fe-6977-49ff-83ac-7756572ed186 |
| is_default | False |
| name | test-vim-k8s |
@ -240,9 +158,6 @@ Also we can check if the status of VIM is REACHABLE by
Prepare VNF Package
===================
If we want to deploy CNF through helm, we can refer to `Prepare VNF Package`_.
1. Create Directories of VNF Package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TOSCA YAML CSAR file is an archive file using the ZIP file format whose
@ -256,7 +171,7 @@ Here is a sample of building a VNF Package CSAR directory:
.. _Create a Kubernetes Object File:
2. Create a Kubernetes Object File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A CSAR VNF package shall have a object file that defines Kubernetes resources
to be deployed.
The file name shall have an extension of ".yaml".
@ -266,7 +181,7 @@ different yaml files.
.. note:: Please refer to Kubernetes api resource [#second]_ for an example yaml file of
each resource.
For the types of resources that can be deployed in Victoria, please refer to
For the types of resources that can be deployed, please refer to
following link Kubernetes resource kind support [#third]_.
The following is a simple example of ``deployment`` resource.
@ -734,9 +649,6 @@ After the command is executed, the generated ID is ``VNF instance ID``.
Instantiate VNF
===============
If we want to deploy CNF through helm, we can refer to `Instantiate VNF`_.
1. Set the Value to the Request Parameter File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Get the ID of target VIM.
@ -799,10 +711,29 @@ vimId and vimType.
]
}
.. note::
There is a difference in resource creation
depending on the API version.
version 1 API creates the resources in order sorted by `kinds`.
version 2 API creates the resources in the order of
`lcm-kubernetes-def-files` list.
Therefore, version 2 API requires users to specify the
`lcm-kubernetes-def-files` list in the correct order.
In the case of version 1 API,
`additionalParams` can also contain `vdu_mapping` parameter.
In this case, specify the type and name of the resource corresponding to the
`VDU ID`` defined in the VNFD as follows:
.. note::
version 2 API does not support `vdu_mapping` parameter.
Although specifying it does not cause an error,
it is meaningless.
.. code-block:: console
$ cat ./instance_kubernetes.json
@ -844,7 +775,7 @@ chapter.
Instantiate request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted.
3. Check the Instantiation State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We could check the Instantiation State by running the following command.
When the Instantiation State is INSTANTIATED, indicate the instantiation is
successful.
@ -945,7 +876,3 @@ References
.. [#third] https://specs.openstack.org/openstack/tacker-specs/specs/victoria/container-network-function.html#kubernetes-resource-kind-support
.. [#fourth] https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html
.. [#fifth] https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names
.. [#sixth] https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens
.. [#seventh] https://docs.openstack.org/tacker/latest/reference/kubernetes_openid_token_auth_usage_guide.html
.. _Prepare VNF Package : https://docs.openstack.org/tacker/latest/user/mgmt_driver_deploy_k8s_and_cnf_with_helm.html#prepare-vnf-package
.. _Instantiate VNF : https://docs.openstack.org/tacker/latest/user/mgmt_driver_deploy_k8s_and_cnf_with_helm.html#instantiate-vnf

View File

@ -25,6 +25,7 @@ Container
:maxdepth: 1
etsi_containerized_vnf_usage_guide
etsi_cnf_helm_v2
Scale
^^^^^
@ -108,9 +109,6 @@ Container
Error Handling
^^^^^^^^^^^^^^
VM
~~
.. toctree::
:maxdepth: 1
@ -119,8 +117,8 @@ VM
.. TODO(h-asahina): add `Action Driver`
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs
Management Driver
^^^^^^^^^^^^^^^^^
Management Driver (v1 API)
^^^^^^^^^^^^^^^^^^^^^^^^^^
.. TODO(h-asahina): add `Overview`
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs

View File

@ -44,37 +44,20 @@ procedure to instantiate VNF.
You can refer to :doc:`./vnf-package` for the operation of uploading
VNF package.
The sample packages for the following four cases can be obtained from
the following links.
* `VNF Package for Common instantiate`_
* `change from image to image`_ flavour_id=image
* `change from image to volume`_ flavour_id=image
* `change from volume to image`_ flavour_id=volume
* `change from volume to volume`_ flavour_id=volume
.. note::
You can deploy a VM directly by image, or you can create a volume by image
first, and then create a VM by the volume. Therefore, when updating the
image of the VM, there will be four cases. The above four links correspond
to four cases respectively.
You can deploy a VM directly by image or volume.
Therefore, when updating the
image of the VM, there will be two cases.
Use the common VNF package and the flavor_id after the above four links to
instantiate, and then use the VNF package in the corresponding link to
execute ``change current vnf package`` operation, you can update the image
of the VM in the following four ways.
Use the common VNF package and the flavor_id to instantiate,
and then use the VNF package in the corresponding link to
execute ``change current vnf package`` operation,
you can update the image of the VM in the following two ways.
1. change VM created by image to VM created by new image
2. change VM created by image to VM created by volume
3. change VM created by volume to VM created by image
4. change VM created by volume to VM created by new volume
2. change VM created by volume to VM created by new volume
Change Current VNF Package
--------------------------
@ -100,9 +83,7 @@ definition file before running command for changing the VNF package.
"additionalParams": {
"upgrade_type": "RollingUpdate",
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
"lcm-operation-coordinate-old-vnf-class": "CoordinateOldVnf",
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
"lcm-operation-coordinate-new-vnf-class": "CoordinateNewVnf",
"vdu_params": [{
"vdu_id": "VDU1",
"old_vnfc_param": {
@ -140,9 +121,7 @@ definition file before running command for changing the VNF package.
"additionalParams": {
"upgrade_type": "RollingUpdate",
"lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py",
"lcm-operation-coordinate-old-vnf-class": "CoordinateOldVnf",
"lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py",
"lcm-operation-coordinate-new-vnf-class": "CoordinateNewVnf",
"vdu_params": [{
"vdu_id": "VDU2",
"old_vnfc_param": {
@ -174,15 +153,9 @@ You can set following parameter in additionalParams:
* - lcm-operation-coordinate-old-vnf
- 1
- The file path of the script that simulates the behavior of CoordinateVNF for old VNF.
* - lcm-operation-coordinate-old-vnf-class
- 1
- The class name of CoordinateVNF for old VNF.
* - lcm-operation-coordinate-new-vnf
- 1
- The file path of the script that simulates the behavior of CoordinateVNF for new VNF.
* - lcm-operation-coordinate-new-vnf-class
- 1
- The class name of CoordinateVNF for new VNF.
* - vdu_params
- 0..N
- VDU information of target VDU to update. Specifying a vdu_params is required for OpenStack VIM and not required for Kubernetes VIM.
@ -246,18 +219,20 @@ You can set following parameter in additionalParams:
supports ``RollingUpdate`` type. You can set it via ``upgrade_type``
param.
* Currently only support update images of VMs.
* Currently only support update images of VMs and modify external networks..
* Currently unsupported updates:
* This API currently does not support increasing or decreasing the number
of VNFcs according to the VNF package.
* The add and delete operations of the entire VDU are not supported.
* In the definition of ETSI, external networks (e.g. extVirtualLinks,
extManagedVirtualLinks) can be modified. This API currently does not
support the operations of modifying, adding, and deleting these
networks.
* In the definition of ETSI, external and internal networks
(e.g. extVirtualLinks, extManagedVirtualLinks) can be modified.
This current API supports the operations of modifying external
networks only and does not support the following operations.
* Adding and deleting external networks.
* Modifying, adding, and deleting internal networks.
How to Change VM created by image to VM created by new image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -599,381 +574,6 @@ See `Heat CLI reference`_. for details on Heat CLI commands.
'3f87132d-0c98-42a6-aa7b-b7db1f25e4fa' to
'18fd7e66-c81f-48bb-bf18-d523996ce59c'.
How to Change VM created by image to VM created by volume
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Execute Change Current VNF Package CLI command. After complete this change
operation you should check resource status by Heat CLI commands.
1. check 'ID' and 'Stack Status' of the stack before and after operation.
This is to confirm that stack 'ID' has changed before and after operation,
and that the Stack update has been updated successfully.
2. check 'physical_resource_id' and 'resource_status' of the VDU.
This is to confirm that 'physical_resource_id' of VDU has
changed before and after operation, and that the 'resource_status' of VDU has
been created successfully.
3. check 'image' information of VDU before and after operation. This is to
confirm that VDU's has changed from created by image to created by volume.
.. note:: Only single VM support change from image to volume.
* Check point 1 before operation
Stack information before operation:
.. code-block:: console
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
Result:
.. code-block:: console
+--------------------------------------+------------------------------------------+-----------------+
| ID | Stack Name | Stack Status |
+--------------------------------------+------------------------------------------+-----------------+
| 26c0d3fe-4e9d-4059-8b60-4f407fc268ee | vnf-679131c9-9f66-4930-a74c-1d382610d3c4 | CREATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+
* Check point 2 before operation
VDU(single) information before operation:
.. code-block:: console
$ openstack stack resource list 26c0d3fe-4e9d-4059-8b60-4f407fc268ee
Result:
.. code-block:: console
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+
| VDU1_scale_in | 2e9275cb862a40a3915339666ea9496d | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T02:51:12Z |
| VDU1_scale_out | ff4186d24bc74f0ca6723f277739d232 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T02:51:12Z |
| VDU1_scale | 657c5b64-753e-43b5-b1e7-1ce929b21278 | OS::Heat::AutoScalingGroup | CREATE_COMPLETE | 2022-03-18T02:51:13Z |
| VDU2 | 256ed8f8-b051-4bb5-8d3b-b0056c571d10 | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T02:51:13Z |
| VDU2_CP1 | 70c383f8-97ee-4ed4-82c8-68e87fbb1a0f | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T02:51:13Z |
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+
* Check point 3 before operation
VDU(single) detailed information before operation:
.. code-block:: console
$ openstack stack resource show 26c0d3fe-4e9d-4059-8b60-4f407fc268ee VDU2 \
-c attributes --fit-width
Result:
.. code-block:: console
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| attributes | {'id': '256ed8f8-b051-4bb5-8d3b-b0056c571d10', 'name': 'vn-31c9-9f66-4930-a74c-1d382610d3c4-VDU2-exts43f5p4dn', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': |
| | 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': {'id': 'de5e0908-2e07-4250-a788-d3b693425f9f', 'links': [{'rel': 'bookmark', 'href': |
| | 'http://192.168.2.100/compute/images/de5e0908-2e07-4250-a788-d3b693425f9f'}]}, 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
| | 'created': '2022-03-18T02:51:17Z', 'updated': '2022-03-18T02:51:26Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:13:2a:61'}]}, 'accessIPv4': |
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/256ed8f8-b051-4bb5-8d3b-b0056c571d10'}, {'rel': 'bookmark', 'href': |
| | 'http://192.168.2.100/compute/servers/256ed8f8-b051-4bb5-8d3b-b0056c571d10'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
| | USG:launched_at': '2022-03-18T02:51:40.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007bb', 'OS-EXT- |
| | SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-2gt4gvxy', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-31c9-9f66-4930-a74c-1d382610d3c4-vdu2-exts43f5p4dn', 'OS-EXT- |
| | SRV-ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': '...' |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
* Execute Change Current VNF Package
Change Current VNF Package execution of the entire VNF:
.. code-block:: console
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
./sample_param_file_for_single_resource.json \
--os-tacker-api-version 2
Result:
.. code-block:: console
Change Current VNF Package for VNF Instance 679131c9-9f66-4930-a74c-1d382610d3c4 has been accepted.
* Check point 1 after operation
Stack information after operation:
.. code-block:: console
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
Result:
.. code-block:: console
+--------------------------------------+------------------------------------------+-----------------+
| ID | Stack Name | Stack Status |
+--------------------------------------+------------------------------------------+-----------------+
| 26c0d3fe-4e9d-4059-8b60-4f407fc268ee | vnf-679131c9-9f66-4930-a74c-1d382610d3c4 | UPDATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+
.. note::
'Stack Status' transitions to UPDATE_COMPLETE.
* Check point 2 after operation
VDU(single) information after operation:
.. code-block:: console
$ openstack stack resource list 26c0d3fe-4e9d-4059-8b60-4f407fc268ee
Result:
.. code-block:: console
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
| VDU1_scale_in | 2e9275cb862a40a3915339666ea9496d | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T02:51:12Z |
| VDU1_scale_out | ff4186d24bc74f0ca6723f277739d232 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T02:51:12Z |
| VDU1_scale | 657c5b64-753e-43b5-b1e7-1ce929b21278 | OS::Heat::AutoScalingGroup | UPDATE_COMPLETE | 2022-03-18T03:02:27Z |
| VDU2_CP1 | 70c383f8-97ee-4ed4-82c8-68e87fbb1a0f | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T02:51:13Z |
| VDU2-VirtualStorage | ea8a15c2-45f8-4230-94b0-b79dce28f3dd | OS::Cinder::Volume | CREATE_COMPLETE | 2022-03-18T03:01:42Z |
| multi | 90b16501-bbb2-4f59-bbb8-96dcf74de13c | OS::Cinder::VolumeType | CREATE_COMPLETE | 2022-03-18T03:01:42Z |
| VDU2 | 3bd7c3eb-7d9d-4861-9ea3-052286f3238f | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T03:01:59Z |
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
.. note::
'resource_status' transitions to CREATE_COMPLETE.
'physical_resource_id' changes from
'256ed8f8-b051-4bb5-8d3b-b0056c571d10' to
'3bd7c3eb-7d9d-4861-9ea3-052286f3238f'.
* Check point 3 after operation
VDU(single) detailed information after operation:
.. code-block:: console
$ openstack stack resource show 26c0d3fe-4e9d-4059-8b60-4f407fc268ee VDU2 \
-c attributes --fit-width
Result:
.. code-block:: console
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| attributes | {'id': '3bd7c3eb-7d9d-4861-9ea3-052286f3238f', 'name': 'vn-31c9-9f66-4930-a74c-1d382610d3c4-VDU2-f2fjfnlznq2l', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': |
| | 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': '', 'flavor': {'vcpus': 2, 'ram': 2048, 'disk': 10, 'ephemeral': 0, 'swap': 0, |
| | 'original_name': 'ds2G', 'extra_specs': {'hw_rng:allowed': 'True'}}, 'created': '2022-03-18T03:02:00Z', 'updated': '2022-03-18T03:02:14Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': |
| | 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:13:2a:61'}]}, 'accessIPv4': '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/3bd7c3eb-7d9d-4861-9ea3-052286f3238f'}, {'rel': |
| | 'bookmark', 'href': 'http://192.168.2.100/compute/servers/3bd7c3eb-7d9d-4861-9ea3-052286f3238f'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, |
| | 'OS-SRV-USG:launched_at': '2022-03-18T03:02:28.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007bd', |
| | 'OS-EXT-SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-bi7mipxi', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-31c9-9f66-4930-a74c-1d382610d3c4-vdu2-f2fjfnlznq2l', |
| | 'OS-EXT-SRV-ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': '...', 'OS-EXT-STS:task_state': None, 'OS-EXT-STS:vm_state': 'active', |
| | 'OS-EXT-STS:power_state': 1, 'os-extended-volumes:volumes_attached': [{'id': 'ea8a15c2-45f8-4230-94b0-b79dce28f3dd', 'delete_on_termination': |
| | False}], 'host_status': 'UP', 'locked': False, 'locked_reason': None, 'description': None, 'tags': [], 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. note:: You can check VDU has changed from created by image
'de5e0908-2e07-4250-a788-d3b693425f9f' to created by volume
'ea8a15c2-45f8-4230-94b0-b79dce28f3dd'.
How to Change VM created by volume to VM created by image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Execute Change Current VNF Package CLI command. After complete this change
operation you should check resource status by Heat CLI commands.
1. check 'ID' and 'Stack Status' of the stack before and after operation.
This is to confirm that stack 'ID' has changed before and after operation,
and that the Stack update has been updated successfully.
2. check 'physical_resource_id' and 'resource_status' of the VDU.
This is to confirm that 'physical_resource_id' of VDU has
changed before and after operation, and that the 'resource_status' of VDU has
been created successfully.
3. check 'image' and 'volume' information of VDU before and after operation.
This is to confirm that VDU's has changed from created by volume to created
by image.
.. note:: Only single VM support change from image to volume.
* Check point 1 before operation
Stack information before operation:
.. code-block:: console
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
Result:
.. code-block:: console
+--------------------------------------+------------------------------------------+-----------------+
| ID | Stack Name | Stack Status |
+--------------------------------------+------------------------------------------+-----------------+
| ba66ff3f-cb83-403a-b75a-4ef24f67afea | vnf-e4d76bde-1a4c-40f5-8405-5536403e73d5 | CREATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+
* Check point 2 before operation
VDU(single) information before operation:
.. code-block:: console
$ openstack stack resource list ba66ff3f-cb83-403a-b75a-4ef24f67afea
Result:
.. code-block:: console
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
| VDU1_scale_in | 26696adeb09b401982afb626b8f6a332 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU1_scale_out | 8edd5b6d76d44843b3a2b6798288f256 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU1_scale | 592c21ca-ed4f-4a4d-bbbd-7c9e80d0f6b0 | OS::Heat::AutoScalingGroup | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU2 | d6bf000e-021a-4c0c-b043-7936331ed22a | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU2-VirtualStorage | 60db6ba6-d637-4ba5-9c18-fa5d64930123 | OS::Cinder::Volume | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| multi | 69c67ded-71d5-4d44-9c9f-ba988643c27e | OS::Cinder::VolumeType | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU2_CP1 | 62af0f3a-bcf9-40b6-a12e-fc56152f156c | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
+---------------------+--------------------------------------+----------------------------+-----------------+----------------------+
* Check point 3 before operation
VDU(single) detailed information before operation:
.. code-block:: console
$ openstack stack resource show ba66ff3f-cb83-403a-b75a-4ef24f67afea VDU2 \
-c attributes --fit-width
Result:
.. code-block:: console
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| attributes | {'id': 'd6bf000e-021a-4c0c-b043-7936331ed22a', 'name': 'vn-6bde-1a4c-40f5-8405-5536403e73d5-VDU2-m7zwdqixjkpi', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': |
| | 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': '', 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': |
| | 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, 'created': '2022-03-18T04:57:35Z', 'updated': '2022-03-18T04:57:49Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT- |
| | IPS-MAC:mac_addr': 'fa:16:3e:2f:ca:38'}]}, 'accessIPv4': '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/d6bf000e-021a-4c0c-b043-7936331ed22a'}, {'rel': 'bookmark', 'href': |
| | 'http://192.168.2.100/compute/servers/d6bf000e-021a-4c0c-b043-7936331ed22a'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
| | USG:launched_at': '2022-03-18T04:58:03.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007be', 'OS-EXT- |
| | SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-ddim06pv', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-6bde-1a4c-40f5-8405-5536403e73d5-vdu2-m7zwdqixjkpi', 'OS-EXT- |
| | SRV-ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': 'Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yODc5ODU4MTc |
| | 5', 'OS-EXT-STS:task_state': None, 'OS-EXT-STS:vm_state': 'active', 'OS-EXT-STS:power_state': 1, 'os-extended-volumes:volumes_attached': [{'id': '60db6ba6-d637-4ba5-9c18-fa5d64930123', 'delete_on_termination': False}], |
| | 'host_status': 'UP', 'locked': False, 'locked_reason': None, 'description': None, 'tags': [], 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
* Execute Change Current VNF Package
Change Current VNF Package execution of the entire VNF:
.. code-block:: console
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
./sample_param_file_for_single_resource.json \
--os-tacker-api-version 2
Result:
.. code-block:: console
Change Current VNF Package for VNF Instance e4d76bde-1a4c-40f5-8405-5536403e73d5 has been accepted.
* Check point 1 after operation
Stack information after operation:
.. code-block:: console
$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'
Result:
.. code-block:: console
+--------------------------------------+------------------------------------------+-----------------+
| ID | Stack Name | Stack Status |
+--------------------------------------+------------------------------------------+-----------------+
| ba66ff3f-cb83-403a-b75a-4ef24f67afea | vnf-e4d76bde-1a4c-40f5-8405-5536403e73d5 | UPDATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+
.. note::
'Stack Status' transitions to UPDATE_COMPLETE.
* Check point 2 after operation
VDU(single) information after operation:
.. code-block:: console
$ openstack stack resource list ba66ff3f-cb83-403a-b75a-4ef24f67afea
Result:
.. code-block:: console
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+
| resource_name | physical_resource_id | resource_type | resource_status | updated_time |
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+
| VDU1_scale_in | 26696adeb09b401982afb626b8f6a332 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU1_scale_out | 8edd5b6d76d44843b3a2b6798288f256 | OS::Heat::ScalingPolicy | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU1_scale | 592c21ca-ed4f-4a4d-bbbd-7c9e80d0f6b0 | OS::Heat::AutoScalingGroup | UPDATE_COMPLETE | 2022-03-18T05:03:55Z |
| VDU2_CP1 | 62af0f3a-bcf9-40b6-a12e-fc56152f156c | OS::Neutron::Port | CREATE_COMPLETE | 2022-03-18T04:57:21Z |
| VDU2 | 7687d229-d3c7-4c88-9783-1b0a09bb169f | OS::Nova::Server | CREATE_COMPLETE | 2022-03-18T05:03:23Z |
+----------------+--------------------------------------+----------------------------+-----------------+----------------------+
.. note::
'resource_status' transitions to CREATE_COMPLETE.
'physical_resource_id' changes from
'd6bf000e-021a-4c0c-b043-7936331ed22a' to
'7687d229-d3c7-4c88-9783-1b0a09bb169f'.
* Check point 3 after operation
VDU(single) detailed information after operation:
.. code-block:: console
$ openstack stack resource show 5330ea82-0fd6-4a29-a796-0646e7c6815f VDU2 \
-c attributes --fit-width
Result:
.. code-block:: console
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| attributes | {'id': '7687d229-d3c7-4c88-9783-1b0a09bb169f', 'name': 'vn-6bde-1a4c-40f5-8405-5536403e73d5-VDU2-jexec2twpgpp', 'status': 'ACTIVE', 'tenant_id': 'b7457dcef9374c2fa72e22c452bb04e9', 'user_id': |
| | 'ed6a354ef25041ac92c0e445e91cc9a9', 'metadata': {}, 'hostId': 'd2de6a234a80a445a7ee385f445e6084358f3aef2e110d7bc888ccf2', 'image': {'id': '6fbf2395-5140-406b-abfe-b80fc0ff7ead', 'links': [{'rel': 'bookmark', 'href': |
| | 'http://192.168.2.100/compute/images/6fbf2395-5140-406b-abfe-b80fc0ff7ead'}]}, 'flavor': {'vcpus': 1, 'ram': 512, 'disk': 1, 'ephemeral': 0, 'swap': 0, 'original_name': 'm1.tiny', 'extra_specs': {'hw_rng:allowed': 'True'}}, |
| | 'created': '2022-03-18T05:03:23Z', 'updated': '2022-03-18T05:03:32Z', 'addresses': {'net0': [{'version': 4, 'addr': '10.10.0.101', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:2f:ca:38'}]}, 'accessIPv4': |
| | '', 'accessIPv6': '', 'links': [{'rel': 'self', 'href': 'http://192.168.2.100/compute/v2.1/servers/7687d229-d3c7-4c88-9783-1b0a09bb169f'}, {'rel': 'bookmark', 'href': |
| | 'http://192.168.2.100/compute/servers/7687d229-d3c7-4c88-9783-1b0a09bb169f'}], 'OS-DCF:diskConfig': 'MANUAL', 'progress': 0, 'OS-EXT-AZ:availability_zone': 'nova', 'config_drive': '', 'key_name': None, 'OS-SRV- |
| | USG:launched_at': '2022-03-18T05:03:46.000000', 'OS-SRV-USG:terminated_at': None, 'security_groups': [{'name': 'default'}], 'OS-EXT-SRV-ATTR:host': 'compute101', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000007c0', 'OS-EXT- |
| | SRV-ATTR:hypervisor_hostname': 'compute101', 'OS-EXT-SRV-ATTR:reservation_id': 'r-rqd3rep5', 'OS-EXT-SRV-ATTR:launch_index': 0, 'OS-EXT-SRV-ATTR:hostname': 'vn-6bde-1a4c-40f5-8405-5536403e73d5-vdu2-jexec2twpgpp', 'OS-EXT- |
| | SRV-ATTR:kernel_id': '', 'OS-EXT-SRV-ATTR:ramdisk_id': '', 'OS-EXT-SRV-ATTR:root_device_name': '/dev/vda', 'OS-EXT-SRV-ATTR:user_data': 'Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT02NzkzNzUxNjg |
| | 2', 'OS-EXT-STS:task_state': None, 'OS-EXT-STS:vm_state': 'active', 'OS-EXT-STS:power_state': 1, 'os-extended-volumes:volumes_attached': [], 'host_status': 'UP', 'locked': False, 'locked_reason': None, 'description': None, |
| | 'tags': [], 'trusted_image_certificates': None, 'server_groups': [], 'os_collect_config': {}} |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. note:: You can check VDU has changed from created by volume
'60db6ba6-d637-4ba5-9c18-fa5d64930123' to created by image
'6fbf2395-5140-406b-abfe-b80fc0ff7ead'.
How to Change VM created by volume to VM created by volume
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -295,8 +295,6 @@ Rollback VNF LCM Operation
the IP address and Port Id will be recovered by its rollback operation.
| Otherwise, dynamic IP address and Port Id are not recovered
by rollback operation.
| Currently, Instantiate VNF with kubernetes vim does not support rollback
operation when using v2 API.
This manual describes the following operations as use cases for
rollback operations.
@ -514,10 +512,6 @@ Retry VNF LCM Operation
-
- X
.. note::
| Currently, Instantiate VNF with kubernetes vim does not support retry
operation when using v2 API.
This manual describes the following operations as use cases for
retry operations.

View File

@ -391,7 +391,12 @@ This is the VNFC instance ID.
This manual shows an example of healing VDU1 as VNFC.
In this manual, **b07ba349-1366-4d14-91e9-07842cdfa7ab** corresponds to
the VNFC instance ID of VDU1.
the ``VNFC_instance_ID`` of VDU1.
.. note:: In the case of version 1 API,
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcResourceInfo.id``.
In the case of version 2 API,
``VNFC_INSTANCE_ID`` is ``instantiatedVnfInfo.vnfcInfo.id``.
When healing specified with VNFC instances, the following
APIs are executed from Tacker to Heat.

View File

@ -223,22 +223,28 @@ Deployment`_.
Prepare Kubernetes VIM
^^^^^^^^^^^^^^^^^^^^^^
First, you need to prepare a server with Kubernetes and Helm installed.
If the server is deployed by :ref:`Deploy Kubernetes Cluster by helm`,
you can skip steps 1 and 2 below.
The following change is required from original section `Prepare Kubernetes
VIM`_:
* Skip the VIM registration procedure
1. Create a Config File
~~~~~~~~~~~~~~~~~~~~~~~
You can refer to the `Create a Config File`_ section to create a config file.
This step is not required because it is performed in conjunction with the VIM
registration during the Helm installation procedure.
After completing the procedures in this chapter, execute the following
:ref:`Register Kubernetes VIM by helm charts` instead of conventional procedure
(`2. Register Kubernetes VIM`_).
.. _Register Kubernetes VIM by helm charts:
2. Register Kubernetes VIM
~~~~~~~~~~~~~~~~~~~~~~~~~~
You can refer to the `Register Kubernetes VIM`_ section to register VIM.
3. Confirm VIM status
~~~~~~~~~~~~~~~~~~~~~
For the registered VIM information, confirm that the VIM exists and
the Status is "REACHABLE".
If Helm is used, no new registration is required because
:ref:`Deploy Kubernetes Cluster by helm` registers VIM when Kubernetes Cluster
is deployed.
For the registered VIM information, confirm that the VIM registered in
:ref:`Deploy Kubernetes Cluster by helm` exists and the Status is "REACHABLE".
.. code-block:: console
@ -522,8 +528,6 @@ Reference
.. _Instantiate VNF : https://docs.openstack.org/tacker/latest/user/etsi_containerized_vnf_usage_guide.html#set-the-value-to-the-request-parameter-file
.. _1. Set the Value to the Request Parameter File : https://docs.openstack.org/tacker/latest/user/etsi_containerized_vnf_usage_guide.html#set-the-value-to-the-request-parameter-file
.. _4. Check the Deployment in Kubernetes : https://docs.openstack.org/tacker/latest/user/etsi_containerized_vnf_usage_guide.html#check-the-deployment-in-kubernetes
.. _Create a Config File : https://docs.openstack.org/tacker/latest/user/etsi_containerized_vnf_usage_guide.html#create-a-config-file
.. _Register Kubernetes VIM : https://docs.openstack.org/tacker/latest/user/etsi_containerized_vnf_usage_guide.html#register-kubernetes-vim
.. [#Helm-Create] : https://helm.sh/docs/helm/helm_create/
.. [#Helm-Package] : https://helm.sh/docs/helm/helm_package/

View File

@ -2,6 +2,15 @@
How to use a Sample VNF Package for practical use cases
=======================================================
.. warning::
This document shows a sample VNF Package and
VNF operations with v1 VNF LCM API.
Note that v2 API and CNF operations have
different requirements for a VNF Package
and API parameters.
See the API reference and other use case guides
for details on requirements.
Overview
--------

View File

@ -31,25 +31,30 @@ Any file name and class name are acceptable.
userdata class must inherit "userdata_utils.AbstractUserData",
then functions have to be implemented.
Followings are requirements for methods supported by latest Tacker.
Followings are requirements of methods supported by latest Tacker.
Input of instantiate()
----------------------
Input of all methods
--------------------
The function can use the following input data.
All methods can use the following input data.
The details of data types are defined in ETSI NFV SOL documents.
- req: InstantiateVnfRequest
- req: operationParams corresponding to API request
- inst: VnfInstance
- grant_req: GrantRequest
- grant: Grants
- tmp_csar_dir: the temporary path of csar expanded by Tacker.
- tmp_csar_dir: the temporary path of csar expanded by Tacker
Output of instantiate()
-----------------------
Output of methods
-----------------
The function must return the following structure.
The required output is different for methods.
instantiate()
^^^^^^^^^^^^^
The method 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
@ -57,9 +62,9 @@ The requirements of HEAT API are described in
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.
- 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.
@ -76,23 +81,10 @@ Following shows sample output.
return fields
Input of scale()
----------------
scale()
^^^^^^^
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 scale()
-----------------
The function must return the following structure.
The method must return the following structure.
Data are for update stack API in HEAT.
The requirements of HEAT API are described in
`reference of Orchestration Service API v1
@ -100,7 +92,7 @@ The requirements of HEAT API are described in
fields = {'parameters': {'nfv': {'VDU': new_vdus}}}
- parameters: Input parameters for Heat API.
- parameters: Input parameters for Heat API
Following shows sample output.
@ -111,23 +103,10 @@ Following shows sample output.
return fields
Input of scale_rollback()
-------------------------
scale_rollback()
^^^^^^^^^^^^^^^^
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 scale_rollback()
--------------------------
The function must return the following structure.
The method must return the following structure.
Data are for update stack API in HEAT.
The requirements of HEAT API are described in
`reference of Orchestration Service API v1
@ -135,7 +114,7 @@ The requirements of HEAT API are described in
fields = {'parameters': {'nfv': {'VDU': new_vdus}}}
- parameters: Input parameters for Heat API.
- parameters: Input parameters for Heat API
Following shows sample output.
@ -146,23 +125,10 @@ Following shows sample output.
return fields
Input of change_ext_conn_rollback()
-----------------------------------
change_ext_conn()
^^^^^^^^^^^^^^^^^
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 change_ext_conn_rollback()
------------------------------------
The function must return the following structure.
The method must return the following structure.
Data are for update stack API in HEAT.
The requirements of HEAT API are described in
`reference of Orchestration Service API v1
@ -170,7 +136,7 @@ The requirements of HEAT API are described in
fields = {'parameters': {'nfv': {'CP': new_cps}}}
- parameters: Input parameters for Heat API.
- parameters: Input parameters for Heat API
Following shows sample output.
@ -181,23 +147,10 @@ Following shows sample output.
return fields
Input of change_ext_conn()
--------------------------
change_ext_conn_rollback()
^^^^^^^^^^^^^^^^^^^^^^^^^^
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 change_ext_conn()
---------------------------
The function must return the following structure.
The method must return the following structure.
Data are for update stack API in HEAT.
The requirements of HEAT API are described in
`reference of Orchestration Service API v1
@ -205,7 +158,7 @@ The requirements of HEAT API are described in
fields = {'parameters': {'nfv': {'CP': new_cps}}}
- parameters: Input parameters for Heat API.
- parameters: Input parameters for Heat API
Following shows sample output.
@ -216,23 +169,10 @@ Following shows sample output.
return fields
Input of heal()
---------------
heal()
^^^^^^
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 heal()
----------------
The function must return the following structure.
The method must return the following structure.
Data are for update stack API in HEAT.
The requirements of HEAT API are described in
`reference of Orchestration Service API v1
@ -240,7 +180,7 @@ The requirements of HEAT API are described in
fields = {'parameters': {'nfv': {}}}
- parameters: Input parameters for Heat API.
- parameters: Input parameters for Heat API
Following shows sample output.
@ -250,9 +190,8 @@ Following shows sample output.
return fields
Sample userdata script
======================
Sample userdata script using AutoScalingGroup
=============================================
If users do not specify the userdata in instantiate VNF request,
the default process runs according to the following script.
@ -279,6 +218,202 @@ The following is sample Base HOT corresponding to above sample userdata script.
:language: yaml
Sample userdata script for not using AutoScalingGroup
=====================================================
Even if OS::Heat::AutoScalingGroup is not specified in HOT,
Tacker can create the desired number of VNFC resources
as individual resources on the basis of the VNFD.
This configuration enables users to handle individual VNFC resources,
e.g. users can change images or networks of specified VNFC.
The following shows the sample userdata script
for handling VNFCs without AutoScalingGroup.
.. literalinclude:: ../../../tacker/sol_refactored/infra_drivers/openstack/userdata_standard.py
Following is the specification of the sample 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`, which is one of the 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.
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 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.
This userdata script creates the adjusted HOT from BaseHOT
in the VNF package and it is used as HEAT template.
The following shows a sample BaseHOT and adjusted HOT.
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"
}
}
}
Utility functions for userdata class
====================================
@ -293,9 +428,9 @@ def get_vnfd(vnfd_id, csar_dir)
Get vnfd in yaml format.
**vnf_id**: vnfid
, **csar_dir**: the path of csar.
, **csar_dir**: the path of csar
It returns an instance of `**Vnfd** class`_.
It returns an instance of `Vnfd class`_.
def init_nfv_dict(hot_template)
@ -316,7 +451,7 @@ 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
, **req**: operationParams corresponding to API request
, **vnfd**: vnfd
, **grant**: Grants
@ -331,7 +466,7 @@ 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
, **req**: operationParams corresponding to API request
, **vnfd**: vnfd
, **grant**: Grants
@ -344,7 +479,7 @@ def get_param_zone(vdu_name, grant_req, grant)
Get zone id of VDU.
**vdu_name**: the name of VDU
, **req**: InstantiateVnfRequest
, **req**: operationParams corresponding to API request
, **vnfd**: vnfd
, **grant**: Grants
@ -392,7 +527,7 @@ Get network resourceId of CP.
**cp_name**: the name of CP
, **grant**: Grants
, **req**: InstantiateVnfRequest
, **req**: operationParams corresponding to API request
It returns network resourceId.
@ -404,7 +539,7 @@ Get fixed IP addresses of CP.
**cp_name**: the name of CP
, **grant**: Grants
, **req**: InstantiateVnfRequest
, **req**: operationParams corresponding to API request
It returns fixed IP address of CP.
@ -524,5 +659,5 @@ It returns the result of json_merge_patch (IETF RFC 7396).
.. _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
.. _reference of Orchestration Service API v1 "PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}": https://docs.openstack.org/api-ref/orchestration/v1/?expanded=update-stack-patch-detail#update-stack-patch
.. _**Vnfd** class: ../../../tacker/sol_refactored/common/vnfd_utils.py
.. _Vnfd class: https://github.com/openstack/tacker/blob/master/tacker/sol_refactored/common/vnfd_utils.py#L33
.. _ETSI NFV SOL003: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_NFV-SOL003v030301p.pdf