diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-05-16 14:18:25 +0100 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2017-05-26 14:36:38 -0400 |
commit | 16a7302f6acb69adb0aee75eaf12392fa3688853 (patch) | |
tree | ec808d6cab9b97ef1de3d29ef91ad78f2537cec9 /cloudinit | |
parent | 1815c6d801933c47a01f1a94a8e689824f6797b4 (diff) | |
download | vyos-cloud-init-16a7302f6acb69adb0aee75eaf12392fa3688853.tar.gz vyos-cloud-init-16a7302f6acb69adb0aee75eaf12392fa3688853.zip |
net: fix reading and rendering addresses in cidr format.
Input (specifically OpenStack) that had:
"ip_address" : "104.130.20.155",
"netmask" : "255.255.255.0"
Was being rendered to netplan as '104.130.20.155/255.255.255.0'.
That is now fixed to '104.130.20.155/24'
Also fixed is reading of a route that had a network prefix integer
in the 'netmask' rather than a netmask.
LP: #1689346
LP: #1684349
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/net/netplan.py | 14 | ||||
-rw-r--r-- | cloudinit/net/network_state.py | 4 |
2 files changed, 10 insertions, 8 deletions
diff --git a/cloudinit/net/netplan.py b/cloudinit/net/netplan.py index d7ddf0c3..a715f3b0 100644 --- a/cloudinit/net/netplan.py +++ b/cloudinit/net/netplan.py @@ -4,7 +4,7 @@ import copy import os from . import renderer -from .network_state import subnet_is_ipv6 +from .network_state import mask2cidr, subnet_is_ipv6 from cloudinit import log as logging from cloudinit import util @@ -118,9 +118,10 @@ def _extract_addresses(config, entry): sn_type += '4' entry.update({sn_type: True}) elif sn_type in ['static']: - addr = "%s" % subnet.get('address') - if 'netmask' in subnet: - addr += "/%s" % subnet.get('netmask') + addr = '%s' % subnet.get('address') + netmask = subnet.get('netmask') + if netmask and '/' not in addr: + addr += '/%s' % mask2cidr(netmask) if 'gateway' in subnet and subnet.get('gateway'): gateway = subnet.get('gateway') if ":" in gateway: @@ -137,8 +138,9 @@ def _extract_addresses(config, entry): mtukey += '6' entry.update({mtukey: subnet.get('mtu')}) for route in subnet.get('routes', []): - to_net = "%s/%s" % (route.get('network'), - route.get('netmask')) + network = route.get('network') + netmask = route.get('netmask') + to_net = '%s/%s' % (network, mask2cidr(netmask)) route = { 'via': route.get('gateway'), 'to': to_net, diff --git a/cloudinit/net/network_state.py b/cloudinit/net/network_state.py index db3c3579..9e9c05a0 100644 --- a/cloudinit/net/network_state.py +++ b/cloudinit/net/network_state.py @@ -734,9 +734,9 @@ def ipv6mask2cidr(mask): def mask2cidr(mask): - if ':' in mask: + if ':' in str(mask): return ipv6mask2cidr(mask) - elif '.' in mask: + elif '.' in str(mask): return ipv4mask2cidr(mask) else: return mask |