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:
Eugene Nikanorov 2014-03-19 18:00:35 +04:00
parent 15c16ddd8a
commit 2d5faa1d5c
2 changed files with 17 additions and 9 deletions

View File

@ -466,7 +466,7 @@ class IpNetnsCommand(IpCommandBase):
check_exit_code=check_exit_code)
def exists(self, name):
output = self._run('list', options='o')
output = self._parent._execute('o', 'netns', ['list'])
for line in output.split('\n'):
if name == line.strip():

View File

@ -713,17 +713,25 @@ class TestIpNetnsCommand(TestIPCmdBase):
def test_namespace_exists(self):
retval = '\n'.join(NETNS_SAMPLE)
self.parent._run.return_value = retval
self.assertTrue(
self.netns_cmd.exists('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'))
self._assert_call('o', ('list',))
# 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(
netns_cmd.exists('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'))
execute.assert_called_once_with(['ip', '-o', 'netns', 'list'],
root_helper=None)
def test_namespace_doest_not_exist(self):
retval = '\n'.join(NETNS_SAMPLE)
self.parent._run.return_value = retval
self.assertFalse(
self.netns_cmd.exists('bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb'))
self._assert_call('o', ('list',))
# 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(
netns_cmd.exists('bbbbbbbb-1111-2222-3333-bbbbbbbbbbbb'))
execute.assert_called_once_with(['ip', '-o', 'netns', 'list'],
root_helper=None)
def test_execute(self):
self.parent.namespace = 'ns'