sailesh1993 / rpms / cloud-init

Forked from rpms/cloud-init 10 months ago
Clone
Blob Blame History Raw
From 6f54ccf28a327174df663ea2e07f32d7e632fddd Mon Sep 17 00:00:00 2001
From: Ryan McCabe <rmccabe@redhat.com>
Date: Thu, 15 Feb 2018 10:30:40 -0500
Subject: [PATCH] sysconfig: Render DNS and DOMAIN

Currently when dns and dns search info is provided, it is not
rendered when outputting to sysconfig format.

This patch causes the DNS and DOMAIN lines to be written out rendering
sysconfig.

This is a backport of upstream commit
bbe91cdc6917adb503b455e6860c21ea7b3f567f which will not apply to the
0.7.9 tree.

Signed-off-by: Ryan McCabe <rmccabe@redhat.com>
Resolves: rhbz#1545525
---
 cloudinit/net/sysconfig.py  | 17 +++++++++++++++++
 tests/unittests/test_net.py |  8 +++++---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
index 9975fe2c..ec412512 100644
--- a/cloudinit/net/sysconfig.py
+++ b/cloudinit/net/sysconfig.py
@@ -354,6 +354,23 @@ class Renderer(renderer.Renderer):
                     else:
                         iface_cfg['GATEWAY'] = subnet['gateway']
 
+                if 'dns_search' in subnet:
+                    if isinstance(subnet['dns_search'], (list, tuple)):
+                        # Currently limited to 6 entries per resolv.conf(5)
+                        search_list = subnet['dns_search'][:6]
+                        iface_cfg['DOMAIN'] = ' '.join(search_list)
+                    else:
+                        iface_cfg['DOMAIN'] = subnet['dns_search']
+
+                if 'dns_nameservers' in subnet:
+                    if isinstance(subnet['dns_nameservers'], (list, tuple)):
+                        # Currently limited to 3 entries per resolv.conf(5)
+                        dns_list = subnet['dns_nameservers'][:3]
+                        for i, k in enumerate(dns_list, 1):
+                            iface_cfg['DNS' + str(i)] = k
+                    else:
+                        iface_cfg['DNS1'] = subnet['dns_nameservers']
+
     @classmethod
     def _render_subnet_routes(cls, iface_cfg, route_cfg, subnets):
         for i, subnet in enumerate(subnets, start=len(iface_cfg.children)):
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
index d75742be..f2a1998a 100644
--- a/tests/unittests/test_net.py
+++ b/tests/unittests/test_net.py
@@ -780,7 +780,9 @@ USERCTL=no
 
     def test_config_with_explicit_loopback(self):
         ns = network_state.parse_net_config_data(CONFIG_V1_EXPLICIT_LOOPBACK)
-        render_dir = self.tmp_path("render")
+        tmp_dir = tempfile.mkdtemp()
+        self.addCleanup(shutil.rmtree, tmp_dir)
+        render_dir = os.path.join(tmp_dir, "render")
         os.makedirs(render_dir)
         renderer = sysconfig.Renderer()
         renderer.render_network_state(render_dir, ns)
@@ -792,7 +794,6 @@ USERCTL=no
 #
 BOOTPROTO=dhcp
 DEVICE=eth0
-NM_CONTROLLED=no
 ONBOOT=yes
 TYPE=Ethernet
 USERCTL=no
@@ -841,7 +842,8 @@ iface eth1000 inet dhcp
         self.assertEqual(expected.lstrip(), contents.lstrip())
 
     def test_config_with_explicit_loopback(self):
-        tmp_dir = self.tmp_dir()
+        tmp_dir = tempfile.mkdtemp()
+        self.addCleanup(shutil.rmtree, tmp_dir)
         ns = network_state.parse_net_config_data(CONFIG_V1_EXPLICIT_LOOPBACK)
         renderer = eni.Renderer()
         renderer.render_network_state(tmp_dir, ns)
-- 
2.14.3