Update VNFFG's chain and classifier

This spec proposes the functionality which should be implemenented
in order to update chain and classifier criteria in an already
created VNFFG.

blueprint: update-vnffg

Change-Id: Ifd0abbad213f22866fbe401c25498d6e74377cef
Signed-off-by: Dimitrios Markou <mardim@intracom-telecom.com>
Co-Authored-By: Hoang Phuoc <phuoc.hc@dcn.ssu.ac.kr>
This commit is contained in:
Dimitrios Markou 2017-10-31 16:26:07 +02:00
parent 046fcec689
commit 1e956355b9
1 changed files with 306 additions and 0 deletions

View File

@ -0,0 +1,306 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==========================================
Update VNFFG's Chain and Classifier
==========================================
https://blueprints.launchpad.net/tacker/+spec/update-vnffg
This spec describes the plan to implement the functionality for the update
of a forwarding graph or a classifier through an already created VNFFG.
Problem description
===================
Currently in Tacker there is already implemented the functionality to succesfully create
and delete forwarding graphs and classifiers through the introduced VNFFG concept.
To be more specific the user has the capability to describe the forwarding graph of VNFs and
the classification criteria to a VNFFG template and during the creation time of the VNFFG,
Tacker through the networking-sfc driver will create the actual classification rules
where the traffic will be matched and the actual forwarding graph where the traffic will be forwarded to.
The problem occurs when the user is interested to update the already created VNFFG.
Tacker currently has no actual implementation of updating a forwarding graph or a classifier through
its networking-sfc driver.
The goal here is to implement the necessary functionality in the Tacker
server and the Tacker client side so the user has the capability to update
succesfully an already created VNFFG which means that he will be capable of
updating the VNFs of a forwarding graph, add or delete VNFs to an existing forwarding graph
and updating the classifier criteria which correspond to an already created VNFFG.
Proposed change
===============
To address the problem that was described above we need to introduce several
changes not only in the Tacker server side but also in the Tacker client side.
Changes include:
* Add extra parameters to the python-tackerclient vnffg-update command so we can
be able to update the VNFs which are part of the forwarding graph, add or delete
VNFs in the already created VNFFG and also update the classifier's criteria which
are described in that VNFFG.
* Specific changes also required by the NFVO plugin in the tacker server side
where is located the core functionality for the update of a VNFFG.
To be more specific the user should be able to update the classifier's criteria
or the VNFs in a forwarding graph or the classifier's criteria and the VNFs in a
forwarding graph simultaneously. This means that we should run some validation checks for the
data that the user passes in. Checks like that could be that the criteria do
not already exist in the database or that the VNFs that the user passes in the
update command are not already used in the forwarding graph and they are VNFs which
are already created in the past. In addition to that we need to update the items
which are located in the database. This means that we need to replace in an existing
classifier the old criteria with the new ones or create a new classifier in case
the criteria that the user passes in the update command are new. Also we need to
update the forwarding graph by replacing the old VNFs with the new ones which are passed to
the vnf-mapping parameter.
Furthermore we need to be able to add and delete VNFs to and from
the forwarding graph when the user uses the parameter which corresponds to the addition
or deletion of VNFs in an already created VNFFG.
To keep the things simple here we should allow the addition of a VNF to the forwarding graph
only when this VNF is derived from a VNFD which is not already used in the
existing forwarding graph.
As an additional step we should update the items of the already created VNFFGD template
when we update the forwarding graph or the criteria though Tacker client. For instance
we should update the constituent_vnfs item when we add or delete VNFDs to the forwarding graph.
Finally we need to update also the state of all the items in the database when the
whole procedure comes to an end.
* As a final step we need to implement the functionality for the update of
the forwarding graph and the classifier in the networking-sfc driver which is located in the
tacker server side. The networking-sfc driver is the Tacker component which
interacts with the networking-sfc openstack component and is responsible to
forward the calls to the networking-sfc API.
To be more specific when the user wants to update an existing classifier by adding
another one or update the criteria of an existing one the procedure which should be
followed is first to clear the chain from the existing classifiers which are associated
with it, after that delete the old classifier and create a new one which contains the old
criteria and the updated ones and also create a new classifier because the user wants to add
a new classifier to the chain too. As final step we need to reassign the classifiers to the
existing forwarding graph. We should follow this procedure because the networking-sfc API doesn't
support the update of the criteria of an existing classifier on the fly, which means that if we
want to update an existing classifier we need to delete it first and create a new one, which
contains the old and the new criteria.
If the user wants to replace the VNFs in an existing forwarding graph we need first to strip the chain
from its port-pair-groups create a new port-pair and a new port-pair-group for the new VNF,
delete the port-pair and the port-pair-group of the replaced VNF and reassign all the
port-pair-groups to the chain.
Finally if the user wants to add or delete a VNF to or from the forwarding graph we need again to
strip the existing chain from its port-pair-groups create or delete a port-pair-group for the new
or the removed VNF and reassign the VNFs to the chain.
None
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
End user impact
===============
Tacker client changes
---------------------
There will be changes to python-tackerclient for the end user in order to be able to
update an existing VNFFG. Parameter "--vnffgd-file" will be added in tacker command.
Example CLI calls:
.. code-block:: console
tacker vnffg-update --vnffgd-file vnffgd-template.yml <already created VNFFG name>
User can use vnffg-template file to update criteria of flowclassifier and path in VNFFG.
The value of the --vnffgd-file parameter is vnffgd-template.yaml where user can pass
information which will contain the criteria that the updated classifier will have and
the new path of VNFFG.
**Tacker will support 2 types of updating VNFFG:**
1. Update criteria of flowclassifier
2. Update the path
A vnffgd-template.yaml, which is the orginal vnffgd-file to create vnffgd, user can add, delete
or change criteria of flowclassifiers and path.
Example, user can add the second criteria in vnffgd-template.yaml (add new criteria to connect
port 443 in destination server) or add new VNF3 to the path. Then run "tacker update" to update
the created VNFFG.
.. code-block:: yaml
tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
description: Sample VNFFG template
topology_template:
description: Sample VNFFG template
node_templates:
Forwarding_path1:
type: tosca.nodes.nfv.FP.Tacker
description: creates path (CP12->CP22)
properties:
id: 51
policy:
type: ACL
criteria:
- network_src_port_id: 640dfd77-c92b-45a3-b8fc-22712de480e1
destination_port_range: 80
ip_proto: 6
ip_dst_prefix: 192.168.1.2/24
- network_src_port_id: 640dfd77-c92b-45a3-b8fc-22712de480e1
destination_port_range: 443
ip_proto: 6
ip_dst_prefix: 192.168.1.2/24
path:
- forwarder: VNFD1
capability: CP12
- forwarder: VNFD2
capability: CP22
- forwarder: VNFD3
capability: CP32
groups:
VNFFG1:
type: tosca.groups.nfv.VNFFG
description: HTTP to Corporate Net
properties:
vendor: tacker
version: 1.0
number_of_endpoints: 3
dependent_virtual_link: [VL12,VL22,VL32]
connection_point: [CP12,CP22,CP32]
constituent_vnfs: [VNFD1,VNFD2,VNFD3]
members: [Forwarding_path1]
Tacker server processes changes
-------------------------------
Processes when updating vnffg:
1. When first time VNFFG is updated
Tacker will create a new vnffgd (with template_source is inline) from
vnffgd-template.yml file which user provide in tacker update command.
2. Compare changes in new vnffgd and the original
Tacker will run update chain, flowclassifiers, new path if there are changes.
Tacker also update vnffgd_id in vnffgs database to the id of new vnffgd.
3. If VNFFG is updated more than one time
If the last vnffgd has template_source is onboarded, Tacker keeps vnffgd
because it is the original. Tacker will delete the last vnffgd if
its template_source is in-line.
Performance Impact
------------------
None
Other deployer impact
---------------------
None
Developer impact
----------------
None
Alternatives
============
The addition of the --criteria-add, --criteria-delete parameters can passed to
tacker client command so user can be capable to add, delete the criteria of
classifiers in an already created VNFFG.
Example CLI calls:
.. code-block:: console
tacker vnffg-update
--criteria-add {ip_protol:6, neutron_src_port:<neutron port id>, etc}
--forwarding-path Forwarding_path1
<already created VNFFG name>
tacker vnffg-update
--criteria-delete {ip_protol:6, neutron_src_port:<neutron port id>, etc}
--forwarding-path Forwarding_path1
<already created VNFFG name>
In the future, Tacker will support update VNFFG use parameters beside using
vnffgd-template.yml file.
Implementation
==============
Assignee(s)
-----------
Primary assignee
Dimitrios Markou <mardim@intracom-telecom.com>
Other contributors:
Hoang Phuoc <phuoc.hc@dcn.ssu.ac.kr>
Work Items
----------
1. Extend update-vnffg functionality to the Tacker server NFVO plugin
2. Implement the update functionality in the networking-sfc driver in
the Tacker server side.
3. Modify the update vnffg command in the Tacker client side.
4. Add unit and functional tests.
Dependencies
============
The update-vnffg functionality is dependent on networking-sfc being able to
update SFCs and classifiers. For more information check [#first]_ .
Testing
=======
The testing of the VNFFG update functionality can be addressed by the OPNFV/SFC
project.
Documentation Impact
====================
Extend the API docs to include the new parameter of the python-tackerclient
regarding the classifier criteria update.
References
==========
.. [#first] https://github.com/openstack/networking-sfc/tree/master/doc/api_samples
.. [#second] https://specs.openstack.org/openstack/tacker-specs/specs/newton/tacker-vnffg.html