VNF Forwarding Graph (VNFFG) Management

Warning

VNF Forwarding Graph (VNFFG) Management commands are deprecated and will be removed in the first major release after the Tacker server version 9.0.0 (2023.1 Antelope release).

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