NFV & SDN: Cloudify Lumina Flow Manager Plugin Demonstration

Last month in The Hague, we announced a strategic alliance with Cloudify Platform Ltd. to bring agility to service providers with legacy and virtualized networks. Leveraging open source-based solutions, we are working together to automate service delivery without vendor lock-in.

With a successful tier-one service provider production deployment in the books, our new open source plugin, Cloudify Lumina Flow Manager, enables service orchestration for brownfield networks that want to deploy NFV. The plugin enables the Cloudify cloud-native orchestration platform to provision network connectivity with unified controls of underlay equipment via a network path-based application, the Lumina Flow Manager, on the Lumina SDN Controller.

Plugin Demonstration

In the demonstration below, the Cloudify LFM (Lumina Flow Manager) Plugin deploys and manages network services. It enables Paths creation and ELines for both VLan and Ethernet - a great starting point for extension to other services and customization.

Our goal in this demonstration will be to allow and send ARP and IP packets between host 101 to host 303 and I'll demonstrate how to:

  • Package and install the plugin
  • Deploy an ELine service to the LFM controller
  • Verify it's working on Mininet


Tutorial - How to Use the Cloudify Lumina Flow Manager

Required Environment

We used Cloudify, Mininet, and LFM Vagrant VMs. Tutorials on how to set up these environments on Virtualbox or Libvirt will be explained in another article soon, so stay tuned.

LFM is setup without SSL using plain http for any requests. (But you can also use HTTPS)

Mininet -
The topology used includes: controller, 8 servers and 9 switches and links connecting between the devices and is provided in the examples folder:

Network Topology

The Mininet server is also used for Nginx and Ansible for any supporting files and deployments needed by LFM or Cloudify.

Cloudify -
Cloudify image is provided in QCow2 image format from their downloads page:

Upload Plugin to Cloudify Manager

SSH into the Cloudify vm.

Create a virtual environment for Python
virtualenv .venv
source .venv/bin/activate

Clone the plugin repository
git clone
cd cloudify-lfm-plugin

Package and install the plugin on Cloudify
make wagon
make upload

or package and upload manually:
wagon create -r dev-requirements.txt -f .
cfy plugin upload -y plugin.yaml cloudify_lfm_plugin-*.wgn

if the plugin already exists, you can automatically delete it with the replace script
make replace

or manually:
cfy plugin list
cfy plugin delete plugin_id

Next, the blueprints provided in the examples/blueprint folder reference the plugin.yaml.
You have a few options on how to reference it.

If you change the references, make sure to delete the file in the examples folder and compress the blueprint folder again.

Mininet Nginx
To host the site locally on Nginx you will either need to update the ip address

Or set up a DNS entry on the Cloudify server:
vi /etc/hosts
append: file-server

The topology is started with the following command: sudo topology-yaml mininet start topo.yml.

If your servers have access to the internet, you can also try to reference it from Github:

Now that we have the plugin installed and the plugin.yaml hosted, we can create blueprints and deploy the services.

Create and deploy an ELine Blueprint service

Login to Cloudify

Cloudify Login

Go to the Local Blueprints on the left-hand sidebar:

Local Blueprints

Click on the upload button at the top right and select the file provided in the examples. (make sure the folder is up to date with the plugin.yaml reference update above).

If you're using Vagrant VMs you'll need to use the eline-ethernet blueprint.

Set a name for the blueprint e.g eline-ethernet

Blueprint Name

Once the blueprint is uploaded it should show in the Blueprints list.

Blueprints List

*If uploads don't seem to work, it could be anything but is often an environment setup issue, with debugging may lead to rabbitmq breaking which relates to network / ip address issue on the Cloudify vagrant machine.

Go to the Deployments page on the left menu bar or go to

Set a name to the deployment e.g my-eline-test1 and set the blueprint uploaded above e.g eline-ethernet

Then set the fields or use the example inputs to autofill the inputs using the examples/inputs/eline-ethernet-test.yaml

Then click deploy.

Create new deployment

Once the deployment is set up, you can go into the deployment and see the topology and blueprint information.


To install the blueprint and deploy the service to LFM, click the hamburger icon on the right and click install. Once the installation is successful, the topology should show green ticks next to each node.



Verify Services Created

To verify the Path and Elines were created go to the controller UI
and you should see it listed under Paths and Services tabs.

Flow Manager

Flow Manager

Or you can use the controller API with Curl or Postman:
curl -k -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' --user admin:admin --insecure -i

curl -k -X GET -H 'Accept: application/json' -H 'Content-Type: application/json' --user admin:admin --insecure -i

Testing with Mininet

We will use two terminal windows.

Before installing an ELine

terminal 1 - Mininet ssh tcpdump
Run a tcpdump in the Mininet server for switch 303 so we can capture packets: sudo tcpdump -i s303-eth1

the output looks like this:
$ sudo tcpdump -i s303-eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on s303-eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
13:35:25.381007 LLDP, length 75: openflow:303
13:35:30.797614 LLDP, length 75: openflow:303

terminal 2 - Mininet console ping/arp
In the Mininet terminal
mininet>h101 ping s303
PING ( 56(84) bytes of data.
64 bytes from icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from icmp_seq=2 ttl=64 time=0.031 ms
64 bytes from icmp_seq=3 ttl=64 time=0.030 ms
mininet>h101 arp -a
? ( at on h101-eth0

After installing an ELine

Starting tcpdump again, once we try to ping or arp as described below, we'll see it coming through in the output.

terminal 1 - mininet ssh tcpdump
$ sudo tcpdump -i s303-eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on s303-eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
13:44:10.797842 LLDP, length 75: openflow:303
13:44:14.614855 ARP, Request who-has tell, length 28
13:44:15.619532 ARP, Request who-has tell, length 28
13:44:16.214305 LLDP, length 75: openflow:303
13:44:16.622273 ARP, Request who-has tell, length 28
13:44:19.624919 ARP, Request who-has tell, length 28
13:44:20.629490 ARP, Request who-has tell, length 28
13:44:21.631191 LLDP, length 75: openflow:303
13:44:21.633951 ARP, Request who-has tell, length 28

terminal 2 - Mininet console ping/arp

mininet> h101 ping s303
PING ( 56(84) bytes of data.
64 bytes from icmp_seq=1 ttl=64 time=0.023 ms
64 bytes from icmp_seq=2 ttl=64 time=0.034 ms
--- ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.023/0.028/0.034/0.007 ms
mininet> h101 arp -a
? ( at on h101-eth0

Uninstall an ELine Blueprint service

To uninstall the services, click the hamburger button again, and click uninstall.


Additional information

You can find more information on how to work with plugins and extend them on the Cloudify documentation page: or more technical information on the Github plugin page:

If you have any questions or would like to see a demo please contact us.