Support multi artifact of ansible driver

The Ansible Driver currently has only a single configuration
information.
This above specification does not allow changing the configuration
information for multiple deployment Flavors.

Adopts the Multi artifact specification defined in TOSCA to hold
multiple Configuration information.
* Enable understanding of primary and dependencies at toscaparser
* Enable understanding of primary and dependencies at schema of tacker
* Extend method that get implementation information

Implements: blueprint add-ansible-mgmt-driver-sample
Change-Id: I7d8e48c7d20e38f119f81803c73480de68708eb9
This commit is contained in:
Wataru Juso 2022-04-05 13:55:39 +09:00
parent fc25d850ff
commit 18f36b3ee2
1 changed files with 268 additions and 0 deletions

View File

@ -0,0 +1,268 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=========================================
Support multi artifacts of ansible driver
=========================================
https://blueprints.launchpad.net/tacker/+spec/add-ansible-mgmt-driver-sample
We'll be able to use the configuration of multi deployment patterns.
Problem description
===================
The Ansible Driver has only one configuration information for the VDU.
This configuration information is defined in the ``implementation`` key.
.. note::
``implementation`` key is defined in TOSCA Simple Profile 3.6.14 [#f1]_.
This parameter cannot have multiple values, it has a single value.
It is executed according to this definition at the start and end of each
VNF lifecycle.
.. code-block:: yaml
node_templates:
VNF:
type: SAMPLE.VNF
properties:
flavour_description: 'n-vnf'
vnfm_info:
- Tacker
interfaces:
Vnflcm:
instantiate: []
instantiate_start: []
instantiate_end:
implementation: ansible_driver
...
artifacts:
ansible_driver:
description: Management driver plugin
type: tosca.artifacts.Implementation.Python
file: /opt/stack/tacker/tacker/vnfm/mgmt_drivers/ansible/ansible.py
If we want the different configurations for VNFD of different deployment
flavor, we need to implement the conditional branch within a Driver or
provide the another Driver.
However, these methods increase the specificity of the Driver.
We think of ways to ensure the versatility of Driver and propose the following
change.
Proposed change
===============
The proposed change is to implement the ``primary`` and ``dependencies`` keys
defined by TOSCA.
``primary`` can define the primary script.
``dependencies`` can define a secondary script that it's referenced by the
primary script.
If you implemented this dependency, you would define it as follows :
.. code-block:: yaml
node_templates:
VNF:
type: SAMPLE.VNF
properties:
flavour_description: 'n-vnf'
vnfm_info:
- Tacker
interfaces:
Vnflcm:
instantiate: []
instantiate_start:
implementation:
primary: ansible_driver
dependencies:
- mgmt-drivers-ansible-config-start
instantiate_end:
implementation:
primary: ansible_driver
dependencies:
- mgmt-drivers-ansible-config-end
...
artifacts:
ansible_driver:
description: Management driver plugin
type: tosca.artifacts.Implementation.Python
file: /opt/stack/tacker/tacker/vnfm/mgmt_drivers/ansible/ansible.py
mgmt-drivers-ansible-config-start:
description: Management driver config_start.yaml
type: tosca.artifacts.Implementation.Yaml
file: ../ScriptAnsible/config_start.yaml
mgmt-drivers-ansible-config-end:
description: Management driver config_end.yaml
type: tosca.artifacts.Implementation.Yaml
file: ../ScriptAnsible/config_end.yaml
``primary`` defines the script that has run management capabilities,
and ``dependencies`` defines the script that performs the actual injection.
These definitions allow for flexible configuration by the user.
.. note::
This spec also keep supporting the backward compatibility that single artifact
format currently used by VNFD.
How to use
----------
The Ansible Driver uses a yaml file.
However, the yaml definition isn't defined in OASIS and cannot be used as it is
by Tacker that refer to definition file of OASIS.
To use the yaml file, we create the following definition file.
example: additional_type.yaml
.. code-block:: yaml
tosca_definitions_version: tosca_simple_yaml_1_2
description: yaml types definitions version 0.0.1
metadata:
template_name: additional_type
template_author: ---
template_version: 0.0.1
artifact_types:
tosca.artifacts.Implementation.Yaml:
derived_from: tosca.artifacts.Implementation
description: artifacts for Yaml
mime_type: application/x-yaml
file_ext: [yaml]
After creation of this file, we put the this file in the ``Definitions`` folder
of VNF Package.
example
.. code-block:: shell
VNF Package
|
+--TOSCA-Metadata
| +--TOSCA.meta
|
+--Definitions
| +--etsi_nfv_sol001_common_types.yaml
| +--etsi_nfv_sol001_vnfd_types.yaml
| +--helloworld3_df_simple.yaml
| +--helloworld3_top.vnfd.yaml
| +--helloworld3_types.yaml
| +--additional_type.yaml <<< add file
|
+--Files
| +--images
| +--cirros-0.5.2-x86_64-disk.img
|
+--Drivers
| +--vnflcm_noop.py
|
+--UserData
+--__init__.py
+--lcm_user_data.py
The VNFD imports this definition file at imports section.
Also, the VNFD cannot read this definition file simply by storing it.
To be able to read this definition file, we add the following configuration
to the VNFD.
.. code-block:: yaml
tosca_definitions_version: tosca_simple_yaml_1_2
description: Simple deployment flavour for Sample VNF
imports:
- etsi_nfv_sol001_common_types.yaml
- etsi_nfv_sol001_vnfd_types.yaml
- helloworld3_types.yaml
- additional_type.yaml <<< import file
After the bellow settings, you can perform the VNF LCM.
Alternatives
------------
None
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)
-----------
Primary assignee:
Wataru Juso <w-juso@nec.com>
Other contributors:
Aldinson C. Esto <esto.aln@nec.com>
Pooja Singla <pooja.singla@india.nec.com>
Work Items
----------
* Enable understanding of primary and dependencies at tosca-parser
* Enable understanding of primary and dependencies at schema of tacker
* Extend method that get implementation information
Dependencies
============
None
Testing
=======
None
Documentation Impact
====================
* Modifying User Documentation of Ansible Driver
References
==========
.. [#f1] https://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/os/TOSCA-Simple-Profile-YAML-v1.2-os.html