diff --git a/cloud-init-proper-ipv6-varname.patch b/cloud-init-proper-ipv6-varname.patch new file mode 100644 index 0000000..03744c3 --- /dev/null +++ b/cloud-init-proper-ipv6-varname.patch @@ -0,0 +1,112 @@ +--- cloudinit/net/sysconfig.py.orig ++++ cloudinit/net/sysconfig.py +@@ -369,10 +369,13 @@ class Renderer(renderer.Renderer): + ipv6_cidr = "%s/%s" % (subnet['address'], subnet['prefix']) + if ipv6_index == 0: + iface_cfg['IPV6ADDR'] = ipv6_cidr ++ iface_cfg['IPADDR6'] = ipv6_cidr + elif ipv6_index == 1: + iface_cfg['IPV6ADDR_SECONDARIES'] = ipv6_cidr ++ iface_cfg['IPADDR6_0'] = ipv6_cidr + else: + iface_cfg['IPV6ADDR_SECONDARIES'] += " " + ipv6_cidr ++ iface_cfg['IPADDR6_%d' % ipv6_index] = ipv6_cidr + else: + ipv4_index = ipv4_index + 1 + suff = "" if ipv4_index == 0 else str(ipv4_index) +--- tests/unittests/test_distros/test_netconfig.py.orig ++++ tests/unittests/test_distros/test_netconfig.py +@@ -496,6 +496,7 @@ class TestNetCfgDistroRedhat(TestNetCfgD + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 ++ IPADDR6=2607:f0d0:1002:0011::2/64 + IPV6ADDR=2607:f0d0:1002:0011::2/64 + IPV6INIT=yes + IPV6_DEFAULTGW=2607:f0d0:1002:0011::1 +@@ -588,6 +589,7 @@ class TestNetCfgDistroOpensuse(TestNetCf + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 ++ IPADDR6=2607:f0d0:1002:0011::2/64 + IPV6ADDR=2607:f0d0:1002:0011::2/64 + IPV6INIT=yes + IPV6_DEFAULTGW=2607:f0d0:1002:0011::1 +--- tests/unittests/test_net.py.orig ++++ tests/unittests/test_net.py +@@ -369,6 +369,9 @@ DEVICE=eth0 + GATEWAY=172.19.3.254 + HWADDR=fa:16:3e:ed:9a:59 + IPADDR=172.19.1.34 ++IPADDR6=2001:DB8::10/64 ++IPADDR6_0=2001:DB9::10/64 ++IPADDR6_2=2001:DB10::10/64 + IPV6ADDR=2001:DB8::10/64 + IPV6ADDR_SECONDARIES="2001:DB9::10/64 2001:DB10::10/64" + IPV6INIT=yes +@@ -407,6 +410,9 @@ DEVICE=eth0 + GATEWAY=172.19.3.254 + HWADDR=fa:16:3e:ed:9a:59 + IPADDR=172.19.1.34 ++IPADDR6=2001:DB8::10/64 ++IPADDR6_0=2001:DB9::10/64 ++IPADDR6_2=2001:DB10::10/64 + IPV6ADDR=2001:DB8::10/64 + IPV6ADDR_SECONDARIES="2001:DB9::10/64 2001:DB10::10/64" + IPV6INIT=yes +@@ -658,6 +664,7 @@ NETWORK_CONFIGS = { + BOOTPROTO=none + DEVICE=iface0 + IPADDR=192.168.14.2 ++ IPADDR6=2001:1::1/64 + IPV6ADDR=2001:1::1/64 + IPV6INIT=yes + NETMASK=255.255.255.0 +@@ -927,6 +934,7 @@ pre-down route del -net 10.0.0.0 netmask + DEFROUTE=yes + DEVICE=br0 + IPADDR=192.168.14.2 ++ IPADDR6=2001:1::1/64 + IPV6ADDR=2001:1::1/64 + IPV6INIT=yes + IPV6_DEFAULTGW=2001:4800:78ff:1b::1 +@@ -1322,6 +1330,7 @@ pre-down route del -net 10.0.0.0 netmask + MACADDR=aa:bb:cc:dd:e8:ff + IPADDR=192.168.0.2 + IPADDR1=192.168.1.2 ++ IPADDR6=2001:1::1/92 + IPV6ADDR=2001:1::1/92 + IPV6INIT=yes + MTU=9000 +@@ -1377,6 +1386,7 @@ pre-down route del -net 10.0.0.0 netmask + MACADDR=aa:bb:cc:dd:e8:ff + IPADDR=192.168.0.2 + IPADDR1=192.168.1.2 ++ IPADDR6=2001:1::1/92 + IPV6ADDR=2001:1::1/92 + IPV6INIT=yes + MTU=9000 +@@ -1467,6 +1477,7 @@ pre-down route del -net 10.0.0.0 netmask + GATEWAY=192.168.1.1 + IPADDR=192.168.2.2 + IPADDR1=192.168.1.2 ++ IPADDR6=2001:1::100/96 + IPV6ADDR=2001:1::bbbb/96 + IPV6INIT=yes + IPV6_DEFAULTGW=2001:1::1 +@@ -1528,6 +1539,7 @@ pre-down route del -net 10.0.0.0 netmask + BRIDGE=br0 + DEVICE=eth0 + HWADDR=52:54:00:12:34:00 ++ IPADDR6=2001:1::100/96 + IPV6ADDR=2001:1::100/96 + IPV6INIT=yes + NM_CONTROLLED=no +@@ -1541,6 +1553,7 @@ pre-down route del -net 10.0.0.0 netmask + BRIDGE=br0 + DEVICE=eth1 + HWADDR=52:54:00:12:34:01 ++ IPADDR6=2001:1::101/96 + IPV6ADDR=2001:1::101/96 + IPV6INIT=yes + NM_CONTROLLED=no diff --git a/cloud-init-trigger-udev.patch b/cloud-init-trigger-udev.patch new file mode 100644 index 0000000..8f58bbe --- /dev/null +++ b/cloud-init-trigger-udev.patch @@ -0,0 +1,35 @@ +--- cloudinit/net/sysconfig.py.orig ++++ cloudinit/net/sysconfig.py +@@ -15,6 +15,7 @@ from .network_state import ( + is_ipv6_addr, net_prefix_to_ipv4_mask, subnet_is_ipv6) + + LOG = logging.getLogger(__name__) ++PERS_NET_RULES_DEFAULT = 'etc/udev/rules.d/70-persistent-net.rules' + + + def _make_header(sep='#'): +@@ -276,7 +277,7 @@ class Renderer(renderer.Renderer): + config = {} + self.sysconf_dir = config.get('sysconf_dir', 'etc/sysconfig') + self.netrules_path = config.get( +- 'netrules_path', 'etc/udev/rules.d/70-persistent-net.rules') ++ 'netrules_path', PERS_NET_RULES_DEFAULT) + self.dns_path = config.get('dns_path', 'etc/resolv.conf') + nm_conf_path = 'etc/NetworkManager/conf.d/99-cloud-init.conf' + self.networkmanager_conf_path = config.get('networkmanager_conf_path', +@@ -676,6 +677,15 @@ class Renderer(renderer.Renderer): + netrules_content = self._render_persistent_net(network_state) + netrules_path = util.target_path(target, self.netrules_path) + util.write_file(netrules_path, netrules_content, file_mode) ++ # Making the assumption that the configured file is in a sane ++ # location ++ if ( ++ os.path.basename(PERS_NET_RULES_DEFAULT) ++ != os.path.basename(netrules_path) ++ ): ++ util.subp( ++ ['udevadm', 'trigger', '-a ACTION=add', '-a SUBSYSTEM=net'] ++ ) + + sysconfig_path = util.target_path(target, templates.get('control')) + # Distros configuring /etc/sysconfig/network as a file e.g. Centos diff --git a/cloud-init-write-routes.patch b/cloud-init-write-routes.patch index 59443dc..43f3760 100644 --- a/cloud-init-write-routes.patch +++ b/cloud-init-write-routes.patch @@ -1,12 +1,15 @@ --- cloudinit/distros/opensuse.py.orig +++ cloudinit/distros/opensuse.py -@@ -172,8 +172,40 @@ class Distro(distros.Distro): +@@ -172,7 +172,41 @@ class Distro(distros.Distro): util.write_file(out_fn, str(conf), 0o644) def _write_network_config(self, netconfig): +- return self._supported_write_network_config(netconfig) ++ net_apply_res = self._supported_write_network_config(netconfig) ++ # Clobber the route files that were written in RH key-value style + self._write_routes(netconfig) - return self._supported_write_network_config(netconfig) - ++ return net_apply_res ++ + 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 @@ -37,7 +40,6 @@ + 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.""" diff --git a/cloud-init.changes b/cloud-init.changes index e08462f..9f0bec6 100644 --- a/cloud-init.changes +++ b/cloud-init.changes @@ -1,3 +1,23 @@ +------------------------------------------------------------------- +Fri Feb 22 22:11:20 UTC 2019 - Robert Schweikert + +- Add cloud-init-trigger-udev.patch (bsc#1125950) + + When the user configures a new rules file for network devices + the rules may not apply immediately, trigger udevadm + +------------------------------------------------------------------- +Fri Feb 22 16:20:28 UTC 2019 - Robert Schweikert + +- Modify cloud-init-write-routes.patch (bsc#1125992) + + Fix the order of calls, the SUSE imaplementation of route config file + writing must clobber the default implementation. + +------------------------------------------------------------------- +Fri Feb 22 00:42:14 UTC 2019 - Robert Schweikert + +- Add cloud-init-proper-ipv6-varname.patch (bsc#1126101) + + Use the proper name to designate IPv6 addresses in ifcfg-* files + ------------------------------------------------------------------- Thu Jan 31 17:13:21 UTC 2019 - Robert Schweikert diff --git a/cloud-init.spec b/cloud-init.spec index d7244fb..75200e0 100644 --- a/cloud-init.spec +++ b/cloud-init.spec @@ -53,6 +53,10 @@ Patch44: cloud-init-handle-def-route-set.patch # End lp#1812117 # FIXME (lp#1812853) Patch45: cloud-init-no-empty-resolv.patch +# FIXME (lp#1817230) +Patch46: cloud-init-proper-ipv6-varname.patch +# FIXME (lp#1817368) +Patch47: cloud-init-trigger-udev.patch BuildRequires: fdupes BuildRequires: filesystem @@ -200,6 +204,8 @@ Documentation and examples for cloud-init tools %patch43 %patch44 %patch45 +%patch46 +%patch47 %build %if 0%{?suse_version} && 0%{?suse_version} <= 1315