cloud-init-dev team mailing list archive
-
cloud-init-dev team
-
Mailing list archive
-
Message #01166
[Merge] ~bregeer-ctl/cloud-init:bugfix/centos7_resolv into cloud-init:master
Bert JW Regeer has proposed merging ~bregeer-ctl/cloud-init:bugfix/centos7_resolv into cloud-init:master.
Requested reviews:
cloud init development team (cloud-init-dev)
For more details, see:
https://code.launchpad.net/~bregeer-ctl/cloud-init/+git/cloud-init/+merge/305058
See bugs:
https://bugs.launchpad.net/cloud-init/+bug/1620796
https://bugs.launchpad.net/cloud-init/+bug/1620807
--
Your team cloud init development team is requested to review the proposed merge of ~bregeer-ctl/cloud-init:bugfix/centos7_resolv into cloud-init:master.
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
index c53acf7..a5d6611 100644
--- a/cloudinit/net/sysconfig.py
+++ b/cloudinit/net/sysconfig.py
@@ -20,8 +20,11 @@ import six
from cloudinit.distros.parsers import resolv_conf
from cloudinit import util
+from cloudinit import log as logging
+
from . import renderer
+LOG = logging.getLogger(__name__)
def _make_header(sep='#'):
lines = [
@@ -206,6 +209,10 @@ class Renderer(renderer.Renderer):
self.netrules_path = config.get(
'netrules_path', 'etc/udev/rules.d/70-persistent-net.rules')
self.dns_path = config.get('dns_path', 'etc/resolv.conf')
+ self.dns_symlink = config.get('dns_symlink', True)
+
+ self.dns_write_path = config.get('dns_write_path', 'etc/resolv.conf.cloud') \
+ if self.dns_symlink else self.dns_path
@classmethod
def _render_iface_shared(cls, iface, iface_cfg):
@@ -335,7 +342,10 @@ class Renderer(renderer.Renderer):
if existing_dns_path and os.path.isfile(existing_dns_path):
content = resolv_conf.ResolvConf(util.load_file(existing_dns_path))
for nameserver in network_state.dns_nameservers:
- content.add_nameserver(nameserver)
+ try:
+ content.add_nameserver(nameserver)
+ except ValueError as e:
+ LOG.debug('Unable to add nameserver %s: %s', nameserver, e)
for searchdomain in network_state.dns_searchdomains:
content.add_search_domain(searchdomain)
return "\n".join([_make_header(';'), str(content)])
@@ -389,11 +399,22 @@ class Renderer(renderer.Renderer):
for path, data in self._render_sysconfig(base_sysconf_dir,
network_state).items():
util.write_file(path, data)
- if self.dns_path:
+ if self.dns_write_path:
dns_path = os.path.join(target, self.dns_path)
+ dns_write_path = os.path.join(target, self.dns_write_path)
resolv_content = self._render_dns(network_state,
existing_dns_path=dns_path)
- util.write_file(dns_path, resolv_content)
+ util.write_file(dns_write_path, resolv_content)
+
+ if self.dns_symlink:
+ if os.path.exists(dns_path) and not os.path.islink(dns_path):
+ LOG.debug('Removing existing resolv.conf')
+ os.unlink(dns_path)
+
+ if not os.path.exists(dns_path):
+ LOG.debug('Adding symlink from %s to %s', dns_path, dns_write_path)
+ os.symlink(dns_write_path, dns_path)
+
if self.netrules_path:
netrules_content = self._render_persistent_net(network_state)
netrules_path = os.path.join(target, self.netrules_path)
Follow ups