diff options
author | Scott Moser <smoser@brickies.net> | 2017-03-15 12:06:40 -0400 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2017-03-17 14:28:28 -0400 |
commit | 1a2ca7530518d819cbab7287b12f942743427e38 (patch) | |
tree | d262d253e57c119cb4b87d919c8f23b8747f79a2 /cloudinit/net | |
parent | 3ec116a1bb3646c2ff932bed24b4bf087b51cb8c (diff) | |
download | vyos-cloud-init-1a2ca7530518d819cbab7287b12f942743427e38.tar.gz vyos-cloud-init-1a2ca7530518d819cbab7287b12f942743427e38.zip |
support 'loopback' as a device type.
As reported in bug 1671927, sysconfig had an issue with rendering
a loopback device. The problem was that some as yet unknown issue was
causing the openstack config drive to parse the provided ENI file rather
than reading the network_data.json. Parsing an ENI file would add a
a 'lo' device of type 'physical', and sysconfig was failing to render
that.
The change here is:
a.) add a 'loopback' type rather than 'physical' for network config.
{'name': 'lo', 'type': 'loopback', 'subnets': ['type': 'loopback']}
b.) support skipping that type in the eni and sysconfig renderers.
c.) make network_state just piggy back on 'physical' renderer for
loopback (this was what was happening before).
Tests are added for eni and sysconfig renderer.
Diffstat (limited to 'cloudinit/net')
-rw-r--r-- | cloudinit/net/eni.py | 16 | ||||
-rw-r--r-- | cloudinit/net/network_state.py | 4 | ||||
-rw-r--r-- | cloudinit/net/sysconfig.py | 2 |
3 files changed, 16 insertions, 6 deletions
diff --git a/cloudinit/net/eni.py b/cloudinit/net/eni.py index 5b249f1f..69ecbb5d 100644 --- a/cloudinit/net/eni.py +++ b/cloudinit/net/eni.py @@ -273,8 +273,11 @@ def _ifaces_to_net_config_data(ifaces): # devname is 'eth0' for name='eth0:1' devname = name.partition(":")[0] if devname not in devs: - devs[devname] = {'type': 'physical', 'name': devname, - 'subnets': []} + if devname == "lo": + dtype = "loopback" + else: + dtype = "physical" + devs[devname] = {'type': dtype, 'name': devname, 'subnets': []} # this isnt strictly correct, but some might specify # hwaddress on a nic for matching / declaring name. if 'hwaddress' in data: @@ -423,10 +426,11 @@ class Renderer(renderer.Renderer): bonding ''' order = { - 'physical': 0, - 'bond': 1, - 'bridge': 2, - 'vlan': 3, + 'loopback': 0, + 'physical': 1, + 'bond': 2, + 'bridge': 3, + 'vlan': 4, } sections = [] diff --git a/cloudinit/net/network_state.py b/cloudinit/net/network_state.py index 11ef585b..90b2835a 100644 --- a/cloudinit/net/network_state.py +++ b/cloudinit/net/network_state.py @@ -212,6 +212,10 @@ class NetworkStateInterpreter(object): LOG.debug(self.dump_network_state()) @ensure_command_keys(['name']) + def handle_loopback(self, command): + return self.handle_physical(command) + + @ensure_command_keys(['name']) def handle_physical(self, command): ''' command = { diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py index 06de660f..7f52db4a 100644 --- a/cloudinit/net/sysconfig.py +++ b/cloudinit/net/sysconfig.py @@ -368,6 +368,8 @@ class Renderer(renderer.Renderer): '''Given state, return /etc/sysconfig files + contents''' iface_contents = {} for iface in network_state.iter_interfaces(): + if iface['type'] == "loopback": + continue iface_name = iface['name'] iface_cfg = NetInterface(iface_name, base_sysconf_dir) cls._render_iface_shared(iface, iface_cfg) |