Merge "Add ETSI getting started"
This commit is contained in:
commit
3c0fabfc24
BIN
doc/source/_images/etsi-getting-started-sample-vnf.png
Normal file
BIN
doc/source/_images/etsi-getting-started-sample-vnf.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
9
doc/source/_images/etsi-getting-started-sample-vnf.pu
Normal file
9
doc/source/_images/etsi-getting-started-sample-vnf.pu
Normal 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
|
733
doc/source/install/etsi_getting_started.rst
Normal file
733
doc/source/install/etsi_getting_started.rst
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"flavourId": "simple"
|
||||
}
|
@ -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
|
File diff suppressed because it is too large
Load Diff
@ -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
|
@ -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
|
@ -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
|
@ -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
|
7
samples/etsi_getting_started/tosca/vim/vim_config.yaml
Normal file
7
samples/etsi_getting_started/tosca/vim/vim_config.yaml
Normal 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'
|
@ -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"
|
||||
}
|
||||
}
|
@ -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: {}
|
@ -0,0 +1 @@
|
||||
../../tosca/sample_vnf_package_csar/Definitions
|
@ -0,0 +1 @@
|
||||
../../tosca/sample_vnf_package_csar/Files
|
@ -0,0 +1 @@
|
||||
../../tosca/sample_vnf_package_csar/TOSCA-Metadata/
|
@ -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
|
1
samples/etsi_getting_started/userdata/vim
Symbolic link
1
samples/etsi_getting_started/userdata/vim
Symbolic link
@ -0,0 +1 @@
|
||||
../tosca/vim
|
Loading…
x
Reference in New Issue
Block a user