Merge "Ignore gre0 and gretap0 devices in netns cleanup script." into stable/newton

This commit is contained in:
Jenkins 2016-10-14 15:18:57 +00:00 committed by Gerrit Code Review
commit 287bb35e16
2 changed files with 18 additions and 5 deletions

View File

@ -40,6 +40,7 @@ OPTS = [
LOOPBACK_DEVNAME = 'lo'
GRE_TUNNEL_DEVICE_NAMES = ['gre0', 'gretap0']
SYS_NET_PATH = '/sys/class/net'
DEFAULT_GW_PATTERN = re.compile(r"via (\S+)")
@ -118,7 +119,7 @@ class IPWrapper(SubProcessBase):
def device(self, name):
return IPDevice(name, namespace=self.namespace)
def get_devices(self, exclude_loopback=False):
def get_devices(self, exclude_loopback=False, exclude_gre_devices=False):
retval = []
if self.namespace:
# we call out manually because in order to avoid screen scraping
@ -137,7 +138,8 @@ class IPWrapper(SubProcessBase):
)
for name in output:
if exclude_loopback and name == LOOPBACK_DEVNAME:
if (exclude_loopback and name == LOOPBACK_DEVNAME or
exclude_gre_devices and name in GRE_TUNNEL_DEVICE_NAMES):
continue
retval.append(IPDevice(name, namespace=self.namespace))
@ -201,7 +203,8 @@ class IPWrapper(SubProcessBase):
return ip
def namespace_is_empty(self):
return not self.get_devices(exclude_loopback=True)
return not self.get_devices(exclude_loopback=True,
exclude_gre_devices=True)
def garbage_collect_namespace(self):
"""Conditionally destroy the namespace if it is empty."""

View File

@ -282,6 +282,16 @@ class TestIpWrapper(base.BaseTestCase):
self.assertTrue(fake_str.split.called)
self.assertEqual(retval, [ip_lib.IPDevice('lo', namespace='foo')])
@mock.patch('neutron.agent.common.utils.execute')
def test_get_devices_exclude_loopback_and_gre(self, mocked_execute):
device_name = 'somedevice'
mocked_execute.return_value = 'lo gre0 gretap0 ' + device_name
devices = ip_lib.IPWrapper(namespace='foo').get_devices(
exclude_loopback=True, exclude_gre_devices=True)
somedevice = devices.pop()
self.assertEqual(device_name, somedevice.name)
self.assertFalse(devices)
def test_get_namespaces_non_root(self):
self.config(group='AGENT', use_helper_for_ns_read=False)
self.execute.return_value = '\n'.join(NETNS_SAMPLE)
@ -389,7 +399,7 @@ class TestIpWrapper(base.BaseTestCase):
get_devices.return_value = []
self.assertTrue(ip.namespace_is_empty())
get_devices.assert_called_once_with(exclude_loopback=True)
self.assertTrue(get_devices.called)
def test_namespace_is_empty(self):
ip = ip_lib.IPWrapper(namespace='ns')
@ -397,7 +407,7 @@ class TestIpWrapper(base.BaseTestCase):
get_devices.return_value = [mock.Mock()]
self.assertFalse(ip.namespace_is_empty())
get_devices.assert_called_once_with(exclude_loopback=True)
self.assertTrue(get_devices.called)
def test_garbage_collect_namespace_does_not_exist(self):
with mock.patch.object(ip_lib, 'IpNetnsCommand') as ip_ns_cmd_cls: