From 4cca60531b51db68e6023ea6daa60cc33d277826 Mon Sep 17 00:00:00 2001 From: Dmitry Burmistrov Date: Thu, 3 Apr 2014 19:09:44 +0400 Subject: [PATCH] Update specs to v. 2014.1.rc --- debian/changelog | 29 +- debian/control | 88 +- debian/neutron-l3-agent.install | 1 + debian/neutron-l3-agent.upstart | 4 +- ...install => neutron-metering-agent.install} | 0 ...upstart => neutron-metering-agent.upstart} | 2 +- debian/neutron-plugin-metering-agent.postinst | 15 + debian/neutron-plugin-metering-agent.postrm | 15 + debian/neutron-plugin-metering-agent.preinst | 15 + debian/neutron-plugin-mlnx-agent.install | 1 - debian/neutron-plugin-mlnx.install | 1 + ...eutron-plugin-oneconvergence-agent.install | 1 + ...tron-plugin-oneconvergence-agent.logrotate | 7 + debian/neutron-plugin-oneconvergence.install | 1 + ...neutron-plugin-onecovergence-agent.upstart | 18 + debian/neutron-plugin-vmware.install | 2 +- debian/neutron-plugin-vpn-agent.postinst | 15 + debian/neutron-plugin-vpn-agent.postrm | 15 + debian/neutron-plugin-vpn-agent.preinst | 15 + ...gent.install => neutron-vpn-agent.install} | 0 ...gent.upstart => neutron-vpn-agent.upstart} | 4 +- .../disable-failing-metaplugin-tests.patch | 6 +- debian/patches/disable-udev-tests.patch | 999 +----------------- .../patches/fix-quantum-configuration.patch | 9 +- debian/patches/skip-ipv6-tests.patch | 7 +- debian/patches/skip-lb-test.patch | 5 +- debian/patches/use-concurrency.patch | 5 - debian/rules | 2 +- ...parallel-installed-versions-in-RHEL6.patch | 6 +- .../0002-Remove-dnsmasq-version-warning.patch | 10 +- rpm/SOURCES/neutron-dhcp-setup | 0 rpm/SOURCES/neutron-l3-setup | 0 rpm/SOURCES/neutron-node-setup | 0 rpm/SOURCES/neutron-server-setup | 0 rpm/SPECS/openstack-neutron.spec | 42 +- 35 files changed, 303 insertions(+), 1037 deletions(-) rename debian/{neutron-plugin-metering-agent.install => neutron-metering-agent.install} (100%) rename debian/{neutron-plugin-metering-agent.upstart => neutron-metering-agent.upstart} (92%) create mode 100644 debian/neutron-plugin-metering-agent.postinst create mode 100644 debian/neutron-plugin-metering-agent.postrm create mode 100644 debian/neutron-plugin-metering-agent.preinst create mode 100644 debian/neutron-plugin-mlnx.install create mode 100644 debian/neutron-plugin-oneconvergence-agent.install create mode 100644 debian/neutron-plugin-oneconvergence-agent.logrotate create mode 100644 debian/neutron-plugin-oneconvergence.install create mode 100644 debian/neutron-plugin-onecovergence-agent.upstart create mode 100644 debian/neutron-plugin-vpn-agent.postinst create mode 100644 debian/neutron-plugin-vpn-agent.postrm create mode 100644 debian/neutron-plugin-vpn-agent.preinst rename debian/{neutron-plugin-vpn-agent.install => neutron-vpn-agent.install} (100%) rename debian/{neutron-plugin-vpn-agent.upstart => neutron-vpn-agent.upstart} (77%) mode change 100644 => 100755 rpm/SOURCES/neutron-dhcp-setup mode change 100644 => 100755 rpm/SOURCES/neutron-l3-setup mode change 100644 => 100755 rpm/SOURCES/neutron-node-setup mode change 100644 => 100755 rpm/SOURCES/neutron-server-setup diff --git a/debian/changelog b/debian/changelog index 35b5d3f86..f4a06cb72 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Tue, 11 Mar 2014 01:46:17 -0400 + -- Openstack Ubuntu Testing Bot 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 Tue, 01 Apr 2014 16:22:54 +0100 neutron (1:2014.1~b3-0ubuntu1) trusty; urgency=medium diff --git a/debian/control b/debian/control index fd783a9ae..ce201112e 100644 --- a/debian/control +++ b/debian/control @@ -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. + diff --git a/debian/neutron-l3-agent.install b/debian/neutron-l3-agent.install index 988b8812f..0e8f72407 100644 --- a/debian/neutron-l3-agent.install +++ b/debian/neutron-l3-agent.install @@ -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 diff --git a/debian/neutron-l3-agent.upstart b/debian/neutron-l3-agent.upstart index baaa57609..0b69d1385 100644 --- a/debian/neutron-l3-agent.upstart +++ b/debian/neutron-l3-agent.upstart @@ -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 diff --git a/debian/neutron-plugin-metering-agent.install b/debian/neutron-metering-agent.install similarity index 100% rename from debian/neutron-plugin-metering-agent.install rename to debian/neutron-metering-agent.install diff --git a/debian/neutron-plugin-metering-agent.upstart b/debian/neutron-metering-agent.upstart similarity index 92% rename from debian/neutron-plugin-metering-agent.upstart rename to debian/neutron-metering-agent.upstart index 1f4ec09af..85e02702b 100644 --- a/debian/neutron-plugin-metering-agent.upstart +++ b/debian/neutron-metering-agent.upstart @@ -1,5 +1,5 @@ # vim:set ft=upstart ts=2 et: -description "Neutron metering agent" +description "Neutron Metering Agent" author "Chuck Short " start on runlevel [2345] diff --git a/debian/neutron-plugin-metering-agent.postinst b/debian/neutron-plugin-metering-agent.postinst new file mode 100644 index 000000000..860319cd1 --- /dev/null +++ b/debian/neutron-plugin-metering-agent.postinst @@ -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 index 000000000..860319cd1 --- /dev/null +++ b/debian/neutron-plugin-metering-agent.postrm @@ -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 index 000000000..860319cd1 --- /dev/null +++ b/debian/neutron-plugin-metering-agent.preinst @@ -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-mlnx-agent.install b/debian/neutron-plugin-mlnx-agent.install index 74f64ef01..741272c4e 100644 --- a/debian/neutron-plugin-mlnx-agent.install +++ b/debian/neutron-plugin-mlnx-agent.install @@ -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 index 000000000..e78c4503c --- /dev/null +++ b/debian/neutron-plugin-mlnx.install @@ -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 index 000000000..ed96dec3e --- /dev/null +++ b/debian/neutron-plugin-oneconvergence-agent.install @@ -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 index 000000000..fd255b931 --- /dev/null +++ b/debian/neutron-plugin-oneconvergence-agent.logrotate @@ -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 index 000000000..b70430f1d --- /dev/null +++ b/debian/neutron-plugin-oneconvergence.install @@ -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 index 000000000..f6ffc700f --- /dev/null +++ b/debian/neutron-plugin-onecovergence-agent.upstart @@ -0,0 +1,18 @@ +# vim:set ft=upstart ts=2 et: +description "One Convergence Plugin Agent" +author "Chuck Short " + +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 + diff --git a/debian/neutron-plugin-vmware.install b/debian/neutron-plugin-vmware.install index cc1abc315..cecb14232 100644 --- a/debian/neutron-plugin-vmware.install +++ b/debian/neutron-plugin-vmware.install @@ -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 index 000000000..5bbe40871 --- /dev/null +++ b/debian/neutron-plugin-vpn-agent.postinst @@ -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 index 000000000..5bbe40871 --- /dev/null +++ b/debian/neutron-plugin-vpn-agent.postrm @@ -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 index 000000000..5bbe40871 --- /dev/null +++ b/debian/neutron-plugin-vpn-agent.preinst @@ -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.install b/debian/neutron-vpn-agent.install similarity index 100% rename from debian/neutron-plugin-vpn-agent.install rename to debian/neutron-vpn-agent.install diff --git a/debian/neutron-plugin-vpn-agent.upstart b/debian/neutron-vpn-agent.upstart similarity index 77% rename from debian/neutron-plugin-vpn-agent.upstart rename to debian/neutron-vpn-agent.upstart index 455801e42..901875fee 100644 --- a/debian/neutron-plugin-vpn-agent.upstart +++ b/debian/neutron-vpn-agent.upstart @@ -1,5 +1,5 @@ # vim:set ft=upstart ts=2 et: -description "Neutron vpn Plugin Agent" +description "Neutron VPN Agent" author "Chuck Short " 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 diff --git a/debian/patches/disable-failing-metaplugin-tests.patch b/debian/patches/disable-failing-metaplugin-tests.patch index 17b438e91..0c9dacec0 100644 --- a/debian/patches/disable-failing-metaplugin-tests.patch +++ b/debian/patches/disable-failing-metaplugin-tests.patch @@ -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): diff --git a/debian/patches/disable-udev-tests.patch b/debian/patches/disable-udev-tests.patch index 41cecc32c..d5b3bc129 100644 --- a/debian/patches/disable-udev-tests.patch +++ b/debian/patches/disable-udev-tests.patch @@ -3,34 +3,25 @@ Description: Disable udev tests want to use this feature. Author: Chuck Short 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: mtu 16436 qdisc noqueue \\' -+ 'state UNKNOWN \\' -+ 'link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00', -+ '2: eth77: 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) diff --git a/debian/patches/fix-quantum-configuration.patch b/debian/patches/fix-quantum-configuration.patch index 4d7ef439a..259686ea8 100644 --- a/debian/patches/fix-quantum-configuration.patch +++ b/debian/patches/fix-quantum-configuration.patch @@ -3,8 +3,6 @@ Description: Fixes to neutron configuration for distribution. Author: James Page 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 - diff --git a/debian/patches/skip-ipv6-tests.patch b/debian/patches/skip-ipv6-tests.patch index 92cbc680d..a3ad189f6 100644 --- a/debian/patches/skip-ipv6-tests.patch +++ b/debian/patches/skip-ipv6-tests.patch @@ -1,9 +1,8 @@ Description: Skip ipv6 tests because they fail on the ppa buildds. Author: Chuck Short 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): diff --git a/debian/patches/skip-lb-test.patch b/debian/patches/skip-lb-test.patch index f99e74166..6077494b8 100644 --- a/debian/patches/skip-lb-test.patch +++ b/debian/patches/skip-lb-test.patch @@ -1,9 +1,8 @@ Description: Temporarily Skip LB test Author: Chuck Short 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}]) diff --git a/debian/patches/use-concurrency.patch b/debian/patches/use-concurrency.patch index 203110a8b..ce907e8bc 100644 --- a/debian/patches/use-concurrency.patch +++ b/debian/patches/use-concurrency.patch @@ -1,8 +1,6 @@ Description: Use concurrency of 4. Author: Chuck Short 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 - diff --git a/debian/rules b/debian/rules index 918ceded7..0822b196a 100755 --- a/debian/rules +++ b/debian/rules @@ -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 diff --git a/rpm/SOURCES/0001-use-parallel-installed-versions-in-RHEL6.patch b/rpm/SOURCES/0001-use-parallel-installed-versions-in-RHEL6.patch index 35b921829..f52a58337 100644 --- a/rpm/SOURCES/0001-use-parallel-installed-versions-in-RHEL6.patch +++ b/rpm/SOURCES/0001-use-parallel-installed-versions-in-RHEL6.patch @@ -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?= 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 diff --git a/rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch b/rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch index 406daca6d..083a84d59 100644 --- a/rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch +++ b/rpm/SOURCES/0002-Remove-dnsmasq-version-warning.patch @@ -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 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: diff --git a/rpm/SOURCES/neutron-dhcp-setup b/rpm/SOURCES/neutron-dhcp-setup old mode 100644 new mode 100755 diff --git a/rpm/SOURCES/neutron-l3-setup b/rpm/SOURCES/neutron-l3-setup old mode 100644 new mode 100755 diff --git a/rpm/SOURCES/neutron-node-setup b/rpm/SOURCES/neutron-node-setup old mode 100644 new mode 100755 diff --git a/rpm/SOURCES/neutron-server-setup b/rpm/SOURCES/neutron-server-setup old mode 100644 new mode 100755 diff --git a/rpm/SPECS/openstack-neutron.spec b/rpm/SPECS/openstack-neutron.spec index 994f5abbf..23fff0138 100644 --- a/rpm/SPECS/openstack-neutron.spec +++ b/rpm/SPECS/openstack-neutron.spec @@ -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 2014.1-0.9.rc1 +- Update to upstream 2014.1.rc1 +- Remove python-psutil requires + +* Wed Mar 19 2014 Miguel Ángel Ajo - 2014.1.b3-8 +- Create agents table when ML2 core_plugin is used + * Tue Mar 11 2014 Miguel Ángel Ajo - 2014.1.b3-7 - Fixed a broken dependency/typo lxaml -> lxml - Enforcing python-six >= 1.4.1 at least -- 2.32.3