diff options
| author | Scott Moser <smoser@brickies.net> | 2016-09-21 11:55:27 -0400 | 
|---|---|---|
| committer | Scott Moser <smoser@brickies.net> | 2016-09-21 11:55:27 -0400 | 
| commit | f4eeca19cb8fc7d450f76ea2d8b2e19b6b73c52f (patch) | |
| tree | 357130e2c62b30a0d8ca2cec5c86d62466f12a18 | |
| parent | 9f5d2389c6339c718aedbe89f0e468c7b4e04c7b (diff) | |
| parent | 970dbd13f5ae40b0f95ea390b72d2b3426e8e4d9 (diff) | |
| download | vyos-cloud-init-f4eeca19cb8fc7d450f76ea2d8b2e19b6b73c52f.tar.gz vyos-cloud-init-f4eeca19cb8fc7d450f76ea2d8b2e19b6b73c52f.zip | |
merge from master at 0.7.8-4-g970dbd1
| -rw-r--r-- | cloudinit/net/cmdline.py | 15 | ||||
| -rw-r--r-- | tests/unittests/test_net.py | 43 | 
2 files changed, 53 insertions, 5 deletions
| diff --git a/cloudinit/net/cmdline.py b/cloudinit/net/cmdline.py index 822a020b..933317d5 100644 --- a/cloudinit/net/cmdline.py +++ b/cloudinit/net/cmdline.py @@ -66,7 +66,9 @@ def _klibc_to_config_entry(content, mac_addrs=None):      provided here.  There is no good documentation on this unfortunately.      DEVICE=<name> is expected/required and PROTO should indicate if -    this is 'static' or 'dhcp'. +    this is 'static' or 'dhcp' or 'dhcp6' (LP: #1621507). +    note that IPV6PROTO is also written by newer code to address the +    possibility of both ipv4 and ipv6 getting addresses.      """      if mac_addrs is None: @@ -86,7 +88,7 @@ def _klibc_to_config_entry(content, mac_addrs=None):          else:              proto = 'static' -    if proto not in ('static', 'dhcp'): +    if proto not in ('static', 'dhcp', 'dhcp6'):          raise ValueError("Unexpected value for PROTO: %s" % proto)      iface = { @@ -98,12 +100,15 @@ def _klibc_to_config_entry(content, mac_addrs=None):      if name in mac_addrs:          iface['mac_address'] = mac_addrs[name] -    # originally believed there might be IPV6* values -    for v, pre in (('ipv4', 'IPV4'),): +    # Handle both IPv4 and IPv6 values +    for v, pre in (('ipv4', 'IPV4'), ('ipv6', 'IPV6')):          # if no IPV4ADDR or IPV6ADDR, then go on.          if pre + "ADDR" not in data:              continue -        subnet = {'type': proto, 'control': 'manual'} + +        # PROTO for ipv4, IPV6PROTO for ipv6 +        cur_proto = data.get(pre + 'PROTO', proto) +        subnet = {'type': cur_proto, 'control': 'manual'}          # these fields go right on the subnet          for key in ('NETMASK', 'BROADCAST', 'GATEWAY'): diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py index 41b9a6d0..78c080ca 100644 --- a/tests/unittests/test_net.py +++ b/tests/unittests/test_net.py @@ -53,6 +53,45 @@ DHCP_EXPECTED_1 = {                   'dns_nameservers': ['192.168.122.1']}],  } +DHCP6_CONTENT_1 = """ +DEVICE=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 +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 = { +    'name': 'eno1', +    'type': 'physical', +    'subnets': [{'control': 'manual', +                 'dns_nameservers': ['2001:67c:1562:8010::2:1'], +                 'netmask': '64', +                 'type': 'dhcp6'}]} +  STATIC_CONTENT_1 = """  DEVICE='eth1' @@ -590,6 +629,10 @@ class TestCmdlineConfigParsing(TestCase):          found = cmdline._klibc_to_config_entry(DHCP_CONTENT_1)          self.assertEqual(found, ('eth0', DHCP_EXPECTED_1)) +    def test_cmdline_convert_dhcp6(self): +        found = cmdline._klibc_to_config_entry(DHCP6_CONTENT_1) +        self.assertEqual(found, ('eno1', DHCP6_EXPECTED_1)) +      def test_cmdline_convert_static(self):          found = cmdline._klibc_to_config_entry(STATIC_CONTENT_1)          self.assertEqual(found, ('eth1', STATIC_EXPECTED_1)) | 
