Openstack Kilo – Opendaylight Lithium Integration on Ubuntu 14.04 LTS

You could see in this open source world alike OpenStack, OpenDaylight also getting its own popularity. Starting from the Hydrogen release, Opendaylight now with its 3rd release cycle named Lithium. There are more than 60+ projects available/incubated with OpenDaylight Lithium that could fulfill all the networking necessity around the SDN world. There also some dedicated projects for OpenStack that are designed and integrated with opendaylight. In this post, I will take you through the integration steps to deploy OpenStack to work with opendaylight.

 

Overlay-OpenDaylight-OVSDB-OpenFlow

1. Prerequisites

Before getting into the integration work, I consider the reader is already up with the working OpenStack-Kilo setup.

2. Install OpenDaylight:

OpenDaylight Controller runs in a JVM. So Install openjdk7 using the below command.

$ apt-get install openjdk-7-jdk

 

Download the latest OpenDaylight-Lithium package from the official repo.

$  wget  https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.3.3-Lithium-SR3/distribution-karaf-0.3.3-Lithium-SR3.tar.gz

 

Uncompress it as root, and start OpenDaylight using the command below,

$ tar xvfz  distribution-karaf-0.3.3-Lithium-SR3.tar.gz

$ cd distribution-karaf-0.3.3-Lithium-SR3/

$ ./bin/start      # Start OpenDaylight as a server process and Wait for some time before running the next command below.

 

Connect to the Karaf shell,

$ ./bin/client     # connecting to the OpenDaylight with the client

 

Now, you should be in OpenDaylight’s console. Install all the required features.

[email protected]> feature:install odl-base-all odl-aaa-authn odl-restconf odl-nsf-all odl-adsal-northbound odl-mdsal-apidocs  odl-ovsdb-openstack odl-ovsdb-northbound odl-dlux-core

Note:-

For Openstack-Liberty version integration the only required (and working) features are:
feature:install odlovsdbopenstack odldlux-core      #Thanks to Pedro André for this remark:-)

#Feature installation may take some time to install.

Once the installation is completed, you can check whether everything is working fine by using the below curl call.

$ curl -u admin:admin http://<OPENDAYLIGHT  SERVER’s IP>:8080/controller/nb/v2/neutron/networks

The response should be an empty network list if opendaylight is working properly.

Also, you should be able to log in to the dlux interface on http://<OPENDAYLIGHT SERVER’s IP>:8181/index.html – the default username and password is “admin/admin”. (see screenshot below)

Screenshot-from-2014-11-04-22_50_06

 

$ tail -f data/log/karaf.log

$ tail -f logs/web_access_log_2015-12.txt

Additionally, you can find the log details at the below location,

 

Now, you are up with the working OpenDaylight-Lithium setupJ. Let’s get into the Integration part,

 

3. Erase all VMs, networks, routers and ports in the Controller Node

Since, you already have the working OpenStack setup. You might test for VM provisioning as sanity test but before integrating the openstack with the OpenDaylight you must clean up all the unwanted data from the openstack database. When using OpenDaylight as the Neutron back-end, ODL expects to be the only source for Open vSwitch configuration. Because of this, it is necessary to remove existing OpenStack and Open vSwitch configurations to give OpenDaylight a clean slate.

Following steps will guide you through the cleaning process!

• Delete instances

$ nova list

$ nova delete <instance names>

 

• Remove link from subnets to routers

$ neutron subnet-list

$ neutron router-list

$ neutron router-port-list <router name>

$ neutron router-interface-delete <router name> <subnet ID or name>

 

• Delete subnets, nets, routers

$ neutron subnet-delete <subnet name>

$ neutron net-list

$ neutron net-delete <net name>

$ neutron router-delete <router name>

 

• Check that all ports have been cleared – at this point, this should be an empty list

$ neutron port-list

 

Stop the neutron-server service:

While Neutron is managing the OVS instances on compute and control nodes, OpenDaylight and Neutron can be in conflict. To prevent issues, we turn off Neutron server on the network controller, and Neutron’s Open vSwitch agents on all hosts.

$ service neutron-server stop

 

4. Configure OpenvSwitches in Network and Compute Nodes

The neutron plugin in every node must be removed because only OpenDaylight will be controlling the openvswitches. So on each host, we will clear the pre-existing Open vSwitch config and set OpenDaylight to manage the openVswitch.

$ apt-get purge neutron-plugin-openvswitch-agent

$ service openvswitch-switch stop

$ rm -rf /var/log/openvswitch/*

$ rm -rf /etc/openvswitch/conf.db     #Clear openvswitch database and start it again.

$ service openvswitch-switch start

$ ovs-vsctl show     # This command must return the empty set except  OpenVswitch ID and it’s Version.

5. Connect Openswitch with OpenDaylight:

Use the following commands to make the opendaylight manage the openvswitch,

$ ovs-vsctl set Open_vSwitch <OPENVSWITCH ID> other_config={‘local_ip’='<TUNNEL INTERFACE IP>’}

$ ovs-vsctl set-manager tcp:<OPENDAYLIGHT MANAGEMENT IP>:6640

You can get OpenVswitch ID from the  command “ovs-vsctl show” and Tunnel IP from OpenStack ml2_conf.ini file.

Execute the above command in all the node(Network & Compute node) which has openVswitch Installed.

 

Create the bridge br-ex which is needed for the external network for OpenStack in the network(neutron) node.

$ ovs-vsctl add-br br-ex

$ ovs-vsctl add-port br-ex <INTERFACE NAME OF EXTERNAL NETWORK>     #commonly eth0 or p2p1

$ ovs-vsctl show

The above command will show that you are connected to the OpenDaylight server, and OpenDaylight will automatically create a br-int bridge.

[[email protected] ~]# ovs-vsctl show

9e3b34cb-fefc-4br4-828s-084b3e55rtfd

Manager “tcp:192.168.1.232:6640”

Is_connected: true

Bridge br-int

Controller “tcp:192.168.1.232:6633”

fail_mode: secure

Port br-int

Interface br-int

ovs_version: “2.1.3”

6. Configure ml2_conf.ini for odl driver

Edit vi /etc/neutron/plugins/ml2/ml2_conf.ini in all the nodes required and modify the following configuration. And leave the other configurations as it is.

[ml2]

type_drivers = flat,vxlan

tenant_network_types = vxlan

mechanism_drivers = opendaylight

 

[ml2_odl]

password = admin

username = admin

url = http://<OPENDAYLIGHT SERVER’s IP>:8080/controller/nb/v2/neutron

7. Configure Neutron Database

Reset the neutron database,

$ mysql -uroot –p

$ drop database neutron;

$ create database neutron;

$ grant all privileges on neutron.* to ‘neutron’@’localhost’ identified by ‘<YOUR NEUTRON PASSWORD>’;

$ grant all privileges on neutron.* to ‘neutron’@’%’ identified by ‘<YOUR NEUTRON PASSWORD>’;

$ exit

 

$ su -s /bin/sh -c “neutron-db-manage –config-file /etc/neutron/neutron.conf –config-file etc/neutron/plugins/ml2/ml2_conf.ini upgrade head” neutron

 

Restart the neutron-server:

$ service neutron-server start

 

8. Install networking_odl python module

IMPORTANT:

Probably, you should get the status as neutron service failed to start  by this time.

Don’t worry, this is a temporary issue. Since, you have enabled opendaylight as a mechanism_driver but not yet installed the python module for it.

So here we go… Install networking_odl python module.

$ apt-get install python-pip

$ pip install networking_odl

Now, restart the neutron-server and check its status which should be running without errors.

9. Verify the integration:

We are almost completed the OpenStack with Opendaylight integration.

Now, it’s time to verify it.

Create initial networks in openstack and check whether the same is reflected in opendaylight.

You could create the network using openstack horizon dashboard also. Below are the commands to create the same in CLI.

$ neutron router-create router1

$ neutron net-create private

$ neutron subnet-create private –name=private_subnet 172.0.0.0/24

$ neutron router-interface-add router1 private_subnet

$ nova boot –flavor <flavor> –image <image id> –nic net-id=<network id> vinoth-vm1

 

Once, the network creation is done. You could see the same networks has been created in opendaylight using the below command.

$ curl -u admin:admin http://${OPENDAYLIGHT’s SERVER}:8080/controller/nb/v2/neutron/ networks

 

The above command will return the network information which is created in opendaylight through openstack.

 

Congratulations! You’re done! 🙂

If everything works correctly you will be able to ping every VM.

_________________

Thanks,

Vinoth Kumar selvaraj

23/Dec/2015

43 Comments

  • Pedro André says:

    Hi,

    While following your instructions I got stuck in chapter 5 (integrating ODL with Openstack).

    It’s not clear in which nodes should be done the commands.

    Also could you please clarify what you mean by the Tunner IP “…and Tunnel IP from OpenStack IP.”

    Thanks.

    • Thanks for your insight on my blog.

      1) You should follow that steps in Network node.

      2) Tunnel Ip:
      The local-IP you have mentioned in ml2_conf.ini file.This is the IP for VM-to-VM communication (Data Path network IP).

  • Pedro André says:

    Hi,

    thank you for your comments and update on this procedure.

    I’ve currently using Liberty branch but, for some reason, it’s not working when trying to create the router (verify chapter).

    Did you tried with this Openstack version?

    Thanks and keep up this good job

  • Pedro André says:

    Hi,

    Just a remark.
    In Liberty version the only required (and working) features are:
    feature:install odl-ovsdb-openstack odl-dlux-core

    When installed other feature it broke the OVS connector.

    Hope if helps you.

    BR,
    PMA

    • Thank you for your remark PMA,
      I will update it shortly. 🙂

      Thanks,
      Vinoth

      • Fabrizio says:

        Hi,

        if I dont’ add also odl-aaa-authn, it won’t work. So I have to do: feature:install odl-aaa-authn odl-ovsdb-openstack odl-dlux-core

        I’m on Liberty + Beryllium right now

        • Fabrizio says:

          The error was:

          Error executing command: Can’t install feature odl-dlux-core/0.0.0:
          Could not start bundle mvn:org.opendaylight.aaa/aaa-shiro-act/0.3.0-Beryllium in feature(s) odl-restconf-1.3.0-Beryllium: The bundle “org.opendaylight.aaa.shiro-act_0.3.0.Beryllium [359]” could not be resolved. Reason: Missing Constraint: Import-Package: org.opendaylight.aaa.shiro; version=”[0.3.0,1.0.0)”

    • Milan says:

      Hi Andre

      I am doing the same implementation with Liberty, how many nodes do you have ?

      and did you execute step 6. Configure ml2_conf.ini for odl driver for the COMPUTE node ?

      Thanks

      Milan

  • skhan says:

    Hi finoth followed above instruction with latest kilo release of openstack.
    openvswitch is connecting to ODL mgr, ovs-vsctl is showing connected but
    br-int is not comming up.

    • ymmen says:

      Ensure that Opendaylight karaf is running while running “ovs-vsctl set Open_vSwitch … and its next command” , as it is responsible for creating br-int bridge.

  • skhan says:

    br-int issue was with some package conflict on ODL side. i cleaned all.
    installed just odl-ovsdb-openstack and br-int is coming up and flow rules are also commming to br-int.

    But now vxlan tunnels are not coming up.

    In /etc/neutron/plugins/ml2/ml2_conf.ini my tunnel ip is same as mgmt. interface ip

    My ovs switch is also latest ovs_version: “2.3.2”

    dont know what i’m missing.

  • Adriano says:

    HI,
    I made all settings, you can create the network, but to try to create an instantiate I get the following error as if the node computer was not able to communicate with other nodes:
    “Please try again later [Error:. No valid host was found There are not enough hosts available.].”
    Would you help me?
    Observation: it would be good to put in the tutorial in which node should be done the setting, I was a little lost and may have set the wrong node.

    • Adriano,
      Could please post the error log here. Most likely you would find the errors in neutron log file at this situation.

      Thanks,
      Vinoth

      • Macko says:

        Hi, i have the same problem, moreover i have also on all compute nodes and network node the br-int as well as br-ext on network node with status of DOWN (it should be rather UP, right?) ovs-system has also DOWN state. I can create new network, routers, but i can’t create any instance. My openstack is based on one controller node, two computes and one network node, ODL is on the dedicated separated machine.
        neutron server.log on the controller has such errors:
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers [req-f9feedeb-bd21-45a2-81ed-dcdcd22db125 4a58c40737944ec8b34e0a199aff5348 9b8e31aadf4e4ed2ad034971136258dc – – -] Mechanism driver ‘opendaylight’ failed in update_port_postcommit
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers Traceback (most recent call last):
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/managers.py”, line 394, in _call_on_drivers
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers getattr(driver.obj, method_name)(context)
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/opendaylight/driver.py”, line 86, in update_port_postcommit
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers self.odl_drv.synchronize(‘update’, odl_const.ODL_PORTS, context)
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/networking_odl/ml2/mech_driver.py”, line 58, in synchronize
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers self.sync_single_resource(operation, object_type, context)
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/networking_odl/ml2/mech_driver.py”, line 167, in sync_single_resource
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers self.out_of_sync = True
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/oslo_utils/excutils.py”, line 195, in __exit__
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers six.reraise(self.type_, self.value, self.tb)
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/networking_odl/ml2/mech_driver.py”, line 164, in sync_single_resource
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers {object_type[:-1]: resource})
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/networking_odl/common/client.py”, line 42, in sendjson
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers r.raise_for_status()
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers File “/usr/lib/python2.7/site-packages/requests/models.py”, line 851, in raise_for_status
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers raise HTTPError(http_error_msg, response=self)
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers HTTPError: 500 Server Error: Server Error
        2016-03-07 04:56:09.731 4188 ERROR neutron.plugins.ml2.managers
        2016-03-07 04:56:09.734 4188 ERROR neutron.plugins.ml2.plugin [req-f9feedeb-bd21-45a2-81ed-dcdcd22db125 4a58c40737944ec8b34e0a199aff5348 9b8e31aadf4e4ed2ad034971136258dc – – -] _bind_port_if_needed failed, deleting port ‘1207be0e-1e3e-450a-a63a-7b0826246e1d’
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource [req-f9feedeb-bd21-45a2-81ed-dcdcd22db125 4a58c40737944ec8b34e0a199aff5348 9b8e31aadf4e4ed2ad034971136258dc – – -] create failed
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource Traceback (most recent call last):
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/api/v2/resource.py”, line 83, in resource
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource result = method(request=request, **args)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/oslo_db/api.py”, line 146, in wrapper
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/oslo_utils/excutils.py”, line 195, in __exit__
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/oslo_db/api.py”, line 136, in wrapper
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource return f(*args, **kwargs)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/api/v2/base.py”, line 516, in create
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource obj = do_create(body)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/api/v2/base.py”, line 498, in do_create
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource request.context, reservation.reservation_id)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/oslo_utils/excutils.py”, line 195, in __exit__
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/api/v2/base.py”, line 491, in do_create
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource return obj_creator(request.context, **kwargs)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py”, line 1051, in create_port
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource self.delete_port(context, result[‘id’])
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/oslo_utils/excutils.py”, line 195, in __exit__
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py”, line 1046, in create_port
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource bound_context = self._bind_port_if_needed(mech_context)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py”, line 284, in _bind_port_if_needed
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource context, need_notify)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py”, line 322, in _attempt_binding
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource plugin_context, port_id, binding, bind_context)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/plugin.py”, line 442, in _commit_port_binding
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource self.mechanism_manager.update_port_postcommit(cur_context)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/managers.py”, line 631, in update_port_postcommit
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource continue_on_failure=True)
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource File “/usr/lib/python2.7/site-packages/neutron/plugins/ml2/managers.py”, line 405, in _call_on_drivers
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource method=method_name
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource MechanismDriverError: update_port_postcommit failed.
        2016-03-07 04:56:10.030 4188 ERROR neutron.api.v2.resource

        Any ideas? Anyone has similar issues?

        ODL – beryllium, OS – liberty

        • Macko,
          Just a suggestion!
          Since logs shows the Post-commit error!
          I would suggest you to check from ODL controller side. Because Post-commit usually occurs when everything works fine from openstack end.

          In your case, Openstack neutron successfully triggers the odl APIs to create ports but ODL failed at some level in creating the port in ovs-switch end.

          Thanks,
          Vinoth

          • Macko says:

            thank you for suggestion

          • Macko says:

            Definitely, your suggestion is good. There is some problem on ODL site – ODL returns HTTP/1.1 500 Server Error. Have you any ideas what/how to investigate this problem?

            The example API call from neutron to ODL, to create port:

            PUT /controller/nb/v2/neutron/ports/da9aca8e-45c6-44eb-8467-c18906fde67f HTTP/1.1
            Host: 192.168.128.159:8080
            Content-Length: 2661
            Accept-Encoding: gzip, deflate
            Accept: */*
            User-Agent: python-requests/2.7.0 CPython/2.7.5 Linux/3.10.0-327.10.1.el7.x86_64
            Connection: keep-alive
            Content-Type: application/json
            Authorization: Basic YWRtaW46YWRtaW4=

            {
            “port”: {
            “binding:host_id”: “computeD2.wro.lab”,
            “allowed_address_pairs”: [],
            “extra_dhcp_opts”: [],
            “device_owner”: “compute:nova”,
            “binding:profile”: {},
            “security_groups”: [
            {
            “tenant_id”: “6d56ef1007604941936ca0b8f964049a”,
            “description”: “Default security group”,
            “id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”,
            “security_group_rules”: [
            {
            “remote_group_id”: null,
            “direction”: “egress”,
            “remote_ip_prefix”: null,
            “protocol”: null,
            “ethertype”: “IPv4”,
            “tenant_id”: “6d56ef1007604941936ca0b8f964049a”,
            “port_range_max”: null,
            “port_range_min”: null,
            “id”: “1ff21a35-0e47-41aa-9542-12700e0eb644”,
            “security_group_id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”
            },
            {
            “remote_group_id”: null,
            “direction”: “egress”,
            “remote_ip_prefix”: null,
            “protocol”: null,
            “ethertype”: “IPv6”,
            “tenant_id”: “6d56ef1007604941936ca0b8f964049a”,
            “port_range_max”: null,
            “port_range_min”: null,
            “id”: “333b70d4-1835-4c46-9254-d4472171a8a6”,
            “security_group_id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”
            },
            {
            “remote_group_id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”,
            “direction”: “ingress”,
            “remote_ip_prefix”: null,
            “protocol”: null,
            “ethertype”: “IPv6”,
            “tenant_id”: “6d56ef1007604941936ca0b8f964049a”,
            “port_range_max”: null,
            “port_range_min”: null,
            “id”: “be10c2a3-4085-427c-9bdd-a5aafde2d1e6”,
            “security_group_id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”
            },
            {
            “remote_group_id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”,
            “direction”: “ingress”,
            “remote_ip_prefix”: null,
            “protocol”: null,
            “ethertype”: “IPv4”,
            “tenant_id”: “6d56ef1007604941936ca0b8f964049a”,
            “port_range_max”: null,
            “port_range_min”: null,
            “id”: “deaad0e3-ddb5-40f1-8904-0da7931d42e0”,
            “security_group_id”: “efc702da-95b5-4ab6-9a5b-c6c3aaf1e15d”
            }
            ],
            “name”: “default”
            }
            ],
            “device_id”: “351fbb8d-f0cd-408f-a3eb-aa4b0fa8996a”,
            “name”: “”,
            “admin_state_up”: true,
            “dns_name”: “”,
            “binding:vif_details”: {},
            “binding:vnic_type”: “normal”,
            “binding:vif_type”: “binding_failed”
            }
            }HTTP/1.1 500 Server Error
            Content-Length: 0
            Server: Jetty(8.1.15.v20140411)

          • Martin says:

            Hi, I am experiencing the same issue. Did you fix it? Can you post the solution? Thank you.

  • Siddharth gogar says:

    [email protected]:~/distribution-karaf-0.3.3-Lithium-SR3# ./bin/client
    client: JAVA_HOME not set; results may vary
    What should be the password here??

    [email protected]:~/distribution-karaf-0.3.3-Lithium-SR3# ./bin/client
    client: JAVA_HOME not set; results may vary
    Logging in as _g_:admingroup
    280 [sshd-SshClient[5575b132]-nio2-thread-2] WARN org.apache.sshd.client.keyverifier.AcceptAllServerKeyVerifier – Server at [/0.0.0.0:8101, DSA, c2:c2:c4:53:09:00:67:82:d7:c7:04:19:4d:d2:69:4e] presented unverified {} key: {}
    Password:
    Password:
    Password:
    Authentication failed

  • Siddharth gogar says:

    Thank you for the reply. Was able to login using ./bin/client -u karaf

    Now. i am not able to login to the ODL controller GUI:After installing all features when I try to login using the http://:8181/index.html – I get the following update on the karaf client
    [email protected]>feature:install odl-base-all odl-aaa-authn odl-restconf odl-nsf-all odl-adsal-northbound odl-mdsal-apidocs odl-ovsdb-openstack odl-ovsdb-northbound odl-dlux-core
    Refreshing bundles org.apache.aries.util (9)
    Refreshing bundles org.ops4j.pax.web.pax-web-api (77), org.apache.xbean.bundleutils (74), org.ops4j.pax.web.pax-web-jetty (80), io.netty.codec (148), io.netty.handler (151), org.ops4j.pax.web.pax-web-sp i (78), org.ops4j.pax.web.pax-web-runtime (79), com.sun.jersey.servlet (154)
    GossipRouter started at Wed Feb 17 22:33:55 GMT 2016
    Listening on port 12001 bound on address 0.0.0.0/0.0.0.0
    Backlog is 1000, linger timeout is 2000, and read timeout is 0
    [email protected]>
    [email protected]>Exception in thread “Thread-155” java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:463)
    at sun.nio.ch.Net.bind(Net.java:455)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:125)
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:485)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1081)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:502)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:487)
    at io.netty.channel.ChannelDuplexHandler.bind(ChannelDuplexHandler.java:38)
    at io.netty.handler.logging.LoggingHandler.bind(LoggingHandler.java:240)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:502)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:487)
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:904)
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:198)
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:348)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
    at java.lang.Thread.run(Thread.java:745)
    [email protected]:~/distribution-karaf-0.3.3-Lithium-SR3# history

    I am trying this configuration on Openstack kilo (Mirantis). So all these configurations are done on controller node which also has neutron services.

    Thank you!

  • vishal sharma says:

    can you give me some more references, which are more clear. a bit more explanation.

  • harshavardhan says:

    hi
    i followed all the steps mentioned here but i couldn’t launch instance. neutron server log says port binding failed on host compute. In network node l3 agent log says cannot find br-int. I added br-int manually on compute and network nodes but i am facing ‘port binding failed ‘. After creating networks, In ODL node if i do curl for neutron networks it shows 404 error, before integrating i got empty as output. Please help me with the issue. Thank you!

    • Which ODL and OpenStack release are you using?
      And what plugin and mechanism driver configured in your OpenStack?
      whether openVswitch or Linux bridge?

      • harshavardhan says:

        Thanks for replying. ODL version is Lithium SR3 and Openstack version is liberty with Open vSwitch and mechanism driver is configured as opendaylight as mentioned in the post on both compute and networking nodes. All the features mentioned here are installed in ODL.

        • Could please share your logs here?

          • harshavardhan says:

            Thanks for replying. I solved the errors related networking by using beryllium version of ODL. After installing python-pip and networking_odl, keystone got destroyed. All the commands are throwing 500 error. Restarting keystone Details are below

            No handlers could be found for logger “keystoneclient.auth.identity.generic.base” ERROR (InternalServerError): Internal Server Error (HTTP 500)
            netstat shows
            netstat -plant |grep 5000
            tcp6 0 0 :::5000 :::* LISTEN 2233/apache2
            netstat -plant |grep 35357
            tcp6 0 0 :::35357 :::* LISTEN 2233/apache2

            Restarting service with systemd-start got following error “Address already in use” link https://gist.github.com/harsha-hari/13efdd7ed35b88037786

            Please help with this. Thank you!

  • Milan says:

    I installed OpenStack Liberty + Lithium SR3 and this is working just for liberty you need to install additional liberty opendaylight driver that is avalaible at git.

    git clone https://github.com/openstack/networking-odl -b stable/liberty
    python setup.py install

    instead of

    $ apt-get install python-pip
    $ pip install networking_odl

    one question just, here in the verification you only create private network, this is working for me, but what about public net?

    i managed to create the network and sub-net public but i can not boot an instance, i get bind port failed at the openvswtich of OpenStack

    • Hi ,
      Thanks for the feedback.
      Answering your question, At the time of writing this article, Public network creation is not supported in OpednDalight Lithium.So I tried only with local network creation.

      Now, At beryllium release, it may be available but I am not sure about it.
      If you find any information related to this, please update it here.

      Thanks,
      Vinoth

      • Milan says:

        Hi Vinoth

        One aditional question, step 6. Configure ml2_conf.ini for odl driver do i need to execute in controller+network node only or in controller+network and compute node ??

        in my scenario i have 2 nodes, one is controller+networking and the second is compute

        Thanks

        Milan

        • Milan,
          From the openstack architecture view, It’s not necessary to Configure ODL driver in the compute node. But I don’t have hands-on experience with DVR concept which may require configuration in compute node also. So why to give a chance for error! Configuring it in compute node won’t backfire us and moreover it will simply ignore the configuration if it is not necessary. So I would recommend to install it on controller+network and compute node.

          Thanks,
          Vinoth

  • Ymmen says:

    Hello vinoth,
    I followed your steps till creating database in mysql. However when I run neutron-db-manager … upgrade head neutron, it shows there is no user neutron in passwd.
    After rechecking in /etc/passwd there is no user neutron.
    How do i solve this problem?

    • Hi,

      You might miss the neutron DB user creation part.
      Please follow the section 7 again and make sure that you run the command inside the MySQL terminal without any error message.

      Thanks,
      Vinoth

  • ymmen says:

    What version of openvswitch is needed to integrate it with opendaylight lithium controller. Currently I am using version: 2.0.2.
    I am unable to connect controller to ovsdb. Suggest methods to troubleshoot.

    thank you

  • jack says:

    hi,from your steps,my instance can’t get ip ,ovs on compute node drop all packets,why?please help me

  • Antonio says:

    Hello,
    is it possible to have the same configuration, but with VLAN provider networks instead of GRE/VXLAN?
    The configuration works well with openvswitch-agent, but when using ODL instead of the openvswitch-agent, my VM-to-VM communication does not work anymore. Any clues?

  • moudios says:

    Dear,

    Many thanks for your efforts.

    I try to follow all the steps, but I ask if there is any configuration to do in Openstack?? Can you help me to easily move to the other steps?

    I found also some problem when introducing this command Service neutron-server stop : the command is not found, is there any other option to stop neutron server?

    Best Regards

  • Igor Meneguitte Ávila says:

    Hi,
    I want to integrate the Opendaylight Lithium with Openstack Kilo.
    I followed the document and the VM is created.
    The VM port is shown in the OVS and ODL.
    There’s no error message on the neutron, but the VM does not get IP.
    Any idea?

    [email protected]:/etc/init.d# ovs-vsctl show
    54f90d4d-7feb-48cb-9f8d-de05f5f49728
    Manager “tcp:10.2.0.13:6640”
    is_connected: true
    Bridge br-int
    Controller “tcp:10.2.0.13:6633”
    is_connected: true
    Port br-int
    Interface br-int
    type: internal
    Port “tapf2e4840f-de”
    Interface “tapf2e4840f-de”
    ovs_version: “2.3.2”

    [email protected]:/etc/init.d# ovs-vsctl show
    2475de2e-6513-4d15-af04-3277ef55662b
    Manager “tcp:10.2.0.13:6640”
    is_connected: true
    Bridge br-ex
    Controller “tcp:10.2.0.13:6633”
    is_connected: true
    Port “qg-319443bc-99”
    Interface “qg-319443bc-99”
    type: internal
    Port br-ex
    Interface br-ex
    type: internal
    Port “eth3”
    Interface “eth3”
    Bridge br-int
    Controller “tcp:10.2.0.13:6633”
    is_connected: true
    Port “qr-39a2391e-1d”
    Interface “qr-39a2391e-1d”
    type: internal
    Port br-int
    Interface br-int
    type: internal
    Port “tapd80e005a-3b”
    Interface “tapd80e005a-3b”
    type: internal
    ovs_version: “2.3.2”
    nova list
    +————————————–+———-+——–+————+————-+———————————-+
    | ID | Name | Status | Task State | Power State | Networks |
    +————————————–+———-+——–+————+————-+———————————-+
    | 968fc6b5-a691-471a-b4a4-0c39eaad2996 | servidor | ACTIVE | – | Running | demo-net=192.168.1.5, 30.2.0.102 |
    +————————————–+———-+——–+————+————-+———————————-+

  • Yuan Zuo says:

    HI, Kumar Selvaraj.

    Thank you for your post. I followed your post and installed OpenDaylight. But I got something wrong. I checked the neutron log and every time it starts, an error show ‘Could not load ‘opendaylight’: No module named opendaylight.driver’.

    I did pip install networking_odl
    and also I followed a suggestion above using
    git clone https://github.com/openstack/networking-odl -b stable/liberty
    python setup.py install

    I actually did install networking-odl and networking_odl as other tutorials suggests.
    But this still did not work. Could you give me some advice?

Leave a Comment