Update specs to v. 2014.1.b3
authorDmitry Burmistrov <dburmistrov@mirantis.com>
Mon, 17 Mar 2014 12:03:50 +0000 (16:03 +0400)
committerDmitry Burmistrov <dburmistrov@mirantis.com>
Fri, 21 Mar 2014 12:12:46 +0000 (16:12 +0400)
68 files changed:
debian/changelog
debian/compat [changed mode: 0755->0644]
debian/control
debian/neutron-dhcp-agent.logrotate [changed mode: 0755->0644]
debian/neutron-dhcp-agent.upstart
debian/neutron-l3-agent.logrotate [changed mode: 0755->0644]
debian/neutron-l3-agent.upstart
debian/neutron-lbaas-agent.logrotate [changed mode: 0755->0644]
debian/neutron-metadata-agent.logrotate [changed mode: 0755->0644]
debian/neutron-ovs-cleanup.upstart [deleted file]
debian/neutron-plugin-bigswitch-agent.install [new file with mode: 0644]
debian/neutron-plugin-bigswitch-agent.logrotate [new file with mode: 0644]
debian/neutron-plugin-bigswitch-agent.upstart [new file with mode: 0644]
debian/neutron-plugin-ibm-agent.install [new file with mode: 0644]
debian/neutron-plugin-ibm-agent.logrotate [new file with mode: 0644]
debian/neutron-plugin-ibm-agent.upstart [new file with mode: 0644]
debian/neutron-plugin-ibm.install [new file with mode: 0644]
debian/neutron-plugin-linuxbridge-agent.logrotate [changed mode: 0755->0644]
debian/neutron-plugin-ml2.install
debian/neutron-plugin-mlnx-agent.logrotate [new file with mode: 0644]
debian/neutron-plugin-mlnx-agent.upstart
debian/neutron-plugin-nec-agent.logrotate [changed mode: 0755->0644]
debian/neutron-plugin-nicira.install [deleted file]
debian/neutron-plugin-openflow-agent.install [new file with mode: 0644]
debian/neutron-plugin-openflow-agent.logrotate [new file with mode: 0644]
debian/neutron-plugin-openflow-agent.upstart [new file with mode: 0644]
debian/neutron-plugin-openvswitch-agent.logrotate [changed mode: 0755->0644]
debian/neutron-plugin-openvswitch-agent.neutron-ovs-cleanup.upstart [new file with mode: 0644]
debian/neutron-plugin-openvswitch-agent.upstart
debian/neutron-plugin-ryu-agent.logrotate [changed mode: 0755->0644]
debian/neutron-plugin-vmware.install [new file with mode: 0644]
debian/neutron-server.default
debian/neutron-server.logrotate [changed mode: 0755->0644]
debian/patches/bump-sqlalchemy-version.patch [deleted file]
debian/patches/disable-failing-cisco-test.patch [new file with mode: 0644]
debian/patches/disable-failing-metaplugin-tests.patch [new file with mode: 0644]
debian/patches/disable-ml2-notification-tests.patch [deleted file]
debian/patches/disable-udev-tests.patch
debian/patches/fix-quantum-configuration.patch
debian/patches/remove-jsonrpclib.patch [deleted file]
debian/patches/series
debian/patches/skip-ipv6-tests.patch [new file with mode: 0644]
debian/patches/skip-lb-test.patch [new file with mode: 0644]
debian/patches/use-concurrency.patch [new file with mode: 0644]
debian/pydist-overrides [changed mode: 0755->0644]
debian/rules
debian/tests/control
debian/tests/vmware-plugin [moved from debian/tests/nicira-plugin with 59% similarity]
debian/watch [changed mode: 0755->0644]
rpm/SOURCES/0001-use-parallel-installed-versions-in-RHEL6.patch
rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch [new file with mode: 0644]
rpm/SOURCES/neutron-dhcp-agent.init
rpm/SOURCES/neutron-l3-agent.init
rpm/SOURCES/neutron-l3-agent.upstart
rpm/SOURCES/neutron-lbaas-agent.init
rpm/SOURCES/neutron-linuxbridge-agent.init
rpm/SOURCES/neutron-metadata-agent.init
rpm/SOURCES/neutron-metering-agent.init
rpm/SOURCES/neutron-mlnx-agent.init
rpm/SOURCES/neutron-nec-agent.init
rpm/SOURCES/neutron-openvswitch-agent.init
rpm/SOURCES/neutron-ovs-cleanup.init
rpm/SOURCES/neutron-ryu-agent.init
rpm/SOURCES/neutron-server-setup
rpm/SOURCES/neutron-server.init
rpm/SOURCES/neutron-vpn-agent.init
rpm/SOURCES/neutron-vpn-agent.upstart
rpm/SPECS/openstack-neutron.spec

index 47fa9b98196591d3c1b3b2d42896710d750cffb4..35b5d3f86ccb254078e7473bd675ab0cc5b1483a 100644 (file)
@@ -1,8 +1,134 @@
-neutron (1:2013.2-0ubuntu1~cloud0) precise-havana; urgency=low
+neutron (1:2014.1~b3-0ubuntu1~cloud0) precise-icehouse; urgency=low
 
 
-  * New usptream release candidate for the Ubuntu Cloud Archive. 
+  * New upstream release for the Ubuntu Cloud Archive.
 
 
- -- Chuck Short <zulcss@ubuntu.com>  Wed, 16 Oct 2013 16:33:52 -0400
+ -- Openstack Ubuntu Testing Bot <openstack-testing-bot@ubuntu.com>  Tue, 11 Mar 2014 01:46:17 -0400
+
+neutron (1:2014.1~b3-0ubuntu1) trusty; urgency=medium
+
+  [ Chuck Short ]
+  * New upstream release.
+  * debian/rules: Re-enabled tests. 
+  * debian/patches/requirements.patch: Dropped no longer needed.
+  * debian/patches/sql-alchemy-0.8.3-compat.patch: Dropped no longer needed.
+  * debian/patches/bump-sqlalchemy-version.patch: Dropped no longer needed.
+  * debian/neutron-plugin-vmware.install: Install usr/bin/neutron-nsx-manage.
+  * debian/patches/use-concurrency.patch: Set default concurrency to 1.
+
+  [ James Page ]
+  * d/control,neutron-plugin-ibm*: Add plugin and agent packages for IBM
+    SDN-VE.
+  * d/control,neutron-openflow-*: Add agent package for OpenFlow ML2 agent.
+  * d/control,neutron-plugin-bigswitch-agent*: Add agent package for
+    BigSwitch.
+  * d/neutron-plugin-mlnx-agent.{upstart,logrotate}: Correct log path
+    and add logrotate configuration (LP: #1284144).
+
+  [ Corey Bryant ]
+  * Renamed Nicira NVP plugin to VMware NSX (LP: #1273877):
+    - debian/neutron-plugin-*.install: Update path and file for rename
+    - debian/tests/*-plugin: Replace nicira-plugin with vmware-plugin
+    - debian/control:
+      + Change neutron-plugin-nicira to transtional package
+      + Add neutron-plugin-vmware package which breaks/replaces
+        neutron-plugin-nicira package.
+
+ -- James Page <james.page@ubuntu.com>  Fri, 07 Mar 2014 09:38:32 +0000
+
+neutron (1:2014.1~b2-0ubuntu6) trusty; urgency=medium
+
+  * debian/rules: Temporarily disable testsuite due to upstream breakage. 
+
+ -- Chuck Short <zulcss@ubuntu.com>  Thu, 06 Feb 2014 08:33:08 -0500
+
+neutron (1:2014.1~b2-0ubuntu5) trusty; urgency=medium
+
+  * debian/patches/disable-udev-tests.patch: Skip more tests 
+    because of udev failures.
+  * debian/patches/skip-ipv6-tests.patch: Skip tests that fail 
+    on the buildds due to ipv6.
+
+ -- Chuck Short <zulcss@ubuntu.com>  Mon, 03 Feb 2014 09:02:45 -0500
+
+neutron (1:2014.1~b2-0ubuntu4) trusty; urgency=medium
+
+  * debian/rules: Really run_tests.sh. 
+
+ -- Chuck Short <zulcss@ubuntu.com>  Thu, 30 Jan 2014 11:44:21 -0500
+
+neutron (1:2014.1~b2-0ubuntu3) trusty; urgency=medium
+
+  * debian/rules: Switch back to run_test.sh since locking
+    issues have been fixed.
+
+ -- Chuck Short <zulcss@ubuntu.com>  Thu, 30 Jan 2014 10:49:22 -0500
+
+neutron (1:2014.1~b2-0ubuntu2) trusty; urgency=medium
+
+  * debian/patches/skip-lb-test.patch: Skipped lb configuration
+    test. 
+
+ -- Chuck Short <zulcss@ubuntu.com>  Mon, 27 Jan 2014 12:01:50 -0500
+
+neutron (1:2014.1~b2-0ubuntu1) trusty; urgency=low
+
+  [ James Page ]
+  * Switch to using Modular Layer 2 plugin by default:
+    - d/control,neutron-plugin-ml2.install: Add ML2 plugin package
+      (LP: #1243147).
+    - d/p/fix-quantum-configuration,d/control,d/neutron-server.default:
+      Switch to using the ML2 plugin by default.
+    - d/control,neutron-plugin-openvswitch-agent:
+      Use neutron-plugin-ml2 and configuration for openvswitch-agent.
+  * d/neutron-plugin-mlnx-agent.upstart: Reference correct configuration
+    file (LP: #1257732).
+  * Add neutron-ovs-cleanup upstart configuration for OVS plugin
+    (LP: #1249708):
+    - d/rules: Install new configuration in neutron-plugin-openvswitch-agent
+      package, don't restart on install/upgrade (only needed for reboots).
+    - d/neutron-plugin-openvswitch-agent.upstart: Ensure startup happens
+      after neutron-ovs-cleanup.
+    - d/neutron-{l3|dhcp}-agent.upstart: If neutron-ovs-cleanup job is
+      installed, wait for it to reach running state prior to starting
+      agents.
+  * d/control: Add versioned BD/Depends on python-psutil >= 0.6.1.
+  * d/p/requirements.patch: Drop upper version boundary for psutil for
+    compatibility with Trusty.
+  * d/p/requirements.patch: Lift upper boundary for WebOb to < 1.4.
+  * d/p/disable-failing-metaplugin-tests.patch: Disable metaplugin tests that
+    are currently failing.
+  * d/p/disable-ml2-notification-tests.patch: Dropped, tests now pass.
+  * d/rules: Fail package build on unit test failures.
+  * d/p/disable-failing-cisco-test.patch: Disable failing Cisco mechanism test.
+  * d/control,d/p/remove-jsonrpclib.patch: Add BD on python-jsonrpclib and drop
+    patch that excludes it from requirements.txt.
+
+  [ Chuck Short ]
+  * New upstream release.
+  * debian/rules: Run testr directly
+  * debian/patches/sql-alchemy-0.8.3-compat.patch: Fix tests sqlalchemy 0.8.3
+    compat.
+  * debian/neturon-nicira.install: Add usr/bin/neutron-check-nsx-config.
+
+ -- Chuck Short <zulcss@ubuntu.com>  Fri, 24 Jan 2014 09:17:12 -0500
+
+neutron (1:2014.1~b1-0ubuntu1) trusty; urgency=low
+
+  [ Chuck Short ]
+  * New upstream release.
+  * debian/control: open icehouse release.
+
+  [ James Page ]
+  * debian/patches: Refresh patches against upstream master. 
+  * debian/control: Drop quantum-* transitional packages, no longer needed. 
+
+ -- Chuck Short <zulcss@ubuntu.com>  Thu, 05 Dec 2013 11:40:39 -0500
+
+neutron (1:2013.2-0ubuntu1) saucy; urgency=low
+
+  * New upstream release (LP: #1236462).
+
+ -- Chuck Short <zulcss@ubuntu.com>  Thu, 17 Oct 2013 10:52:39 -0400
 
 neutron (1:2013.2~rc3-0ubuntu1) saucy; urgency=low
 
 
 neutron (1:2013.2~rc3-0ubuntu1) saucy; urgency=low
 
old mode 100755 (executable)
new mode 100644 (file)
index 51d4a1d1722dc28af856f1a5e0441daba618b1fc..fd783a9aecf12bf12df35963d67d6dd73138a5a3 100644 (file)
@@ -19,6 +19,7 @@ Build-Depends-Indep:
  python-httplib2,
  python-iso8601,
  python-jinja2,
  python-httplib2,
  python-iso8601,
  python-jinja2,
+ python-jsonrpclib,
  python-keystoneclient (>= 1:0.2.0),
  python-kombu (>= 2.5.12),
  python-lxml,
  python-keystoneclient (>= 1:0.2.0),
  python-kombu (>= 2.5.12),
  python-lxml,
@@ -31,6 +32,7 @@ Build-Depends-Indep:
  python-paste,
  python-pastedeploy,
  python-pbr (>= 0.5.21),
  python-paste,
  python-pastedeploy,
  python-pbr (>= 0.5.21),
+ python-psutil (>= 0.6.1),
  python-pyudev,
  python-requests (>= 1.1),
  python-routes,
  python-pyudev,
  python-requests (>= 1.1),
  python-routes,
@@ -46,8 +48,8 @@ Build-Depends-Indep:
  testrepository ( >= 0.0.17)
 XS-Python-Version: >= 2.6
 Standards-Version: 3.9.4
  testrepository ( >= 0.0.17)
 XS-Python-Version: >= 2.6
 Standards-Version: 3.9.4
-Vcs-Browser: http://bazaar.launchpad.net/~ubuntu-server-dev/neutron/havana/files
-Vcs-Bzr: https://code.launchpad.net/~ubuntu-server-dev/neutron/havana
+Vcs-Browser: http://bazaar.launchpad.net/~ubuntu-server-dev/neutron/icehouse/files
+Vcs-Bzr: https://code.launchpad.net/~ubuntu-server-dev/neutron/icehouse
 XS-Testsuite: autopkgtest
 
 Package: neutron-server
 XS-Testsuite: autopkgtest
 
 Package: neutron-server
@@ -60,7 +62,7 @@ Depends:
  ${shlibs:Depends}
 Breaks: quantum-server ( << 1:2013.2~b2-0ubuntu1~ )
 Replaces: quantum-server  ( << 1:2013.2~b2-0ubuntu1~ )
  ${shlibs:Depends}
 Breaks: quantum-server ( << 1:2013.2~b2-0ubuntu1~ )
 Replaces: quantum-server  ( << 1:2013.2~b2-0ubuntu1~ )
-Recommends: neutron-plugin-openvswitch
+Recommends: neutron-plugin-ml2
 Description: Neutron is a virtual network service for Openstack - server
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
 Description: Neutron is a virtual network service for Openstack - server
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
@@ -183,6 +185,25 @@ Description: Neutron is a virtual network service for Openstack - BigSwitch plug
  .
  This package provides the BigSwitch plugin.
 
  .
  This package provides the BigSwitch plugin.
 
+Package: neutron-plugin-bigswitch-agent
+Architecture: all
+Depends:
+ neutron-plugin-bigswitch (= ${source:Version}),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Description: Neutron is a virtual network service for Openstack - BigSwitch plugin agent
+ Neutron is a virtual network service for Openstack, and a part of
+ Netstack. Just like OpenStack Nova provides an API to dynamically
+ request and configure virtual servers, Neutron provides an API to
+ dynamically request and configure virtual networks. These networks
+ connect "interfaces" from other OpenStack services (e.g., virtual NICs
+ from Nova VMs). The Neutron API supports extensions to provide
+ advanced network capabilities (e.g., QoS, ACLs, network monitoring,
+ etc.)
+ .
+ This package provides the BigSwitch plugin agent.
+
 Package: neutron-plugin-hyperv
 Architecture: all
 Provides: neutron-plugin
 Package: neutron-plugin-hyperv
 Architecture: all
 Provides: neutron-plugin
@@ -271,7 +292,7 @@ Description: Neutron is a virtual network service for Openstack - Metaplugin plu
  .
  This package provides the Metaplugin plugin.
 
  .
  This package provides the Metaplugin plugin.
 
-Package: neutron-plugin-nicira
+Package: neutron-plugin-vmware
 Architecture: all
 Provides: neutron-plugin
 Depends:
 Architecture: all
 Provides: neutron-plugin
 Depends:
@@ -279,9 +300,9 @@ Depends:
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
-Breaks: quantum-plugin-nicira ( << 1:2013.2~b2-0ubuntu1~ )
-Replaces: quantum-plugin-nicira ( << 1:2013.2~b2-0ubuntu1~ )
-Description: Neutron is a virtual network service for Openstack - Nicira plugin
+Breaks: neutron-plugin-nicira ( << 1:2014.1~b2-0ubuntu7~ )
+Replaces: neutron-plugin-nicira ( << 1:2014.1~b2-0ubuntu7~ )
+Description: Neutron is a virtual network service for Openstack - VMware plugin
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
  request and configure virtual servers, Neutron provides an API to
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
  request and configure virtual servers, Neutron provides an API to
@@ -291,7 +312,16 @@ Description: Neutron is a virtual network service for Openstack - Nicira plugin
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
- This package provides the Nicira NVP plugin
+ This package provides the VMware NSX plugin
+
+Package: neutron-plugin-nicira
+Depends: neutron-plugin-vmware, ${misc:Depends}
+Architecture: all
+Breaks: quantum-plugin-nicira ( << 1:2013.2~b2-0ubuntu1~ )
+Replaces: quantum-plugin-nicira ( << 1:2013.2~b2-0ubuntu1~ )
+Section: oldlibs
+Description: transitional dummy package
+ This is a transitional dummy package. It can safely be removed.
 
 Package: neutron-l3-agent
 Architecture: all
 
 Package: neutron-l3-agent
 Architecture: all
@@ -403,6 +433,7 @@ Depends:
  python-oslo.config (>= 1:1.2.0a3),
  python-paste,
  python-pastedeploy,
  python-oslo.config (>= 1:1.2.0a3),
  python-paste,
  python-pastedeploy,
+ python-psutil (>= 0.6.1),
  python-requests (>= 1.1),
  python-routes,
  python-six,
  python-requests (>= 1.1),
  python-routes,
  python-six,
@@ -472,8 +503,7 @@ Description: Neutron is a virtual network service for Openstack - ML2 plugin
 Package: neutron-plugin-openvswitch-agent
 Architecture: all
 Depends:
 Package: neutron-plugin-openvswitch-agent
 Architecture: all
 Depends:
- neutron-common (= ${source:Version}),
- neutron-plugin-ml2,
+ neutron-plugin-ml2 (= ${source:Version}),
  openvswitch-switch,
  ${misc:Depends},
  ${python:Depends},
  openvswitch-switch,
  ${misc:Depends},
  ${python:Depends},
@@ -518,8 +548,7 @@ Package: neutron-plugin-linuxbridge-agent
 Architecture: all
 Depends:
  bridge-utils,
 Architecture: all
 Depends:
  bridge-utils,
- neutron-common (= ${source:Version}),
- neutron-plugin-linuxbridge,
+ neutron-plugin-linuxbridge (= ${source:Version}),
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
@@ -562,8 +591,7 @@ Description: Neutron is a virtual network service for Openstack - RYU plugin
 Package: neutron-plugin-ryu-agent
 Architecture: all
 Depends:
 Package: neutron-plugin-ryu-agent
 Architecture: all
 Depends:
- neutron-common (= ${source:Version}),
- neutron-plugin-ryu,
+ neutron-plugin-ryu (= ${source:Version}),
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
@@ -631,7 +659,7 @@ Depends:
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
-Description: Neutron is a virtual network service for Openstack - vpn plugin
+Description: Neutron is a virtual network service for Openstack - VPN agent
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
  request and configure virtual servers, Neutron provides an API to
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
  request and configure virtual servers, Neutron provides an API to
@@ -641,17 +669,16 @@ Description: Neutron is a virtual network service for Openstack - vpn plugin
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
- This package provides the vpn plugin.
+ This package provides the VPN agent.
 
 Package: neutron-plugin-metering-agent
 Architecture: all
 
 Package: neutron-plugin-metering-agent
 Architecture: all
-Provides: neutron-plugin
 Depends:
  neutron-common (= ${source:Version}),
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
 Depends:
  neutron-common (= ${source:Version}),
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
-Description: Neutron is a virtual network service for Openstack - metering plugin
+Description: Neutron is a virtual network service for Openstack - metering agent
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
  request and configure virtual servers, Neutron provides an API to
  Neutron is a virtual network service for Openstack, and a part of
  Netstack. Just like OpenStack Nova provides an API to dynamically
  request and configure virtual servers, Neutron provides an API to
@@ -661,177 +688,63 @@ Description: Neutron is a virtual network service for Openstack - metering plugi
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
- This package provides the metering plugin.
+ This package provides the metering agent.
 
 
-Package: neutron-ovs-cleanup
+Package: neutron-plugin-openflow-agent
 Architecture: all
 Depends:
 Architecture: all
 Depends:
- neutron-common (= ${source:Version}),
- neutron-plugin-openvswitch (= ${source:Version}),
+ neutron-plugin-ml2 (= ${source:Version}),
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
-Breaks: quantum-ovs-cleanup ( << 1:2013.2~b2-0ubuntu1~ )
-Replaces: quantum-ovs-cleanup ( << 1:2013.2~b2-0ubuntu1~ )
-Description: This package provides OVS cleanup upstart script.
-
-Package: quantum-server
-Depends: neutron-server, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-common
-Depends: neutron-common, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-cisco
-Depends: neutron-plugin-cisco, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-nec
-Depends: neutron-plugin-nec, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-nec-agent
-Depends: neutron-plugin-nec-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-bigswitch
-Depends: neutron-plugin-bigswitch, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-hyperv
-Depends: neutron-plugin-hyperv, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-brocade
-Depends: neutron-plugin-brocade, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-plumgrid
-Depends: neutron-plugin-plumgrid, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-metaplugin
-Depends: neutron-plugin-metaplugin, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-nicira
-Depends: neutron-plugin-nicira, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-l3-agent
-Depends: neutron-l3-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-dhcp-agent
-Depends: neutron-dhcp-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-metadata-agent
-Depends: neutron-metadata-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-lbaas-agent
-Depends: neutron-lbaas-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: python-quantum
-Depends: python-neutron, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-openvswitch
-Depends: neutron-plugin-openvswitch, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-openvswitch-agent
-Depends: neutron-plugin-openvswitch-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-linuxbridge
-Depends: neutron-plugin-linuxbridge, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
-
-Package: quantum-plugin-linuxbridge-agent
-Depends: neutron-plugin-linuxbridge-agent, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
+Description: Neutron is a virtual network service for Openstack - Openflow agent
+ Neutron is a virtual network service for Openstack, and a part of
+ Netstack. Just like OpenStack Nova provides an API to dynamically
+ request and configure virtual servers, Neutron provides an API to
+ dynamically request and configure virtual networks. These networks
+ connect "interfaces" from other OpenStack services (e.g., virtual NICs
+ from Nova VMs). The Neutron API supports extensions to provide
+ advanced network capabilities (e.g., QoS, ACLs, network monitoring,
+ etc.)
+ .
+ This package provides the Openflow agent.
 
 
-Package: quantum-plugin-ryu
-Depends: neutron-plugin-ryu, ${misc:Depends}
+Package: neutron-plugin-ibm
 Architecture: all
 Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
+Provides: neutron-plugin
+Depends:
+ neutron-common (= ${source:Version}),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Description: Neutron is a virtual network service for Openstack - IBM SDN plugin
+ Neutron is a virtual network service for Openstack, and a part of
+ Netstack. Just like OpenStack Nova provides an API to dynamically
+ request and configure virtual servers, Neutron provides an API to
+ dynamically request and configure virtual networks. These networks
+ connect "interfaces" from other OpenStack services (e.g., virtual NICs
+ from Nova VMs). The Neutron API supports extensions to provide
+ advanced network capabilities (e.g., QoS, ACLs, network monitoring,
+ etc.)
+ .
+ This package provides the IBM SDN plugin.
 
 
-Package: quantum-plugin-ryu-agent
-Depends: neutron-plugin-ryu-agent, ${misc:Depends}
+Package: neutron-plugin-ibm-agent
 Architecture: all
 Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
+Depends:
+ neutron-plugin-ibm (= ${source:Version}),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Description: Neutron is a virtual network service for Openstack - IBM agent
+ Neutron is a virtual network service for Openstack, and a part of
+ Netstack. Just like OpenStack Nova provides an API to dynamically
+ request and configure virtual servers, Neutron provides an API to
+ dynamically request and configure virtual networks. These networks
+ connect "interfaces" from other OpenStack services (e.g., virtual NICs
+ from Nova VMs). The Neutron API supports extensions to provide
+ advanced network capabilities (e.g., QoS, ACLs, network monitoring,
+ etc.)
+ .
+ This package provides the IBM agent.
 
 
-Package: quantum-plugin-midonet
-Depends: neutron-plugin-midonet, ${misc:Depends}
-Architecture: all
-Section: oldlibs
-Description: transitional dummy package
- This is a transitional dummy package. It can safely be removed.
old mode 100755 (executable)
new mode 100644 (file)
index 9d19eac9604a30d1d03434af59be9a0908008eff..3b08cd60561402e5970cf39ab518b278abac684d 100644 (file)
@@ -12,6 +12,11 @@ chdir /var/run
 pre-start script
   mkdir -p /var/run/neutron
   chown neutron:root /var/run/neutron
 pre-start script
   mkdir -p /var/run/neutron
   chown neutron:root /var/run/neutron
+  # Check to see if openvswitch plugin in use by checking
+  # status of cleanup upstart configuration
+  if status neutron-ovs-cleanup; then
+    start wait-for-state WAIT_FOR=neutron-ovs-cleanup WAIT_STATE=running WAITER=neutron-dhcp-agent
+  fi
 end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-dhcp-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/dhcp_agent.ini --log-file=/var/log/neutron/dhcp-agent.log
 end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-dhcp-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/dhcp_agent.ini --log-file=/var/log/neutron/dhcp-agent.log
old mode 100755 (executable)
new mode 100644 (file)
index 6677b902094fab88e8e095041fb2c7f8cbd313da..baaa57609901a5a03961317fc22a2d8570066532 100644 (file)
@@ -12,6 +12,11 @@ chdir /var/run
 pre-start script
   mkdir -p /var/run/neutron
   chown neutron:root /var/run/neutron
 pre-start script
   mkdir -p /var/run/neutron
   chown neutron:root /var/run/neutron
+  # Check to see if openvswitch plugin in use by checking
+  # status of cleanup upstart configuration
+  if status neutron-ovs-cleanup; then
+    start wait-for-state WAIT_FOR=neutron-ovs-cleanup WAIT_STATE=running WAITER=neutron-l3-agent
+  fi
 end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-l3-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/l3_agent.ini --log-file=/var/log/neutron/l3-agent.log
 end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-l3-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/l3_agent.ini --log-file=/var/log/neutron/l3-agent.log
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/debian/neutron-ovs-cleanup.upstart b/debian/neutron-ovs-cleanup.upstart
deleted file mode 100644 (file)
index 7ae53a1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# vim:set ft=upstart ts=2 et:
-description "Neutron OpenvSwitch cleanup"
-author "Andrey Korolev <akorolev@mirantis.com>"
-
-start on runlevel [2345]
-stop on runlevel [!2345]
-
-emits neutron-ovs-cleanup
-
-respawn
-
-chdir /var/run
-
-pre-start script
-  mkdir -p /var/run/neutron-ovs-cleanup
-  chown neutron:neutron /var/run/neutron-ovs-cleanup
-  mkdir -p /var/lock/neutron-ovs-cleanup
-  chown neutron:root /var/lock/neutron-ovs-cleanup
-  /usr/bin/neutron-ovs-cleanup --config-file=/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini --log-file=/var/log/neutron/neutron-ovs-cleanup.log
-end script
diff --git a/debian/neutron-plugin-bigswitch-agent.install b/debian/neutron-plugin-bigswitch-agent.install
new file mode 100644 (file)
index 0000000..5e2ff90
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/neutron-restproxy-agent /usr/bin
diff --git a/debian/neutron-plugin-bigswitch-agent.logrotate b/debian/neutron-plugin-bigswitch-agent.logrotate
new file mode 100644 (file)
index 0000000..6b259a4
--- /dev/null
@@ -0,0 +1,7 @@
+/var/log/neutron/bigswitch-agent.log {
+    daily
+    missingok
+    compress
+    delaycompress
+    notifempty
+}
diff --git a/debian/neutron-plugin-bigswitch-agent.upstart b/debian/neutron-plugin-bigswitch-agent.upstart
new file mode 100644 (file)
index 0000000..f29fa8d
--- /dev/null
@@ -0,0 +1,20 @@
+# vim:set ft=upstart ts=2 et:
+description "Neutron BigSwitch Plugin Agent"
+author "Chuck Short <zulcss@ubuntu.com>"
+
+start on runlevel [2345]
+stop on runlevel [!2345]
+
+respawn
+
+chdir /var/run
+
+pre-start script
+  mkdir -p /var/run/neutron
+  chown neutron:root /var/run/neutron
+end script
+
+exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-restproxy-agent -- \
+  --config-file=/etc/neutron/neutron.conf \
+  --config-file=/etc/neutron/plugins/bigswitch/restproxy.ini \
+  --log-file=/var/log/neutron/bigswitch-agent.log
diff --git a/debian/neutron-plugin-ibm-agent.install b/debian/neutron-plugin-ibm-agent.install
new file mode 100644 (file)
index 0000000..1f2750d
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/neutron-ibm-agent usr/bin
diff --git a/debian/neutron-plugin-ibm-agent.logrotate b/debian/neutron-plugin-ibm-agent.logrotate
new file mode 100644 (file)
index 0000000..4708934
--- /dev/null
@@ -0,0 +1,7 @@
+/var/log/neutron/ibm-agent.log {
+    daily
+    missingok
+    compress
+    delaycompress
+    notifempty
+}
diff --git a/debian/neutron-plugin-ibm-agent.upstart b/debian/neutron-plugin-ibm-agent.upstart
new file mode 100644 (file)
index 0000000..f6576c1
--- /dev/null
@@ -0,0 +1,20 @@
+# vim:set ft=upstart ts=2 et:
+description "Neutron IBM SDN Agent"
+author "Chuck Short <zulcss@ubuntu.com>"
+
+start on runlevel [2345]
+stop on runlevel [!2345]
+
+respawn
+
+chdir /var/run
+
+pre-start script
+  mkdir -p /var/run/neutron
+  chown neutron:root /var/run/neutron
+end script
+
+exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-ibm-agent -- \
+  --config-file=/etc/neutron/neutron.conf \
+  --config-file=/etc/neutron/plugins/ibm/sdnve_neutron_plugin.ini \
+  --log-file=/var/log/neutron/ibm-agent.log
diff --git a/debian/neutron-plugin-ibm.install b/debian/neutron-plugin-ibm.install
new file mode 100644 (file)
index 0000000..d6ea0c8
--- /dev/null
@@ -0,0 +1 @@
+etc/neutron/plugins/ibm/sdnve_neutron_plugin.ini etc/neutron/plugins/ibm
index 0e3db1fe4e47b3b48abc7ef2c7d8c7bf1fd7c8af..8de7985ccea259e3e9334b026fd971d1db781ad1 100644 (file)
@@ -1,2 +1 @@
 etc/neutron/plugins/ml2/* etc/neutron/plugins/ml2
 etc/neutron/plugins/ml2/* etc/neutron/plugins/ml2
-
diff --git a/debian/neutron-plugin-mlnx-agent.logrotate b/debian/neutron-plugin-mlnx-agent.logrotate
new file mode 100644 (file)
index 0000000..b77653b
--- /dev/null
@@ -0,0 +1,7 @@
+/var/log/neutron/mlnx-agent.log {
+    daily
+    missingok
+    compress
+    delaycompress
+    notifempty
+}
index 14a3cddb52b97907f1fb53ebb21d9e6c25f9ec6f..16fbe83b8123a793883783d56373021c8ef1052b 100644 (file)
@@ -15,5 +15,5 @@ pre-start script
 end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-mlnx-agent -- \
 end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-mlnx-agent -- \
-       --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/mlnx_conf.ini \
-       --log-file=/var/log/neutron/mlnx_conf.log
+       --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/mlnx/mlnx_conf.ini \
+       --log-file=/var/log/neutron/mlnx-agent.log
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/debian/neutron-plugin-nicira.install b/debian/neutron-plugin-nicira.install
deleted file mode 100644 (file)
index 4830657..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-etc/neutron/plugins/nicira/* etc/neutron/plugins/nicira
-usr/bin/neutron-check-nvp-config usr/bin
diff --git a/debian/neutron-plugin-openflow-agent.install b/debian/neutron-plugin-openflow-agent.install
new file mode 100644 (file)
index 0000000..9a57b1e
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/neutron-ofagent-agent  usr/bin
diff --git a/debian/neutron-plugin-openflow-agent.logrotate b/debian/neutron-plugin-openflow-agent.logrotate
new file mode 100644 (file)
index 0000000..bb7a799
--- /dev/null
@@ -0,0 +1,7 @@
+/var/log/neutron/openflow-agent.log {
+    daily
+    missingok
+    compress
+    delaycompress
+    notifempty
+}
diff --git a/debian/neutron-plugin-openflow-agent.upstart b/debian/neutron-plugin-openflow-agent.upstart
new file mode 100644 (file)
index 0000000..15c45d8
--- /dev/null
@@ -0,0 +1,20 @@
+# vim:set ft=upstart ts=2 et:
+description "Neutron OpenFlow Plugin Agent"
+author "Chuck Short <zulcss@ubuntu.com>"
+
+start on runlevel [2345]
+stop on runlevel [!2345]
+
+respawn
+
+chdir /var/run
+
+pre-start script
+  mkdir -p /var/run/neutron
+  chown neutron:root /var/run/neutron
+end script
+
+exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-ofagent-agent -- \
+  --config-file=/etc/neutron/neutron.conf \
+  --config-file=/etc/neutron/plugins/ml2/ml2_conf_ofa.ini \
+  --log-file=/var/log/neutron/openflow-agent.log
diff --git a/debian/neutron-plugin-openvswitch-agent.neutron-ovs-cleanup.upstart b/debian/neutron-plugin-openvswitch-agent.neutron-ovs-cleanup.upstart
new file mode 100644 (file)
index 0000000..b0d90f4
--- /dev/null
@@ -0,0 +1,13 @@
+# vim:set ft=upstart ts=2 et:
+description "Neutron OVS cleanup"
+author "James Page <james.page@ubuntu.com>"
+
+start on started openvswitch-switch
+stop on runlevel [!2345]
+
+pre-start script
+  [ ! -x /usr/bin/neutron-ovs-cleanup ] && exit 0 
+  start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-ovs-cleanup -- \
+    --log-file /var/log/neutron/ovs-cleanup.log \
+    --config-file /etc/neutron/neutron.conf --verbose
+end script
index b87adac580ec73f74ca6dd3aa517b009c2633ec3..27fcfcf42d16940d46e5057bb52ed158e8f2e657 100644 (file)
@@ -2,7 +2,7 @@
 description "Neutron OpenvSwitch Plugin Agent"
 author "Chuck Short <zulcss@ubuntu.com>"
 
 description "Neutron OpenvSwitch Plugin Agent"
 author "Chuck Short <zulcss@ubuntu.com>"
 
-start on neutron-ovs-cleanup or runlevel [2345]
+start on runlevel [2345] and started neutron-ovs-cleanup
 stop on runlevel [!2345]
 
 respawn
 stop on runlevel [!2345]
 
 respawn
@@ -14,4 +14,4 @@ pre-start script
   chown neutron:root /var/run/neutron
 end script
 
   chown neutron:root /var/run/neutron
 end script
 
-exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-openvswitch-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini --log-file=/var/log/neutron/ovs-agent.log
+exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-openvswitch-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini --log-file=/var/log/neutron/openvswitch-agent.log
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/debian/neutron-plugin-vmware.install b/debian/neutron-plugin-vmware.install
new file mode 100644 (file)
index 0000000..cc1abc3
--- /dev/null
@@ -0,0 +1,4 @@
+etc/neutron/plugins/vmware/* etc/neutron/plugins/vmware
+usr/bin/neutron-check-nvp-config usr/bin
+usr/bin/neutron-check-nsx-config usr/bin
+usr/bin/neutron-nsx-manage usr/bin
index c4b8e862b1ea77dab01e02968efd14f77791f46c..32045693158340620b19681b0a16ebb97b865f8b 100644 (file)
@@ -2,4 +2,4 @@
 
 # path to config file corresponding to the core_plugin specified in
 # neutron.conf
 
 # path to config file corresponding to the core_plugin specified in
 # neutron.conf
-NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini"
+NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/debian/patches/bump-sqlalchemy-version.patch b/debian/patches/bump-sqlalchemy-version.patch
deleted file mode 100644 (file)
index 52f60e7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/requirements.txt
-+++ b/requirements.txt
-@@ -17,7 +17,7 @@ Jinja2
- kombu>=2.4.8
- netaddr
- python-neutronclient>=2.3.0,<3
--SQLAlchemy>=0.7.8,<=0.7.99
-+SQLAlchemy>=0.7.8,<=0.8.99
- WebOb>=1.2.3,<1.3
- python-keystoneclient>=0.3.2
- alembic>=0.4.1
diff --git a/debian/patches/disable-failing-cisco-test.patch b/debian/patches/disable-failing-cisco-test.patch
new file mode 100644 (file)
index 0000000..6ef11e2
--- /dev/null
@@ -0,0 +1,25 @@
+Description: Skip failing cisco test
+ ======================================================================
+ FAIL: neutron.tests.unit.ml2.drivers.test_cisco_mech.TestCiscoBasicGet.test_single_get_admin
+ neutron.tests.unit.ml2.drivers.test_cisco_mech.TestCiscoBasicGet.test_single_get_admin
+ ----------------------------------------------------------------------
+ _StringException
+
+ ----------------------------------------------------------------------
+Author: James Page <james.page@ubuntu.com>
+Forwarded: not-needed
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/neutron/+bug/1262195
+
+--- a/neutron/tests/unit/ml2/drivers/test_cisco_mech.py
++++ b/neutron/tests/unit/ml2/drivers/test_cisco_mech.py
+@@ -147,8 +147,8 @@ class CiscoML2MechanismTestCase(test_db_
+ class TestCiscoBasicGet(CiscoML2MechanismTestCase,
+                         test_db_plugin.TestBasicGet):
+-
+-    pass
++    def test_single_get_admin(self):
++        pass
+ class TestCiscoV2HTTPResponse(CiscoML2MechanismTestCase,
diff --git a/debian/patches/disable-failing-metaplugin-tests.patch b/debian/patches/disable-failing-metaplugin-tests.patch
new file mode 100644 (file)
index 0000000..17b438e
--- /dev/null
@@ -0,0 +1,67 @@
+Description: Disable failing metaplugin tests
+ Some metaplugin tests are currently failing in Ubuntu; patch
+ then out until they get resolved in full.
+Author: James Page <james.page@ubuntu.com>
+Forwarded: not-needed
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/neutron/+bug/1262174
+
+--- a/neutron/tests/unit/metaplugin/test_basic.py
++++ b/neutron/tests/unit/metaplugin/test_basic.py
+@@ -43,7 +43,14 @@ class TestMetaBasicGet(test_plugin.TestB
+ class TestMetaV2HTTPResponse(test_plugin.TestV2HTTPResponse,
+                              MetaPluginV2DBTestCase):
+-    pass
++    def test_list_with_fields_noadmin(self):
++        pass
++
++    def test_list_with_fields(self):
++        pass
++
++    def test_list_with_fields_noadmin_and_policy_field(self):
++        pass
+ class TestMetaPortsV2(test_plugin.TestPortsV2,
+@@ -53,7 +60,30 @@ class TestMetaPortsV2(test_plugin.TestPo
+ class TestMetaNetworksV2(test_plugin.TestNetworksV2,
+                          MetaPluginV2DBTestCase):
+-    pass
++
++    def test_list_networks_without_pk_in_fields_pagination_emulated(self):
++        pass
++
++    def test_list_shared_networks_with_non_admin_user(self):
++        pass
++
++    def test_list_networks_with_pagination_emulated(self):
++        pass
++
++    def test_list_networks_with_sort_emulated(self):
++        pass
++
++    def test_list_networks_with_pagination_reverse_emulated(self):
++        pass
++
++    def test_list_networks_with_parameters(self):
++        pass
++
++    def test_list_networks_with_fields(self):
++        pass
++
++    def test_list_networks(self):
++        pass
+ class TestMetaSubnetsV2(test_plugin.TestSubnetsV2,
+--- a/neutron/tests/unit/metaplugin/test_metaplugin.py
++++ b/neutron/tests/unit/metaplugin/test_metaplugin.py
+@@ -144,6 +144,7 @@ class MetaNeutronPluginV2Test(base.BaseT
+         return data
+     def test_create_delete_network(self):
++        return
+         network1 = self._fake_network('fake1')
+         ret1 = self.plugin.create_network(self.context, network1)
+         self.assertEqual('fake1', ret1[FLAVOR_NETWORK])
diff --git a/debian/patches/disable-ml2-notification-tests.patch b/debian/patches/disable-ml2-notification-tests.patch
deleted file mode 100644 (file)
index 8441d09..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/neutron/tests/unit/ml2/test_agent_scheduler.py
-+++ b/neutron/tests/unit/ml2/test_agent_scheduler.py
-@@ -19,18 +19,19 @@ from neutron.tests.unit.openvswitch impo
- class Ml2AgentSchedulerTestCase(
-     test_agent_scheduler.OvsAgentSchedulerTestCase):
--    plugin_str = test_ml2_plugin.PLUGIN_NAME
-+    pass
-     l3_plugin = ('neutron.services.l3_router.'
-                  'l3_router_plugin.L3RouterPlugin')
- class Ml2L3AgentNotifierTestCase(
-     test_agent_scheduler.OvsL3AgentNotifierTestCase):
--    plugin_str = test_ml2_plugin.PLUGIN_NAME
-+    pass
-     l3_plugin = ('neutron.services.l3_router.'
-                  'l3_router_plugin.L3RouterPlugin')
- class Ml2DhcpAgentNotifierTestCase(
-     test_agent_scheduler.OvsDhcpAgentNotifierTestCase):
-+    pass
-     plugin_str = test_ml2_plugin.PLUGIN_NAME
index 3793c77efa14e962c1f19558f65f582fcfff0389..41cecc32c83608bd249655e06f6e1472169ee940 100644 (file)
@@ -1,6 +1,12 @@
---- a/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
-+++ b/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
-@@ -45,6 +45,7 @@ class FakeIpDevice(object):
+Description: Disable udev tests
+ udev is not always avaliable in Ubuntu buildds; skip tests that
+ want to use this feature.
+Author: Chuck Short <zulcss@ubuntu.com>
+Fowarded: not-needed
+diff -Naurp neutron-2014.1.b2.orig/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py neutron-2014.1.b2/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
+--- neutron-2014.1.b2.orig/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py     2014-01-23 10:13:25.000000000 -0500
++++ neutron-2014.1.b2/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py  2014-02-03 08:53:04.409255073 -0500
+@@ -46,6 +46,7 @@ class FakeIpDevice(object):
  class TestLinuxBridge(base.BaseTestCase):
  
      def setUp(self):
  class TestLinuxBridge(base.BaseTestCase):
  
      def setUp(self):
@@ -8,7 +14,23 @@
          super(TestLinuxBridge, self).setUp()
          self.addCleanup(cfg.CONF.reset)
          interface_mappings = {'physnet1': 'eth1'}
          super(TestLinuxBridge, self).setUp()
          self.addCleanup(cfg.CONF.reset)
          interface_mappings = {'physnet1': 'eth1'}
-@@ -160,6 +161,7 @@ class TestLinuxBridgeAgent(base.BaseTest
+@@ -109,6 +110,7 @@ class TestLinuxBridgeAgent(base.BaseTest
+         self.get_mac.return_value = '00:00:00:00:00:01'
+     def test_update_devices_failed(self):
++        self.skipTest("udev not consistently available in Ubuntu buildds")
+         agent = linuxbridge_neutron_agent.LinuxBridgeNeutronAgentRPC({},
+                                                                      0,
+                                                                      None)
+@@ -130,6 +132,7 @@ class TestLinuxBridgeAgent(base.BaseTest
+                 self.assertEqual(3, log.call_count)
+     def test_process_network_devices_failed(self):
++        self.skipTest("udev not consistently available in Ubuntu buildds")
+         device_info = {'current': [1, 2, 3]}
+         agent = linuxbridge_neutron_agent.LinuxBridgeNeutronAgentRPC({},
+                                                                      0,
+@@ -158,6 +161,7 @@ class TestLinuxBridgeAgent(base.BaseTest
  
  class TestLinuxBridgeManager(base.BaseTestCase):
      def setUp(self):
  
  class TestLinuxBridgeManager(base.BaseTestCase):
      def setUp(self):
@@ -16,7 +38,7 @@
          super(TestLinuxBridgeManager, self).setUp()
          self.interface_mappings = {'physnet1': 'eth1'}
          self.root_helper = cfg.CONF.AGENT.root_helper
          super(TestLinuxBridgeManager, self).setUp()
          self.interface_mappings = {'physnet1': 'eth1'}
          self.root_helper = cfg.CONF.AGENT.root_helper
-@@ -639,6 +641,7 @@ class TestLinuxBridgeManager(base.BaseTe
+@@ -667,6 +671,7 @@ class TestLinuxBridgeManager(base.BaseTe
  
  class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
      def setUp(self):
  
  class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
      def setUp(self):
          cfg.CONF.set_override('local_ip', LOCAL_IP, 'VXLAN')
          self.addCleanup(cfg.CONF.reset)
          super(TestLinuxBridgeRpcCallbacks, self).setUp()
          cfg.CONF.set_override('local_ip', LOCAL_IP, 'VXLAN')
          self.addCleanup(cfg.CONF.reset)
          super(TestLinuxBridgeRpcCallbacks, self).setUp()
+diff -Naurp neutron-2014.1.b2.orig/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py.orig neutron-2014.1.b2/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py.orig
+--- neutron-2014.1.b2.orig/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py.orig        1969-12-31 19:00:00.000000000 -0500
++++ neutron-2014.1.b2/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py.orig     2014-01-23 10:13:25.000000000 -0500
+@@ -0,0 +1,956 @@
++# vim: tabstop=4 shiftwidth=4 softtabstop=4
++
++# Copyright (c) 2012 OpenStack Foundation.
++#
++#    Licensed under the Apache License, Version 2.0 (the "License"); you may
++#    not use this file except in compliance with the License. You may obtain
++#    a copy of the License at
++#
++#         http://www.apache.org/licenses/LICENSE-2.0
++#
++#    Unless required by applicable law or agreed to in writing, software
++#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
++#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
++#    License for the specific language governing permissions and limitations
++#    under the License.
++
++import contextlib
++import os
++
++import mock
++from oslo.config import cfg
++import testtools
++
++from neutron.agent.linux import ip_lib
++from neutron.agent.linux import utils
++from neutron.common import constants
++from neutron.openstack.common.rpc import common as rpc_common
++from neutron.plugins.common import constants as p_const
++from neutron.plugins.linuxbridge.agent import linuxbridge_neutron_agent
++from neutron.plugins.linuxbridge.common import constants as lconst
++from neutron.tests import base
++
++LOCAL_IP = '192.168.0.33'
++
++
++class FakeIpLinkCommand(object):
++    def set_up(self):
++        pass
++
++
++class FakeIpDevice(object):
++    def __init__(self):
++        self.link = FakeIpLinkCommand()
++
++
++class TestLinuxBridge(base.BaseTestCase):
++
++    def setUp(self):
++        super(TestLinuxBridge, self).setUp()
++        self.addCleanup(cfg.CONF.reset)
++        interface_mappings = {'physnet1': 'eth1'}
++        root_helper = cfg.CONF.AGENT.root_helper
++
++        self.linux_bridge = linuxbridge_neutron_agent.LinuxBridgeManager(
++            interface_mappings, root_helper)
++
++    def test_ensure_physical_in_bridge_invalid(self):
++        result = self.linux_bridge.ensure_physical_in_bridge('network_id',
++                                                             p_const.TYPE_VLAN,
++                                                             'physnetx',
++                                                             7)
++        self.assertFalse(result)
++
++    def test_ensure_physical_in_bridge_flat(self):
++        with mock.patch.object(self.linux_bridge,
++                               'ensure_flat_bridge') as flat_bridge_func:
++            self.linux_bridge.ensure_physical_in_bridge(
++                'network_id', p_const.TYPE_FLAT, 'physnet1', None)
++        self.assertTrue(flat_bridge_func.called)
++
++    def test_ensure_physical_in_bridge_vlan(self):
++        with mock.patch.object(self.linux_bridge,
++                               'ensure_vlan_bridge') as vlan_bridge_func:
++            self.linux_bridge.ensure_physical_in_bridge(
++                'network_id', p_const.TYPE_VLAN, 'physnet1', 7)
++        self.assertTrue(vlan_bridge_func.called)
++
++    def test_ensure_physical_in_bridge_vxlan(self):
++        self.linux_bridge.vxlan_mode = lconst.VXLAN_UCAST
++        with mock.patch.object(self.linux_bridge,
++                               'ensure_vxlan_bridge') as vxlan_bridge_func:
++            self.linux_bridge.ensure_physical_in_bridge(
++                'network_id', 'vxlan', 'physnet1', 7)
++        self.assertTrue(vxlan_bridge_func.called)
++
++
++class TestLinuxBridgeAgent(base.BaseTestCase):
++
++    LINK_SAMPLE = [
++        '1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue \\'
++        'state UNKNOWN \\'
++        'link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00',
++        '2: eth77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 \\'
++        'qdisc mq state UP qlen 1000\    link/ether \\'
++        'cc:dd:ee:ff:ab:cd brd ff:ff:ff:ff:ff:ff']
++
++    def setUp(self):
++        super(TestLinuxBridgeAgent, self).setUp()
++        cfg.CONF.set_override('rpc_backend',
++                              'neutron.openstack.common.rpc.impl_fake')
++        self.execute_p = mock.patch.object(ip_lib.IPWrapper, '_execute')
++        self.execute = self.execute_p.start()
++        self.addCleanup(self.execute_p.stop)
++        self.execute.return_value = '\n'.join(self.LINK_SAMPLE)
++        self.get_mac_p = mock.patch('neutron.agent.linux.utils.'
++                                    'get_interface_mac')
++        self.get_mac = self.get_mac_p.start()
++        self.addCleanup(self.get_mac_p.stop)
++        self.get_mac.return_value = '00:00:00:00:00:01'
++
++    def test_update_devices_failed(self):
++        agent = linuxbridge_neutron_agent.LinuxBridgeNeutronAgentRPC({},
++                                                                     0,
++                                                                     None)
++        raise_exception = [0]
++
++        def info_mock(msg):
++            if raise_exception[0] < 2:
++                raise_exception[0] += 1
++            else:
++                raise RuntimeError()
++        with mock.patch.object(agent.br_mgr,
++                               "update_devices") as update_devices:
++            update_devices.side_effect = RuntimeError
++            with mock.patch.object(linuxbridge_neutron_agent.LOG,
++                                   'info') as log:
++                log.side_effect = info_mock
++                with testtools.ExpectedException(RuntimeError):
++                    agent.daemon_loop()
++                self.assertEqual(3, log.call_count)
++
++    def test_process_network_devices_failed(self):
++        device_info = {'current': [1, 2, 3]}
++        agent = linuxbridge_neutron_agent.LinuxBridgeNeutronAgentRPC({},
++                                                                     0,
++                                                                     None)
++        raise_exception = [0]
++
++        def info_mock(msg):
++            if raise_exception[0] < 2:
++                raise_exception[0] += 1
++            else:
++                raise RuntimeError()
++
++        with mock.patch.object(agent.br_mgr,
++                               "update_devices") as update_devices:
++            update_devices.side_effect = device_info
++            with contextlib.nested(
++                mock.patch.object(linuxbridge_neutron_agent.LOG, 'info'),
++                mock.patch.object(agent, 'process_network_devices')
++            ) as (log, process_network_devices):
++                log.side_effect = info_mock
++                process_network_devices.side_effect = RuntimeError
++                with testtools.ExpectedException(RuntimeError):
++                    agent.daemon_loop()
++                self.assertEqual(3, log.call_count)
++
++
++class TestLinuxBridgeManager(base.BaseTestCase):
++    def setUp(self):
++        super(TestLinuxBridgeManager, self).setUp()
++        self.interface_mappings = {'physnet1': 'eth1'}
++        self.root_helper = cfg.CONF.AGENT.root_helper
++
++        self.lbm = linuxbridge_neutron_agent.LinuxBridgeManager(
++            self.interface_mappings, self.root_helper)
++
++    def test_device_exists(self):
++        with mock.patch.object(utils, 'execute') as execute_fn:
++            self.assertTrue(self.lbm.device_exists("eth0"))
++            execute_fn.side_effect = RuntimeError()
++            self.assertFalse(self.lbm.device_exists("eth0"))
++
++    def test_interface_exists_on_bridge(self):
++        with mock.patch.object(os, 'listdir') as listdir_fn:
++            listdir_fn.return_value = ["abc"]
++            self.assertTrue(
++                self.lbm.interface_exists_on_bridge("br-int", "abc")
++            )
++            self.assertFalse(
++                self.lbm.interface_exists_on_bridge("br-int", "abd")
++            )
++
++    def test_get_bridge_name(self):
++        nw_id = "123456789101112"
++        self.assertEqual(self.lbm.get_bridge_name(nw_id),
++                         "brq" + nw_id[0:11])
++        nw_id = ""
++        self.assertEqual(self.lbm.get_bridge_name(nw_id),
++                         "brq")
++
++    def test_get_subinterface_name(self):
++        self.assertEqual(self.lbm.get_subinterface_name("eth0", "0"),
++                         "eth0.0")
++        self.assertEqual(self.lbm.get_subinterface_name("eth0", ""),
++                         "eth0.")
++
++    def test_get_tap_device_name(self):
++        if_id = "123456789101112"
++        self.assertEqual(self.lbm.get_tap_device_name(if_id),
++                         "tap" + if_id[0:11])
++        if_id = ""
++        self.assertEqual(self.lbm.get_tap_device_name(if_id),
++                         "tap")
++
++    def test_get_vxlan_device_name(self):
++        vn_id = constants.MAX_VXLAN_VNI
++        self.assertEqual(self.lbm.get_vxlan_device_name(vn_id),
++                         "vxlan-" + str(vn_id))
++        self.assertIsNone(self.lbm.get_vxlan_device_name(vn_id + 1))
++
++    def test_get_all_neutron_bridges(self):
++        br_list = ["br-int", "brq1", "brq2", "br-ex"]
++        with mock.patch.object(os, 'listdir') as listdir_fn:
++            listdir_fn.return_value = br_list
++            self.assertEqual(self.lbm.get_all_neutron_bridges(),
++                             br_list[1:3])
++            self.assertTrue(listdir_fn.called)
++
++    def test_get_interfaces_on_bridge(self):
++        with contextlib.nested(
++            mock.patch.object(utils, 'execute'),
++            mock.patch.object(os, 'listdir')
++        ) as (exec_fn, listdir_fn):
++            listdir_fn.return_value = ["qbr1"]
++            self.assertEqual(self.lbm.get_interfaces_on_bridge("br0"),
++                             ["qbr1"])
++
++    def test_get_tap_devices_count(self):
++        with mock.patch.object(os, 'listdir') as listdir_fn:
++            listdir_fn.return_value = ['tap2101', 'eth0.100', 'vxlan-1000']
++            self.assertEqual(self.lbm.get_tap_devices_count('br0'), 1)
++            listdir_fn.side_effect = OSError()
++            self.assertEqual(self.lbm.get_tap_devices_count('br0'), 0)
++
++    def test_get_interface_by_ip(self):
++        with contextlib.nested(
++            mock.patch.object(ip_lib.IPWrapper, 'get_devices'),
++            mock.patch.object(ip_lib.IpAddrCommand, 'list')
++        ) as (get_dev_fn, ip_list_fn):
++            device = mock.Mock()
++            device.name = 'dev_name'
++            get_dev_fn.return_value = [device]
++            ip_list_fn.returnvalue = mock.Mock()
++            self.assertEqual(self.lbm.get_interface_by_ip(LOCAL_IP),
++                             'dev_name')
++
++    def test_get_bridge_for_tap_device(self):
++        with contextlib.nested(
++            mock.patch.object(self.lbm, "get_all_neutron_bridges"),
++            mock.patch.object(self.lbm, "get_interfaces_on_bridge")
++        ) as (get_all_qbr_fn, get_if_fn):
++            get_all_qbr_fn.return_value = ["br-int", "br-ex"]
++            get_if_fn.return_value = ["tap1", "tap2", "tap3"]
++            self.assertEqual(self.lbm.get_bridge_for_tap_device("tap1"),
++                             "br-int")
++            self.assertIsNone(self.lbm.get_bridge_for_tap_device("tap4"))
++
++    def test_is_device_on_bridge(self):
++        self.assertTrue(not self.lbm.is_device_on_bridge(""))
++        with mock.patch.object(os.path, 'exists') as exists_fn:
++            exists_fn.return_value = True
++            self.assertTrue(self.lbm.is_device_on_bridge("tap1"))
++            exists_fn.assert_called_with(
++                "/sys/devices/virtual/net/tap1/brport"
++            )
++
++    def test_get_interface_details(self):
++        with contextlib.nested(
++            mock.patch.object(ip_lib.IpAddrCommand, 'list'),
++            mock.patch.object(ip_lib.IpRouteCommand, 'get_gateway')
++        ) as (list_fn, getgw_fn):
++            gwdict = dict(gateway='1.1.1.1')
++            getgw_fn.return_value = gwdict
++            ipdict = dict(cidr='1.1.1.1/24',
++                          broadcast='1.1.1.255',
++                          scope='global',
++                          ip_version=4,
++                          dynamic=False)
++            list_fn.return_value = ipdict
++            ret = self.lbm.get_interface_details("eth0")
++
++            self.assertTrue(list_fn.called)
++            self.assertTrue(getgw_fn.called)
++            self.assertEqual(ret, (ipdict, gwdict))
++
++    def test_ensure_flat_bridge(self):
++        with contextlib.nested(
++            mock.patch.object(ip_lib.IpAddrCommand, 'list'),
++            mock.patch.object(ip_lib.IpRouteCommand, 'get_gateway')
++        ) as (list_fn, getgw_fn):
++            gwdict = dict(gateway='1.1.1.1')
++            getgw_fn.return_value = gwdict
++            ipdict = dict(cidr='1.1.1.1/24',
++                          broadcast='1.1.1.255',
++                          scope='global',
++                          ip_version=4,
++                          dynamic=False)
++            list_fn.return_value = ipdict
++            with mock.patch.object(self.lbm, 'ensure_bridge') as ens:
++                self.assertEqual(
++                    self.lbm.ensure_flat_bridge("123", "eth0"),
++                    "eth0"
++                )
++                self.assertTrue(list_fn.called)
++                self.assertTrue(getgw_fn.called)
++                ens.assert_called_once_with("brq123", "eth0",
++                                            ipdict, gwdict)
++
++    def test_ensure_vlan_bridge(self):
++        with contextlib.nested(
++            mock.patch.object(self.lbm, 'ensure_vlan'),
++            mock.patch.object(self.lbm, 'ensure_bridge'),
++            mock.patch.object(self.lbm, 'get_interface_details'),
++        ) as (ens_vl_fn, ens, get_int_det_fn):
++            ens_vl_fn.return_value = "eth0.1"
++            get_int_det_fn.return_value = (None, None)
++            self.assertEqual(self.lbm.ensure_vlan_bridge("123", "eth0", "1"),
++                             "eth0.1")
++            ens.assert_called_with("brq123", "eth0.1", None, None)
++
++            get_int_det_fn.return_value = ("ips", "gateway")
++            self.assertEqual(self.lbm.ensure_vlan_bridge("123", "eth0", "1"),
++                             "eth0.1")
++            ens.assert_called_with("brq123", "eth0.1", "ips", "gateway")
++
++    def test_ensure_local_bridge(self):
++        with mock.patch.object(self.lbm, 'ensure_bridge') as ens_fn:
++            self.lbm.ensure_local_bridge("54321")
++            ens_fn.assert_called_once_with("brq54321")
++
++    def test_ensure_vlan(self):
++        with mock.patch.object(self.lbm, 'device_exists') as de_fn:
++            de_fn.return_value = True
++            self.assertEqual(self.lbm.ensure_vlan("eth0", "1"), "eth0.1")
++            de_fn.return_value = False
++            with mock.patch.object(utils, 'execute') as exec_fn:
++                exec_fn.return_value = False
++                self.assertEqual(self.lbm.ensure_vlan("eth0", "1"), "eth0.1")
++                exec_fn.assert_called_twice()
++                exec_fn.return_value = True
++                self.assertIsNone(self.lbm.ensure_vlan("eth0", "1"))
++                exec_fn.assert_called_once()
++
++    def test_ensure_vxlan(self):
++        seg_id = "12345678"
++        self.lbm.local_int = 'eth0'
++        self.lbm.vxlan_mode = lconst.VXLAN_MCAST
++        with mock.patch.object(self.lbm, 'device_exists') as de_fn:
++            de_fn.return_value = True
++            self.assertEqual(self.lbm.ensure_vxlan(seg_id), "vxlan-" + seg_id)
++            de_fn.return_value = False
++            with mock.patch.object(self.lbm.ip,
++                                   'add_vxlan') as add_vxlan_fn:
++                add_vxlan_fn.return_value = FakeIpDevice()
++                self.assertEqual(self.lbm.ensure_vxlan(seg_id),
++                                 "vxlan-" + seg_id)
++                add_vxlan_fn.assert_called_with("vxlan-" + seg_id, seg_id,
++                                                group="224.0.0.1",
++                                                dev=self.lbm.local_int)
++                cfg.CONF.set_override('l2_population', 'True', 'VXLAN')
++                self.assertEqual(self.lbm.ensure_vxlan(seg_id),
++                                 "vxlan-" + seg_id)
++                add_vxlan_fn.assert_called_with("vxlan-" + seg_id, seg_id,
++                                                group="224.0.0.1",
++                                                dev=self.lbm.local_int,
++                                                proxy=True)
++
++    def test_update_interface_ip_details(self):
++        gwdict = dict(gateway='1.1.1.1',
++                      metric=50)
++        ipdict = dict(cidr='1.1.1.1/24',
++                      broadcast='1.1.1.255',
++                      scope='global',
++                      ip_version=4,
++                      dynamic=False)
++        with contextlib.nested(
++            mock.patch.object(ip_lib.IpAddrCommand, 'add'),
++            mock.patch.object(ip_lib.IpAddrCommand, 'delete')
++        ) as (add_fn, del_fn):
++            self.lbm.update_interface_ip_details("br0", "eth0",
++                                                 [ipdict], None)
++            self.assertTrue(add_fn.called)
++            self.assertTrue(del_fn.called)
++
++        with contextlib.nested(
++            mock.patch.object(ip_lib.IpRouteCommand, 'add_gateway'),
++            mock.patch.object(ip_lib.IpRouteCommand, 'delete_gateway')
++        ) as (addgw_fn, delgw_fn):
++            self.lbm.update_interface_ip_details("br0", "eth0",
++                                                 None, gwdict)
++            self.assertTrue(addgw_fn.called)
++            self.assertTrue(delgw_fn.called)
++
++    def test_ensure_bridge(self):
++        with contextlib.nested(
++            mock.patch.object(self.lbm, 'device_exists'),
++            mock.patch.object(utils, 'execute'),
++            mock.patch.object(self.lbm, 'update_interface_ip_details'),
++            mock.patch.object(self.lbm, 'interface_exists_on_bridge'),
++            mock.patch.object(self.lbm, 'is_device_on_bridge'),
++            mock.patch.object(self.lbm, 'get_bridge_for_tap_device'),
++        ) as (de_fn, exec_fn, upd_fn, ie_fn, if_br_fn, get_if_br_fn):
++            de_fn.return_value = False
++            exec_fn.return_value = False
++            self.assertEqual(self.lbm.ensure_bridge("br0", None), "br0")
++            ie_fn.return_Value = False
++            self.lbm.ensure_bridge("br0", "eth0")
++            upd_fn.assert_called_with("br0", "eth0", None, None)
++            ie_fn.assert_called_with("br0", "eth0")
++
++            self.lbm.ensure_bridge("br0", "eth0", "ips", "gateway")
++            upd_fn.assert_called_with("br0", "eth0", "ips", "gateway")
++            ie_fn.assert_called_with("br0", "eth0")
++
++            exec_fn.side_effect = Exception()
++            de_fn.return_value = True
++            self.lbm.ensure_bridge("br0", "eth0")
++            ie_fn.assert_called_with("br0", "eth0")
++
++            exec_fn.reset_mock()
++            exec_fn.side_effect = None
++            de_fn.return_value = True
++            ie_fn.return_value = False
++            get_if_br_fn.return_value = "br1"
++            self.lbm.ensure_bridge("br0", "eth0")
++            expected = [
++                mock.call(['brctl', 'delif', 'br1', 'eth0'],
++                          root_helper=self.root_helper),
++                mock.call(['brctl', 'addif', 'br0', 'eth0'],
++                          root_helper=self.root_helper),
++            ]
++            exec_fn.assert_has_calls(expected)
++
++    def test_ensure_physical_in_bridge(self):
++        self.assertFalse(
++            self.lbm.ensure_physical_in_bridge("123", p_const.TYPE_VLAN,
++                                               "phys", "1")
++        )
++        with mock.patch.object(self.lbm, "ensure_flat_bridge") as flbr_fn:
++            self.assertTrue(
++                self.lbm.ensure_physical_in_bridge("123", p_const.TYPE_FLAT,
++                                                   "physnet1", None)
++            )
++            self.assertTrue(flbr_fn.called)
++        with mock.patch.object(self.lbm, "ensure_vlan_bridge") as vlbr_fn:
++            self.assertTrue(
++                self.lbm.ensure_physical_in_bridge("123", p_const.TYPE_VLAN,
++                                                   "physnet1", "1")
++            )
++            self.assertTrue(vlbr_fn.called)
++
++        with mock.patch.object(self.lbm, "ensure_vxlan_bridge") as vlbr_fn:
++            self.lbm.vxlan_mode = lconst.VXLAN_MCAST
++            self.assertTrue(
++                self.lbm.ensure_physical_in_bridge("123", p_const.TYPE_VXLAN,
++                                                   "physnet1", "1")
++            )
++            self.assertTrue(vlbr_fn.called)
++
++    def test_add_tap_interface(self):
++        with mock.patch.object(self.lbm, "device_exists") as de_fn:
++            de_fn.return_value = False
++            self.assertFalse(
++                self.lbm.add_tap_interface("123", p_const.TYPE_VLAN,
++                                           "physnet1", "1", "tap1")
++            )
++
++            de_fn.return_value = True
++            with contextlib.nested(
++                mock.patch.object(self.lbm, "ensure_local_bridge"),
++                mock.patch.object(utils, "execute"),
++                mock.patch.object(self.lbm, "get_bridge_for_tap_device")
++            ) as (en_fn, exec_fn, get_br):
++                exec_fn.return_value = False
++                get_br.return_value = True
++                self.assertTrue(self.lbm.add_tap_interface("123",
++                                                           p_const.TYPE_LOCAL,
++                                                           "physnet1", None,
++                                                           "tap1"))
++                en_fn.assert_called_with("123")
++
++                get_br.return_value = False
++                exec_fn.return_value = True
++                self.assertFalse(self.lbm.add_tap_interface("123",
++                                                            p_const.TYPE_LOCAL,
++                                                            "physnet1", None,
++                                                            "tap1"))
++
++            with mock.patch.object(self.lbm,
++                                   "ensure_physical_in_bridge") as ens_fn:
++                ens_fn.return_value = False
++                self.assertFalse(self.lbm.add_tap_interface("123",
++                                                            p_const.TYPE_VLAN,
++                                                            "physnet1", "1",
++                                                            "tap1"))
++
++    def test_add_interface(self):
++        with mock.patch.object(self.lbm, "add_tap_interface") as add_tap:
++            self.lbm.add_interface("123", p_const.TYPE_VLAN, "physnet-1",
++                                   "1", "234")
++            add_tap.assert_called_with("123", p_const.TYPE_VLAN, "physnet-1",
++                                       "1", "tap234")
++
++    def test_delete_vlan_bridge(self):
++        with contextlib.nested(
++            mock.patch.object(self.lbm, "device_exists"),
++            mock.patch.object(self.lbm, "get_interfaces_on_bridge"),
++            mock.patch.object(self.lbm, "remove_interface"),
++            mock.patch.object(self.lbm, "get_interface_details"),
++            mock.patch.object(self.lbm, "update_interface_ip_details"),
++            mock.patch.object(self.lbm, "delete_vlan"),
++            mock.patch.object(self.lbm, "delete_vxlan"),
++            mock.patch.object(utils, "execute")
++        ) as (de_fn, getif_fn, remif_fn, if_det_fn,
++              updif_fn, del_vlan, del_vxlan, exec_fn):
++            de_fn.return_value = False
++            self.lbm.delete_vlan_bridge("br0")
++            self.assertFalse(getif_fn.called)
++
++            de_fn.return_value = True
++            getif_fn.return_value = ["eth0", "eth1.1", "eth1", "vxlan-1002"]
++            if_det_fn.return_value = ("ips", "gateway")
++            exec_fn.return_value = False
++            self.lbm.delete_vlan_bridge("br0")
++            updif_fn.assert_called_with("eth1", "br0", "ips", "gateway")
++            del_vlan.assert_called_with("eth1.1")
++            del_vxlan.assert_called_with("vxlan-1002")
++
++    def test_delete_vxlan_bridge_no_int_mappings(self):
++        interface_mappings = {}
++        lbm = linuxbridge_neutron_agent.LinuxBridgeManager(
++            interface_mappings, self.root_helper)
++
++        with contextlib.nested(
++            mock.patch.object(lbm, "device_exists"),
++            mock.patch.object(lbm, "get_interfaces_on_bridge"),
++            mock.patch.object(lbm, "remove_interface"),
++            mock.patch.object(lbm, "delete_vxlan"),
++            mock.patch.object(utils, "execute")
++        ) as (de_fn, getif_fn, remif_fn, del_vxlan, exec_fn):
++            de_fn.return_value = False
++            lbm.delete_vlan_bridge("br0")
++            self.assertFalse(getif_fn.called)
++
++            de_fn.return_value = True
++            getif_fn.return_value = ["vxlan-1002"]
++            exec_fn.return_value = False
++            lbm.delete_vlan_bridge("br0")
++            del_vxlan.assert_called_with("vxlan-1002")
++
++    def test_remove_empty_bridges(self):
++        self.lbm.network_map = {'net1': mock.Mock(), 'net2': mock.Mock()}
++
++        def tap_count_side_effect(*args):
++            return 0 if args[0] == 'brqnet1' else 1
++
++        with contextlib.nested(
++            mock.patch.object(self.lbm, "delete_vlan_bridge"),
++            mock.patch.object(self.lbm, "get_tap_devices_count",
++                              side_effect=tap_count_side_effect),
++        ) as (del_br_fn, count_tap_fn):
++            self.lbm.remove_empty_bridges()
++            del_br_fn.assert_called_once_with('brqnet1')
++
++    def test_remove_interface(self):
++        with contextlib.nested(
++            mock.patch.object(self.lbm, "device_exists"),
++            mock.patch.object(self.lbm, "is_device_on_bridge"),
++            mock.patch.object(utils, "execute")
++        ) as (de_fn, isdev_fn, exec_fn):
++            de_fn.return_value = False
++            self.assertFalse(self.lbm.remove_interface("br0", "eth0"))
++            self.assertFalse(isdev_fn.called)
++
++            de_fn.return_value = True
++            isdev_fn.return_value = False
++            self.assertTrue(self.lbm.remove_interface("br0", "eth0"))
++
++            isdev_fn.return_value = True
++            exec_fn.return_value = True
++            self.assertFalse(self.lbm.remove_interface("br0", "eth0"))
++
++            exec_fn.return_value = False
++            self.assertTrue(self.lbm.remove_interface("br0", "eth0"))
++
++    def test_delete_vlan(self):
++        with contextlib.nested(
++            mock.patch.object(self.lbm, "device_exists"),
++            mock.patch.object(utils, "execute")
++        ) as (de_fn, exec_fn):
++            de_fn.return_value = False
++            self.lbm.delete_vlan("eth1.1")
++            self.assertFalse(exec_fn.called)
++
++            de_fn.return_value = True
++            exec_fn.return_value = False
++            self.lbm.delete_vlan("eth1.1")
++            self.assertTrue(exec_fn.called)
++
++    def test_update_devices(self):
++        with mock.patch.object(self.lbm, "udev_get_tap_devices") as gt_fn:
++            gt_fn.return_value = set(["dev1"])
++            self.assertIsNone(self.lbm.update_devices(set(["dev1"])))
++
++            gt_fn.return_value = set(["dev1", "dev2"])
++            self.assertEqual(self.lbm.update_devices(set(["dev2", "dev3"])),
++                             {"current": set(["dev1", "dev2"]),
++                              "added": set(["dev1"]),
++                              "removed": set(["dev3"])
++                              })
++
++    def _check_vxlan_support(self, kernel_version, vxlan_proxy_supported,
++                             fdb_append_supported, l2_population,
++                             expected_mode):
++        def iproute_supported_side_effect(*args):
++            if args[1] == 'proxy':
++                return vxlan_proxy_supported
++            elif args[1] == 'append':
++                return fdb_append_supported
++
++        with contextlib.nested(
++            mock.patch("platform.release", return_value=kernel_version),
++            mock.patch.object(ip_lib, 'iproute_arg_supported',
++                              side_effect=iproute_supported_side_effect),
++        ) as (kver_fn, ip_arg_fn):
++            self.lbm.check_vxlan_support()
++            self.assertEqual(self.lbm.vxlan_mode, expected_mode)
++
++    def test_vxlan_mode_ucast(self):
++        self._check_vxlan_support(kernel_version='3.12',
++                                  vxlan_proxy_supported=True,
++                                  fdb_append_supported=True,
++                                  l2_population=True,
++                                  expected_mode=lconst.VXLAN_MCAST)
++
++    def test_vxlan_mode_mcast(self):
++        self._check_vxlan_support(kernel_version='3.12',
++                                  vxlan_proxy_supported=True,
++                                  fdb_append_supported=False,
++                                  l2_population=True,
++                                  expected_mode=lconst.VXLAN_MCAST)
++        self._check_vxlan_support(kernel_version='3.10',
++                                  vxlan_proxy_supported=True,
++                                  fdb_append_supported=True,
++                                  l2_population=True,
++                                  expected_mode=lconst.VXLAN_MCAST)
++
++    def test_vxlan_mode_unsupported(self):
++        self._check_vxlan_support(kernel_version='3.7',
++                                  vxlan_proxy_supported=True,
++                                  fdb_append_supported=True,
++                                  l2_population=False,
++                                  expected_mode=lconst.VXLAN_NONE)
++        self._check_vxlan_support(kernel_version='3.10',
++                                  vxlan_proxy_supported=False,
++                                  fdb_append_supported=False,
++                                  l2_population=False,
++                                  expected_mode=lconst.VXLAN_NONE)
++        cfg.CONF.set_override('vxlan_group', '', 'VXLAN')
++        self._check_vxlan_support(kernel_version='3.12',
++                                  vxlan_proxy_supported=True,
++                                  fdb_append_supported=True,
++                                  l2_population=True,
++                                  expected_mode=lconst.VXLAN_NONE)
++
++
++class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
++    def setUp(self):
++        cfg.CONF.set_override('local_ip', LOCAL_IP, 'VXLAN')
++        self.addCleanup(cfg.CONF.reset)
++        super(TestLinuxBridgeRpcCallbacks, self).setUp()
++
++        self.u_execute_p = mock.patch('neutron.agent.linux.utils.execute')
++        self.u_execute = self.u_execute_p.start()
++        self.addCleanup(self.u_execute_p.stop)
++
++        class FakeLBAgent(object):
++            def __init__(self):
++                self.agent_id = 1
++                self.br_mgr = (linuxbridge_neutron_agent.
++                               LinuxBridgeManager({'physnet1': 'eth1'},
++                                                  cfg.CONF.AGENT.root_helper))
++
++                self.br_mgr.vxlan_mode = lconst.VXLAN_UCAST
++                segment = mock.Mock()
++                segment.network_type = 'vxlan'
++                segment.segmentation_id = 1
++                self.br_mgr.network_map['net_id'] = segment
++
++        self.lb_rpc = linuxbridge_neutron_agent.LinuxBridgeRpcCallbacks(
++            object(),
++            FakeLBAgent()
++        )
++
++        self.root_helper = cfg.CONF.AGENT.root_helper
++
++    def test_network_delete(self):
++        with contextlib.nested(
++            mock.patch.object(self.lb_rpc.agent.br_mgr, "get_bridge_name"),
++            mock.patch.object(self.lb_rpc.agent.br_mgr, "delete_vlan_bridge")
++        ) as (get_br_fn, del_fn):
++            get_br_fn.return_value = "br0"
++            self.lb_rpc.network_delete("anycontext", network_id="123")
++            get_br_fn.assert_called_with("123")
++            del_fn.assert_called_with("br0")
++
++    def test_port_update(self):
++        with contextlib.nested(
++            mock.patch.object(self.lb_rpc.agent.br_mgr,
++                              "get_tap_device_name"),
++            mock.patch.object(self.lb_rpc.agent.br_mgr,
++                              "udev_get_tap_devices"),
++            mock.patch.object(self.lb_rpc.agent.br_mgr,
++                              "get_bridge_name"),
++            mock.patch.object(self.lb_rpc.agent.br_mgr,
++                              "remove_interface"),
++            mock.patch.object(self.lb_rpc.agent.br_mgr, "add_interface"),
++            mock.patch.object(self.lb_rpc.agent,
++                              "plugin_rpc", create=True),
++            mock.patch.object(self.lb_rpc.sg_agent,
++                              "refresh_firewall", create=True)
++        ) as (get_tap_fn, udev_fn, getbr_fn, remif_fn,
++              addif_fn, rpc_obj, reffw_fn):
++            get_tap_fn.return_value = "tap123"
++            udev_fn.return_value = ["tap123", "tap124"]
++            port = {"admin_state_up": True,
++                    "id": "1234-5678",
++                    "network_id": "123-123"}
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    vlan_id="1", physical_network="physnet1")
++            self.assertFalse(reffw_fn.called)
++            addif_fn.assert_called_with(port["network_id"], p_const.TYPE_VLAN,
++                                        "physnet1", "1", port["id"])
++
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    network_type=p_const.TYPE_VLAN,
++                                    segmentation_id="2",
++                                    physical_network="physnet1")
++            self.assertFalse(reffw_fn.called)
++            addif_fn.assert_called_with(port["network_id"], p_const.TYPE_VLAN,
++                                        "physnet1", "2", port["id"])
++
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    vlan_id=lconst.FLAT_VLAN_ID,
++                                    physical_network="physnet1")
++            self.assertFalse(reffw_fn.called)
++            addif_fn.assert_called_with(port["network_id"], p_const.TYPE_FLAT,
++                                        "physnet1", None, port["id"])
++
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    network_type=p_const.TYPE_FLAT,
++                                    segmentation_id=None,
++                                    physical_network="physnet1")
++            self.assertFalse(reffw_fn.called)
++            addif_fn.assert_called_with(port["network_id"], p_const.TYPE_FLAT,
++                                        "physnet1", None, port["id"])
++
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    vlan_id=lconst.LOCAL_VLAN_ID,
++                                    physical_network=None)
++            self.assertFalse(reffw_fn.called)
++            addif_fn.assert_called_with(port["network_id"], p_const.TYPE_LOCAL,
++                                        None, None, port["id"])
++
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    network_type=p_const.TYPE_LOCAL,
++                                    segmentation_id=None,
++                                    physical_network=None)
++            self.assertFalse(reffw_fn.called)
++            addif_fn.assert_called_with(port["network_id"], p_const.TYPE_LOCAL,
++                                        None, None, port["id"])
++
++            addif_fn.return_value = True
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    network_type=p_const.TYPE_LOCAL,
++                                    segmentation_id=None,
++                                    physical_network=None)
++            rpc_obj.update_device_up.assert_called_with(
++                self.lb_rpc.context,
++                "tap123",
++                self.lb_rpc.agent.agent_id,
++                cfg.CONF.host
++            )
++
++            addif_fn.return_value = False
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    network_type=p_const.TYPE_LOCAL,
++                                    segmentation_id=None,
++                                    physical_network=None)
++            rpc_obj.update_device_down.assert_called_with(
++                self.lb_rpc.context,
++                "tap123",
++                self.lb_rpc.agent.agent_id,
++                cfg.CONF.host
++            )
++
++            port["admin_state_up"] = False
++            port["security_groups"] = True
++            getbr_fn.return_value = "br0"
++            self.lb_rpc.port_update("unused_context", port=port,
++                                    vlan_id="1", physical_network="physnet1")
++            self.assertTrue(reffw_fn.called)
++            remif_fn.assert_called_with("br0", "tap123")
++            rpc_obj.update_device_down.assert_called_with(
++                self.lb_rpc.context,
++                "tap123",
++                self.lb_rpc.agent.agent_id,
++                cfg.CONF.host
++            )
++
++    def test_port_update_plugin_rpc_failed(self):
++        with contextlib.nested(
++                mock.patch.object(self.lb_rpc.agent.br_mgr,
++                                  "get_tap_device_name"),
++                mock.patch.object(self.lb_rpc.agent.br_mgr,
++                                  "udev_get_tap_devices"),
++                mock.patch.object(self.lb_rpc.agent.br_mgr,
++                                  "get_bridge_name"),
++                mock.patch.object(self.lb_rpc.agent.br_mgr,
++                                  "remove_interface"),
++                mock.patch.object(self.lb_rpc.agent.br_mgr, "add_interface"),
++                mock.patch.object(self.lb_rpc.sg_agent,
++                                  "refresh_firewall", create=True),
++                mock.patch.object(self.lb_rpc.agent,
++                                  "plugin_rpc", create=True),
++                mock.patch.object(linuxbridge_neutron_agent.LOG, 'error'),
++        ) as (get_tap_fn, udev_fn, _, _, _, _, plugin_rpc, log):
++            get_tap_fn.return_value = "tap123"
++            udev_fn.return_value = ["tap123", "tap124"]
++            port = {"admin_state_up": True,
++                    "id": "1234-5678",
++                    "network_id": "123-123"}
++            plugin_rpc.update_device_up.side_effect = rpc_common.Timeout
++            self.lb_rpc.port_update(mock.Mock(), port=port)
++            self.assertTrue(plugin_rpc.update_device_up.called)
++            self.assertEqual(log.call_count, 1)
++
++            log.reset_mock()
++            port["admin_state_up"] = False
++            plugin_rpc.update_device_down.side_effect = rpc_common.Timeout
++            self.lb_rpc.port_update(mock.Mock(), port=port)
++            self.assertTrue(plugin_rpc.update_device_down.called)
++            self.assertEqual(log.call_count, 1)
++
++    def test_fdb_add(self):
++        fdb_entries = {'net_id':
++                       {'ports':
++                        {'agent_ip': [constants.FLOODING_ENTRY,
++                                      ['port_mac', 'port_ip']]},
++                        'network_type': 'vxlan',
++                        'segment_id': 1}}
++
++        with mock.patch.object(utils, 'execute',
++                               return_value='') as execute_fn:
++            self.lb_rpc.fdb_add(None, fdb_entries)
++
++            expected = [
++                mock.call(['bridge', 'fdb', 'show', 'dev', 'vxlan-1'],
++                          root_helper=self.root_helper),
++                mock.call(['bridge', 'fdb', 'add',
++                           constants.FLOODING_ENTRY[0],
++                           'dev', 'vxlan-1', 'dst', 'agent_ip'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++                mock.call(['ip', 'neigh', 'add', 'port_ip', 'lladdr',
++                           'port_mac', 'dev', 'vxlan-1', 'nud', 'permanent'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++                mock.call(['bridge', 'fdb', 'add', 'port_mac', 'dev',
++                           'vxlan-1', 'dst', 'agent_ip'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++            ]
++            execute_fn.assert_has_calls(expected)
++
++    def test_fdb_ignore(self):
++        fdb_entries = {'net_id':
++                       {'ports':
++                        {LOCAL_IP: [constants.FLOODING_ENTRY,
++                                    ['port_mac', 'port_ip']]},
++                        'network_type': 'vxlan',
++                        'segment_id': 1}}
++
++        with mock.patch.object(utils, 'execute',
++                               return_value='') as execute_fn:
++            self.lb_rpc.fdb_add(None, fdb_entries)
++            self.lb_rpc.fdb_remove(None, fdb_entries)
++
++            self.assertFalse(execute_fn.called)
++
++        fdb_entries = {'other_net_id':
++                       {'ports':
++                        {'192.168.0.67': [constants.FLOODING_ENTRY,
++                                          ['port_mac', 'port_ip']]},
++                        'network_type': 'vxlan',
++                        'segment_id': 1}}
++
++        with mock.patch.object(utils, 'execute',
++                               return_value='') as execute_fn:
++            self.lb_rpc.fdb_add(None, fdb_entries)
++            self.lb_rpc.fdb_remove(None, fdb_entries)
++
++            self.assertFalse(execute_fn.called)
++
++    def test_fdb_remove(self):
++        fdb_entries = {'net_id':
++                       {'ports':
++                        {'agent_ip': [constants.FLOODING_ENTRY,
++                                      ['port_mac', 'port_ip']]},
++                        'network_type': 'vxlan',
++                        'segment_id': 1}}
++
++        with mock.patch.object(utils, 'execute',
++                               return_value='') as execute_fn:
++            self.lb_rpc.fdb_remove(None, fdb_entries)
++
++            expected = [
++                mock.call(['bridge', 'fdb', 'del',
++                           constants.FLOODING_ENTRY[0],
++                           'dev', 'vxlan-1', 'dst', 'agent_ip'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++                mock.call(['ip', 'neigh', 'del', 'port_ip', 'lladdr',
++                           'port_mac', 'dev', 'vxlan-1'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++                mock.call(['bridge', 'fdb', 'del', 'port_mac',
++                           'dev', 'vxlan-1', 'dst', 'agent_ip'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++            ]
++            execute_fn.assert_has_calls(expected)
++
++    def test_fdb_update_chg_ip(self):
++        fdb_entries = {'chg_ip':
++                       {'net_id':
++                        {'agent_ip':
++                         {'before': [['port_mac', 'port_ip_1']],
++                          'after': [['port_mac', 'port_ip_2']]}}}}
++
++        with mock.patch.object(utils, 'execute',
++                               return_value='') as execute_fn:
++            self.lb_rpc.fdb_update(None, fdb_entries)
++
++            expected = [
++                mock.call(['ip', 'neigh', 'add', 'port_ip_2', 'lladdr',
++                           'port_mac', 'dev', 'vxlan-1', 'nud', 'permanent'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False),
++                mock.call(['ip', 'neigh', 'del', 'port_ip_1', 'lladdr',
++                           'port_mac', 'dev', 'vxlan-1'],
++                          root_helper=self.root_helper,
++                          check_exit_code=False)
++            ]
++            execute_fn.assert_has_calls(expected)
index df77dbe6cc269500c0230cea371012d4e0ecb183..4d7ef439a677a76d066bbacf0a4bd09cc4338dfa 100644 (file)
@@ -1,3 +1,10 @@
+Description: Fixes to neutron configuration for distribution.
+ Patch various bits of config to be more suitable for packaging.
+Author: James Page <james.page@ubuntu.com>
+Forwarded: not-needed
+
+diff --git a/etc/neutron.conf b/etc/neutron.conf
+index 1e2226f..a5fe086 100644
 --- a/etc/neutron.conf
 +++ b/etc/neutron.conf
 @@ -7,7 +7,7 @@
 --- a/etc/neutron.conf
 +++ b/etc/neutron.conf
 @@ -7,7 +7,7 @@
  
  # Where to store lock files
  lock_path = $state_path/lock
  
  # Where to store lock files
  lock_path = $state_path/lock
-@@ -45,7 +45,7 @@ lock_path = $state_path/lock
- # api_extensions_path =
- # Neutron plugin provider module
+@@ -50,7 +50,7 @@ lock_path = $state_path/lock
+ # previous versions, the class name of a plugin can be specified instead of its
+ # entrypoint name.
+ #
 -# core_plugin =
 -# core_plugin =
-+core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
++core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
+ # Example: core_plugin = ml2
  
  
- # Advanced service modules
- # service_plugins =
-@@ -295,7 +295,7 @@ notification_driver = neutron.openstack.
+ # (ListOpt) List of service plugin entrypoints to be loaded from the
+@@ -320,7 +320,7 @@ notification_driver = neutron.openstack.common.notifier.rpc_notifier
  # Use "sudo neutron-rootwrap /etc/neutron/rootwrap.conf" to use the real
  # root filter facility.
  # Change to "sudo" to skip the filtering and just run the comand directly
  # Use "sudo neutron-rootwrap /etc/neutron/rootwrap.conf" to use the real
  # root filter facility.
  # Change to "sudo" to skip the filtering and just run the comand directly
@@ -27,7 +34,7 @@
  
  # =========== items for agent management extension =============
  # seconds between nodes reporting state to server; should be less than
  
  # =========== items for agent management extension =============
  # seconds between nodes reporting state to server; should be less than
-@@ -319,7 +319,7 @@ signing_dir = $state_path/keystone-signi
+@@ -344,7 +344,7 @@ signing_dir = $state_path/keystone-signing
  # connection = mysql://root:pass@127.0.0.1:3306/neutron
  # Replace 127.0.0.1 above with the IP address of the database used by the
  # main neutron server. (Leave it as is if the database runs on this host.)
  # connection = mysql://root:pass@127.0.0.1:3306/neutron
  # Replace 127.0.0.1 above with the IP address of the database used by the
  # main neutron server. (Leave it as is if the database runs on this host.)
@@ -36,3 +43,6 @@
  
  # The SQLAlchemy connection string used to connect to the slave database
  # slave_connection =
  
  # The SQLAlchemy connection string used to connect to the slave database
  # slave_connection =
+-- 
+1.8.5.2
+
diff --git a/debian/patches/remove-jsonrpclib.patch b/debian/patches/remove-jsonrpclib.patch
deleted file mode 100644 (file)
index b47279f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/requirements.txt
-+++ b/requirements.txt
-@@ -12,7 +12,6 @@ greenlet>=0.3.2
- httplib2
- requests>=1.1
- iso8601>=0.1.8
--jsonrpclib
- Jinja2
- kombu>=2.4.8
- netaddr
index aa0010058f494fb0797e47e3f43505d007e0f803..dd69d1464dfe04f5511a6ce3288e4cf6bf6e5830 100644 (file)
@@ -1,5 +1,6 @@
 fix-quantum-configuration.patch
 disable-udev-tests.patch
 fix-quantum-configuration.patch
 disable-udev-tests.patch
-bump-sqlalchemy-version.patch
-disable-ml2-notification-tests.patch
-remove-jsonrpclib.patch
+disable-failing-metaplugin-tests.patch
+skip-lb-test.patch
+skip-ipv6-tests.patch
+use-concurrency.patch
diff --git a/debian/patches/skip-ipv6-tests.patch b/debian/patches/skip-ipv6-tests.patch
new file mode 100644 (file)
index 0000000..92cbc68
--- /dev/null
@@ -0,0 +1,22 @@
+Description: Skip ipv6 tests because they fail on the ppa buildds.
+Author: Chuck Short <zulcss@ubuntu.com>
+Forwarded: Not Needed
+diff -Naurp neutron-2014.1.b2.orig/neutron/tests/unit/test_wsgi.py neutron-2014.1.b2/neutron/tests/unit/test_wsgi.py
+--- neutron-2014.1.b2.orig/neutron/tests/unit/test_wsgi.py     2014-01-23 10:13:25.000000000 -0500
++++ neutron-2014.1.b2/neutron/tests/unit/test_wsgi.py  2014-02-03 08:58:27.817255230 -0500
+@@ -64,6 +64,7 @@ class TestWSGIServer(base.BaseTestCase):
+         launcher.wait.assert_called_once_with()
+     def test_start_random_port_with_ipv6(self):
++        self.skipTest('Skipped by Ubuntu')
+         server = wsgi.Server("test_random_port")
+         server.start(None, 0, host="::1")
+         self.assertEqual("::1", server.host)
+@@ -1109,6 +1110,7 @@ class TestWSGIServerWithSSL(base.BaseTes
+         server.stop()
+     def test_app_using_ipv6_and_ssl(self):
++        self.skipTest('Skipped by Ubuntu')
+         CONF.set_default('use_ssl', True)
+         CONF.set_default("ssl_cert_file",
+                          os.path.join(TEST_VAR_DIR, 'certificate.crt'))
diff --git a/debian/patches/skip-lb-test.patch b/debian/patches/skip-lb-test.patch
new file mode 100644 (file)
index 0000000..f99e741
--- /dev/null
@@ -0,0 +1,14 @@
+Description: Temporarily Skip LB test
+Author: Chuck Short <zulcss@ubuntu.com>
+Forwarded: Not Needed
+diff -Naurp neutron-2014.1.b2.orig/neutron/tests/unit/test_provider_configuration.py neutron-2014.1.b2/neutron/tests/unit/test_provider_configuration.py
+--- neutron-2014.1.b2.orig/neutron/tests/unit/test_provider_configuration.py   2014-01-23 10:13:25.000000000 -0500
++++ neutron-2014.1.b2/neutron/tests/unit/test_provider_configuration.py        2014-01-27 11:39:28.611298704 -0500
+@@ -79,6 +79,7 @@ class ParseServiceProviderConfigurationT
+                                 'default': True}])
+     def test_parse_service_provider_opt_not_allowed_raises(self):
++        self.skipTest('Skipped by Ubuntu')
+         cfg.CONF.set_override('service_provider',
+                               [constants.LOADBALANCER +
+                                ':lbaas:driver_path',
diff --git a/debian/patches/use-concurrency.patch b/debian/patches/use-concurrency.patch
new file mode 100644 (file)
index 0000000..203110a
--- /dev/null
@@ -0,0 +1,19 @@
+Description: Use concurrency of 4.
+Author: Chuck Short <zulcss@ubuntu.com>
+Fowarded: Not needed.
+diff --git a/run_tests.sh b/run_tests.sh
+index 4d838e8..6739fee 100755
+--- a/run_tests.sh
++++ b/run_tests.sh
+@@ -129,7 +129,7 @@ function run_tests {
+   # Just run the test suites in current environment
+   set +e
+   testrargs=`echo "$testrargs" | sed -e's/^\s*\(.*\)\s*$/\1/'`
+-  TESTRTESTS="$TESTRTESTS --testr-args='--subunit $testropts $testrargs'"
++  TESTRTESTS="$TESTRTESTS --testr-args='--subunit --concurrency 4 $testropts $testrargs'"
+   echo "Running \`${wrapper} $TESTRTESTS\`"
+   bash -c "${wrapper} $TESTRTESTS | ${wrapper} subunit2pyunit"
+   RESULT=$?
+-- 
+1.9.0
+
old mode 100755 (executable)
new mode 100644 (file)
index 416e493..7b448d3
@@ -1,4 +1,3 @@
 quantum_server quantum-server
 quantum_common quantum-common
 setuptools-git
 quantum_server quantum-server
 quantum_common quantum-common
 setuptools-git
-jsonrpclib
index 60e37da0f60cffc12baf1efb7762d5b5708957d4..918ceded740bef0777f1a08cf27702003dac7d24 100755 (executable)
@@ -9,6 +9,10 @@
 override_dh_install:
        dh_install --fail-missing -X/usr/etc -X/usr/bin/quantum
 
 override_dh_install:
        dh_install --fail-missing -X/usr/etc -X/usr/bin/quantum
 
+override_dh_installinit:
+       dh_installinit
+       dh_installinit -pneutron-plugin-openvswitch-agent --no-start --name=neutron-ovs-cleanup
+
 override_dh_auto_clean:
        dh_clean
 
 override_dh_auto_clean:
        dh_clean
 
@@ -21,7 +25,7 @@ override_dh_auto_test:
        # with a core_plugin being set.
        patch -p1 -R < debian/patches/fix-quantum-configuration.patch
        # Set a reasonable level of concurrency
        # with a core_plugin being set.
        patch -p1 -R < debian/patches/fix-quantum-configuration.patch
        # Set a reasonable level of concurrency
-       ./run_tests.sh -N -P --concurrency=4 || true
+       ./run_tests.sh -N -P
        # Patch configuration file after testing
        patch -p1 < debian/patches/fix-quantum-configuration.patch
 endif
        # Patch configuration file after testing
        patch -p1 < debian/patches/fix-quantum-configuration.patch
 endif
index 84fa96e59f3ff9f2055a2b9c3ace6d4c7118b049..53ae887855e75b785f71891414aa23263bae33aa 100644 (file)
@@ -1,5 +1,5 @@
 Tests: neutron-daemons python-neutron cisco-plugin nec-plugin bigswitch-plugin
 Tests: neutron-daemons python-neutron cisco-plugin nec-plugin bigswitch-plugin
- hyperv-plugin brocade-plugin plumgrid-plugin nicira-plugin openvswitch-plugin
+ hyperv-plugin brocade-plugin plumgrid-plugin vmware-plugin openvswitch-plugin
  linuxbridge-plugin ryu-plugin midonet-plugin
 Depends: neutron-server, neutron-l3-agent, neutron-dhcp-agent, neutron-metadata-agent,
  neutron-lbaas-agent, python-neutron, rabbitmq-server
  linuxbridge-plugin ryu-plugin midonet-plugin
 Depends: neutron-server, neutron-l3-agent, neutron-dhcp-agent, neutron-metadata-agent,
  neutron-lbaas-agent, python-neutron, rabbitmq-server
similarity index 59%
rename from debian/tests/nicira-plugin
rename to debian/tests/vmware-plugin
index 1c7df37575064b5c7c0139dd4cc713b996307b13..86933cdc62cb1ba7044ec6859db35a092dd4e9ec 100644 (file)
@@ -1,19 +1,19 @@
 #!/bin/bash
 #----------------------
 #!/bin/bash
 #----------------------
-# Testing nicira-plugin
+# Testing vmware-plugin
 #----------------------
 set -e
 #----------------------
 set -e
-apt-get -y install neutron-plugin-nicira
+apt-get -y install neutron-plugin-vmware
 
 # update plugin path
 
 # update plugin path
-sed -i 's/NEUTRON_PLUGIN_CONFIG\=.*/NEUTRON_PLUGIN_CONFIG\=\"\/etc\/neutron\/plugins\/nicira\/nvp\.ini\"/g' /etc/default/neutron-server
+sed -i 's/NEUTRON_PLUGIN_CONFIG\=.*/NEUTRON_PLUGIN_CONFIG\=\"\/etc\/neutron\/plugins\/vmware\/nsx\.ini\"/g' /etc/default/neutron-server
 sed -i 's/core_plugin/core_plugin \= neutron\.plugins\.nicira\.NeutronPlugin\.NvpPluginV2/g' /etc/neutron/neutron.conf
 service neutron-server restart  > /dev/null 2>&1
 if pidof -x neutron-server > /dev/null; then
 sed -i 's/core_plugin/core_plugin \= neutron\.plugins\.nicira\.NeutronPlugin\.NvpPluginV2/g' /etc/neutron/neutron.conf
 service neutron-server restart  > /dev/null 2>&1
 if pidof -x neutron-server > /dev/null; then
-    apt-get -y remove --purge neutron-plugin-nicira
+    apt-get -y remove --purge neutron-plugin-vmware
     echo "OK"
 else
     echo "OK"
 else
-    echo "ERROR: NICIRA PLUGIN IS NOT RUNNING"
-    apt-get -y remove --purge neutron-plugin-nicira
+    echo "ERROR: VMWARE PLUGIN IS NOT RUNNING"
+    apt-get -y remove --purge neutron-plugin-vmware
     exit 1
 fi
     exit 1
 fi
old mode 100755 (executable)
new mode 100644 (file)
index 0d2dbd4ae0a635e5cd50d384645c7590d4e1b62f..35b9218292e27c85294e41b652646ca39297ca71 100644 (file)
@@ -1,4 +1,4 @@
-From 9e51bf76149105791742f84a4a639f9a0f661aad Mon Sep 17 00:00:00 2001
+From 89cac7fea4c4c5ef952227209c815cb166033050 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
 Date: Fri, 13 Apr 2012 17:24:40 +0100
 Subject: [PATCH] use parallel installed versions in RHEL6
 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
 Date: Fri, 13 Apr 2012 17:24:40 +0100
 Subject: [PATCH] use parallel installed versions in RHEL6
@@ -7,8 +7,8 @@ of webob sqlalchemy python-routes paste-deploy python-jinja2-26
 
 Change-Id: I290f56eae61c87893639a9e5d29f7fff760452cf
 ---
 
 Change-Id: I290f56eae61c87893639a9e5d29f7fff760452cf
 ---
- neutron/__init__.py | 31 +++++++++++++++++++++++++++++++
- 1 file changed, 31 insertions(+)
+ neutron/__init__.py |   31 +++++++++++++++++++++++++++++++
+ 1 files changed, 31 insertions(+), 0 deletions(-)
 
 diff --git a/neutron/__init__.py b/neutron/__init__.py
 index b2c81bd..fef4d32 100644
 
 diff --git a/neutron/__init__.py b/neutron/__init__.py
 index b2c81bd..fef4d32 100644
diff --git a/rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch b/rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch
new file mode 100644 (file)
index 0000000..406daca
--- /dev/null
@@ -0,0 +1,31 @@
+From 85a3b3a1ae3886db3b803db317974e33beaef6a2 Mon Sep 17 00:00:00 2001
+From: Terry Wilson <twilson@redhat.com>
+Date: Fri, 13 Dec 2013 09:41:43 -0600
+Subject: [PATCH] Remove dnsmasq version warning
+
+---
+ neutron/agent/linux/dhcp.py |   11 +++++++----
+ 1 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py
+index 137f7a9..7406597 100644
+--- a/neutron/agent/linux/dhcp.py
++++ b/neutron/agent/linux/dhcp.py
+@@ -291,10 +291,13 @@ class Dnsmasq(DhcpLocalProcess):
+             ver = re.findall("\d+.\d+", out)[0]
+             is_valid_version = float(ver) >= cls.MINIMUM_VERSION
+             if not is_valid_version:
+-                LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. '
+-                              'DHCP AGENT MAY NOT RUN CORRECTLY! '
+-                              'Please ensure that its version is %s '
+-                              'or above!'), cls.MINIMUM_VERSION)
++                if float(ver) < 2.48:
++                    LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. '
++                                  'DHCP AGENT MAY NOT RUN CORRECTLY! '
++                                  'Please ensure that its version is %s '
++                                  'or above!'), cls.MINIMUM_VERSION)
++                else:
++                    LOG.info(_('dnsmasq version: %s'), ver)
+         except (OSError, RuntimeError, IndexError, ValueError):
+             LOG.warning(_('Unable to determine dnsmasq version. '
+                           'Please ensure that its version is %s '
index f7268aa826f5c511c5bd036344932631077d384c..ef93ac2f59a9b44ab9ccb43976f37296f572703d 100644 (file)
@@ -13,11 +13,11 @@ plugin=dhcp-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/dhcp_agent.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/dhcp_agent.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
-logfile="/var/log/$proj/dhcp-agent.log"
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
@@ -29,7 +29,7 @@ start() {
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
-    daemon --user neutron --pidfile $pidfile "$exec --log-file $logfile ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
+    daemon --user neutron --pidfile $pidfile "$exec --log-file /var/log/$proj/$plugin.log ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
index d37eea61cba1de1145be2c41e35af1c67b75f892..d07f5a4ee086fc923391f0dc799ad3c9ab3d6c53 100644 (file)
@@ -13,11 +13,12 @@ plugin=l3-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/l3_agent.ini" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/l3_agent.ini" \
+    "/etc/$proj/fwaas_driver.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
 )
 pidfile="/var/run/$proj/$prog.pid"
-logfile="/var/log/$proj/l3-agent.log"
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
@@ -29,7 +30,7 @@ start() {
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
-    daemon --user neutron --pidfile $pidfile "$exec --log-file $logfile ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
+    daemon --user neutron --pidfile $pidfile "$exec --log-file /var/log/$proj/$plugin.log ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
index 35e1d3261f05049fa0ca60aa913ed784b2434097..81b4d4715fbeeddc39d78a0f6d3ba66923a9338b 100644 (file)
@@ -5,4 +5,4 @@ stop on runlevel [S016]
 
 respawn
 
 
 respawn
 
-exec su -s /bin/sh -c "exec /usr/bin/neutron-l3-agent --log-file /var/log/neutron/l3-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/l3_agent.ini" neutron
+exec su -s /bin/sh -c "exec /usr/bin/neutron-l3-agent --log-file /var/log/neutron/l3-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/l3_agent.ini" --config-file /etc/neutron/fwaas_driver.ini neutron
index f433a00d5f724bd8ba60f106a69b186910c09fa6..31ac1ce6a49965900757c6f964131e00b98cf62b 100644 (file)
@@ -13,6 +13,7 @@ plugin=lbaas-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/lbaas_agent.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/lbaas_agent.ini" \
 )
index 3403e2bf0b2a09b10deabfc30af16f85ad92fafa..141a9750bf5588f117b91df30b57ec2e8e2f146a 100644 (file)
@@ -13,6 +13,7 @@ plugin=linuxbridge-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/linuxbridge/linuxbridge_conf.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/linuxbridge/linuxbridge_conf.ini" \
 )
index d8b819f125fb3b72269886630340779b941daa63..4a0384dea79dcddcea69f3ba6c1d041e1abffb9c 100644 (file)
@@ -13,11 +13,11 @@ plugin=metadata-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/metadata_agent.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/metadata_agent.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
-logfile="/var/log/$proj/metadata-agent.log"
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
@@ -29,7 +29,7 @@ start() {
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
-    daemon --user neutron --pidfile $pidfile "$exec --log-file $logfile ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
+    daemon --user neutron --pidfile $pidfile "$exec --log-file /var/log/$proj/$plugin.log ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
index 798babaf4cc992b5fb48b0714db8940d969ddb27..8c7ab4f016684e1cc5e227104631e5e808986b7a 100644 (file)
@@ -13,6 +13,7 @@ plugin=metering-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/metering_agent.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/metering_agent.ini" \
 )
index 4db57c91b6f7977a673574f2927fd7e0453b8f1b..c19f33bfaaebebc2c3e7b0ae8cdad9e0b49c1c44 100644 (file)
@@ -13,6 +13,7 @@ plugin=mlnx-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/mlnx/mlnx_conf.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/mlnx/mlnx_conf.ini" \
 )
index 3cb7a2a49f7d64e353d0a698a9c9e67d62394575..ff1b877f77dba91b91b20b12c4ac60da686b3f02 100644 (file)
@@ -13,6 +13,7 @@ plugin=nec-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/nec/nec.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/nec/nec.ini" \
 )
index ace2f9bb59298d241b5f372327fffcad4c032f1f..14e53a9cb4b233772c9a2ef930ac7daba4ac2b03 100644 (file)
@@ -13,11 +13,11 @@ plugin=openvswitch-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/openvswitch/ovs_neutron_plugin.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/openvswitch/ovs_neutron_plugin.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
-logfile="/var/log/$proj/ovs-agent.log"
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
 
 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 
@@ -29,7 +29,7 @@ start() {
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
         [ -f $config ] || exit 6
     done
     echo -n $"Starting $prog: "
-    daemon --user neutron --pidfile $pidfile "$exec --log-file $logfile ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
+    daemon --user neutron --pidfile $pidfile "$exec --log-file /var/log/$proj/$plugin.log ${configs[@]/#/--config-file } &>/dev/null & echo \$! > $pidfile"
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
index 7d9bd8060bec9412f1843e1c785907e5a534a2db..0694022a504fbf322bcb432535e873ebeaf874bd 100644 (file)
@@ -13,6 +13,7 @@ prog=$proj-ovs-cleanup
 exec="/usr/bin/$prog"
 pidfile="/var/run/$proj/$prog.pid"
 configs=(
 exec="/usr/bin/$prog"
 pidfile="/var/run/$proj/$prog.pid"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/openvswitch/ovs_neutron_plugin.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/openvswitch/ovs_neutron_plugin.ini" \
 )
index 449eb722841fef3131852626cb906f2a28e7dad4..89dcaced8cd9bda2a85aa3fb4987c5212bd33031 100644 (file)
@@ -13,6 +13,7 @@ plugin=ryu-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/ryu/ryu.ini" \
 )
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/plugins/ryu/ryu.ini" \
 )
index d18782359ab240ed75dcd1a1765af456c9d837de..268c64c1189048910ee30e654e20d65e340ae120 100644 (file)
@@ -167,7 +167,7 @@ case "${NEUTRON_PLUGIN}" in
 ;;
 
 "openvswitch")
 ;;
 
 "openvswitch")
-       if ! rpm -q openvswitch > /dev/null 
+       if ! rpm -q --whatprovides openvswitch > /dev/null 
        then
                echo "Please install openvswitch"
                exit 0
        then
                echo "Please install openvswitch"
                exit 0
@@ -199,7 +199,7 @@ echo "Plugin: ${NEUTRON_PLUGIN} => Database: ${DB_NAME}"
 # Make sure MySQL is installed.
 
 NEW_MYSQL_INSTALL=0
 # Make sure MySQL is installed.
 
 NEW_MYSQL_INSTALL=0
-if ! rpm -q mysql-server > /dev/null
+if ! rpm -q --whatprovides mysql-server > /dev/null
 then
        if [ -z "${ASSUME_YES}" ] ; then
                printf "mysql-server is not installed.  Would you like to install it now? (y/n): "
 then
        if [ -z "${ASSUME_YES}" ] ; then
                printf "mysql-server is not installed.  Would you like to install it now? (y/n): "
index ede214ffccb280d27f6db789d0f94ab6a6d6c139..d5ccc9f0a51783296b08c26db105b34a386cc540 100644 (file)
@@ -12,6 +12,7 @@
 prog=neutron
 exec="/usr/bin/$prog-server"
 configs=(
 prog=neutron
 exec="/usr/bin/$prog-server"
 configs=(
+    "/usr/share/$prog/$prog-dist.conf" \
     "/etc/$prog/$prog.conf" \
     "/etc/$prog/plugin.ini" \
 )
     "/etc/$prog/$prog.conf" \
     "/etc/$prog/plugin.ini" \
 )
index 9c4d74b0ddd8eca30f91e52ed0278a3c84ddc878..6140ece109d5b12d8c32999a082bcfd4f4ac31d5 100644 (file)
@@ -13,8 +13,10 @@ plugin=vpn-agent
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
 prog=$proj-$plugin
 exec="/usr/bin/$prog"
 configs=(
+    "/usr/share/$proj/$proj-dist.conf" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/vpn_agent.ini" \
     "/etc/$proj/$proj.conf" \
     "/etc/$proj/vpn_agent.ini" \
+    "/etc/$proj/l3_agent.ini" \
 )
 pidfile="/var/run/$proj/$prog.pid"
 
 )
 pidfile="/var/run/$proj/$prog.pid"
 
index 83c7a2d3d92b48141c365576e0d71e8feba3e634..94830d7db239c49b99587e39eda79d7bc9739f78 100644 (file)
@@ -5,4 +5,4 @@ stop on runlevel [S016]
 
 respawn
 
 
 respawn
 
-exec su -s /bin/sh -c "exec /usr/bin/neutron-vpn-agent --log-file /var/log/neutron/vpn-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/vpn_agent.ini" neutron
+exec su -s /bin/sh -c "exec /usr/bin/neutron-vpn-agent --log-file /var/log/neutron/vpn-agent.log --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/vpn_agent.ini --config-file /etc/neutron/l3_agent.ini" neutron
index 7bdabdc552a1743c6269b28d82dde1543775c9c6..994f5abbf5065f19456463285feb688b40728ca4 100644 (file)
@@ -1,11 +1,8 @@
-#
-# This is 2013.2 release
-#
-%global release_name havana
+%global release_name icehouse 
 
 Name:          openstack-neutron
 
 Name:          openstack-neutron
-Version:       2013.2
-Release:       11%{?dist}
+Version:       2014.1
+Release:       0.7.b3%{?dist}
 Provides:      openstack-quantum = %{version}-%{release}
 Obsoletes:     openstack-quantum < 2013.2-0.3.b3
 
 Provides:      openstack-quantum = %{version}-%{release}
 Obsoletes:     openstack-quantum < 2013.2-0.3.b3
 
@@ -15,7 +12,7 @@ Group:                Applications/System
 License:       ASL 2.0
 URL:           http://launchpad.net/neutron/
 
 License:       ASL 2.0
 URL:           http://launchpad.net/neutron/
 
-Source0:       http://launchpad.net/neutron/%{release_name}/%{version}/+download/neutron-%{version}.tar.gz
+Source0:       http://launchpad.net/neutron/%{release_name}/%{version}/+download/neutron-%{version}.b3.tar.gz
 Source1:       neutron.logrotate
 Source2:       neutron-sudoers
 Source4:       neutron-server-setup
 Source1:       neutron.logrotate
 Source2:       neutron-sudoers
 Source4:       neutron-server-setup
@@ -52,9 +49,10 @@ Source42:    neutron-metering-agent.upstart
 
 Source90:      neutron-dist.conf
 #
 
 Source90:      neutron-dist.conf
 #
-# patches_base=2013.2+1
+# patches_base=2014.1.b3+1
 #
 Patch0001: 0001-use-parallel-installed-versions-in-RHEL6.patch
 #
 Patch0001: 0001-use-parallel-installed-versions-in-RHEL6.patch
+Patch0002: 0002-Remove-dnsmasq-version-warning.patch
 
 BuildArch:     noarch
 
 
 BuildArch:     noarch
 
@@ -79,6 +77,11 @@ Requires:    openstack-utils
 Requires:      python-keystone
 Requires:      python-pbr
 
 Requires:      python-keystone
 Requires:      python-pbr
 
+# this require fixes bz#1019487 due to this patch 
+# https://review.openstack.org/#/c/61105/8/neutron/agent/linux/ovs_lib.py
+# which might need refactor to remove this dependency here
+Requires:       openstack-neutron-openvswitch
+
 Requires(post):                chkconfig
 Requires(postun):      initscripts
 Requires(preun):       chkconfig
 Requires(post):                chkconfig
 Requires(postun):      initscripts
 Requires(preun):       chkconfig
@@ -114,20 +117,24 @@ Requires: python-anyjson
 Requires:      python-babel
 Requires:      python-eventlet
 Requires:      python-greenlet
 Requires:      python-babel
 Requires:      python-eventlet
 Requires:      python-greenlet
-Requires:      python-httplib2
+Requires:      python-httplib2 >= 0.7.5
 Requires:      python-iso8601
 Requires:      python-jinja2-26
 Requires:      python-iso8601
 Requires:      python-jinja2-26
-Requires:      python-keystoneclient
+Requires:      python-keystoneclient >= 0.6.0
 Requires:      python-kombu
 Requires:      python-lxml
 Requires:      python-kombu
 Requires:      python-lxml
+Requires:      python-oslo-rootwrap
 Requires:      python-paste-deploy1.5
 Requires:      python-routes1.12
 Requires:      python-paste-deploy1.5
 Requires:      python-routes1.12
-Requires:      python-sqlalchemy0.7
-Requires:      python-webob1.2
+Requires:      python-sqlalchemy0.7 >= 0.7.8
+Requires:      python-webob1.2 >= 1.2.3
 Requires:      python-netaddr
 Requires:      python-oslo-config >= 1:1.2.0
 Requires:      python-qpid
 Requires:      python-netaddr
 Requires:      python-oslo-config >= 1:1.2.0
 Requires:      python-qpid
-Requires:      python-neutronclient
+Requires:      python-neutronclient >= 2.3.4
+Requires:      python-stevedore
+Requires:      python-six >= 1.4.1
+# requires.txt six >=1.5.2 actually
 Requires:      sudo
 
 %description -n python-neutron
 Requires:      sudo
 
 %description -n python-neutron
@@ -211,6 +218,21 @@ This package contains the neutron plugin that implements virtual
 networks using Microsoft Hyper-V.
 
 
 networks using Microsoft Hyper-V.
 
 
+%package -n openstack-neutron-ibm
+Summary:       Neutron IBM plugin
+Group:         Applications/System
+
+Requires:      openstack-neutron = %{version}-%{release}
+
+
+%description -n openstack-neutron-ibm
+Neutron provides an API to dynamically request and configure virtual
+networks.
+
+This package contains the neutron plugin that implements virtual
+networks from IBM.
+
+
 %package -n openstack-neutron-linuxbridge
 Summary:       Neutron linuxbridge plugin
 Group:         Applications/System
 %package -n openstack-neutron-linuxbridge
 Summary:       Neutron linuxbridge plugin
 Group:         Applications/System
@@ -283,6 +305,17 @@ This plugin implements Neutron v2 APIs with support for Mellanox embedded
 switch functionality as part of the VPI (Ethernet/InfiniBand) HCA.
 
 
 switch functionality as part of the VPI (Ethernet/InfiniBand) HCA.
 
 
+%package -n openstack-neutron-ofagent
+Summary:       Neutron ofagent plugin from ryu project
+Group:         Applications/system
+
+Requires:      openstack-neutron = %{version}-%{release}
+
+%description -n openstack-neutron-ofagent
+This plugin implements Neutron v2 APIs with support for the ryu ofagent
+plugin.
+
+
 %package -n openstack-neutron-nicira
 Summary:       Neutron Nicira plugin
 Group:         Applications/System
 %package -n openstack-neutron-nicira
 Summary:       Neutron Nicira plugin
 Group:         Applications/System
@@ -310,6 +343,7 @@ Obsoletes:  openstack-quantum-openvswitch < 2013.2-0.3.b3
 
 Requires:      openstack-neutron = %{version}-%{release}
 Requires:      openvswitch
 
 Requires:      openstack-neutron = %{version}-%{release}
 Requires:      openvswitch
+Requires:      python-psutil
 
 
 %description -n openstack-neutron-openvswitch
 
 
 %description -n openstack-neutron-openvswitch
@@ -392,6 +426,18 @@ This package contains the neutron plugin that implements virtual
 networks using multiple other neutron plugins.
 
 
 networks using multiple other neutron plugins.
 
 
+%package -n openstack-neutron-vmware
+Summary:       Neutron VMWare NSX support
+Group:         Applications/System
+
+Requires:      openstack-neutron = %{version}-%{release}
+Provides:      openstack-neutron-nicira = %{version}-%{release}
+Obsoletes:     openstack-neutron-nicira < 2014.1-0.5.b2
+
+%description -n openstack-neutron-vmware
+This package adds VMWare NSX support for neutron
+
+
 %package -n openstack-neutron-metering-agent
 Summary:       Neutron bandwidth metering agent
 Group:         Applications/System
 %package -n openstack-neutron-metering-agent
 Summary:       Neutron bandwidth metering agent
 Group:         Applications/System
@@ -404,6 +450,7 @@ Neutron provides an API to measure bandwidth utilization
 This package contains the neutron agent responsible for generating bandwidth
 utilization notifications.
 
 This package contains the neutron agent responsible for generating bandwidth
 utilization notifications.
 
+
 %package -n openstack-neutron-vpn-agent
 Summary:       Neutron VPNaaS agent
 Group:         Applications/System
 %package -n openstack-neutron-vpn-agent
 Summary:       Neutron VPNaaS agent
 Group:         Applications/System
@@ -421,6 +468,7 @@ IPSec.
 %setup -q -n neutron-%{version}
 
 %patch0001 -p1
 %setup -q -n neutron-%{version}
 
 %patch0001 -p1
+%patch0002 -p1
 
 find neutron -name \*.py -exec sed -i '/\/usr\/bin\/env python/{d;q}' {} +
 
 
 find neutron -name \*.py -exec sed -i '/\/usr\/bin\/env python/{d;q}' {} +
 
@@ -575,6 +623,7 @@ if rpm --quiet -q openstack-quantum; then
       sed -re 's/[0-6]:off//g
                s/([0-6]):on\s*/\1/g
                s/quantum/neutron/g
       sed -re 's/[0-6]:off//g
                s/([0-6]):on\s*/\1/g
                s/quantum/neutron/g
+               s/^([a-z0-9-]+)\s+$/chkconfig \1 off/
                s/^([a-z0-9-]+)\s+([0-6]+)/chkconfig --levels \2 \1 on/' > %{_localstatedir}/lib/rpm-state/UPGRADE_FROM_QUANTUM
 fi
 
                s/^([a-z0-9-]+)\s+([0-6]+)/chkconfig --levels \2 \1 on/' > %{_localstatedir}/lib/rpm-state/UPGRADE_FROM_QUANTUM
 fi
 
@@ -828,6 +877,7 @@ fi
 %exclude %{python_sitelib}/neutron/plugins/brocade
 %exclude %{python_sitelib}/neutron/plugins/cisco
 %exclude %{python_sitelib}/neutron/plugins/hyperv
 %exclude %{python_sitelib}/neutron/plugins/brocade
 %exclude %{python_sitelib}/neutron/plugins/cisco
 %exclude %{python_sitelib}/neutron/plugins/hyperv
+%exclude %{python_sitelib}/neutron/plugins/ibm
 %exclude %{python_sitelib}/neutron/plugins/linuxbridge
 %exclude %{python_sitelib}/neutron/plugins/metaplugin
 %exclude %{python_sitelib}/neutron/plugins/midonet
 %exclude %{python_sitelib}/neutron/plugins/linuxbridge
 %exclude %{python_sitelib}/neutron/plugins/metaplugin
 %exclude %{python_sitelib}/neutron/plugins/midonet
@@ -835,15 +885,18 @@ fi
 %exclude %{python_sitelib}/neutron/plugins/mlnx
 %exclude %{python_sitelib}/neutron/plugins/nec
 %exclude %{python_sitelib}/neutron/plugins/nicira
 %exclude %{python_sitelib}/neutron/plugins/mlnx
 %exclude %{python_sitelib}/neutron/plugins/nec
 %exclude %{python_sitelib}/neutron/plugins/nicira
+%exclude %{python_sitelib}/neutron/plugins/ofagent
 %exclude %{python_sitelib}/neutron/plugins/openvswitch
 %exclude %{python_sitelib}/neutron/plugins/plumgrid
 %exclude %{python_sitelib}/neutron/plugins/ryu
 %exclude %{python_sitelib}/neutron/plugins/openvswitch
 %exclude %{python_sitelib}/neutron/plugins/plumgrid
 %exclude %{python_sitelib}/neutron/plugins/ryu
+%exclude %{python_sitelib}/neutron/plugins/vmware
 %{python_sitelib}/neutron-%%{version}*.egg-info
 
 
 %files -n openstack-neutron-bigswitch
 %doc LICENSE
 %doc neutron/plugins/bigswitch/README
 %{python_sitelib}/neutron-%%{version}*.egg-info
 
 
 %files -n openstack-neutron-bigswitch
 %doc LICENSE
 %doc neutron/plugins/bigswitch/README
+%{_bindir}/neutron-restproxy-agent
 %{python_sitelib}/neutron/plugins/bigswitch
 %dir %{_sysconfdir}/neutron/plugins/bigswitch
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/bigswitch/*.ini
 %{python_sitelib}/neutron/plugins/bigswitch
 %dir %{_sysconfdir}/neutron/plugins/bigswitch
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/bigswitch/*.ini
@@ -876,6 +929,16 @@ fi
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/hyperv/*.ini
 
 
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/hyperv/*.ini
 
 
+%files -n openstack-neutron-ibm
+%doc LICENSE
+%{_bindir}/neutron-ibm-agent
+%{_bindir}/quantum-ibm-agent
+%doc neutron/plugins/ibm/README
+%{python_sitelib}/neutron/plugins/ibm
+%dir %{_sysconfdir}/neutron/plugins/ibm
+%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/ibm/*.ini
+
+
 %files -n openstack-neutron-linuxbridge
 %doc LICENSE
 %doc neutron/plugins/linuxbridge/README
 %files -n openstack-neutron-linuxbridge
 %doc LICENSE
 %doc neutron/plugins/linuxbridge/README
@@ -915,14 +978,10 @@ fi
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/mlnx/*.ini
 
 
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/mlnx/*.ini
 
 
-%files -n openstack-neutron-nicira
-%doc LICENSE
-%doc neutron/plugins/nicira/README
-%{_bindir}/neutron-check-nvp-config
-%{_bindir}/quantum-check-nvp-config
-%{python_sitelib}/neutron/plugins/nicira
-%dir %{_sysconfdir}/neutron/plugins/nicira
-%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/nicira/*.ini
+%files -n openstack-neutron-ofagent
+%doc neutron/plugins/ofagent/README
+%{_bindir}/neutron-ofagent-agent
+%{python_sitelib}/neutron/plugins/ofagent
 
 
 %files -n openstack-neutron-openvswitch
 
 
 %files -n openstack-neutron-openvswitch
@@ -992,6 +1051,19 @@ fi
 %{_bindir}/neutron-metering-agent
 
 
 %{_bindir}/neutron-metering-agent
 
 
+%files -n openstack-neutron-vmware
+%doc LICENSE
+%{_bindir}/neutron-check-nvp-config
+%{_bindir}/quantum-check-nvp-config
+%{_bindir}/neutron-check-nsx-config
+%{_bindir}/neutron-nsx-manage
+%{python_sitelib}/neutron/plugins/vmware
+%dir %{_sysconfdir}/neutron/plugins/vmware
+%dir %{_sysconfdir}/neutron/plugins/nicira
+%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/vmware/*.ini
+%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/nicira/*.ini
+
+
 %files -n openstack-neutron-vpn-agent
 %doc LICENSE
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/vpn_agent.ini
 %files -n openstack-neutron-vpn-agent
 %doc LICENSE
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/vpn_agent.ini
@@ -1002,6 +1074,44 @@ fi
 
 
 %changelog
 
 
 %changelog
+* Tue Mar 11 2014 Miguel Ángel Ajo <majopela@redhat.com> - 2014.1.b3-7
+- Fixed a broken dependency/typo lxaml -> lxml
+- Enforcing python-six >= 1.4.1 at least
+
+* Fri Mar 07 2014 Miguel Ángel Ajo <majopela@redhat.com> - 2014.1.b3-6
+- Update to icehouse milestone 3
+- Add neutron-dhcp-agent dependency bz#1019487
+- Remove nicira plugin, renamed vmware-nsx to vmware bz#1058995
+- Add openstack-neutron-ibm plugin
+- Add openstack-neutron-ofagent plugin from ryu project
+
+* Tue Feb 04 2014 Pádraig Brady <pbrady@redhat.com> - 2014.1.b2-5
+- Fix missing dependency on python-stevedore
+
+* Tue Feb 04 2014 Pádraig Brady <pbrady@redhat.com> - 2014.1.b2-4
+- Fix exception on systems with dnsmasq < 2.59
+
+* Mon Jan 27 2014 Terry Wilson <twilson@redhat.com> - 2014.1.b2-3
+- Update to icehouse milestone 2
+
+* Tue Jan 07 2014 Terry Wilson <twilson@redhat.com> - 2014.1.b1-2
+- Add python-psutil requirement for openvswitch agent, bz#1049235
+
+* Mon Dec 23 2013 Pádraig Brady <pbrady@redhat.com> - 2014.1.b1-1
+- Update to icehouse milestone 1
+
+* Wed Dec 18 2013 Pádraig Brady <pbrady@redhat.com> - 2013.2.1-1
+- Update to Havana stable release 2013.2.1
+
+* Fri Dec 13 2013 Terry Wilson <twilson@redhat.com> - 2013.2-13
+- QPID fixes from oslo-incubator, bz#1038711, bz#1038717
+- Remove dnsmasq version warning, bz#997961
+- Ensure that disabled services are properly handled on upgrade, bz#1040704
+
+* Mon Dec 09 2013 Terry Wilson <twilson@redhat.com> - 2013.2-12
+- Add vpnaas/fwaas configs to init scripts, bz#1032450
+- Pass neutron rootwrap.conf in sudoers.d/neutron, bz#984097
+
 * Wed Dec 04 2013 Terry Wilson <twilson@redhat.com> - 2013.2-11
 - Add missing debug and vpnaas rootwrap filters, bz#1034207
 
 * Wed Dec 04 2013 Terry Wilson <twilson@redhat.com> - 2013.2-11
 - Add missing debug and vpnaas rootwrap filters, bz#1034207