From 555238da6908746b79e938102bc212e9ffce3aeb Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Wed, 16 Oct 2019 15:44:07 -0400 Subject: [PATCH] Start using oslo_utils.netutils.is_ipv6_enabled() Seems that is_enabled_and_bind_by_default() from neutron.common.ipv6_utils was copied directly into oslo_utils.netutils, so start using it instead. Trivialfix Change-Id: I00fa441e7a20fcd1115485bb8ab75750e6a8cf07 --- neutron/agent/l3/agent.py | 4 +- neutron/agent/linux/dhcp.py | 4 +- neutron/agent/linux/ip_lib.py | 4 +- neutron/agent/linux/iptables_firewall.py | 3 +- neutron/common/ipv6_utils.py | 25 ----------- .../agent/extension_drivers/qos_driver.py | 4 +- .../drivers/iptables/iptables_driver.py | 6 +-- .../functional/agent/l3/test_ha_router.py | 14 +++---- neutron/tests/unit/agent/dhcp/test_agent.py | 5 ++- neutron/tests/unit/agent/l3/test_agent.py | 5 +-- .../tests/unit/agent/linux/test_bridge_lib.py | 6 +-- neutron/tests/unit/agent/linux/test_ip_lib.py | 8 ++-- neutron/tests/unit/common/test_ipv6_utils.py | 42 ------------------- neutron/tests/unit/test_wsgi.py | 4 +- 14 files changed, 30 insertions(+), 104 deletions(-) diff --git a/neutron/agent/l3/agent.py b/neutron/agent/l3/agent.py index 1bcc0554e15..5de4184ed70 100644 --- a/neutron/agent/l3/agent.py +++ b/neutron/agent/l3/agent.py @@ -35,6 +35,7 @@ from oslo_serialization import jsonutils from oslo_service import loopingcall from oslo_service import periodic_task from oslo_utils import excutils +from oslo_utils import netutils from oslo_utils import timeutils from osprofiler import profiler @@ -55,7 +56,6 @@ from neutron.agent.linux import pd from neutron.agent.linux import utils as linux_utils from neutron.agent.metadata import driver as metadata_driver from neutron.agent import rpc as agent_rpc -from neutron.common import ipv6_utils from neutron.common import utils from neutron import manager @@ -330,7 +330,7 @@ class L3NATAgent(ha.AgentMixin, super(L3NATAgent, self).__init__(host=self.conf.host) self.target_ex_net_id = None - self.use_ipv6 = ipv6_utils.is_enabled_and_bind_by_default() + self.use_ipv6 = netutils.is_ipv6_enabled() self.pd = pd.PrefixDelegation(self.context, self.process_monitor, self.driver, diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index a53b34ae3c1..e77cbaef410 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -28,6 +28,7 @@ from neutron_lib.utils import file as file_utils from oslo_log import log as logging from oslo_utils import excutils from oslo_utils import fileutils +from oslo_utils import netutils from oslo_utils import uuidutils import six @@ -37,7 +38,6 @@ from neutron.agent.linux import external_process from neutron.agent.linux import ip_lib from neutron.agent.linux import iptables_manager from neutron.cmd import runtime_checks as checks -from neutron.common import ipv6_utils from neutron.common import utils as common_utils from neutron.ipam import utils as ipam_utils @@ -1523,7 +1523,7 @@ class DeviceManager(object): ip_lib.IPWrapper().ensure_namespace(network.namespace) ip_lib.set_ip_nonlocal_bind_for_namespace(network.namespace, 1, root_namespace=True) - if ipv6_utils.is_enabled_and_bind_by_default(): + if netutils.is_ipv6_enabled(): self.driver.configure_ipv6_ra(network.namespace, 'default', constants.ACCEPT_RA_DISABLED) diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index 81d0acca866..5e380913cef 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -23,6 +23,7 @@ from neutron_lib import constants from neutron_lib import exceptions from oslo_config import cfg from oslo_log import log as logging +from oslo_utils import netutils from pyroute2.netlink import exceptions as netlink_exceptions from pyroute2.netlink import rtnl from pyroute2.netlink.rtnl import ifaddrmsg @@ -32,7 +33,6 @@ from pyroute2 import netns from neutron._i18n import _ from neutron.agent.common import utils -from neutron.common import ipv6_utils from neutron.common import utils as common_utils from neutron.privileged.agent.linux import ip_lib as privileged @@ -379,7 +379,7 @@ class IPDevice(SubProcessBase): 'port': dport}) def disable_ipv6(self): - if not ipv6_utils.is_enabled_and_bind_by_default(): + if not netutils.is_ipv6_enabled(): return sysctl_name = re.sub(r'\.', '/', self.name) cmd = ['net.ipv6.conf.%s.disable_ipv6=1' % sysctl_name] diff --git a/neutron/agent/linux/iptables_firewall.py b/neutron/agent/linux/iptables_firewall.py index 1edc42a9d7e..264ac0e78d8 100644 --- a/neutron/agent/linux/iptables_firewall.py +++ b/neutron/agent/linux/iptables_firewall.py @@ -31,7 +31,6 @@ from neutron.agent.linux import ipset_manager from neutron.agent.linux import iptables_comments as ic from neutron.agent.linux import iptables_manager from neutron.common import _constants as const -from neutron.common import ipv6_utils from neutron.common import utils as c_utils @@ -65,7 +64,7 @@ class IptablesFirewallDriver(firewall.FirewallDriver): def __init__(self, namespace=None): self.iptables = iptables_manager.IptablesManager( state_less=True, - use_ipv6=ipv6_utils.is_enabled_and_bind_by_default(), + use_ipv6=netutils.is_ipv6_enabled(), namespace=namespace) # TODO(majopela, shihanzhang): refactor out ipset to a separate # driver composed over this one diff --git a/neutron/common/ipv6_utils.py b/neutron/common/ipv6_utils.py index ead55e44ec6..2f275bb2bb9 100644 --- a/neutron/common/ipv6_utils.py +++ b/neutron/common/ipv6_utils.py @@ -16,37 +16,12 @@ """ IPv6-related utilities and helper functions. """ -import os - import netaddr from neutron_lib import constants as const from oslo_log import log LOG = log.getLogger(__name__) -_IS_IPV6_ENABLED = None - - -def is_enabled_and_bind_by_default(): - """Check if host has the IPv6 support and is configured to bind IPv6 - address to new interfaces by default. - """ - global _IS_IPV6_ENABLED - - if _IS_IPV6_ENABLED is None: - disabled_ipv6_path = "/proc/sys/net/ipv6/conf/default/disable_ipv6" - if os.path.exists(disabled_ipv6_path): - with open(disabled_ipv6_path, 'r') as f: - disabled = f.read().strip() - _IS_IPV6_ENABLED = disabled == "0" - else: - _IS_IPV6_ENABLED = False - if not _IS_IPV6_ENABLED: - LOG.info("IPv6 not present or configured not to bind to new " - "interfaces on this system. Please ensure IPv6 is " - "enabled and /proc/sys/net/ipv6/conf/default/" - "disable_ipv6 is set to 0 to enable IPv6.") - return _IS_IPV6_ENABLED def is_auto_address_subnet(subnet): diff --git a/neutron/plugins/ml2/drivers/linuxbridge/agent/extension_drivers/qos_driver.py b/neutron/plugins/ml2/drivers/linuxbridge/agent/extension_drivers/qos_driver.py index 37bbe8f1d47..2aefa30f953 100644 --- a/neutron/plugins/ml2/drivers/linuxbridge/agent/extension_drivers/qos_driver.py +++ b/neutron/plugins/ml2/drivers/linuxbridge/agent/extension_drivers/qos_driver.py @@ -16,11 +16,11 @@ from neutron_lib import constants as const from oslo_config import cfg from oslo_log import helpers as log_helpers from oslo_log import log +from oslo_utils import netutils from neutron.agent.l2.extensions import qos_linux as qos from neutron.agent.linux import iptables_manager from neutron.agent.linux import tc_lib -from neutron.common import ipv6_utils from neutron.services.qos.drivers.linuxbridge import driver LOG = log.getLogger(__name__) @@ -58,7 +58,7 @@ class QosLinuxbridgeAgentDriver(qos.QosLinuxAgentDriver): # created here for extension needs self.iptables_manager = iptables_manager.IptablesManager( state_less=True, - use_ipv6=ipv6_utils.is_enabled_and_bind_by_default()) + use_ipv6=netutils.is_ipv6_enabled()) self.iptables_manager.initialize_mangle_table() def _dscp_chain_name(self, direction, device): diff --git a/neutron/services/metering/drivers/iptables/iptables_driver.py b/neutron/services/metering/drivers/iptables/iptables_driver.py index acdc062000a..c55384658c1 100644 --- a/neutron/services/metering/drivers/iptables/iptables_driver.py +++ b/neutron/services/metering/drivers/iptables/iptables_driver.py @@ -16,13 +16,13 @@ from neutron_lib import constants from oslo_config import cfg from oslo_log import helpers as log_helpers from oslo_log import log as logging +from oslo_utils import netutils from neutron.agent.common import utils as common_utils from neutron.agent.l3 import dvr_snat_ns from neutron.agent.l3 import namespaces from neutron.agent.linux import ip_lib from neutron.agent.linux import iptables_manager -from neutron.common import ipv6_utils from neutron.conf.agent import common as config from neutron.services.metering.drivers import abstract_driver @@ -97,7 +97,7 @@ class RouterWithMetering(object): namespace=snat_ns_name, binary_name=WRAP_NAME, state_less=True, - use_ipv6=ipv6_utils.is_enabled_and_bind_by_default()) + use_ipv6=netutils.is_ipv6_enabled()) created = True @@ -112,7 +112,7 @@ class RouterWithMetering(object): namespace=self.ns_name, binary_name=WRAP_NAME, state_less=True, - use_ipv6=ipv6_utils.is_enabled_and_bind_by_default()) + use_ipv6=netutils.is_ipv6_enabled()) created = True diff --git a/neutron/tests/functional/agent/l3/test_ha_router.py b/neutron/tests/functional/agent/l3/test_ha_router.py index b226ba523fd..e7c9666f8b0 100644 --- a/neutron/tests/functional/agent/l3/test_ha_router.py +++ b/neutron/tests/functional/agent/l3/test_ha_router.py @@ -17,12 +17,12 @@ import copy import mock from neutron_lib import constants +from oslo_utils import netutils import testtools from neutron.agent.common import ovs_lib from neutron.agent.l3 import agent as neutron_l3_agent from neutron.agent.linux import ip_lib -from neutron.common import ipv6_utils from neutron.common import utils as common_utils from neutron.tests.common import l3_test_common from neutron.tests.common import net_helpers @@ -127,8 +127,7 @@ class L3HATestCase(framework.L3AgentTestFramework): self._assert_ipv6_forwarding(router, expected_forwarding, True) - @testtools.skipUnless(ipv6_utils.is_enabled_and_bind_by_default(), - "IPv6 is not enabled") + @testtools.skipUnless(netutils.is_ipv6_enabled(), "IPv6 is not enabled") def test_ipv6_router_advts_and_fwd_after_router_state_change_master(self): # Check that RA and forwarding are enabled when there's no IPv6 # gateway. @@ -143,8 +142,7 @@ class L3HATestCase(framework.L3AgentTestFramework): expected_ra=False, expected_forwarding=True) - @testtools.skipUnless(ipv6_utils.is_enabled_and_bind_by_default(), - "IPv6 is not enabled") + @testtools.skipUnless(netutils.is_ipv6_enabled(), "IPv6 is not enabled") def test_ipv6_router_advts_and_fwd_after_router_state_change_backup(self): # Check that both RA and forwarding are disabled on backup instances self._test_ipv6_router_advts_and_fwd_helper('backup', @@ -347,8 +345,7 @@ class L3HATestCase(framework.L3AgentTestFramework): raise self.assertEqual(0, ip_nonlocal_bind_value) - @testtools.skipUnless(ipv6_utils.is_enabled_and_bind_by_default(), - "IPv6 is not enabled") + @testtools.skipUnless(netutils.is_ipv6_enabled(), "IPv6 is not enabled") def test_ha_router_namespace_has_ipv6_forwarding_disabled(self): router_info = self.generate_router_info(enable_ha=True) router_info[constants.HA_INTERFACE_KEY]['status'] = ( @@ -369,8 +366,7 @@ class L3HATestCase(framework.L3AgentTestFramework): self._wait_until_ipv6_forwarding_has_state( router.ns_name, external_device_name, 1) - @testtools.skipUnless(ipv6_utils.is_enabled_and_bind_by_default(), - "IPv6 is not enabled") + @testtools.skipUnless(netutils.is_ipv6_enabled(), "IPv6 is not enabled") def test_ha_router_without_gw_ipv6_forwarding_state(self): router_info = self.generate_router_info( enable_ha=True, enable_gw=False) diff --git a/neutron/tests/unit/agent/dhcp/test_agent.py b/neutron/tests/unit/agent/dhcp/test_agent.py index 49e261e36c4..5e947da0dd0 100644 --- a/neutron/tests/unit/agent/dhcp/test_agent.py +++ b/neutron/tests/unit/agent/dhcp/test_agent.py @@ -25,6 +25,7 @@ from neutron_lib import constants as const from neutron_lib import exceptions from oslo_config import cfg import oslo_messaging +from oslo_utils import netutils from oslo_utils import timeutils import testtools @@ -1743,8 +1744,8 @@ class TestDeviceManager(base.BaseTestCase): "IPWrapper") self.mock_ip_wrapper = self.mock_ip_wrapper_p.start() - self.mock_ipv6_enabled_p = mock.patch('neutron.common.ipv6_utils.' - 'is_enabled_and_bind_by_default') + self.mock_ipv6_enabled_p = mock.patch.object(netutils, + 'is_ipv6_enabled') self.mock_ipv6_enabled = self.mock_ipv6_enabled_p.start() self.mock_ipv6_enabled.return_value = True diff --git a/neutron/tests/unit/agent/l3/test_agent.py b/neutron/tests/unit/agent/l3/test_agent.py index ed1a296c1dc..ed0e4bb4bec 100644 --- a/neutron/tests/unit/agent/l3/test_agent.py +++ b/neutron/tests/unit/agent/l3/test_agent.py @@ -28,6 +28,7 @@ from neutron_lib import constants as lib_constants from oslo_config import cfg from oslo_log import log import oslo_messaging +from oslo_utils import netutils from oslo_utils import timeutils from oslo_utils import uuidutils from testtools import matchers @@ -329,9 +330,7 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework): destroy_metadata_proxy.assert_not_called() def _test__configure_ipv6_params_helper(self, state, gw_port_id): - with mock.patch( - 'neutron.common.ipv6_utils.is_enabled_and_bind_by_default', - return_value=True): + with mock.patch.object(netutils, 'is_ipv6_enabled', return_value=True): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) router_info = l3router.RouterInfo(agent, _uuid(), {}, **self.ri_kwargs) diff --git a/neutron/tests/unit/agent/linux/test_bridge_lib.py b/neutron/tests/unit/agent/linux/test_bridge_lib.py index 6ea43e2397d..3ad412f2d74 100644 --- a/neutron/tests/unit/agent/linux/test_bridge_lib.py +++ b/neutron/tests/unit/agent/linux/test_bridge_lib.py @@ -16,6 +16,7 @@ # under the License. import mock +from oslo_utils import netutils from neutron.agent.linux import bridge_lib from neutron.privileged.agent.linux import ip_lib as priv_lib @@ -30,9 +31,8 @@ class BridgeLibTest(base.BaseTestCase): def setUp(self): super(BridgeLibTest, self).setUp() - mock.patch( - 'neutron.common.ipv6_utils.is_enabled_and_bind_by_default', - return_value=True).start() + mock.patch.object(netutils, 'is_ipv6_enabled', + return_value=True).start() ip_wrapper = mock.patch('neutron.agent.linux.ip_lib.IPWrapper').start() self.execute = ip_wrapper.return_value.netns.execute self.create_p = mock.patch.object(priv_lib, 'create_interface') diff --git a/neutron/tests/unit/agent/linux/test_ip_lib.py b/neutron/tests/unit/agent/linux/test_ip_lib.py index 63b97962812..f24b17dd787 100644 --- a/neutron/tests/unit/agent/linux/test_ip_lib.py +++ b/neutron/tests/unit/agent/linux/test_ip_lib.py @@ -21,6 +21,7 @@ import mock import netaddr from neutron_lib import constants from neutron_lib import exceptions +from oslo_utils import netutils from oslo_utils import uuidutils import pyroute2 from pyroute2.netlink.rtnl import ifaddrmsg @@ -1447,9 +1448,7 @@ class TestSysctl(base.BaseTestCase): def test_disable_ipv6_when_ipv6_globally_enabled(self): dev = ip_lib.IPDevice('tap0', 'ns1') - with mock.patch.object(ip_lib.ipv6_utils, - 'is_enabled_and_bind_by_default', - return_value=True): + with mock.patch.object(netutils, 'is_ipv6_enabled', return_value=True): dev.disable_ipv6() self.execute.assert_called_once_with( ['sysctl', '-w', 'net.ipv6.conf.tap0.disable_ipv6=1'], @@ -1457,8 +1456,7 @@ class TestSysctl(base.BaseTestCase): def test_disable_ipv6_when_ipv6_globally_disabled(self): dev = ip_lib.IPDevice('tap0', 'ns1') - with mock.patch.object(ip_lib.ipv6_utils, - 'is_enabled_and_bind_by_default', + with mock.patch.object(netutils, 'is_ipv6_enabled', return_value=False): dev.disable_ipv6() self.assertFalse(self.execute.called) diff --git a/neutron/tests/unit/common/test_ipv6_utils.py b/neutron/tests/unit/common/test_ipv6_utils.py index 854d072a3ed..09eda127b70 100644 --- a/neutron/tests/unit/common/test_ipv6_utils.py +++ b/neutron/tests/unit/common/test_ipv6_utils.py @@ -15,54 +15,12 @@ import collections -import mock from neutron_lib import constants -from neutron_lib import fixture as lib_fixtures from neutron.common import ipv6_utils from neutron.tests import base -class TestIsEnabledAndBindByDefault(base.BaseTestCase): - - def setUp(self): - super(TestIsEnabledAndBindByDefault, self).setUp() - - def reset_detection_flag(): - ipv6_utils._IS_IPV6_ENABLED = None - reset_detection_flag() - self.addCleanup(reset_detection_flag) - self.mock_exists = mock.patch("os.path.exists", - return_value=True).start() - self.proc_path = '/proc/sys/net/ipv6/conf/default/disable_ipv6' - - def test_enabled(self): - self.useFixture(lib_fixtures.OpenFixture(self.proc_path, '0')) - enabled = ipv6_utils.is_enabled_and_bind_by_default() - self.assertTrue(enabled) - - def test_disabled(self): - self.useFixture(lib_fixtures.OpenFixture(self.proc_path, '1')) - enabled = ipv6_utils.is_enabled_and_bind_by_default() - self.assertFalse(enabled) - - def test_disabled_non_exists(self): - mo = self.useFixture( - lib_fixtures.OpenFixture(self.proc_path, '1')).mock_open - self.mock_exists.return_value = False - enabled = ipv6_utils.is_enabled_and_bind_by_default() - self.assertFalse(enabled) - self.assertFalse(mo.called) - - def test_memoize(self): - mo = self.useFixture( - lib_fixtures.OpenFixture(self.proc_path, '0')).mock_open - ipv6_utils.is_enabled_and_bind_by_default() - enabled = ipv6_utils.is_enabled_and_bind_by_default() - self.assertTrue(enabled) - mo.assert_called_once_with(self.proc_path, 'r') - - class TestIsAutoAddressSubnet(base.BaseTestCase): def setUp(self): diff --git a/neutron/tests/unit/test_wsgi.py b/neutron/tests/unit/test_wsgi.py index b2214881d74..5a99805f29c 100644 --- a/neutron/tests/unit/test_wsgi.py +++ b/neutron/tests/unit/test_wsgi.py @@ -21,12 +21,12 @@ import mock from neutron_lib.db import api as db_api from neutron_lib import exceptions as exception from oslo_config import cfg +from oslo_utils import netutils from six.moves import urllib import testtools import webob import webob.exc -from neutron.common import ipv6_utils from neutron.tests import base from neutron.tests.common import helpers from neutron import wsgi @@ -111,7 +111,7 @@ class TestWSGIServer(base.BaseTestCase): launcher.wait.assert_called_once_with() @testtools.skipIf( - not ipv6_utils.is_enabled_and_bind_by_default(), + not netutils.is_ipv6_enabled(), 'IPv6 support disabled on host') def test_start_random_port_with_ipv6(self): server = wsgi.Server("test_random_port")