summaryrefslogtreecommitdiff
path: root/cloudinit/net/cmdline.py
diff options
context:
space:
mode:
authorScott Moser <smoser@brickies.net>2016-11-04 13:46:09 -0400
committerScott Moser <smoser@brickies.net>2016-11-04 13:46:09 -0400
commitb380e16183446f2e39f47a3c0804d2081714acb2 (patch)
treea5e05b4a22553769d6eaa7e5fa93e3401a758b2b /cloudinit/net/cmdline.py
parent882b22e024733e17757fdbe36ba2a3672c6ebe06 (diff)
parenta1cdebdea65ccd827060c823146992bba9debe19 (diff)
downloadvyos-cloud-init-b380e16183446f2e39f47a3c0804d2081714acb2.tar.gz
vyos-cloud-init-b380e16183446f2e39f47a3c0804d2081714acb2.zip
merge from master at 0.7.8-34-ga1cdebd
Diffstat (limited to 'cloudinit/net/cmdline.py')
-rw-r--r--cloudinit/net/cmdline.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/cloudinit/net/cmdline.py b/cloudinit/net/cmdline.py
index 822a020b..4075a279 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:
@@ -74,19 +76,20 @@ def _klibc_to_config_entry(content, mac_addrs=None):
data = _load_shell_content(content)
try:
- name = data['DEVICE']
+ name = data['DEVICE'] if 'DEVICE' in data else data['DEVICE6']
except KeyError:
- raise ValueError("no 'DEVICE' entry in data")
+ raise ValueError("no 'DEVICE' or 'DEVICE6' entry in data")
# ipconfig on precise does not write PROTO
- proto = data.get('PROTO')
+ # IPv6 config gives us IPV6PROTO, not PROTO.
+ proto = data.get('PROTO', data.get('IPV6PROTO'))
if not proto:
if data.get('filename'):
proto = 'dhcp'
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 +101,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'):