From 44d1c46497a9c2f974a55402fcd7c6b2c219c45b Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Fri, 13 Dec 2013 00:12:29 +0100 Subject: [PATCH] Allow multiple DNS forwarders for dnsmasq This patch change the dnsmasq_server configuration option to a ListOpt in order to enable user to specify multiple DNS forwarders for each dnsmasq instance. DocImpact Change-Id: I21963b4a6c99e4edb11040d77a6aeaa35ff44641 Closes-bug: #1240027 --- etc/dhcp_agent.ini | 5 +++-- neutron/agent/linux/dhcp.py | 13 ++++++++----- neutron/tests/unit/test_linux_dhcp.py | 10 +++++++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/etc/dhcp_agent.ini b/etc/dhcp_agent.ini index 425684b04f..583f136e64 100644 --- a/etc/dhcp_agent.ini +++ b/etc/dhcp_agent.ini @@ -62,8 +62,9 @@ # Override the default dnsmasq settings with this file # dnsmasq_config_file = -# Use another DNS server before any in /etc/resolv.conf. -# dnsmasq_dns_server = +# Comma-separated list of DNS servers which will be used by dnsmasq +# as forwarders. +# dnsmasq_dns_servers = # Limit number of leases to prevent a denial-of-service. # dnsmasq_lease_max = 16777216 diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index 137f7a9272..734938377d 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -49,9 +49,10 @@ OPTS = [ cfg.StrOpt('dnsmasq_config_file', default='', help=_('Override the default dnsmasq settings with this file')), - cfg.StrOpt('dnsmasq_dns_server', - help=_('Use another DNS server before any in ' - '/etc/resolv.conf.')), + cfg.ListOpt('dnsmasq_dns_servers', + help=_('Comma-separated list of the DNS servers which will be ' + 'used as forwarders.'), + deprecated_name='dnsmasq_dns_server'), cfg.BoolOpt('dhcp_delete_namespaces', default=False, help=_("Delete namespace after removing a dhcp server.")), cfg.IntOpt( @@ -364,8 +365,10 @@ class Dnsmasq(DhcpLocalProcess): min(possible_leases, self.conf.dnsmasq_lease_max)) cmd.append('--conf-file=%s' % self.conf.dnsmasq_config_file) - if self.conf.dnsmasq_dns_server: - cmd.append('--server=%s' % self.conf.dnsmasq_dns_server) + if self.conf.dnsmasq_dns_servers: + cmd.extend( + '--server=%s' % server + for server in self.conf.dnsmasq_dns_servers) if self.conf.dhcp_domain: cmd.append('--domain=%s' % self.conf.dhcp_domain) diff --git a/neutron/tests/unit/test_linux_dhcp.py b/neutron/tests/unit/test_linux_dhcp.py index 3ab90b84a4..e2a07a2c8b 100644 --- a/neutron/tests/unit/test_linux_dhcp.py +++ b/neutron/tests/unit/test_linux_dhcp.py @@ -663,11 +663,19 @@ class TestDnsmasq(TestBase): self._test_spawn(['--conf-file=']) def test_spawn_cfg_dns_server(self): - self.conf.set_override('dnsmasq_dns_server', '8.8.8.8') + self.conf.set_override('dnsmasq_dns_servers', ['8.8.8.8']) self._test_spawn(['--conf-file=', '--server=8.8.8.8', '--domain=openstacklocal']) + def test_spawn_cfg_multiple_dns_server(self): + self.conf.set_override('dnsmasq_dns_servers', ['8.8.8.8', + '9.9.9.9']) + self._test_spawn(['--conf-file=', + '--server=8.8.8.8', + '--server=9.9.9.9', + '--domain=openstacklocal']) + def test_spawn_max_leases_is_smaller_than_cap(self): self._test_spawn( ['--conf-file=', '--domain=openstacklocal'],