Add ETSI getting started

The current `Tacker User Guide` page doesn't have `Getting Started` for
ETSI NFV-SOL Tacker.

Added `Getting Started with ETSI NFV-SOL Tacker`.

Also, added sample files, such as a VIM config file, VNF packages and a
VNF instantiation parameters file, to the `samples` directory, which
are referred from the `Getting Started` page.

Change-Id: I58dadaa6c99fc45a34d87218c4d943e2572aa0a1
Signed-off-by: Hiromu Asahina <hiromu.asahina.az@hco.ntt.co.jp>
This commit is contained in:
h_asahina 2021-07-24 00:45:46 +09:00 committed by Hiromu Asahina
parent ddf28104a3
commit 68b23730a6
24 changed files with 2792 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1,9 @@
@startuml
scale 300 width
nwdiag {
network internalVL1 {
address = "10.0.0.0/24"
vdu [description="VDU1\n(cirros)" address=CP1];
}
}
@enduml

View File

@ -0,0 +1,733 @@
..
Copyright 2014-2015 OpenStack Foundation
All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
========================================
Getting Started with ETSI NFV-SOL Tacker
========================================
Summary
-------
This lecture enables you to:
- create & delete a sample VNF on the OpenStack with Tacker
Following two types of VNF deployment supported by Tacker are introduced in
this lecture.
- VNF Deployment with TOSCA [#f1]_
- VNF Deployment with LCM Operation User Data (optional) [#f2]_
"VNF Deployment with LCM Operation User Data" is optional.
The part will be clarified with the notation [This is UserData specific part].
The following figure shows a sample VNF used in this lecture.
.. figure:: ../_images/etsi-getting-started-sample-vnf.png
:align: left
.. note::
VIM config, a VNF package, and instantiation parameters used in this tutorial are placed at the repository.
- VNF Deployment with TOSCA [#f3]_
- VNF Deployment with LCM Operation User Data [#f4]_
.. note::
You can see logs of Tacker with this command:
.. code-block:: console
$ sudo journalctl -u devstack@tacker.service
$ sudo journalctl -u devstack@tacker-conductor.service
Prerequisites
-------------
The following packages should be installed [#f5]_:
* tacker
* python-tackerclient
Configuration
^^^^^^^^^^^^^
Load credentials for client operations
""""""""""""""""""""""""""""""""""""""
Before any Tacker commands can be run, your credentials need to be sourced
[#f6]_.
You can confirm that Tacker is available by checking this command works without
error:
.. code-block:: console
$ openstack vim list
.. note::
See CLI reference [#f7]_ to find all the available commands.
Register VIM
------------
#. Create the ``vim_config.yaml``:
These parameters need to be changed as your environment. This is an
example named as ``vim_config.yaml`` for devstack installed OpenStack
VIM.
.. code-block:: console
$ vi ./vim_config.yaml
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/vim/vim_config.yaml
:language: yaml
#. Register the VIM as default VIM:
The parameter ``--is-default`` should be added to register the VIM as
default. It helps you in the step of VNF instantiation.
.. code-block:: console
$ openstack vim register \
--config-file ./vim_config.yaml \
--is-default --fit-width openstack-admin-vim
+----------------+-------------------------------------------------+
| Field | Value |
+----------------+-------------------------------------------------+
| auth_cred | { |
| | "username": "admin", |
| | "user_domain_name": "Default", |
| | "cert_verify": "True", |
| | "project_id": null, |
| | "project_name": "admin", |
| | "project_domain_name": "Default", |
| | "auth_url": "http://127.0.0.1/identity/v3", |
| | "key_type": "barbican_key", |
| | "secret_uuid": "***", |
| | "password": "***" |
| | } |
| auth_url | http://127.0.0.1/identity/v3 |
| created_at | 2020-05-24 07:00:25.923831 |
| description | |
| id | 4bb57004-9e33-4c52-b5f9-629f876b4168 |
| is_default | True |
| name | openstack-admin-vim |
| placement_attr | { |
| | "regions": [ |
| | "RegionOne" |
| | ] |
| | } |
| project_id | d413421abf074c9b8f54a1403857038c |
| status | PENDING |
| type | openstack |
| updated_at | None |
| vim_project | { |
| | "name": "admin", |
| | "project_domain_name": "Default" |
| | } |
+----------------+-------------------------------------------------+
#. Check the status of registered VIM:
.. code-block:: console
$ openstack vim list
+------------+------------+------------+-----------+------------+-----------+
| ID | Name | Tenant_id | Type | Is Default | Status |
+------------+------------+------------+-----------+------------+-----------+
| 4bb57004-9 | openstack- | d413421abf | openstack | True | REACHABLE |
| e33-4c52-b | admin-vim | 074c9b8f54 | | | |
| 5f9-629f87 | | a140385703 | | | |
| 6b4168 | | 8c | | | |
+------------+------------+------------+-----------+------------+-----------+
Create & Upload VNF Package
---------------------------
Prepare VNF Package
^^^^^^^^^^^^^^^^^^^
#. Create VNF Package CSAR directories:
.. code-block:: console
$ mkdir -p ./sample_vnf_package_csar/TOSCA-Metadata \
./sample_vnf_package_csar/Definitions \
./sample_vnf_package_csar/Files
[This is UserData specific part] When using UserData, create the following directories in addition.
.. code-block:: console
$ mkdir -p ./sample_vnf_package_csar/BaseHOT/simple \
./sample_vnf_package_csar/UserData
#. Create ``TOSCA.meata`` file:
.. code-block:: console
$ vi ./sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
:language: text
#. Download ETSI definition files:
You should set ``${TOSCA_VERSION}`` to one of the appropriate TOSCA service
template versions [#f8]_, e.g., ``export TOSCA_VERSION=v2.6.1``.
.. important::
You should also check if the version of TOSCA service template is
supported by tacker [#f9]_.
.. code-block:: console
$ cd ./sample_vnf_package_csar/Definitions
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_common_types.yaml
$ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_vnfd_types.yaml
#. Create VNFD files:
- Create ``sample_vnfd_top.yaml``
.. code-block:: console
$ vi ./sample_vnfd_top.yaml
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_top.yaml
:language: yaml
- Create ``sample_vnfd_types.yaml``
.. code-block:: console
$ vi ./sample_vnfd_types.yaml
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_types.yaml
:language: yaml
.. note::
``description_id`` shall be globally unique, i.e., you cannot create
multiple VNFDs with the same ``description_id``.
- Create ``sample_vnfd_df_simple.yaml``
.. code-block:: console
$ vi ./sample_vnfd_df_simple.yaml
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/sample_vnf_package_csar/Definitions/sample_vnfd_df_simple.yaml
:language: yaml
.. note::
The ``flavour_description`` should be updated by the property in "VNF" but
Tacker cannot handle it. After the instantiation, the default value in
``sample_vnfd_types.yaml`` is always used.
#. [This is UserData specific part] Create BaseHOT files:
.. code-block:: console
$ cd -
$ vi ./sample_vnf_package_csar/BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/sample_vnf_package_csar/BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
:language: yaml
#. [This is UserData specific part] Create UserData files:
.. code-block:: console
$ cd ./sample_vnf_package_csar/UserData/
$ touch ./__init__.py
$ vi ./lcm_user_data.py
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/sample_vnf_package_csar/UserData/lcm_user_data.py
:language: python
#. Compress the VNF Package CSAR to zip:
.. code-block:: console
$ cd -
$ cd ./sample_vnf_package_csar
$ zip sample_vnf_package_csar.zip -r Definitions/ Files/ TOSCA-Metadata/
The contents of the zip file should look something like this.
.. code-block:: console
$ unzip -Z -1 sample_vnf_package_csar.zip
Definitions/
Definitions/etsi_nfv_sol001_vnfd_types.yaml
Definitions/sample_vnfd_top.yaml
Definitions/etsi_nfv_sol001_common_types.yaml
Definitions/sample_vnfd_types.yaml
Definitions/sample_vnfd_df_simple.yaml
Files/
Files/images/
Files/images/cirros-0.5.2-x86_64-disk.img
TOSCA-Metadata/
TOSCA-Metadata/TOSCA.meta
- [This is UserData specific part] When using UserData, add ``BaseHOT`` and ``UserData`` directories.
.. code-block:: console
$ zip sample_vnf_package_csar.zip -r BaseHOT/ UserData/
The contents of the zip file should look something like this.
.. code-block:: console
$ unzip -Z -1 sample_vnf_package_csar.zip
BaseHOT/
BaseHOT/simple/
BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
Definitions/
Definitions/etsi_nfv_sol001_vnfd_types.yaml
Definitions/sample_vnfd_top.yaml
Definitions/etsi_nfv_sol001_common_types.yaml
Definitions/sample_vnfd_types.yaml
Definitions/sample_vnfd_df_simple.yaml
Files/
Files/images/
Files/images/cirros-0.5.2-x86_64-disk.img
TOSCA-Metadata/
TOSCA-Metadata/TOSCA.meta
UserData/
UserData/lcm_user_data.py
UserData/__init__.py
Here, you can find the structure of the sample VNF Package CSAR as a
zip file.
.. _Create VNF Package:
Create VNF Package
^^^^^^^^^^^^^^^^^^
#. Execute vnfpkgm create:
Take a note of "VNF Package ID" as it will be used in the next step.
.. code-block:: console
$ cd -
.. code-block:: console
$ openstack vnf package create --fit-width
+-------------------+----------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------------+----------------------------------------------------------------------------------------------------------------+
| ID | e712a702-741f-4093-a971-b3ad69411ac1 |
| Links | packageContent=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1/package_content, |
| | self=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1 |
| Onboarding State | CREATED |
| Operational State | DISABLED |
| Usage State | NOT_IN_USE |
| User Defined Data | |
+-------------------+----------------------------------------------------------------------------------------------------------------+
Upload VNF Package
^^^^^^^^^^^^^^^^^^
#. Execute vnfpkgm upload:
The "VNF Package ID" ``e712a702-741f-4093-a971-b3ad69411ac1`` needs to be
replaced with the appropriate one that was obtained from :ref:`Create VNF
Package`.
.. code-block:: console
$ openstack vnf package upload \
--path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
e712a702-741f-4093-a971-b3ad69411ac1
Upload request for VNF package e712a702-741f-4093-a971-b3ad69411ac1 has been accepted.
Check the created VNF Package
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#. Confirm the "Onboarding State" to be ``ONBOARDED`` (it may take more than 30
seconds):
.. code-block:: console
$ openstack vnf package list
+--------------------------------------+------------------+------------------+-------------+-------------------+
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
+--------------------------------------+------------------+------------------+-------------+-------------------+
| e712a702-741f-4093-a971-b3ad69411ac1 | | PROCESSING | NOT_IN_USE | DISABLED |
+--------------------------------------+------------------+------------------+-------------+-------------------+
$ openstack vnf package list
+--------------------------------------+------------------+------------------+-------------+-------------------+
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
+--------------------------------------+------------------+------------------+-------------+-------------------+
| e712a702-741f-4093-a971-b3ad69411ac1 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED |
+--------------------------------------+------------------+------------------+-------------+-------------------+
Create & Instantiate VNF
------------------------
Create VNF
^^^^^^^^^^
#. Find "VNFD ID" to create VNF:
The "VNFD-ID" can be found to be ``b1bb0ce7-ebca-4fa7-95ed-4840d70a1177`` in
the example.
.. code-block:: console
$ openstack vnf package show \
e712a702-741f-4093-a971-b3ad69411ac1 -c 'VNFD ID'
+---------+--------------------------------------+
| Field | Value |
+---------+--------------------------------------+
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
+---------+--------------------------------------+
#. Create VNF:
The "VNFD ID" ``b1bb0ce7-ebca-4fa7-95ed-4840d70a1177`` needs to be replaced
with the appropriate one.
.. code-block:: console
$ openstack vnflcm create \
b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 --fit-width
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID | 725f625e-f6b7-4bcd-b1b7-7184039fde45 |
| Instantiation State | NOT_INSTANTIATED |
| Links | instantiate=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/instantiate, |
| | self=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45 |
| VNF Instance Description | None |
| VNF Instance Name | None |
| VNF Product Name | Sample VNF |
| VNF Provider | Company |
| VNF Software Version | 1.0 |
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
| VNFD Version | 1.0 |
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
Instantiate VNF
^^^^^^^^^^^^^^^
#. Create ``<param-file>``:
Required parameter:
- flavourID
Optional parametes:
- instantiationLevelId
- extVirtualLinks
- extManagedVirtualLinks
- vimConnectionInfo
.. note::
You can skip ``vimConnectionInfo`` only when you have the default VIM.
A sample ``<param-file>`` named as ``sample_param_file.json`` with
minimal parametes:
.. code-block:: console
$ vi ./sample_param_file.json
- When using TOSCA, use the following parameters.
.. literalinclude:: ../../../samples/etsi_getting_started/tosca/lcm_instantiate_request/sample_param_file.json
:language: json
- [This is UserData specific part] When using UserData, use the following parameters instead.
.. literalinclude:: ../../../samples/etsi_getting_started/userdata/lcm_instantiate_request/sample_param_file.json
:language: json
``${network_uuid}``, ``${subnet_uuid}`` and ``${vim_uuid}`` should be
replaced with the uuid of the network to use, the uuid of the subnet to use
and the uuid of the VIM to use, respectively.
.. hint::
You can find uuids of the network and the corresponding subnet with this command [#f10]_:
.. code-block:: console
$ openstack network list
#. Instantiate VNF:
The "ID of vnf instance" and "path to <param-file>" are needed to
instantiate vnf.
.. code-block:: console
$ openstack vnflcm instantiate \
725f625e-f6b7-4bcd-b1b7-7184039fde45 ./sample_param_file.json
instantiate request for vnf instance 725f625e-f6b7-4bcd-b1b7-7184039fde45 has been accepted.
Check the details of the instantiated vnf.
.. code-block:: console
$ openstack vnflcm list
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
| 725f625e-f6b7-4bcd-b1b7-7184039fde45 | None | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
$ openstack vnflcm show \
725f625e-f6b7-4bcd-b1b7-7184039fde45 --fit-width
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID | 725f625e-f6b7-4bcd-b1b7-7184039fde45 |
| Instantiated Vnf Info | , extCpInfo='[]', flavourId='simple', vnfState='STARTED', vnfVirtualLinkResourceInfo='[{'id': '0163cea3-af88-4ef8-ae43-ef3e5e7e827d', |
| | 'vnfVirtualLinkDescId': 'internalVL1', 'networkResource': {'resourceId': '073c74b9-670d-4764-a933-6fe4f2f991c1', 'vimLevelResourceType': |
| | 'OS::Neutron::Net'}, 'vnfLinkPorts': [{'id': '3b667826-336c-4919-889e-e6c63d959ee6', 'resourceHandle': {'resourceId': |
| | '5d3255b5-e9fb-449f-9c5f-5242049ce2fa', 'vimLevelResourceType': 'OS::Neutron::Port'}, 'cpInstanceId': '3091f046-de63-44c8-ad23-f86128409b27'}]}]', |
| | vnfcResourceInfo='[{'id': '2a66f545-c90d-49e7-8f17-fb4e57b19c92', 'vduId': 'VDU1', 'computeResource': {'resourceId': |
| | '6afc547d-0e19-46fc-b171-a3d9a0a80513', 'vimLevelResourceType': 'OS::Nova::Server'}, 'storageResourceIds': [], 'vnfcCpInfo': [{'id': |
| | '3091f046-de63-44c8-ad23-f86128409b27', 'cpdId': 'CP1', 'vnfExtCpId': None, 'vnfLinkPortId': '3b667826-336c-4919-889e-e6c63d959ee6'}]}]' |
| Instantiation State | INSTANTIATED |
| Links | heal=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/heal, self=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45, |
| | terminate=href=/vnflcm/v1/vnf_instances/725f625e-f6b7-4bcd-b1b7-7184039fde45/terminate |
| VIM Connection Info | [] |
| VNF Instance Description | None |
| VNF Instance Name | None |
| VNF Product Name | Sample VNF |
| VNF Provider | Company |
| VNF Software Version | 1.0 |
| VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
| VNFD Version | 1.0 |
+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
Terminate & Delete VNF
----------------------
Terminate VNF
^^^^^^^^^^^^^
#. Check the VNF Instance ID to terminate:
.. code-block:: console
$ openstack vnflcm list
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
| 725f625e-f6b7-4bcd-b1b7-7184039fde45 | None | INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
+--------------------------------------+-------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
#. Terminate VNF Instance:
Execute terminate command:
.. code-block:: console
$ openstack vnflcm terminate 725f625e-f6b7-4bcd-b1b7-7184039fde45
Terminate request for VNF Instance '725f625e-f6b7-4bcd-b1b7-7184039fde45' has been accepted.
Check the status of VNF Instance:
.. code-block:: console
$ openstack vnflcm list --fit-width
+----------------------+-------------------+---------------------+--------------+----------------------+------------------+-----------------------+
| ID | VNF Instance Name | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID |
+----------------------+-------------------+---------------------+--------------+----------------------+------------------+-----------------------+
| 725f625e-f6b7-4bcd-b | None | NOT_INSTANTIATED | Company | 1.0 | Sample VNF | b1bb0ce7-ebca-4fa7-95 |
| 1b7-7184039fde45 | | | | | | ed-4840d70a1177 |
+----------------------+-------------------+---------------------+--------------+----------------------+------------------+-----------------------+
Delete VNF
^^^^^^^^^^
#. Delete VNF Instance:
.. code-block:: console
$ openstack vnflcm delete 725f625e-f6b7-4bcd-b1b7-7184039fde45
Vnf instance '725f625e-f6b7-4bcd-b1b7-7184039fde45' deleted successfully
Delete VNF Package
------------------
#. Delete VNF Package:
Check the VNF Package ID to delete:
.. code-block:: console
$ openstack vnf package list
+--------------------------------------+------------------+------------------+-------------+-------------------+
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
+--------------------------------------+------------------+------------------+-------------+-------------------+
| e712a702-741f-4093-a971-b3ad69411ac1 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED |
+--------------------------------------+------------------+------------------+-------------+-------------------+
Update the Operational State to ``DISABLED``:
.. code-block:: console
$ openstack vnf package update \
--operational-state 'DISABLED' \
e712a702-741f-4093-a971-b3ad69411ac1
+-------------------+----------+
| Field | Value |
+-------------------+----------+
| Operational State | DISABLED |
+-------------------+----------+
Check the Operational State to be changed:
.. code-block:: console
$ openstack vnf package list
+--------------------------------------+------------------+------------------+-------------+-------------------+
| Id | Vnf Product Name | Onboarding State | Usage State | Operational State |
+--------------------------------------+------------------+------------------+-------------+-------------------+
| e712a702-741f-4093-a971-b3ad69411ac1 | Sample VNF | ONBOARDED | NOT_IN_USE | DISABLED |
+--------------------------------------+------------------+------------------+-------------+-------------------+
Delete the VNF Package:
.. code-block:: console
$ openstack vnf package delete e712a702-741f-4093-a971-b3ad69411ac1
All specified vnf-package(s) deleted successfully
Trouble Shooting
----------------
- Neutron QoSPlugin error
.. code-block:: console
devstack tacker-conductor[8132]: 2020-05-25 09:17:12.976 TRACE oslo_messaging.rpc.server tacker.common.exceptions.VnfInstantiationFailed: Vnf instantiation failed for vnf ca2fe9cb-afba-40a5-aec6-b7ef643b0208, error: ERROR: HEAT-E99001 Service neutron is not available for resource type OS::Neutron::QoSPolicy, reason: Required extension qos in neutron service is not available.
#. Edit ``/etc/neutron/neutron.conf``:
.. code-block:: console
$ sudo vi /etc/neutron/neutron.conf
.. code-block:: diff
- service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin
+ service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
.. code-block:: console
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
.. code-block:: diff
- extension_drivers = port_security
+ extension_drivers = port_security,qos
#. Restart neutron services:
.. code-block:: console
$ sudo systemctl restart devstack@q-*
- Error in networking-sfc
#. Disable networking-sfc by editting ``/etc/neutron/neutron.conf``:
.. code-block:: console
$ sudo vi /etc/neutron/neutron.conf
.. code-block:: diff
- service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
+ service_plugins = ovn-router,neutron.services.qos.qos_plugin.QoSPlugin
- [sfc]
- drivers = ovs
- [flowclassifier]
- drivers = ovs
#. Edit ``/etc/neutron/plugins/ml2/ml2_conf.ini``:
.. code-block:: console
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
.. code-block:: diff
- [agent]
- extensions = sfc
#. Restart neutron services:
.. code-block:: console
$ sudo systemctl restart devstack@q-*
.. [#] https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_tosca.html
.. [#] https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_user_data.html
.. [#] https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/tosca
.. [#] https://opendev.org/openstack/tacker/src/branch/master/samples/etsi_getting_started/userdata
.. [#] https://docs.openstack.org/tacker/latest/install/index.html
.. [#] https://docs.openstack.org/liberty/install-guide-ubuntu/keystone-openrc.html
.. [#] https://docs.openstack.org/tacker/latest/cli/index.html
.. [#] https://forge.etsi.org/rep/nfv/SOL001
.. [#] https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html
.. [#] https://docs.openstack.org/python-openstackclient/pike/cli/command-objects/network.html

View File

@ -24,7 +24,8 @@ Getting Started
.. toctree::
:maxdepth: 1
../install/getting_started
../install/etsi_getting_started
../install/legacy_getting_started
.. TODO(h-asahina): add `Getting started with ETSI NFV-SOL Tacker`
* https://etherpad.opendev.org/p/tacker-wallaby-revise-docs

View File

@ -95,7 +95,7 @@ below:
https://opendev.org/openstack/tacker/src/branch/master/samples/tosca-templates/vnfd
How to create a VNFD and deploy a VNF refer to
:doc:`../install/getting_started`.
:doc:`../install/legacy_getting_started`.
How to scale VNF using CLI

View File

@ -0,0 +1,18 @@
---
other:
- |
Revised `Installation Guide`_.
* Added a table that shows hardware requirements to `ETSI Install via
Devstack`.
- |
Revised `User Guide`_.
* Classified Legacy Tacker documents and ETSI NFV-SOL Tacker documents.
* Added diagrams and overviews of the `ETSI NFV-SOL Tacker Use Cases`.
* Added `Getting Started with ETSI NFV-SOL Tacker`.
* Removed documents that seem to be no longer necessary.
.. _Installation Guide : https://docs.openstack.org/tacker/latest/install/index.html
.. _User Guide : https://docs.openstack.org/tacker/latest/user/index.html

View File

@ -0,0 +1,3 @@
{
"flavourId": "simple"
}

View File

@ -0,0 +1,202 @@
tosca_definitions_version: tosca_simple_yaml_1_2
description: ETSI NFV SOL 001 common types definitions version 2.6.1
metadata:
template_name: etsi_nfv_sol001_common_types
template_author: ETSI_NFV
template_version: 2.6.1
data_types:
tosca.datatypes.nfv.L2AddressData:
derived_from: tosca.datatypes.Root
description: Describes the information on the MAC addresses to be assigned to a connection point.
properties:
mac_address_assignment:
type: boolean
description: Specifies if the address assignment is the responsibility of management and orchestration function or not. If it is set to True, it is the management and orchestration function responsibility
required: true
tosca.datatypes.nfv.L3AddressData:
derived_from: tosca.datatypes.Root
description: Provides information about Layer 3 level addressing scheme and parameters applicable to a CP
properties:
ip_address_assignment:
type: boolean
description: Specifies if the address assignment is the responsibility of management and orchestration function or not. If it is set to True, it is the management and orchestration function responsibility
required: true
floating_ip_activated:
type: boolean
description: Specifies if the floating IP scheme is activated on the Connection Point or not
required: true
ip_address_type:
type: string
description: Defines address type. The address type should be aligned with the address type supported by the layer_protocols properties of the parent VnfExtCp
required: false
constraints:
- valid_values: [ ipv4, ipv6 ]
number_of_ip_address:
type: integer
description: Minimum number of IP addresses to be assigned
required: false
constraints:
- greater_than: 0
tosca.datatypes.nfv.AddressData:
derived_from: tosca.datatypes.Root
description: Describes information about the addressing scheme and parameters applicable to a CP
properties:
address_type:
type: string
description: Describes the type of the address to be assigned to a connection point. The content type shall be aligned with the address type supported by the layerProtocol property of the connection point
required: true
constraints:
- valid_values: [ mac_address, ip_address ]
l2_address_data:
type: tosca.datatypes.nfv.L2AddressData
description: Provides the information on the MAC addresses to be assigned to a connection point.
required: false
l3_address_data:
type: tosca.datatypes.nfv.L3AddressData
description: Provides the information on the IP addresses to be assigned to a connection point
required: false
tosca.datatypes.nfv.ConnectivityType:
derived_from: tosca.datatypes.Root
description: describes additional connectivity information of a virtualLink
properties:
layer_protocols:
type: list
description: Identifies the protocol a virtualLink gives access to (ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire).The top layer protocol of the virtualLink protocol stack shall always be provided. The lower layer protocols may be included when there are specific requirements on these layers.
required: true
entry_schema:
type: string
constraints:
- valid_values: [ ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire ]
flow_pattern:
type: string
description: Identifies the flow pattern of the connectivity
required: false
constraints:
- valid_values: [ line, tree, mesh ]
tosca.datatypes.nfv.LinkBitrateRequirements:
derived_from: tosca.datatypes.Root
description: describes the requirements in terms of bitrate for a virtual link
properties:
root:
type: integer # in bits per second
description: Specifies the throughput requirement in bits per second of the link (e.g. bitrate of E-Line, root bitrate of E-Tree, aggregate capacity of E-LAN).
required: true
constraints:
- greater_or_equal: 0
leaf:
type: integer # in bits per second
description: Specifies the throughput requirement in bits per second of leaf connections to the link when applicable to the connectivity type (e.g. for E-Tree and E LAN branches).
required: false
constraints:
- greater_or_equal: 0
tosca.datatypes.nfv.CpProtocolData:
derived_from: tosca.datatypes.Root
description: Describes and associates the protocol layer that a CP uses together with other protocol and connection point information
properties:
associated_layer_protocol:
type: string
required: true
description: One of the values of the property layer_protocols of the CP
constraints:
- valid_values: [ ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire ]
address_data:
type: list
description: Provides information on the addresses to be assigned to the CP
entry_schema:
type: tosca.datatypes.nfv.AddressData
required: false
tosca.datatypes.nfv.VnfProfile:
derived_from: tosca.datatypes.Root
description: describes a profile for instantiating VNFs of a particular NS DF according to a specific VNFD and VNF DF.
properties:
instantiation_level:
type: string
description: Identifier of the instantiation level of the VNF DF to be used for instantiation. If not present, the default instantiation level as declared in the VNFD shall be used.
required: false
min_number_of_instances:
type: integer
description: Minimum number of instances of the VNF based on this VNFD that is permitted to exist for this VnfProfile.
required: true
constraints:
- greater_or_equal: 0
max_number_of_instances:
type: integer
description: Maximum number of instances of the VNF based on this VNFD that is permitted to exist for this VnfProfile.
required: true
constraints:
- greater_or_equal: 0
tosca.datatypes.nfv.Qos:
derived_from: tosca.datatypes.Root
description: describes QoS data for a given VL used in a VNF deployment flavour
properties:
latency:
type: scalar-unit.time #Number
description: Specifies the maximum latency
required: true
constraints:
- greater_than: 0 s
packet_delay_variation:
type: scalar-unit.time #Number
description: Specifies the maximum jitter
required: true
constraints:
- greater_or_equal: 0 s
packet_loss_ratio:
type: float
description: Specifies the maximum packet loss ratio
required: false
constraints:
- in_range: [ 0.0, 1.0 ]
capability_types:
tosca.capabilities.nfv.VirtualLinkable:
derived_from: tosca.capabilities.Node
description: A node type that includes the VirtualLinkable capability indicates that it can be pointed by tosca.relationships.nfv.VirtualLinksTo relationship type
relationship_types:
tosca.relationships.nfv.VirtualLinksTo:
derived_from: tosca.relationships.DependsOn
description: Represents an association relationship between the VduCp and VnfVirtualLink node types
valid_target_types: [ tosca.capabilities.nfv.VirtualLinkable ]
node_types:
tosca.nodes.nfv.Cp:
derived_from: tosca.nodes.Root
description: Provides information regarding the purpose of the connection point
properties:
layer_protocols:
type: list
description: Identifies which protocol the connection point uses for connectivity purposes
required: true
entry_schema:
type: string
constraints:
- valid_values: [ ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire ]
role: #Name in ETSI NFV IFA011 v0.7.3: cpRole
type: string
description: Identifies the role of the port in the context of the traffic flow patterns in the VNF or parent NS
required: false
constraints:
- valid_values: [ root, leaf ]
description:
type: string
description: Provides human-readable information on the purpose of the connection point
required: false
protocol:
type: list
description: Provides information on the addresses to be assigned to the connection point(s) instantiated from this Connection Point Descriptor
required: false
entry_schema:
type: tosca.datatypes.nfv.CpProtocolData
trunk_mode:
type: boolean
description: Provides information about whether the CP instantiated from this Cp is in Trunk mode (802.1Q or other), When operating in "trunk mode", the Cp is capable of carrying traffic for several VLANs. Absence of this property implies that trunkMode is not configured for the Cp i.e. It is equivalent to boolean value "false".
required: false

View File

@ -0,0 +1,136 @@
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
- sample_vnfd_types.yaml
topology_template:
inputs:
id:
type: string
vendor:
type: string
version:
type: version
descriptor_id:
type: string
descriptor_version:
type: string
provider:
type: string
product_name:
type: string
software_version:
type: string
vnfm_info:
type: list
entry_schema:
type: string
flavour_id:
type: string
flavour_description:
type: string
substitution_mappings:
node_type: company.provider.VNF
properties:
flavour_id: simple
requirements:
virtual_link_external: []
node_templates:
VNF:
type: company.provider.VNF
properties:
flavour_description: A simple flavour
interfaces:
Vnflcm:
# supporting only 'instantiate', 'terminate', 'modify',
# and 'heal'
# not supporting LCM script, supporting only default LCM
instantiate: []
# instantiate_start: []
# instantiate_end: []
terminate: []
# terminate_start: []
# terminate_end: []
modify_information: []
# modify_information_start: []
# modify_information_end: []
# change_flavour: []
# change_flavour_start: []
# change_flavour_end: []
# change_external_connectivity: []
# change_external_connectivity_start: []
# change_external_connectivity_end: []
# operate: []
# operate_start: []
# operate_end: []
heal: []
# heal_start: []
# heal_end: []
# scale: []
# scale_start: []
# scale_end: []
# scale_to_level: []
# scale_to_level_start: []
# scale_to_level_end: []
VDU1:
type: tosca.nodes.nfv.Vdu.Compute
properties:
name: VDU1
description: VDU1 compute node
vdu_profile:
min_number_of_instances: 1
max_number_of_instances: 1
sw_image_data:
name: cirros-0.5.2-x86_64-disk
version: '0.5.2'
checksum:
algorithm: sha-256
hash: 932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464
container_format: bare
disk_format: qcow2
min_disk: 1 GB
size: 1 GB
capabilities:
virtual_compute:
properties:
virtual_memory:
virtual_mem_size: 512 MB
virtual_cpu:
num_virtual_cpu: 1
virtual_local_storage:
- size_of_storage: 1 GB
CP1:
type: tosca.nodes.nfv.VduCp
properties:
layer_protocols: [ ipv4 ]
requirements:
- virtual_binding: VDU1
- virtual_link: internalVL1
internalVL1:
type: tosca.nodes.nfv.VnfVirtualLink
properties:
connectivity_type:
layer_protocols: [ ipv4 ]
description: Internal Virtual link in the VNF
vl_profile:
max_bitrate_requirements:
root: 1048576
leaf: 1048576
min_bitrate_requirements:
root: 1048576
leaf: 1048576
virtual_link_protocol_data:
- associated_layer_protocol: ipv4
l3_protocol_data:
ip_version: ipv4
cidr: 10.0.0.0/24

View File

@ -0,0 +1,31 @@
tosca_definitions_version: tosca_simple_yaml_1_2
description: Sample VNF
imports:
- etsi_nfv_sol001_common_types.yaml
- etsi_nfv_sol001_vnfd_types.yaml
- sample_vnfd_types.yaml
- sample_vnfd_df_simple.yaml
topology_template:
inputs:
selected_flavour:
type: string
description: VNF deployment flavour selected by the consumer. It is provided in the API
node_templates:
VNF:
type: company.provider.VNF
properties:
flavour_id: { get_input: selected_flavour }
descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
provider: Company
product_name: Sample VNF
software_version: '1.0'
descriptor_version: '1.0'
vnfm_info:
- Tacker
requirements:
#- virtual_link_external # mapped in lower-level templates
#- virtual_link_internal # mapped in lower-level templates

View File

@ -0,0 +1,63 @@
tosca_definitions_version: tosca_simple_yaml_1_2
description: VNF type definition
imports:
- etsi_nfv_sol001_common_types.yaml
- etsi_nfv_sol001_vnfd_types.yaml
node_types:
company.provider.VNF:
derived_from: tosca.nodes.nfv.VNF
properties:
id:
type: string
description: ID of this VNF
default: vnf_id
vendor:
type: string
description: name of the vendor who generate this VNF
default: vendor
version:
type: version
description: version of the software for this VNF
default: 1.0
descriptor_id:
type: string
constraints: [ valid_values: [ b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 ] ]
default: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
descriptor_version:
type: string
constraints: [ valid_values: [ '1.0' ] ]
default: '1.0'
provider:
type: string
constraints: [ valid_values: [ 'Company' ] ]
default: 'Company'
product_name:
type: string
constraints: [ valid_values: [ 'Sample VNF' ] ]
default: 'Sample VNF'
software_version:
type: string
constraints: [ valid_values: [ '1.0' ] ]
default: '1.0'
vnfm_info:
type: list
entry_schema:
type: string
constraints: [ valid_values: [ Tacker ] ]
default: [ Tacker ]
flavour_id:
type: string
constraints: [ valid_values: [ simple ] ]
default: simple
flavour_description:
type: string
default: This is the default flavour description
requirements:
- virtual_link_internal:
capability: tosca.capabilities.nfv.VirtualLinkable
interfaces:
Vnflcm:
type: tosca.interfaces.nfv.Vnflcm

View File

@ -0,0 +1,4 @@
TOSCA-Meta-File-Version: 1.0
Created-by: Dummy User
CSAR-Version: 1.1
Entry-Definitions: Definitions/sample_vnfd_top.yaml

View File

@ -0,0 +1,7 @@
auth_url: 'http://127.0.0.1/identity'
username: 'admin'
password: 'devstack'
project_name: 'admin'
project_domain_name: 'Default'
user_domain_name: 'Default'
cert_verify: 'True'

View File

@ -0,0 +1,43 @@
{
"flavourId": "simple",
"extVirtualLinks": [
{
"id": "net0",
"resourceId": "${network_uuid}",
"extCps": [
{
"cpdId": "CP1",
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"numDynamicAddresses": 1,
"subnetId": "${subnet_uuid}"
}
]
}
}
]
}
]
}
]
}
],
"vimConnectionInfo": [
{
"id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",
"vimId": "${vim_uuid}",
"vimType": "ETSINFV.OPENSTACK_KEYSTONE.v_2"
}
],
"additionalParams": {
"lcm-operation-user-data": "./UserData/lcm_user_data.py",
"lcm-operation-user-data-class": "SampleUserData"
}
}

View File

@ -0,0 +1,32 @@
heat_template_version: 2013-05-23
description: 'Template for test _generate_hot_from_tosca().'
parameters:
nfv:
type: json
resources:
VDU1:
type: OS::Nova::Server
properties:
flavor:
get_resource: VDU1_flavor
name: VDU1
image: { get_param: [ nfv, VDU, VDU1, image ] }
networks:
- port:
get_resource: CP1
CP1:
type: OS::Neutron::Port
properties:
network: { get_param: [ nfv, CP, CP1, network ] }
VDU1_flavor:
type: OS::Nova::Flavor
properties:
ram: { get_param: [ nfv, VDU, VDU1, flavor, ram ] }
vcpus: { get_param: [ nfv, VDU, VDU1, flavor, vcpus ] }
disk: { get_param: [ nfv, VDU, VDU1, flavor, disk ] }
outputs: {}

View File

@ -0,0 +1 @@
../../tosca/sample_vnf_package_csar/Definitions

View File

@ -0,0 +1 @@
../../tosca/sample_vnf_package_csar/Files

View File

@ -0,0 +1 @@
../../tosca/sample_vnf_package_csar/TOSCA-Metadata/

View File

@ -0,0 +1,39 @@
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import tacker.vnfm.lcm_user_data.utils as UserDataUtil
from tacker.vnfm.lcm_user_data.abstract_user_data import AbstractUserData
class SampleUserData(AbstractUserData):
@staticmethod
def instantiate(base_hot_dict=None,
vnfd_dict=None,
inst_req_info=None,
grant_info=None):
# Create HOT input parameter using util functions.
initial_param_dict = UserDataUtil.create_initial_param_dict(
base_hot_dict)
vdu_flavor_dict = UserDataUtil.create_vdu_flavor_dict(vnfd_dict)
vdu_image_dict = UserDataUtil.create_sw_image_dict(vnfd_dict)
cpd_vl_dict = UserDataUtil.create_network_dict(
inst_req_info, initial_param_dict)
final_param_dict = UserDataUtil.create_final_param_dict(
initial_param_dict, vdu_flavor_dict, vdu_image_dict, cpd_vl_dict)
return final_param_dict

View File

@ -0,0 +1 @@
../tosca/vim