Downloading and Installing the Pluribus ML2 Plugin

Note: For details on installing the Red Hat controllers and platforms, refer to the Red Hat documentation:

The Pluribus ML2 plugin package is available as a Docker image, which you can download from GitHub. You must download the plugin package and install on the Red Hat OpenStack controller.

Installing the ML2 Plugin on a Red Hat Controller 

To install the Pluribus ML2 plugin on a Red Hat Controller:

Based on the RedHat OpenStack Platform and Netvisor ONE version, follow step 1.1 if the plugin package image is available and you want to just pull the docker image from Docker Hub. Follow step 1.2 if you want to build the docker image and then install the image on the controller.

  1. To install the ML2 plugin :

    1. Download  and install image from for RedHat OpenStack Platform (TripleO).

Each repository's tag has the RedHat OpenStack version and the Netvisor ONE (nvOS) version. For example, if the repository is:


       RedHat OpenStack version = 13.0-105.1580118143


       nvOS version = 5.2.0

then, download  the docker image - docker pull pluribusnetworks/openstack-neutron-server-pn:13.0-105.1580118143-5.2.0


    1. Build the docker image from source:

      • Obtain Pluribus ML2 plugin from Pluribus TAC
      • Extract the tarbal of Pluribus ML2 plugin and cd to the directory that is extracted out of the tarbal and then do: cd networking-pluribus
      • Build the RPM package: sudo python bdist_rpm # 
      • Change the directory to find networking-pluribus-<version>.noarch.rpm
      • Change the directory back to PNopenstack/networking-pluribus

      • Modify the Dockerfile to:

 $ cat Dockerfile

FROM <registry>/rhosp13/openstack-neutron-server<image>:<tag> =====> modify to the current neutron server image

MAINTAINER Pluribus Networks

USER root

RUN rpm -e networking-pluribus | echo "1"

COPY dist/networking-pluribus-<version>.noarch.rpm /tmp =====> modify version to the one generated in dist/

RUN rpm -ivvh /tmp/networking-pluribus-<version>.noarch.rpm =====> modify version to the one generated in dist/

USER neutron

      • Build a docker image: sudo docker build `pwd`
      • Tag the image - docker tag <IMAGE ID>  pluribusnetworks/openstack-neutron-server-pn:13.0-105.1580118143-5.2.0

  1. Tag and push ‘pluribusnetworks/openstack-neutron-server-pn’ to Local Registry 

sudo docker tag <IMAGE ID>  <Local-registry-IP: port>/rhosp13/openstack-neutron-server-pn:13.0-105.1580118143-5.2.0

sudo docker push <Local-registry-IP: port>rhosp13/openstack-neutron-server-pn:13.0-105.1580118143-5.2.0

  1. Update DockerNeutronApiImage and DockerNeutronConfigImage in overcloud_images.yaml to the latest version of Pluribus OpenStack Plugin as suggested for that Netvisor ONE version.

Edit overcloud_images.yaml to:

DockerNeutronApiImage: <Local-registry-IP: port>rhosp13/openstack- neutron-server-pn:13.0-105.1580118143-5.2.0

       DockerNeutronConfigImage: <Local-registry-IP: port>rhosp13/openstack- neutron-server-pn:13.0-105.1580118143-5.2.0

  1. Deploy the overcloud from the director node.

  1. After the stack changes the status to UPDATE_COMPLETE, login to the overcloud  and make changes suggested below:

    1. Edit entry_points.txt file from the location: /var/lib/config-data/puppet-generated/neutron/etc/neutron/plugins/ml2/


pluribus = networking_pluribus.mech_driver.driver:PluribusMechanismDriver

For example: cd /usr/lib/python2.7/site-packages/neutron-12.0.5-py2.7.egg-info and Edit entry_points.txt.

    1. Edit the /var/lib/config-data/puppet-generated/neutron/etc/neutron/plugins/ml2/ml2_conf.ini, add "pluribus" to mechanism drivers, and add the PLURIBUS_PLUGINS section: mechanism_drivers=openvswitch,baremetal,pluribus


# Pluribus switch IP address


# pn_switch =,


# Pluribus switch username and password for REST api access


# username = network-admin


# password = <base 64 encoded password>

The Format of specifying the Pluribus switch is:  pn_switch,  <primary_ip:web_port>,<secondary_ip:web_port>

Note: Because the  Pluribus ML2 plugin uses RESTful APIs to configure the Unified Cloud Fabric, you must select two seed nodes in the fabric that can act as the primary node and the secondary node for the REST API to parse. Enter the management IP addresses of the selected seed nodes (primary and secondary) as the primary_ip and the  secondary_ip respectively in the above configuration.  Ensure to enter the IP addresses without giving space between primary IP address and secondary IP address as shown in the example above.

Note: You must enable web services on these selected (primary and secondary) nodes.

The web port for each switch can  be obtained from the show output of the Netvisor ONE CLI command,  admin-service-show on the Pluribus switch. The web port can be any configurable port on the switch. 

Note: The ml2_conf.ini and entry_points.txt are available in the path:  /var/lib/config-data/puppet-generated/neutron/etc/neutron/plugins/ml2/ and are used by the neutron-server installed on the neutron_api docker container.

  1. Restart neutron-server by restarting the docker container neutron_api using the command:

sudo docker restart neutron_api

  1. Check the  status of the docker image using the command: 

sudo docker ps -a | grep neutron_api

For example, 

[heat-admin@cloud-controller-0 neutron]$ sudo docker ps | grep neutron_api

7cda7ac43cee "dumb-init --singl..." About an hour ago Up About an hour (healthy) neutron_api

[heat-admin@cloud-controller-0 neutron]$ sudo docker stop neutron_api


[heat-admin@cloud-controller-0 neutron]$ sudo docker start neutron_api


For installation details on PackStack deployment, see the Appendix A- ML2 Plugin Installation: PackStack Deployment section.