DIRECTORY ORGANIZATION
======================
+- commons
+ +-- parent : Contains Parent pom.xml for all the ovsdb modules.
+
+- hwvtepsouthbound : Contains the hw_vtep southbound plugin.
+
- library : Contains Schema-independent library that is a reference implementation for RFC 7047.
This module doesn't depend on any of the Opendaylight components.
This library module can also be used independently in a non-OSGi environment.
-- schemas :
- |-- openvswitch : Schema wrapper that represents http://openvswitch.org/ovs-vswitchd.conf.db.5.pdf
- |-- hardwarevtep: Schema wrapper that represents http://openvswitch.org/docs/vtep.5.pdf
-
-- plugin : Contains Opendaylight Southbound Plugin APIs and provides an simpler API interface on top of library layer.
- Ideally, this module should also be schema independent. But due to legacy reasons this layer contains some
- deprecated functionalities that assume openvswitch schema.
-
-- northbound : Provides AD-SAL style Northbound REST APIs.
- Supports the legacy v2 APIs to provide backward compatibility for Hydrogen Release
- Also supports the newer v3 APIs to provide schema-independent access to the OVSDB protocol.
-
-- openstack
- |-- net-virt : Handles the Openstack Neutron ML2 and Network Service calls and performs all the logic required
- for Network Virtualization.
- |-- net-virt-providers : Mostly contains data-path programming functionalities via OpenFlow or potentially
- other protocols.
-
-- commons
- |-- parent : Contains Parent pom.xml for all the ovsdb modules.
- |-- integrationtest : Contains the parent pom.xml for all the integrationtest needs.
-
-- distribution : Builds a working controller distribution based on the controller + ovsdb modules and other
- dependant modules such as openflowplugin
+- resources : Contains some useful resources such as scripts, testing utilities and tools used for deployment
+ or testing the binaries generated from the OVSDB project.
-- features : This folder contains all the Karaf related files.
+- schemas :
+ +-- openvswitch : Schema wrapper that represents http://openvswitch.org/ovs-vswitchd.conf.db.5.pdf
+ +-- hardwarevtep: Schema wrapper that represents http://openvswitch.org/docs/vtep.5.pdf
-- integrationtest : Contains all the PAX-Exam based integrationTests that covers IT for all of the above modules.
+- southbound : contains the plugin for converting from the OVSDB protocol to mdsal and vice-versa.
-- resources : Contains some useful resources such as scripts, testing utilities and tools used for deployment
- or testing the binaries generated from the OVSDB project.
+- utils : OVSDB common utilities.
HOW TO BUILD & RUN
==================
Pre-requisites : JDK 1.7+, Maven 3+
-1. Building a OVSDB based Opendaylight Virtualization edition :
- 1. This is the legacy way to build and distribute Opendaylight archives. And this method was
- followed in Hydrogen and possibly in Helium release as well.
-
- 2. From the root folder(that hosts this README), execute "mvn clean install"
- That should build a full distribution archive and distribution directory that will contain
- Opendaylight Controller + OVSDB bundles + Openflow Plugins under
- distribution/opendaylight/target/distribution.ovsdb-X.X.X-osgipackage
-
- 3. Upon successful completion of a build, the Controller with OVSDB can be executed by :
- cd distribution/opendaylight/target/distribution.ovsdb-X.X.X-osgipackage/opendaylight/
- ./run.sh -virt ovsdb
-
+1. Building a Karaf Feature and deploying it in an Opendaylight Karaf distribution :
+ 1. From the root ovsdb/ directory, execute "mvn clean install"
-2. Building a Karaf Feature and deploying it in an Opendaylight Karaf distribution :
- 1. This is a new method for Opendaylight distribution wherein there is no defined editions such
- as Base, Virtualization or SP editions. Rather each of the projects will generate features in
- form of .kar files. The end-customer can choose to deploy the required feature based on his/her
- deployment needs.
+ 2. Unzip the karaf-<VERSION_NUMBER>-SNAPSHOT.zip file created from step 1 in the directory ovsdb/karaf/target/:
+ "unzip karaf-<VERSION_NUMBER>-SNAPSHOT.zip"
- 2. From the features/ directory, execute "mvn clean install"
- This will generate a kar file such as "features/target/ovsdb-features-1.2.0-SNAPSHOT.kar"
+ 3. Once karaf has started and you see the Opendaylight ascii art in the console, the last step
+ is to start the OVSDB plugin framework with the following command in the karaf console:
+ "feature:install odl-ovsdb-openstack" (without quotation marks).
- 3. Download (or build from controller project) the Karaf distribution :
- http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight-karaf/
- Sample zip file :
- http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight-karaf/1.4.2-SNAPSHOT/distribution.opendaylight-karaf-1.4.2-20140718.075612-407.zip
+ Sample output from Karaf console :
- 4. unzip the downloaded (or built) distribution and copy the ovsdb-features-x.x.x.kar file (from step 2) into
- the unzipped distribution.opendaylight-karaf-X.X.X/deploy/ directory.
+ opendaylight-user@root>feature:list -i | grep ovsdb
+ odl-ovsdb-southbound-api | 1.2.1-SNAPSHOT | x | odl-ovsdb-southbound-1.2.1-SNAPSHOT | OpenDaylight :: southbound :: api
+ odl-ovsdb-southbound-impl | 1.2.1-SNAPSHOT | x | odl-ovsdb-southbound-1.2.1-SNAPSHOT | OpenDaylight :: southbound :: impl
+ odl-ovsdb-southbound-impl-rest | 1.2.1-SNAPSHOT | x | odl-ovsdb-southbound-1.2.1-SNAPSHOT | OpenDaylight :: southbound :: impl :: REST
+ odl-ovsdb-southbound-impl-ui | 1.2.1-SNAPSHOT | x | odl-ovsdb-southbound-1.2.1-SNAPSHOT | OpenDaylight :: southbound :: impl :: UI
+ odl-ovsdb-library | 1.2.1-SNAPSHOT | x | odl-ovsdb-library-1.2.1-SNAPSHOT | OpenDaylight :: library
+ odl-ovsdb-openstack | 1.2.1-SNAPSHOT | x | ovsdb-1.2.1-SNAPSHOT | OpenDaylight :: OVSDB :: OpenStack Network Virtual
- 5. run Karaf from within the distribution.opendaylight-karaf-X.X.X/ directory using "bin/karaf"
+2. Building a bundle and deploying it in an Opendaylight Karaf distribution :
+ This method can be used to update and test new code in a bundle. If the bundle of interest is rebuilt as a
+ snapshot with the same version as what it already defined in a feature repo then that new bundle will be used
+ when the feature is loaded in karaf. If karaf is already running with the feature loaded then follow the steps
+ below to load the new bundle:
- Sample output from Karaf console :
+ 1. Find the bundle id of the bundle you are going to rebuild:
+ - bundle:list -s | grep <bundlename>, i.e. bundle:list -s | grep odl-ovsdb-plugin
- opendaylight-user@root>kar:list
- KAR Name
- -----------------------------
- ovsdb-features-1.2.0-SNAPSHOT
+ 2. Instruct karaf to watch the new bundle and reload it if it changes:
+ - bundle:watch <id>
+ - The id is the value returned in 1 above.
+ - You can also watch the bundle URL itself:
+ - bundle:watch mvn:org.opendaylight.ovsdb/plugin/1.0.2-SNAPSHOT
- opendaylight-user@root>feature:list | grep ovsdb
- odl-ovsdb-all | 1.2.0-SNAPSHOT | x | ovsdb-1.2.0-SNAPSHOT | OpenDaylight :: OVSDB :: all
- odl-ovsdb-library | 1.0.0-SNAPSHOT | x | ovsdb-1.2.0-SNAPSHOT | OVSDB :: Library
- odl-ovsdb-schema-openvswitch | 1.0.0-SNAPSHOT | x | ovsdb-1.2.0-SNAPSHOT | OVSDB :: Schema :: Open_vSwitch
- odl-ovsdb-schema-hardwarevtep | 1.0.0-SNAPSHOT | x | ovsdb-1.2.0-SNAPSHOT | OVSDB :: Schema :: hardware_vtep
- odl-ovsdb-plugin | 1.0.0-SNAPSHOT | x | ovsdb-1.2.0-SNAPSHOT | OpenDaylight :: OVSDB :: Plugin
+ 3. Rebuild bundle.
+ - cd bundle dir, i.e. cd ovsdb/plugin
+ - mvn clean install. This will install the new bundle into the local mvn repo.
- opendaylight-user@root>bundle:list | grep OVSDB
- 186 | Active | 80 | 1.0.0.SNAPSHOT | OVSDB Library
- 199 | Active | 80 | 1.0.0.SNAPSHOT | OVSDB Open_vSwitch Schema
- 200 | Active | 80 | 1.0.0.SNAPSHOT | OVSDB hardware_vtep Schema
- 201 | Active | 80 | 1.0.0.SNAPSHOT | OpenDaylight OVSDB Plugin
+ 4. karaf will see the changed bundle and reload it.
Running The Integration Tests
=============================
To run the integration tests locally the following components are required:
- Docker
- - Fig
+ - Docker Compose
To install docker, follow the installation guide for your platform:
http://docs.docker.com/installation/
-To install fig:
- http://www.fig.sh/install.html
+To install Docker Compose:
+ http://docs.docker.com/compose/install/
To run the integration tests:
mvn clean install
- fig start
+ # The first time you need to set everything up
+ docker-compose up -d
+ # Later runs only need the containers to be started
+ docker-compose start
# OSX
mvn verify -Pintegrationtest -Dovsdbserver.ipaddress=$(boot2docker ip 2>/dev/null) -Dovsdbserver.port=6640
# Linux
- mvn verify -Pintegrationtest -Dovsdbserver.ipaddress=127.0.0.1 -Dovsdbserver.port=6640
- fig stop
+ mvn verify -Pintegrationtest -Dovsdbserver.ipaddress=127.0.0.1 -Dovsdbserver.port=6640 -Dovsdb.controller.address=<addr of docker interface> -Dovsdb.userspace.enabled=yes
+ docker-compose stop
+
+On Linux you'll generally need to run fig as root (sudo fig ...).
+
+Running the docker image manually:
+ sudo docker run -itd --cap-add NET_ADMIN -p 6640:6640 jhershbe/centos7-ovs:latest
+
+Skipping unit tests and karaf tests
+====================
+mvn clean install -Dmaven.test.skip=true -Dskip.karaf=true