Merge "Ignore gre0 and gretap0 devices in netns cleanup script." into stable/newton
This commit is contained in:
commit
287bb35e16
|
@ -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."""
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue