Fix namespace exist() method
Fix namespace exist() method for it shall not be called with a root. Also, don't run it under the namespace so garbage_collect_namespace method can run without rootwrap and not withi a ns. As a result of fixing namespace listing the patch also fixes the regression introduced (bug/1294603) to loadbalancer agent respawning haproxy due to inability to list namespaces properly. Change-Id: I0dc4d01b0c1c04887ec6ad5766ec7c6c96903faa Closes-Bug: #1297594 Closes-Bug: #1294603
This commit is contained in:
parent
15c16ddd8a
commit
2d5faa1d5c
@ -466,7 +466,7 @@ class IpNetnsCommand(IpCommandBase):
|
|||||||
check_exit_code=check_exit_code)
|
check_exit_code=check_exit_code)
|
||||||
|
|
||||||
def exists(self, name):
|
def exists(self, name):
|
||||||
output = self._run('list', options='o')
|
output = self._parent._execute('o', 'netns', ['list'])
|
||||||
|
|
||||||
for line in output.split('\n'):
|
for line in output.split('\n'):
|
||||||
if name == line.strip():
|
if name == line.strip():
|
||||||
|
@ -713,17 +713,25 @@ class TestIpNetnsCommand(TestIPCmdBase):
|
|||||||
|
|
||||||
def test_namespace_exists(self):
|
def test_namespace_exists(self):
|
||||||
retval = '\n'.join(NETNS_SAMPLE)
|
retval = '\n'.join(NETNS_SAMPLE)
|
||||||
self.parent._run.return_value = retval
|
# need another instance to avoid mocking
|
||||||
|
netns_cmd = ip_lib.IpNetnsCommand(ip_lib.SubProcessBase())
|
||||||
|
with mock.patch('neutron.agent.linux.utils.execute') as execute:
|
||||||
|
execute.return_value = retval
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
self.netns_cmd.exists('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'))
|
netns_cmd.exists('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'))
|
||||||
self._assert_call('o', ('list',))
|
execute.assert_called_once_with(['ip', '-o', 'netns', 'list'],
|
||||||
|
root_helper=None)
|
||||||
|
|
||||||
def test_namespace_doest_not_exist(self):
|
def test_namespace_doest_not_exist(self):
|
||||||
retval = '\n'.join(NETNS_SAMPLE)
|
retval = '\n'.join(NETNS_SAMPLE)
|
||||||
self.parent._run.return_value = retval
|
# need another instance to avoid mocking
|
||||||
|
netns_cmd = ip_lib.IpNetnsCommand(ip_lib.SubProcessBase())
|
||||||
|
with mock.patch('neutron.agent.linux.utils.execute') as execute:
|
||||||
|
execute.return_value = retval
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
self.netns_cmd.exists('bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb'))
|
netns_cmd.exists('bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb'))
|
||||||
self._assert_call('o', ('list',))
|
execute.assert_called_once_with(['ip', '-o', 'netns', 'list'],
|
||||||
|
root_helper=None)
|
||||||
|
|
||||||
def test_execute(self):
|
def test_execute(self):
|
||||||
self.parent.namespace = 'ns'
|
self.parent.namespace = 'ns'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user