Update specs to v. 2014.1.rc
authorDmitry Burmistrov <dburmistrov@mirantis.com>
Thu, 3 Apr 2014 15:09:44 +0000 (19:09 +0400)
committerDmitry Burmistrov <dburmistrov@mirantis.com>
Thu, 3 Apr 2014 15:10:07 +0000 (19:10 +0400)
35 files changed:
debian/changelog
debian/control
debian/neutron-l3-agent.install
debian/neutron-l3-agent.upstart
debian/neutron-metering-agent.install [moved from debian/neutron-plugin-metering-agent.install with 100% similarity]
debian/neutron-metering-agent.upstart [moved from debian/neutron-plugin-metering-agent.upstart with 92% similarity]
debian/neutron-plugin-metering-agent.postinst [new file with mode: 0644]
debian/neutron-plugin-metering-agent.postrm [new file with mode: 0644]
debian/neutron-plugin-metering-agent.preinst [new file with mode: 0644]
debian/neutron-plugin-mlnx-agent.install
debian/neutron-plugin-mlnx.install [new file with mode: 0644]
debian/neutron-plugin-oneconvergence-agent.install [new file with mode: 0644]
debian/neutron-plugin-oneconvergence-agent.logrotate [new file with mode: 0644]
debian/neutron-plugin-oneconvergence.install [new file with mode: 0644]
debian/neutron-plugin-onecovergence-agent.upstart [new file with mode: 0644]
debian/neutron-plugin-vmware.install
debian/neutron-plugin-vpn-agent.postinst [new file with mode: 0644]
debian/neutron-plugin-vpn-agent.postrm [new file with mode: 0644]
debian/neutron-plugin-vpn-agent.preinst [new file with mode: 0644]
debian/neutron-vpn-agent.install [moved from debian/neutron-plugin-vpn-agent.install with 100% similarity]
debian/neutron-vpn-agent.upstart [moved from debian/neutron-plugin-vpn-agent.upstart with 77% similarity]
debian/patches/disable-failing-metaplugin-tests.patch
debian/patches/disable-udev-tests.patch
debian/patches/fix-quantum-configuration.patch
debian/patches/skip-ipv6-tests.patch
debian/patches/skip-lb-test.patch
debian/patches/use-concurrency.patch
debian/rules
rpm/SOURCES/0001-use-parallel-installed-versions-in-RHEL6.patch
rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch
rpm/SOURCES/neutron-dhcp-setup [changed mode: 0644->0755]
rpm/SOURCES/neutron-l3-setup [changed mode: 0644->0755]
rpm/SOURCES/neutron-node-setup [changed mode: 0644->0755]
rpm/SOURCES/neutron-server-setup [changed mode: 0644->0755]
rpm/SPECS/openstack-neutron.spec

index 35b5d3f86ccb254078e7473bd675ab0cc5b1483a..f4a06cb729ab9496189ce67c74bf35db3d02a184 100644 (file)
@@ -1,8 +1,31 @@
-neutron (1:2014.1~b3-0ubuntu1~cloud0) precise-icehouse; urgency=low
+neutron (1:2014.1~rc1-0ubuntu1~cloud0) precise-icehouse; urgency=medium
 
-  * New upstream release for the Ubuntu Cloud Archive.
+  * New update for the Ubuntu Cloud Archive.
 
- -- Openstack Ubuntu Testing Bot <openstack-testing-bot@ubuntu.com>  Tue, 11 Mar 2014 01:46:17 -0400
+ -- Openstack Ubuntu Testing Bot <openstack-testing-bot@ubuntu.com>  Wed, 02 Apr 2014 00:27:41 -0400
+
+neutron (1:2014.1~rc1-0ubuntu1) trusty; urgency=medium
+
+  [ Chuck Short ]
+  * debian/rules: Run testr init before tests.
+  * debian/patches/disable-udev-tests.patch: Refresh.
+  * d/control,neutron-plugin-oneconvergence*: Add One Convergence plugin
+    and agent (LP: #1293632).
+
+  [ James Page ]
+  * New upstream release candidate (LP: #1288696, #1291535).
+  * d/control,neutron-mlnx-plugin{-agent}.install: Split out Mellanox
+    plugin configuration from agent package (LP: #1255420).
+  * d/control,neutron-{plugin-}{vpn|metering}-agent.*: Drop -plugin from
+    metering and vpn agents (they are not plugins) and deal with associated
+    change in name of upstart configurations.
+  * d/neutron-l3-agent.{install,upstart}: Install fwaas_driver.ini with
+    l3-agent and add to config-file path in upstart configuration
+    (LP: #1298676).
+  * d/neutron-vpn-agent.upstart,control: Include l3_agent.ini on upstart
+    config-file path, add dependency on neutron-l3-agent (LP: #1298675).
+
+ -- James Page <james.page@ubuntu.com>  Tue, 01 Apr 2014 16:22:54 +0100
 
 neutron (1:2014.1~b3-0ubuntu1) trusty; urgency=medium
 
index fd783a9aecf12bf12df35963d67d6dd73138a5a3..ce201112e9e1c5fb9c762c1eeee63e1123cbef5f 100644 (file)
@@ -631,7 +631,7 @@ Description: Neutron is a virtual network service for Openstack - Midonet plugin
  .
  This package provides the Midonet plugin.
 
-Package: neutron-plugin-mlnx-agent
+Package: neutron-plugin-mlnx
 Architecture: all
 Provides: neutron-plugin
 Depends:
@@ -639,7 +639,9 @@ Depends:
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
-Description: Neutron is a virtual network service for Openstack - mlnx plugin agent
+Breaks: neutron-plugin-mlnx-agent ( << 1:2014.1~b3-0ubuntu2~ )
+Replaces: neutron-plugin-mlnx-agent ( << 1:2014.1~b3-0ubuntu2~ )
+Description: Neutron is a virtual network service for Openstack - Mellanox 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
@@ -649,16 +651,39 @@ Description: Neutron is a virtual network service for Openstack - mlnx plugin ag
  advanced network capabilities (e.g., QoS, ACLs, network monitoring,
  etc.)
  .
- This package provides the mlnx plugin agent.
+ This package provides the Mellanox plugin.
 
-Package: neutron-plugin-vpn-agent
+Package: neutron-plugin-mlnx-agent
 Architecture: all
 Provides: neutron-plugin
 Depends:
  neutron-common (= ${source:Version}),
+ neutron-plugin-mlnx,
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
+Description: Neutron is a virtual network service for Openstack - Mellanox 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 Mellanox plugin agent.
+
+Package: neutron-vpn-agent
+Architecture: all
+Depends:
+ neutron-common (= ${source:Version}),
+ neutron-l3-agent (= ${source:Version}),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Breaks: neutron-plugin-vpn-agent ( << 1:2014.1~b3-0ubuntu2~ )
+Replaces: neutron-plugin-vpn-agent ( << 1:2014.1~b3-0ubuntu2~ )
 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
@@ -671,13 +696,21 @@ Description: Neutron is a virtual network service for Openstack - VPN agent
  .
  This package provides the VPN agent.
 
-Package: neutron-plugin-metering-agent
+Package: neutron-plugin-vpn-agent
+Architecture: all
+Depends: neutron-vpn-agent, ${misc:Depends}
+Description: transitional dummy package
+ This is a transitional dummy package. It can safely be removed.
+
+Package: neutron-metering-agent
 Architecture: all
 Depends:
  neutron-common (= ${source:Version}),
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends}
+Breaks: neutron-plugin-metering-agent ( << 1:2014.1~b3-0ubuntu2~ )
+Replaces: neutron-plugin-metering-agent ( << 1:2014.1~b3-0ubuntu2~ )
 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
@@ -690,6 +723,12 @@ Description: Neutron is a virtual network service for Openstack - metering agent
  .
  This package provides the metering agent.
 
+Package: neutron-plugin-metering-agent
+Architecture: all
+Depends: neutron-metering-agent, ${misc:Depends}
+Description: transitional dummy package
+ This is a transitional dummy package. It can safely be removed.
+
 Package: neutron-plugin-openflow-agent
 Architecture: all
 Depends:
@@ -748,3 +787,42 @@ Description: Neutron is a virtual network service for Openstack - IBM agent
  .
  This package provides the IBM agent.
 
+Package: neutron-plugin-oneconvergence
+Architecture: all
+Provides: neutron-plugin
+Depends:
+ neutron-common (= ${source:Version}),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Description: Neutron is a virtual network service for Openstack - One Convergence 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 One Convergence plugin.
+
+Package: neutron-plugin-oneconvergence-agent
+Architecture: all
+Depends:
+ neutron-plugin-oneconvergence (= ${source:Version}),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Description: Neutron is a virtual network service for Openstack - One Convergence 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 One Convergence agent.
+
index 988b8812f3ff2c1c66355ff83de6dc83ad1de607..0e8f7240783b0b7ff40ad606d58c5099ab2cbb26 100644 (file)
@@ -1,4 +1,5 @@
 debian/cron.d/neutron-l3-agent-netns-cleanup etc/cron.d
 etc/l3_agent.ini etc/neutron
+etc/fwaas_driver.ini etc/neutron
 etc/neutron/rootwrap.d/l3.filters etc/neutron/rootwrap.d
 usr/bin/neutron-l3-agent usr/bin
index baaa57609901a5a03961317fc22a2d8570066532..0b69d138543fb4f16315c48901379084464784fd 100644 (file)
@@ -19,4 +19,6 @@ pre-start script
   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
+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 \
+  --config-file=/etc/neutron/fwaas_driver.ini --log-file=/var/log/neutron/l3-agent.log
similarity index 92%
rename from debian/neutron-plugin-metering-agent.upstart
rename to debian/neutron-metering-agent.upstart
index 1f4ec09afa46ca6fdc16e2ea2b28255b1676f3c5..85e02702b5c70211ebafdaad9a47d9db06e17af3 100644 (file)
@@ -1,5 +1,5 @@
 # vim:set ft=upstart ts=2 et:
-description "Neutron metering agent"
+description "Neutron Metering Agent"
 author "Chuck Short <zulcss@ubuntu.com>"
 
 start on runlevel [2345]
diff --git a/debian/neutron-plugin-metering-agent.postinst b/debian/neutron-plugin-metering-agent.postinst
new file mode 100644 (file)
index 0000000..860319c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
+    dpkg-maintscript-helper rm_conffile /etc/init/neutron-plugin-metering-agent.conf \
+        1:2014.1~b3-0ubuntu2~ neutron-plugin-metering-agent -- "$@"
+fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/neutron-plugin-metering-agent.postrm b/debian/neutron-plugin-metering-agent.postrm
new file mode 100644 (file)
index 0000000..860319c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
+    dpkg-maintscript-helper rm_conffile /etc/init/neutron-plugin-metering-agent.conf \
+        1:2014.1~b3-0ubuntu2~ neutron-plugin-metering-agent -- "$@"
+fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/neutron-plugin-metering-agent.preinst b/debian/neutron-plugin-metering-agent.preinst
new file mode 100644 (file)
index 0000000..860319c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
+    dpkg-maintscript-helper rm_conffile /etc/init/neutron-plugin-metering-agent.conf \
+        1:2014.1~b3-0ubuntu2~ neutron-plugin-metering-agent -- "$@"
+fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
index 74f64ef01e956edbb8daea170a6e84129e215aae..741272c4ee7ef58625cb25c583d134c06880ba1c 100644 (file)
@@ -1,2 +1 @@
-etc/neutron/plugins/mlnx/* etc/neutron/plugins/mlnx
 usr/bin/neutron-mlnx-agent usr/bin
diff --git a/debian/neutron-plugin-mlnx.install b/debian/neutron-plugin-mlnx.install
new file mode 100644 (file)
index 0000000..e78c450
--- /dev/null
@@ -0,0 +1 @@
+etc/neutron/plugins/mlnx/* etc/neutron/plugins/mlnx
diff --git a/debian/neutron-plugin-oneconvergence-agent.install b/debian/neutron-plugin-oneconvergence-agent.install
new file mode 100644 (file)
index 0000000..ed96dec
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/neutron-nvsd-agent /usr/bin
diff --git a/debian/neutron-plugin-oneconvergence-agent.logrotate b/debian/neutron-plugin-oneconvergence-agent.logrotate
new file mode 100644 (file)
index 0000000..fd255b9
--- /dev/null
@@ -0,0 +1,7 @@
+/var/log/neutron/nvsd-agent.log {
+    daily
+    missingok
+    compress
+    delaycompress
+    notifempty
+}
diff --git a/debian/neutron-plugin-oneconvergence.install b/debian/neutron-plugin-oneconvergence.install
new file mode 100644 (file)
index 0000000..b70430f
--- /dev/null
@@ -0,0 +1 @@
+etc/neutron/plugins/oneconvergence/* etc/neutron/plugins/oneconvergence
diff --git a/debian/neutron-plugin-onecovergence-agent.upstart b/debian/neutron-plugin-onecovergence-agent.upstart
new file mode 100644 (file)
index 0000000..f6ffc70
--- /dev/null
@@ -0,0 +1,18 @@
+# vim:set ft=upstart ts=2 et:
+description "One Convergence 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-nvsd-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/oneconvergence/nvsdplugin.ini --log-file=/var/log/neutron/nvsd-agent.log
+
index cc1abc315f717c3bf969ff52c9c32d3d15b611f5..cecb1423278a1ea8dc6a7586893a0f1ad447b7bb 100644 (file)
@@ -1,4 +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-check-nvp-config usr/bin
 usr/bin/neutron-nsx-manage usr/bin
diff --git a/debian/neutron-plugin-vpn-agent.postinst b/debian/neutron-plugin-vpn-agent.postinst
new file mode 100644 (file)
index 0000000..5bbe408
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
+    dpkg-maintscript-helper rm_conffile /etc/init/neutron-plugin-vpn-agent.conf \
+        1:2014.1~b3-0ubuntu2~ neutron-plugin-vpn-agent -- "$@"
+fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/neutron-plugin-vpn-agent.postrm b/debian/neutron-plugin-vpn-agent.postrm
new file mode 100644 (file)
index 0000000..5bbe408
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
+    dpkg-maintscript-helper rm_conffile /etc/init/neutron-plugin-vpn-agent.conf \
+        1:2014.1~b3-0ubuntu2~ neutron-plugin-vpn-agent -- "$@"
+fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/neutron-plugin-vpn-agent.preinst b/debian/neutron-plugin-vpn-agent.preinst
new file mode 100644 (file)
index 0000000..5bbe408
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
+    dpkg-maintscript-helper rm_conffile /etc/init/neutron-plugin-vpn-agent.conf \
+        1:2014.1~b3-0ubuntu2~ neutron-plugin-vpn-agent -- "$@"
+fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
similarity index 77%
rename from debian/neutron-plugin-vpn-agent.upstart
rename to debian/neutron-vpn-agent.upstart
index 455801e427f9c6eeff8eed391a65c7d651dca889..901875fee3659df506e89504ecc16646e59d7a0e 100644 (file)
@@ -1,5 +1,5 @@
 # vim:set ft=upstart ts=2 et:
-description "Neutron vpn Plugin Agent"
+description "Neutron VPN Agent"
 author "Chuck Short <zulcss@ubuntu.com>"
 
 start on runlevel [2345]
@@ -16,4 +16,4 @@ end script
 
 exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-vpn-agent -- \
        --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/vpn_agent.ini \
-       --log-file=/var/log/neutron/vpn_agent.log
+       --config-file=/etc/neutron/l3_agent.ini --log-file=/var/log/neutron/vpn_agent.log
index 17b438e91af9b5e1de2405f974384afb51a8806f..0c9dacec030d021a1abd876eefca6ebb4b06711d 100644 (file)
@@ -7,7 +7,7 @@ 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
+@@ -45,7 +45,14 @@ class TestMetaBasicGet(test_plugin.TestB
  
  class TestMetaV2HTTPResponse(test_plugin.TestV2HTTPResponse,
                               MetaPluginV2DBTestCase):
@@ -23,7 +23,7 @@ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/neutron/+bug/1262174
  
  
  class TestMetaPortsV2(test_plugin.TestPortsV2,
-@@ -53,7 +60,30 @@ class TestMetaPortsV2(test_plugin.TestPo
+@@ -55,7 +62,30 @@ class TestMetaPortsV2(test_plugin.TestPo
  
  class TestMetaNetworksV2(test_plugin.TestNetworksV2,
                           MetaPluginV2DBTestCase):
@@ -57,7 +57,7 @@ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/neutron/+bug/1262174
  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
+@@ -167,6 +167,7 @@ class MetaNeutronPluginV2Test(base.BaseT
          return data
  
      def test_create_delete_network(self):
index 41cecc32c83608bd249655e06f6e1472169ee940..d5b3bc12953cc36ddbadfbd62c8fef8819e3b24a 100644 (file)
@@ -3,34 +3,25 @@ Description: Disable udev tests
  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):
+--- a/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
++++ b/neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py
+@@ -47,6 +47,7 @@ class FakeIpDevice(object):
  class TestLinuxBridge(base.BaseTestCase):
  
      def setUp(self):
 +        self.skipTest("udev not consistently available in Ubuntu buildds")
          super(TestLinuxBridge, self).setUp()
-         self.addCleanup(cfg.CONF.reset)
          interface_mappings = {'physnet1': 'eth1'}
-@@ -109,6 +110,7 @@ class TestLinuxBridgeAgent(base.BaseTest
-         self.get_mac.return_value = '00:00:00:00:00:01'
+         root_helper = cfg.CONF.AGENT.root_helper
+@@ -95,6 +96,7 @@ class TestLinuxBridgeAgent(base.BaseTest
+         'cc:dd:ee:ff:ab:cd brd ff:ff:ff:ff:ff:ff']
  
-     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):
+     def setUp(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
+         super(TestLinuxBridgeAgent, self).setUp()
+         # disable setting up periodic state reporting
+         cfg.CONF.set_override('report_interval', 0, 'AGENT')
+@@ -163,6 +165,7 @@ class TestLinuxBridgeAgent(base.BaseTest
  
  class TestLinuxBridgeManager(base.BaseTestCase):
      def setUp(self):
@@ -38,971 +29,3 @@ diff -Naurp neutron-2014.1.b2.orig/neutron/tests/unit/linuxbridge/test_lb_neutro
          super(TestLinuxBridgeManager, self).setUp()
          self.interface_mappings = {'physnet1': 'eth1'}
          self.root_helper = cfg.CONF.AGENT.root_helper
-@@ -667,6 +671,7 @@ class TestLinuxBridgeManager(base.BaseTe
- class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
-     def setUp(self):
-+        self.skipTest("udev not  consistently available in Ubuntu buildds")
-         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 4d7ef439a677a76d066bbacf0a4bd09cc4338dfa..259686ea84e6405a0ac5197e9af701f6c5902843 100644 (file)
@@ -3,8 +3,6 @@ Description: Fixes to neutron configuration for distribution.
 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 @@
@@ -25,7 +23,7 @@ index 1e2226f..a5fe086 100644
  # Example: core_plugin = ml2
  
  # (ListOpt) List of service plugin entrypoints to be loaded from the
-@@ -320,7 +320,7 @@ notification_driver = neutron.openstack.common.notifier.rpc_notifier
+@@ -380,7 +380,7 @@ notification_driver = neutron.openstack.
  # 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
@@ -34,7 +32,7 @@ index 1e2226f..a5fe086 100644
  
  # =========== items for agent management extension =============
  # seconds between nodes reporting state to server; should be less than
-@@ -344,7 +344,7 @@ signing_dir = $state_path/keystone-signing
+@@ -404,7 +404,7 @@ signing_dir = $state_path/keystone-signi
  # 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.)
@@ -43,6 +41,3 @@ index 1e2226f..a5fe086 100644
  
  # The SQLAlchemy connection string used to connect to the slave database
  # slave_connection =
--- 
-1.8.5.2
-
index 92cbc680d31cc2597ba30cb43562acba42d70f98..a3ad189f6ad9be88129caab19166984075acb848 100644 (file)
@@ -1,9 +1,8 @@
 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
+--- a/neutron/tests/unit/test_wsgi.py
++++ b/neutron/tests/unit/test_wsgi.py
 @@ -64,6 +64,7 @@ class TestWSGIServer(base.BaseTestCase):
          launcher.wait.assert_called_once_with()
  
@@ -12,7 +11,7 @@ diff -Naurp neutron-2014.1.b2.orig/neutron/tests/unit/test_wsgi.py neutron-2014.
          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
+@@ -1096,6 +1097,7 @@ class TestWSGIServerWithSSL(base.BaseTes
          server.stop()
  
      def test_app_using_ipv6_and_ssl(self):
index f99e74166bb922f18727432297ded5ef897e5c68..6077494b890f55352e6e78383adbededbc3a556f 100644 (file)
@@ -1,9 +1,8 @@
 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
+--- a/neutron/tests/unit/test_provider_configuration.py
++++ b/neutron/tests/unit/test_provider_configuration.py
 @@ -79,6 +79,7 @@ class ParseServiceProviderConfigurationT
                                  'default': True}])
  
index 203110a8b1429598d2b3d031ec95bf30f7152e1b..ce907e8bceb5f2f9b842a10c8237451bbba53b09 100644 (file)
@@ -1,8 +1,6 @@
 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 {
@@ -14,6 +12,3 @@ index 4d838e8..6739fee 100755
    echo "Running \`${wrapper} $TESTRTESTS\`"
    bash -c "${wrapper} $TESTRTESTS | ${wrapper} subunit2pyunit"
    RESULT=$?
--- 
-1.9.0
-
index 918ceded740bef0777f1a08cf27702003dac7d24..0822b196a9897867f4870cbf979fae612a6aabd5 100755 (executable)
@@ -25,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
-       ./run_tests.sh -N -P
+       testr init && ./run_tests.sh -N -P
        # Patch configuration file after testing
        patch -p1 < debian/patches/fix-quantum-configuration.patch
 endif
index 35b9218292e27c85294e41b652646ca39297ca71..f52a583377f346a63bb3671326c2c0375fab1f56 100644 (file)
@@ -1,4 +1,4 @@
-From 89cac7fea4c4c5ef952227209c815cb166033050 Mon Sep 17 00:00:00 2001
+From 4cc2b00a93126c5da672514fad7e356e79f2b8e6 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
@@ -7,8 +7,8 @@ of webob sqlalchemy python-routes paste-deploy python-jinja2-26
 
 Change-Id: I290f56eae61c87893639a9e5d29f7fff760452cf
 ---
- neutron/__init__.py |   31 +++++++++++++++++++++++++++++++
- 1 files changed, 31 insertions(+), 0 deletions(-)
+ neutron/__init__.py | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
 
 diff --git a/neutron/__init__.py b/neutron/__init__.py
 index b2c81bd..fef4d32 100644
index 406daca6d6522f100aad9be3f9c7e4a0a6aa0a40..083a84d59a896da35570cc8320f221680a5a269d 100644 (file)
@@ -1,17 +1,17 @@
-From 85a3b3a1ae3886db3b803db317974e33beaef6a2 Mon Sep 17 00:00:00 2001
+From 268532256d701f2f9d7e10b01a65685e118800dc 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(-)
+ neutron/agent/linux/dhcp.py | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
 
 diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py
-index 137f7a9..7406597 100644
+index e650c00..fdac998 100644
 --- a/neutron/agent/linux/dhcp.py
 +++ b/neutron/agent/linux/dhcp.py
-@@ -291,10 +291,13 @@ class Dnsmasq(DhcpLocalProcess):
+@@ -286,10 +286,13 @@ class Dnsmasq(DhcpLocalProcess):
              ver = re.findall("\d+.\d+", out)[0]
              is_valid_version = float(ver) >= cls.MINIMUM_VERSION
              if not is_valid_version:
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 994f5abbf5065f19456463285feb688b40728ca4..23fff013847863de4bfa36866bafd9c440be195d 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:          openstack-neutron
 Version:       2014.1
-Release:       0.7.b3%{?dist}
+Release:       0.9.rc1%{?dist}
 Provides:      openstack-quantum = %{version}-%{release}
 Obsoletes:     openstack-quantum < 2013.2-0.3.b3
 
@@ -12,7 +12,8 @@ Group:                Applications/System
 License:       ASL 2.0
 URL:           http://launchpad.net/neutron/
 
-Source0:       http://launchpad.net/neutron/%{release_name}/%{version}/+download/neutron-%{version}.b3.tar.gz
+#Source0:      http://launchpad.net/neutron/%{release_name}/%{version}/+download/neutron-%{version}.rc1.tar.gz
+Source0:       http://launchpad.net/neutron/%{release_name}/%{release_name}-rc1/+download/neutron-%{version}.rc1.tar.gz
 Source1:       neutron.logrotate
 Source2:       neutron-sudoers
 Source4:       neutron-server-setup
@@ -49,7 +50,7 @@ Source42:     neutron-metering-agent.upstart
 
 Source90:      neutron-dist.conf
 #
-# patches_base=2014.1.b3+1
+# patches_base=2014.1.rc1+1
 #
 Patch0001: 0001-use-parallel-installed-versions-in-RHEL6.patch
 Patch0002: 0002-Remove-dnsmasq-version-warning.patch
@@ -334,6 +335,21 @@ This package contains the neutron plugin that implements virtual
 networks using Nicira NVP.
 
 
+%package -n openstack-neutron-oneconvergence-nvsd
+Summary:       Neutron One Convergence NVSD plugin
+Group:         Applications/System
+
+Requires:      openstack-neutron = %{version}-%{release}
+
+
+%description -n openstack-neutron-oneconvergence-nvsd
+Neutron provides an API to dynamnically request and configure virtual
+networks.
+
+This package contains the neutron plugin that implements virtual
+networks using One Convergence NVSD
+
+
 %package -n openstack-neutron-openvswitch
 Summary:       Neutron openvswitch plugin
 Group:         Applications/System
@@ -343,7 +359,6 @@ Obsoletes:  openstack-quantum-openvswitch < 2013.2-0.3.b3
 
 Requires:      openstack-neutron = %{version}-%{release}
 Requires:      openvswitch
-Requires:      python-psutil
 
 
 %description -n openstack-neutron-openvswitch
@@ -886,6 +901,7 @@ fi
 %exclude %{python_sitelib}/neutron/plugins/nec
 %exclude %{python_sitelib}/neutron/plugins/nicira
 %exclude %{python_sitelib}/neutron/plugins/ofagent
+%exclude %{python_sitelib}/neutron/plugins/oneconvergence
 %exclude %{python_sitelib}/neutron/plugins/openvswitch
 %exclude %{python_sitelib}/neutron/plugins/plumgrid
 %exclude %{python_sitelib}/neutron/plugins/ryu
@@ -900,6 +916,7 @@ fi
 %{python_sitelib}/neutron/plugins/bigswitch
 %dir %{_sysconfdir}/neutron/plugins/bigswitch
 %config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/bigswitch/*.ini
+%doc %{_sysconfdir}/neutron/plugins/bigswitch/README
 
 
 %files -n openstack-neutron-brocade
@@ -984,6 +1001,16 @@ fi
 %{python_sitelib}/neutron/plugins/ofagent
 
 
+%files -n openstack-neutron-oneconvergence-nvsd
+%doc LICENSE
+%doc neutron/plugins/oneconvergence/README
+%dir %{_sysconfdir}/neutron/plugins/oneconvergence
+%config(noreplace) %attr(0640, root, neutron) %{_sysconfdir}/neutron/plugins/oneconvergence/nvsdplugin.ini
+%{_bindir}/neutron-nvsd-agent
+%{_bindir}/quantum-nvsd-agent
+%{python_sitelib}/neutron/plugins/oneconvergence
+
+
 %files -n openstack-neutron-openvswitch
 %doc LICENSE
 %doc neutron/plugins/openvswitch/README
@@ -1074,6 +1101,13 @@ fi
 
 
 %changelog
+* Wed Apr 02 2014 Terry Wilson <twilson@redhat.com> 2014.1-0.9.rc1
+- Update to upstream 2014.1.rc1
+- Remove python-psutil requires
+
+* Wed Mar 19 2014 Miguel Ángel Ajo <majopela@redhat.com> - 2014.1.b3-8
+- Create agents table when ML2 core_plugin is used
 * 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