VNF Forwarding Graph (VNFFG) Management¶
Prerequisites¶
The following packages should be installed:
tacker
python-tackerclient
A default VIM should be registered according to VIM Management.
The following VNFDs are created with the name VNFD1
and VNFD2
according to VNF Descriptor (VNFD) Management.
$ openstack vnf descriptor create --vnfd-file tosca-vnffg-vnfd1.yaml VNFD1
$ openstack vnf descriptor create --vnfd-file tosca-vnffg-vnfd2.yaml VNFD2
The VNFs from the created VNFDs are deployed with the name VNF1
and
VNF2
according to VNF Management.
$ openstack vnf create --vnfd-name VNFD1 VNF1
$ openstack vnf create --vnfd-name VNFD2 VNF2
CLI reference for VNFFG Management¶
1. Create VNF Forwarding Graph¶
Check the source port ID CP12
of VNF1:
$ openstack port list -c ID -c Name | grep CP12
| d4940639-764a-4a62-9b21-6ba2e86498eb | VNF1_4ffb436f-7f2c-4df1-96c4-38e9208261fd-CP12-pj3nwzbv2wt2 |
Create and update tosca-vnffgd-sample.yaml:
(Before)
network_src_port_id: 14ad4f29-629f-4b97-8bc8-86e96cb49974
(After)
network_src_port_id: <ID: d4940639-764a-4a62-9b21-6ba2e86498eb>
Note
The appropriate port ID should be used according to your environment.
Create the VNFFGD:
$ openstack vnf graph descriptor create --vnffgd-file \
tosca-vnffgd-sample.yaml <NAME: tosca-vnffgd-sample>
Create the VNFFG:
$ openstack vnf graph create --vnffgd-name <VNFFGD: tosca-vnffgd-sample> \
<NAME: tosca-vnffg-sample>
Result:
+------------------+--------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+--------------------------------------------------------------------------------------------------------+
| attributes | { |
| | "vnffgd": { |
| | "tosca_definitions_version": "tosca_simple_profile_for_nfv_1_0_0", |
| | "description": "Sample VNFFG template", |
| | "topology_template": { |
| | "node_templates": { |
| | "Forwarding_path1": { |
| | "type": "tosca.nodes.nfv.FP.TackerV2", |
| | "description": "creates path (CP12->CP22)", |
| | "properties": { |
| | "id": 51, |
| | "policy": { |
| | "type": "ACL", |
| | "criteria": [ |
| | { |
| | "name": "block_tcp", |
| | "classifier": { |
| | "network_src_port_id": "d4940639-764a-4a62-9b21-6ba2e86498eb", |
| | "destination_port_range": "80-1024", |
| | "ip_proto": 6, |
| | "ip_dst_prefix": "10.10.0.5/24" |
| | } |
| | } |
| | ] |
| | }, |
| | "path": [ |
| | { |
| | "forwarder": "VNFD1", |
| | "capability": "CP12", |
| | "sfc_encap": true |
| | }, |
| | { |
| | "forwarder": "VNFD2", |
| | "capability": "CP22", |
| | "sfc_encap": true |
| | } |
| | ] |
| | } |
| | } |
| | }, |
| | "groups": { |
| | "VNFFG1": { |
| | "type": "tosca.groups.nfv.VNFFG", |
| | "description": "HTTP to Corporate Net", |
| | "properties": { |
| | "vendor": "tacker", |
| | "version": 1.0, |
| | "number_of_endpoints": 2, |
| | "dependent_virtual_link": [ |
| | "VL12", |
| | "VL22" |
| | ], |
| | "connection_point": [ |
| | "CP12", |
| | "CP22" |
| | ], |
| | "constituent_vnfs": [ |
| | "VNFD1", |
| | "VNFD2" |
| | ] |
| | }, |
| | "members": [ |
| | "Forwarding_path1" |
| | ] |
| | } |
| | } |
| | }, |
| | "imports": [ |
| | "/opt/stack/tacker/tacker/tosca/lib/tacker_defs.yaml", |
| | "/opt/stack/tacker/tacker/tosca/lib/tacker_nfv_defs.yaml" |
| | ] |
| | } |
| | } |
| description | Sample VNFFG template |
| forwarding_paths | fc518827-eb74-4cd5-972b-943f80720065 |
| id | b6669b6a-1a3c-40b6-a8c2-28ce3f0bd9bb |
| name | tosca-vnffg-sample |
| ns_id | None |
| project_id | e77397d2a02c4af1b7d79cef2a406396 |
| status | PENDING_CREATE |
| vnf_mapping | VNFD1=4ffb436f-7f2c-4df1-96c4-38e9208261fd, VNFD2=83fb8124-b475-400f-b0eb-f2b6741eeedc |
| vnffgd_id | f19a36f9-3768-4846-8972-84960d328156 |
+------------------+--------------------------------------------------------------------------------------------------------+
Help:
$ openstack vnf graph create --help
usage: openstack vnf graph create [-h] [-f {json,shell,table,value,yaml}]
[-c COLUMN] [--noindent] [--prefix PREFIX]
[--max-width <integer>] [--fit-width]
[--print-empty] [--tenant-id TENANT_ID]
(--vnffgd-id VNFFGD_ID | --vnffgd-name VNFFGD_NAME | --vnffgd-template VNFFGD_TEMPLATE)
[--vnf-mapping VNF_MAPPING] [--symmetrical]
[--param-file PARAM_FILE]
[--description DESCRIPTION]
NAME
Create a new VNFFG.
positional arguments:
NAME Set a name for the VNFFG
optional arguments:
-h, --help show this help message and exit
--tenant-id TENANT_ID
The owner tenant ID
--vnffgd-id VNFFGD_ID
VNFFGD ID to use as template to create VNFFG
--vnffgd-name VNFFGD_NAME
VNFFGD Name to use as template to create VNFFG
--vnffgd-template VNFFGD_TEMPLATE
VNFFGD file to create VNFFG
--vnf-mapping VNF_MAPPING
List of logical VNFD name to VNF instance name
mapping. Example: VNF1:my_vnf1,VNF2:my_vnf2
--symmetrical Should a reverse path be created for the NFP (True or
False)
--param-file PARAM_FILE
YAML file with specific VNFFG parameters
--description DESCRIPTION
Set a description for the VNFFG
2. List VNF Forwarding Graphs¶
$ openstack vnf graph list
Result:
+--------------------------------------+--------------------+-------+--------------------------------------+--------+
| ID | Name | NS ID | VNFFGD ID | Status |
+--------------------------------------+--------------------+-------+--------------------------------------+--------+
| b6669b6a-1a3c-40b6-a8c2-28ce3f0bd9bb | tosca-vnffg-sample | None | f19a36f9-3768-4846-8972-84960d328156 | ACTIVE |
+--------------------------------------+--------------------+-------+--------------------------------------+--------+
Help:
$ openstack vnf graph list --help
usage: openstack vnf graph list [-h] [-f {csv,json,table,value,yaml}]
[-c COLUMN]
[--quote {all,minimal,none,nonnumeric}]
[--noindent] [--max-width <integer>]
[--fit-width] [--print-empty]
[--sort-column SORT_COLUMN] [--long]
List VNFFG(s) that belong to a given tenant.
optional arguments:
-h, --help show this help message and exit
--long List additional fields in output
output formatters:
output formatter options
-f {csv,json,table,value,yaml}, --format {csv,json,table,value,yaml}
the output format, defaults to table
-c COLUMN, --column COLUMN
specify the column(s) to include, can be repeated to
show multiple columns
--sort-column SORT_COLUMN
specify the column(s) to sort the data (columns
specified first have a priority, non-existing columns
are ignored), can be repeated
3. Show VNF Forwarding Graph¶
$ openstack vnf graph show <VNFFG: tosca-vnffg-sample>
Result:
+------------------+--------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+--------------------------------------------------------------------------------------------------------+
| attributes | { |
| | "vnffgd": { |
| | "tosca_definitions_version": "tosca_simple_profile_for_nfv_1_0_0", |
| | "description": "Sample VNFFG template", |
| | "topology_template": { |
| | "node_templates": { |
| | "Forwarding_path1": { |
| | "type": "tosca.nodes.nfv.FP.TackerV2", |
| | "description": "creates path (CP12->CP22)", |
| | "properties": { |
| | "id": 51, |
| | "policy": { |
| | "type": "ACL", |
| | "criteria": [ |
| | { |
| | "name": "block_tcp", |
| | "classifier": { |
| | "network_src_port_id": "d4940639-764a-4a62-9b21-6ba2e86498eb", |
| | "destination_port_range": "80-1024", |
| | "ip_proto": 6, |
| | "ip_dst_prefix": "10.10.0.5/24" |
| | } |
| | } |
| | ] |
| | }, |
| | "path": [ |
| | { |
| | "forwarder": "VNFD1", |
| | "capability": "CP12", |
| | "sfc_encap": true |
| | }, |
| | { |
| | "forwarder": "VNFD2", |
| | "capability": "CP22", |
| | "sfc_encap": true |
| | } |
| | ] |
| | } |
| | } |
| | }, |
| | "groups": { |
| | "VNFFG1": { |
| | "type": "tosca.groups.nfv.VNFFG", |
| | "description": "HTTP to Corporate Net", |
| | "properties": { |
| | "vendor": "tacker", |
| | "version": 1.0, |
| | "number_of_endpoints": 2, |
| | "dependent_virtual_link": [ |
| | "VL12", |
| | "VL22" |
| | ], |
| | "connection_point": [ |
| | "CP12", |
| | "CP22" |
| | ], |
| | "constituent_vnfs": [ |
| | "VNFD1", |
| | "VNFD2" |
| | ] |
| | }, |
| | "members": [ |
| | "Forwarding_path1" |
| | ] |
| | } |
| | } |
| | }, |
| | "imports": [ |
| | "/opt/stack/tacker/tacker/tosca/lib/tacker_defs.yaml", |
| | "/opt/stack/tacker/tacker/tosca/lib/tacker_nfv_defs.yaml" |
| | ] |
| | } |
| | } |
| description | Sample VNFFG template |
| forwarding_paths | fc518827-eb74-4cd5-972b-943f80720065 |
| id | b6669b6a-1a3c-40b6-a8c2-28ce3f0bd9bb |
| name | tosca-vnffg-sample |
| ns_id | None |
| project_id | e77397d2a02c4af1b7d79cef2a406396 |
| status | ACTIVE |
| vnf_mapping | VNFD1=4ffb436f-7f2c-4df1-96c4-38e9208261fd, VNFD2=83fb8124-b475-400f-b0eb-f2b6741eeedc |
| vnffgd_id | f19a36f9-3768-4846-8972-84960d328156 |
+------------------+--------------------------------------------------------------------------------------------------------+
Help:
$ openstack vnf graph show --help
usage: openstack vnf graph show [-h] [-f {json,shell,table,value,yaml}]
[-c COLUMN] [--noindent] [--prefix PREFIX]
[--max-width <integer>] [--fit-width]
[--print-empty]
<VNFFG>
Display VNFFG details
positional arguments:
<VNFFG> VNFFG to display (name or ID)
optional arguments:
-h, --help show this help message and exit
4. Update VNF Forwarding Graph¶
Create a new VNF VNF3
according to VNF Descriptor (VNFD) Management with the
following template:
tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
description: Demo example
metadata:
template_name: sample-tosca-vnfd3
topology_template:
node_templates:
VDU1:
type: tosca.nodes.nfv.VDU.Tacker
capabilities:
nfv_compute:
properties:
num_cpus: 1
mem_size: 512 MB
disk_size: 1 GB
properties:
image: cirros-0.5.2-x86_64-disk
availability_zone: nova
mgmt_driver: noop
config: |
param0: key1
param1: key2
user_data_format: RAW
user_data: |
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
cat << EOF >> /etc/network/interfaces
auto eth1
iface eth1 inet dhcp
auto eth2
iface eth2 inet dhcp
EOF
ifup eth1
ifup eth2
CP31:
type: tosca.nodes.nfv.CP.Tacker
properties:
management: true
order: 0
anti_spoofing_protection: false
requirements:
- virtualLink:
node: VL31
- virtualBinding:
node: VDU1
CP32:
type: tosca.nodes.nfv.CP.Tacker
properties:
order: 1
anti_spoofing_protection: false
requirements:
- virtualLink:
node: VL32
- virtualBinding:
node: VDU1
CP33:
type: tosca.nodes.nfv.CP.Tacker
properties:
order: 2
anti_spoofing_protection: false
requirements:
- virtualLink:
node: VL33
- virtualBinding:
node: VDU1
VL31:
type: tosca.nodes.nfv.VL
properties:
network_name: net_mgmt
vendor: Tacker
VL32:
type: tosca.nodes.nfv.VL
properties:
network_name: net0
vendor: Tacker
VL33:
type: tosca.nodes.nfv.VL
properties:
network_name: net1
vendor: Tacker
Create the VNFD and VNF:
openstack vnf descriptor create --vnfd-file tosca-vnffg-vnfd2.yaml VNFD3
openstack vnf create --vnfd-name VNFD3 VNF3
Create the updated VNFD file tosca-vnffgd-sample-update.yaml
:
VNFD2 -> VNFD3
CP22 -> CP32
VL22 -> VL32
Update the VNFFG:
$ openstack vnf graph set --vnffgd-template tosca-vnffgd-sample-update.yaml \
--description <DESCRIPTION: 'New description for Sample VNFFG template'> \
<VNFFG: tosca-vnffg-sample>
Result:
'Namespace' object has no attribute 'param_file'
Help:
$ openstack vnf graph set --help
usage: openstack vnf graph set [-h] [-f {json,shell,table,value,yaml}]
[-c COLUMN] [--noindent] [--prefix PREFIX]
[--max-width <integer>] [--fit-width]
[--print-empty]
[--vnffgd-template VNFFGD_TEMPLATE]
[--vnf-mapping VNF_MAPPING] [--symmetrical]
[--description DESCRIPTION]
<VNFFG>
Update VNFFG.
positional arguments:
<VNFFG> VNFFG to update (name or ID)
optional arguments:
-h, --help show this help message and exit
--vnffgd-template VNFFGD_TEMPLATE
VNFFGD file to update VNFFG
--vnf-mapping VNF_MAPPING
List of logical VNFD name to VNF instance name
mapping. Example: VNF1:my_vnf1,VNF2:my_vnf2
--symmetrical Should a reverse path be created for the NFP
--description DESCRIPTION
Set a description for the VNFFG
5. Delete VNF Forwarding Graph¶
$ openstack vnf graph delete <VNFFG: tosca-vnffg-sample>
All specified vnffg(s) deleted successfully
Help:
$ openstack vnf graph delete --help
usage: openstack vnf graph delete [-h] <VNFFG> [<VNFFG> ...]
Delete VNFFG(s).
positional arguments:
<VNFFG> VNFFG(s) to delete (name or ID)
optional arguments:
-h, --help show this help message and exit