--- cloudinit/distros/opensuse.py.orig +++ cloudinit/distros/opensuse.py @@ -172,8 +172,37 @@ class Distro(distros.Distro): util.write_file(out_fn, str(conf), 0o644) def _write_network_config(self, netconfig): + self._write_routes(netconfig) return self._supported_write_network_config(netconfig) + def _write_routes(self, netconfig): + """Write route files, not part of the standard distro interface""" + # Due to the implementation of the sysconfig renderer default routes + # are setup in ifcfg-* files. But this does not work on SLES or + # openSUSE https://bugs.launchpad.net/cloud-init/+bug/1812117 + # this is a very hacky way to get around the problem until a real + # solution is found in the sysconfig renderer + device_configs = netconfig.get('config', []) + default_nets = ('::', '0.0.0.0') + for config in device_configs: + if_name = config.get('name') + subnets = config.get('subnets', []) + for subnet in subnets: + routes = subnet.get('routes', []) + config_routes = '' + for route in routes: + dest = route.get('network') + if dest in default_nets: + dest = 'default' + gateway = route.get('gateway') + config_routes += ' '.join([dest, gateway]) + if dest != 'default': + config_routes += ' ' + route.get('netmask', '') + config_routes += '\n' + if config_routes: + route_file = '/etc/sysconfig/network/ifroute-%s' % if_name + util.write_file(route_file, config_routes) + @property def preferred_ntp_clients(self): """The preferred ntp client is dependent on the version."""