The dnsmasq version check does not need root privileges
to run as with low privs it works just fine. As a side
effect, the use of the rootwrapper was causing unit tests
to hung because the execute call in check_version was not
being stubbed out. Weirdly enough this wasn't caught in
a previous Gerrit run; there must be a passwordless sudo
lurking around somewhere in the Gerrit infrastructure.
Fixes bug #
1178800
Change-Id: I4d0bd218768eec2439d3907587682ff35884a262
# dhcp-agent
ip_exec_dnsmasq: DnsmasqNetnsFilter, /sbin/ip, root
dnsmasq: DnsmasqFilter, /sbin/dnsmasq, root
-dnsmasq_ver: DnsmasqVersionFilter, /sbin/dnsmasq, root
dnsmasq_usr: DnsmasqFilter, /usr/sbin/dnsmasq, root
-dnsmasq_usr_ver: DnsmasqVersionFilter, /usr/sbin/dnsmasq, root
# dhcp-agent uses kill as well, that's handled by the generic KillFilter
# it looks like these are the only signals needed, per
# quantum/agent/linux/dhcp.py
self.device_manager = DeviceManager(self.conf, self.plugin_rpc)
self.lease_relay = DhcpLeaseRelay(self.update_lease)
- self.dhcp_driver_cls.check_version(self.root_helper)
+ self.dhcp_driver_cls.check_version()
self._populate_networks_cache()
def _populate_networks_cache(self):
raise NotImplementedError
@classmethod
- def check_version(cls, root_helper):
+ def check_version(cls):
"""Execute version checks on DHCP server."""
raise NotImplementedError
MINIMUM_VERSION = 2.59
@classmethod
- def check_version(cls, root_helper):
+ def check_version(cls):
is_valid_version = None
try:
cmd = ['dnsmasq', '--version']
- out = utils.execute(cmd, root_helper)
+ out = utils.execute(cmd)
ver = re.findall("\d+.\d+", out)[0]
is_valid_version = float(ver) >= cls.MINIMUM_VERSION
if not is_valid_version:
'DHCP AGENT MAY NOT RUN CORRECTLY! '
'Please ensure that its version is %s '
'or above!'), cls.MINIMUM_VERSION)
- except (RuntimeError, IndexError, ValueError):
+ except (OSError, RuntimeError, IndexError, ValueError):
LOG.warning(_('Unable to determine dnsmasq version. '
'Please ensure that its version is %s '
'or above!'), cls.MINIMUM_VERSION)
return env
-class DnsmasqVersionFilter(CommandFilter):
- """Specific filter to check dnsmasq version."""
- def match(self, userargs):
- return userargs[0] == "dnsmasq" and userargs[1] == "--version"
-
-
class DnsmasqNetnsFilter(DnsmasqFilter):
"""Specific filter for the dnsmasq call (which includes env)."""
def test_check_version_abstract_error(self):
self.assertRaises(NotImplementedError,
- dhcp.DhcpBase.check_version, None)
+ dhcp.DhcpBase.check_version)
def test_base_abc_error(self):
self.assertRaises(TypeError, dhcp.DhcpBase, None)
def _check_version(self, cmd_out, expected_value):
with mock.patch('quantum.agent.linux.utils.execute') as cmd:
cmd.return_value = cmd_out
- result = dhcp.Dnsmasq.check_version('sudo')
+ result = dhcp.Dnsmasq.check_version()
self.assertEqual(result, expected_value)
def test_check_minimum_version(self):