summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-02-14 06:03:12 +0000
committerGerrit Code Review <review@openstack.org>2013-02-14 06:03:12 +0000
commit16fc2fd78c7b77b20cadbbc893a9d3571170ab87 (patch)
tree1427484577e4618f7a95ed2579864327298d64e8
parent53d8b4b252a33d0f049b600a9201c5674e118186 (diff)
parent43ee5a9763b2239168f510255e282f5eea19248f (diff)
Merge "Allow multiple dns servers when starting dnsmasq"
-rw-r--r--nova/network/linux_net.py29
-rw-r--r--nova/tests/network/test_linux_net.py67
2 files changed, 89 insertions, 7 deletions
diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py
index 08a2ae354..edbabfc08 100644
--- a/nova/network/linux_net.py
+++ b/nova/network/linux_net.py
@@ -61,9 +61,14 @@ linux_net_opts = [
cfg.IntOpt('dhcp_lease_time',
default=120,
help='Lifetime of a DHCP lease in seconds'),
- cfg.StrOpt('dns_server',
- default=None,
- help='if set, uses specific dns server for dnsmasq'),
+ cfg.MultiStrOpt('dns_server',
+ default=[],
+ help='if set, uses specific dns server for dnsmasq. Can'
+ 'be specified multiple times.'),
+ cfg.BoolOpt('use_network_dns_servers',
+ default=False,
+ help='if set, uses the dns1 and dns2 from the network ref.'
+ 'as dns servers.'),
cfg.ListOpt('dmz_cidr',
default=[],
help='A list of dmz range that should be accepted'),
@@ -961,11 +966,21 @@ def restart_dhcp(context, dev, network_ref):
'--dhcp-hostsfile=%s' % _dhcp_file(dev, 'conf'),
'--dhcp-script=%s' % CONF.dhcpbridge,
'--leasefile-ro']
- if network_ref['multi_host'] and not CONF.dns_server:
- cmd += ['--no-hosts', '--addn-hosts=%s' % _dhcp_file(dev, 'hosts')]
- if CONF.dns_server:
- cmd += ['-h', '-R', '--server=%s' % CONF.dns_server]
+ dns_servers = set(CONF.dns_server)
+ if CONF.use_network_dns_servers:
+ if network_ref.get('dns1'):
+ dns_servers.add(network_ref.get('dns1'))
+ if network_ref.get('dns2'):
+ dns_servers.add(network_ref.get('dns2'))
+ if network_ref['multi_host'] or dns_servers:
+ cmd.append('--no-hosts')
+ if network_ref['multi_host']:
+ '--addn-hosts=%s' % _dhcp_file(dev, 'hosts')
+ if dns_servers:
+ cmd.append('--no-resolv')
+ for dns_server in dns_servers:
+ cmd.append('--server=%s' % dns_server)
if CONF.use_single_default_gateway:
cmd += ['--dhcp-optsfile=%s' % _dhcp_file(dev, 'opts')]
diff --git a/nova/tests/network/test_linux_net.py b/nova/tests/network/test_linux_net.py
index bc21b80ad..50c98e78c 100644
--- a/nova/tests/network/test_linux_net.py
+++ b/nova/tests/network/test_linux_net.py
@@ -24,6 +24,7 @@ from nova import context
from nova import db
from nova.network import driver
from nova.network import linux_net
+from nova.openstack.common import cfg
from nova.openstack.common import fileutils
from nova.openstack.common import log as logging
from nova.openstack.common import timeutils
@@ -31,6 +32,7 @@ from nova import test
from nova import utils
LOG = logging.getLogger(__name__)
+CONF = cfg.CONF
HOST = "testhost"
@@ -472,6 +474,71 @@ class LinuxNetworkTestCase(test.TestCase):
driver.plug(network, "fakemac")
self.assertEqual(info['passed_interface'], "override_interface")
+ def _test_dnsmasq_execute(self, extra_expected=None):
+ network_ref = {'id': 'fake',
+ 'label': 'fake',
+ 'multi_host': False,
+ 'cidr': '10.0.0.0/24',
+ 'dns1': '8.8.4.4',
+ 'dhcp_start': '1.0.0.2',
+ 'dhcp_server': '10.0.0.1'}
+ executes = []
+
+ def fake_execute(*args, **kwargs):
+ executes.append(args)
+ return "", ""
+
+ self.stubs.Set(linux_net, '_execute', fake_execute)
+
+ self.stubs.Set(os, 'chmod', lambda *a, **kw: None)
+ self.stubs.Set(linux_net, 'write_to_file', lambda *a, **kw: None)
+ self.stubs.Set(linux_net, '_dnsmasq_pid_for', lambda *a, **kw: None)
+ dev = 'br100'
+ linux_net.restart_dhcp(self.context, dev, network_ref)
+ expected = ['env',
+ 'CONFIG_FILE=%s' % CONF.dhcpbridge_flagfile,
+ 'NETWORK_ID=fake',
+ 'dnsmasq',
+ '--strict-order',
+ '--bind-interfaces',
+ '--conf-file=%s' % CONF.dnsmasq_config_file,
+ '--domain=%s' % CONF.dhcp_domain,
+ '--pid-file=%s' % linux_net._dhcp_file(dev, 'pid'),
+ '--listen-address=%s' % network_ref['dhcp_server'],
+ '--except-interface=lo',
+ "--dhcp-range=set:'%s',%s,static,%ss" % (network_ref['label'],
+ network_ref['dhcp_start'],
+ CONF.dhcp_lease_time),
+ '--dhcp-lease-max=256',
+ '--dhcp-hostsfile=%s' % linux_net._dhcp_file(dev, 'conf'),
+ '--dhcp-script=%s' % CONF.dhcpbridge,
+ '--leasefile-ro']
+ if extra_expected:
+ expected += extra_expected
+ self.assertEqual([tuple(expected)], executes)
+
+ def test_dnsmasq_execute(self):
+ self._test_dnsmasq_execute()
+
+ def test_dnsmasq_execute_dns_servers(self):
+ self.flags(dns_server=['1.1.1.1', '2.2.2.2'])
+ expected = [
+ '--no-hosts',
+ '--no-resolv',
+ '--server=1.1.1.1',
+ '--server=2.2.2.2',
+ ]
+ self._test_dnsmasq_execute(expected)
+
+ def test_dnsmasq_execute_use_network_dns_servers(self):
+ self.flags(use_network_dns_servers=True)
+ expected = [
+ '--no-hosts',
+ '--no-resolv',
+ '--server=8.8.4.4',
+ ]
+ self._test_dnsmasq_execute(expected)
+
def test_isolated_host(self):
self.flags(fake_network=False,
share_dhcp_address=True)