Comment 0 for bug 1657940

Revision history for this message
Scott Moser (smoser) wrote :

Currently, a config like this:
| version: 1
| config:
| - 'type': 'physical'
| 'name': 'iface0'
| 'subnets':
| - {'type': 'dhcp4'}
| - {'type': 'dhcp6'}

Will render:
| auto lo
| iface lo inet loopback
|
| auto iface0
| iface iface0 inet dhcp
| post-up ifup iface0:1
|
|
| auto iface0:1
| iface iface0:1 inet6 dhcp

Below is an example test case that shows the output.
Heres the problem:
$ sudo sh -c 'ifdown eth0; ifup eth0'
$ sudo sh -c 'ifdown eth0; ifup eth0'
Killed old client process
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/06:b3:0a:3a:2d:e3
Sending on LPF/eth0/06:b3:0a:3a:2d:e3
Sending on Socket/fallback
DHCPRELEASE on eth0 to 172.31.16.1 port 67 (xid=0x32b625f1)
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/06:b3:0a:3a:2d:e3
Sending on LPF/eth0/06:b3:0a:3a:2d:e3
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0xa4d5f301)
DHCPREQUEST of 172.31.29.161 on eth0 to 255.255.255.255 port 67 (xid=0x1f3d5a4)
DHCPOFFER of 172.31.29.161 from 172.31.16.1
DHCPACK of 172.31.29.161 from 172.31.16.1
bound to 172.31.29.161 -- renewal in 1801 seconds.

Failed to bring up eth0:1.
Failed to bring up eth0.

$ sudo ifup -v eth0:1
Parsing file /etc/network/interfaces.d/50-cloud-init.cfg
Parsing file /etc/network/interfaces.d/60-ipv6.cfg
Configuring interface eth0:1=eth0:1 (inet6)
/bin/run-parts --exit-on-error --verbose /etc/network/if-pre-up.d
run-parts: executing /etc/network/if-pre-up.d/ethtool
run-parts: executing /etc/network/if-pre-up.d/ifenslave
+ [ inet6 = meta ]
+ IF_BOND_SLAVES=
+ [ ]
+ [ ]
+ [ -z ]
+ exit
run-parts: executing /etc/network/if-pre-up.d/vlan
/sbin/modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
/sbin/sysctl -q -e -w net.ipv6.conf.eth0:1.accept_ra=1

/bin/ip link set dev eth0:1 up
/lib/ifupdown/wait-for-ll6.sh
/sbin/dhclient -1 -6 -pf /run/dhclient6.eth0:1.pid -lf /var/lib/dhcp/dhclient6.eth0:1.leases -I -df /var/lib/dhcp/dhclient.eth0:1.leases eth0:1

--- a/tests/unittests/test_net.py
+++ b/tests/unittests/test_net.py
@@ -813,6 +813,27 @@ class TestEniRoundTrip(TestCase):
         self.assertEqual(
             expected, [line for line in found if line])

+ def test_dhcp4_and_dhcp6(self):
+ conf = yaml.load(textwrap.dedent("""\
+ version: 1
+ config:
+ - 'type': 'physical'
+ 'name': 'iface0'
+ 'subnets':
+ - {'type': 'dhcp4'}
+ - {'type': 'dhcp6'}
+ """))
+
+ #conf = [
+ # {'type': 'physical', 'name': 'iface0',
+ # 'subnets': [
+ # {'type': 'dhcp4'},
+ # {'type': 'dhcp6'},
+ # ]},
+ #]
+ files = self._render_and_read(network_config=conf)
+ raise Exception(files['/etc/network/interfaces'])
+