← Back to team overview

cloud-init-dev team mailing list archive

[Merge] ~smoser/cloud-init:bug/1639930-ip6-only into cloud-init:master

 

Scott Moser has proposed merging ~smoser/cloud-init:bug/1639930-ip6-only into cloud-init:master.

Requested reviews:
  cloud init development team (cloud-init-dev)
Related bugs:
  Bug #1639930 in cloud-init: "initramfs network configuration ignored if only ip6= on kernel command line"
  https://bugs.launchpad.net/cloud-init/+bug/1639930

For more details, see:
https://code.launchpad.net/~smoser/cloud-init/+git/cloud-init/+merge/310390
-- 
Your team cloud init development team is requested to review the proposed merge of ~smoser/cloud-init:bug/1639930-ip6-only into cloud-init:master.
diff --git a/cloudinit/net/cmdline.py b/cloudinit/net/cmdline.py
index 4075a27..a077730 100644
--- a/cloudinit/net/cmdline.py
+++ b/cloudinit/net/cmdline.py
@@ -199,7 +199,7 @@ def read_kernel_cmdline_config(files=None, mac_addrs=None, cmdline=None):
         if data64:
             return util.load_yaml(_b64dgz(data64))
 
-    if 'ip=' not in cmdline:
+    if 'ip=' not in cmdline and 'ip6=' not in cmdline:
         return None
 
     if mac_addrs is None:
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
index 78c080c..6df0db9 100644
--- a/tests/unittests/test_net.py
+++ b/tests/unittests/test_net.py
@@ -8,7 +8,9 @@ from cloudinit import util
 
 from .helpers import dir2dict
 from .helpers import mock
+from .helpers import populate_dir
 from .helpers import TestCase
+from .helpers import TempDirTestCase
 
 import base64
 import copy
@@ -54,22 +56,9 @@ DHCP_EXPECTED_1 = {
 }
 
 DHCP6_CONTENT_1 = """
-DEVICE=eno1
+DEVICE6=eno1
 HOSTNAME=
 DNSDOMAIN=
-reason='PREINIT'
-interface='eno1'
-DEVICE=eno1
-HOSTNAME=
-DNSDOMAIN=
-reason='FAIL'
-interface='eno1'
-DEVICE=eno1
-HOSTNAME=
-DNSDOMAIN=
-reason='PREINIT6'
-interface='eno1'
-DEVICE=eno1
 IPV6PROTO=dhcp6
 IPV6ADDR=2001:67c:1562:8010:0:1::
 IPV6NETMASK=64
@@ -77,11 +66,6 @@ IPV6DNS0=2001:67c:1562:8010::2:1
 IPV6DOMAINSEARCH=
 HOSTNAME=
 DNSDOMAIN=
-reason='BOUND6'
-interface='eno1'
-new_ip6_address='2001:67c:1562:8010:0:1::'
-new_ip6_prefixlen='64'
-new_dhcp6_name_servers='2001:67c:1562:8010::2:1'
 """
 
 DHCP6_EXPECTED_1 = {
@@ -677,6 +661,30 @@ class TestCmdlineConfigParsing(TestCase):
         self.assertEqual(found, self.simple_cfg)
 
 
+class TestCmdlineReadKernelConfig(TempDirTestCase):
+    def test_ip_cmdline_read_kernel_cmdline_ip6(self):
+        content = {'net6-eno1.conf': DHCP6_CONTENT_1}
+        populate_dir(self.tmp, content)
+        files = [os.path.join(self.tmp, k) for k in content.keys()]
+        found = cmdline.read_kernel_cmdline_config(
+            files=files, cmdline='foo ip6=dhcp root=/dev/sda')
+        self.assertEqual(
+            found,
+            {'version': 1, 'config': [
+             {'type': 'physical', 'name': 'eno1',
+              'subnets': [
+                  {'dns_nameservers': ['2001:67c:1562:8010::2:1'],
+                   'control': 'manual', 'type': 'dhcp6', 'netmask': '64'}]}]})
+
+    def test_ip_cmdline_read_kernel_cmdline_none(self):
+        content = {'net6-eno1.conf': DHCP6_CONTENT_1}
+        populate_dir(self.tmp, content)
+        files = [os.path.join(self.tmp, k) for k in content.keys()]
+        found = cmdline.read_kernel_cmdline_config(
+            files=files, cmdline='foo root=/dev/sda')
+        self.assertEqual(found, None)
+
+
 class TestEniRoundTrip(TestCase):
     def setUp(self):
         super(TestCase, self).setUp()

Follow ups