summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri John Ledkov <xnox@ubuntu.com>2017-05-16 14:18:25 +0100
committerScott Moser <smoser@brickies.net>2017-05-26 14:36:38 -0400
commit16a7302f6acb69adb0aee75eaf12392fa3688853 (patch)
treeec808d6cab9b97ef1de3d29ef91ad78f2537cec9
parent1815c6d801933c47a01f1a94a8e689824f6797b4 (diff)
downloadcloud-init-git-16a7302f6acb69adb0aee75eaf12392fa3688853.tar.gz
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
-rw-r--r--cloudinit/net/netplan.py14
-rw-r--r--cloudinit/net/network_state.py4
-rw-r--r--tests/unittests/test_distros/test_netconfig.py2
-rw-r--r--tests/unittests/test_net.py2
4 files changed, 12 insertions, 10 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
diff --git a/tests/unittests/test_distros/test_netconfig.py b/tests/unittests/test_distros/test_netconfig.py
index fd7c051f..be9a8318 100644
--- a/tests/unittests/test_distros/test_netconfig.py
+++ b/tests/unittests/test_distros/test_netconfig.py
@@ -127,7 +127,7 @@ network:
ethernets:
eth0:
addresses:
- - 192.168.1.5/255.255.255.0
+ - 192.168.1.5/24
gateway4: 192.168.1.254
eth1:
dhcp4: true
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
index 5169821a..167ed01e 100644
--- a/tests/unittests/test_net.py
+++ b/tests/unittests/test_net.py
@@ -406,7 +406,7 @@ NETWORK_CONFIGS = {
- sach.maas
- wark.maas
routes:
- - to: 0.0.0.0/0.0.0.0
+ - to: 0.0.0.0/0
via: 65.61.151.37
set-name: eth99
""").rstrip(' '),