commit 3f9a9c1ae8447d61143e5b900eaf3202da6db127 Author: MSVSphere Packaging Team Date: Fri Mar 29 15:21:32 2024 +0300 import cloud-init-23.4-5.el8 diff --git a/.cloud-init.metadata b/.cloud-init.metadata new file mode 100644 index 0000000..061dfea --- /dev/null +++ b/.cloud-init.metadata @@ -0,0 +1 @@ +e73116733f5636eb4bc1a5e47e802c3635b9bfa2 SOURCES/23.4.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7fc7ce6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/23.4.tar.gz diff --git a/SOURCES/0003-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch b/SOURCES/0003-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch new file mode 100644 index 0000000..538f4d1 --- /dev/null +++ b/SOURCES/0003-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch @@ -0,0 +1,550 @@ +From 2d3a22bd5b36c20b53f1604e9ff6ce05c98753ec Mon Sep 17 00:00:00 2001 +From: Cathy Avery +Date: Mon, 18 Dec 2023 12:54:16 -0500 +Subject: Do not write NM_CONTROLLED=no in generated interface config files + +Squashed from: + From 3ee57b044d2b85d8172961258d2edeab82a43772 Mon Sep 17 00:00:00 2001 + From: Eduardo Otubo + Date: Fri, 7 May 2021 13:36:06 +0200 + Subject: [PATCH 02/12] Do not write NM_CONTROLLED=no in generated interface config files + + From 3a070f23440c9eb6e0e5fb3605e36285e8a5b727 Mon Sep 17 00:00:00 2001 + From: Ani Sinha + Date: Fri, 23 Jun 2023 16:54:24 +0530 + Subject: [PATCH 27/51] test fixes: remove NM_CONTROLLED=no from tests + fixes: b3b96bff187e9 ("Do not write NM_CONTROLLED=no in generated interface config files") + +X-downstream-only: true + +Signed-off-by: Cathy Avery +--- + cloudinit/net/sysconfig.py | 1 - + tests/unittests/cmd/devel/test_net_convert.py | 1 - + tests/unittests/distros/test_netconfig.py | 8 --- + tests/unittests/test_net.py | 53 ------------------- + 4 files changed, 63 deletions(-) + +diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py +index 7570a5e3..3b7a1f93 100644 +--- a/cloudinit/net/sysconfig.py ++++ b/cloudinit/net/sysconfig.py +@@ -317,7 +317,6 @@ class Renderer(renderer.Renderer): + "rhel": { + "ONBOOT": True, + "USERCTL": False, +- "NM_CONTROLLED": False, + "BOOTPROTO": "none", + }, + "suse": {"BOOTPROTO": "static", "STARTMODE": "auto"}, +diff --git a/tests/unittests/cmd/devel/test_net_convert.py b/tests/unittests/cmd/devel/test_net_convert.py +index fb72963f..7b9121b2 100644 +--- a/tests/unittests/cmd/devel/test_net_convert.py ++++ b/tests/unittests/cmd/devel/test_net_convert.py +@@ -62,7 +62,6 @@ SAMPLE_SYSCONFIG_CONTENT = """\ + # + BOOTPROTO=dhcp + DEVICE=eth0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +diff --git a/tests/unittests/distros/test_netconfig.py b/tests/unittests/distros/test_netconfig.py +index 7ba430f2..962ff7fb 100644 +--- a/tests/unittests/distros/test_netconfig.py ++++ b/tests/unittests/distros/test_netconfig.py +@@ -723,7 +723,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + GATEWAY=192.168.1.254 + IPADDR=192.168.1.5 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -733,7 +732,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + """\ + BOOTPROTO=dhcp + DEVICE=eth1 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -764,7 +762,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + IPV6_AUTOCONF=no + IPV6_DEFAULTGW=2607:f0d0:1002:0011::1 + IPV6_FORCE_ACCEPT_RA=no +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -774,7 +771,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + """\ + BOOTPROTO=dhcp + DEVICE=eth1 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -821,7 +817,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + HWADDR=00:16:3e:60:7c:df + IPADDR=192.10.1.2 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -833,7 +828,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + DEVICE=infra0 + IPADDR=10.0.1.2 + NETMASK=255.255.0.0 +- NM_CONTROLLED=no + ONBOOT=yes + PHYSDEV=eth0 + USERCTL=no +@@ -869,7 +863,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + DEVICE=eth0 + IPADDR=192.10.1.2 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -881,7 +874,6 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + DEVICE=eth0.1001 + IPADDR=10.0.1.2 + NETMASK=255.255.0.0 +- NM_CONTROLLED=no + ONBOOT=yes + PHYSDEV=eth0 + USERCTL=no +diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py +index c5509536..052b0674 100644 +--- a/tests/unittests/test_net.py ++++ b/tests/unittests/test_net.py +@@ -585,7 +585,6 @@ GATEWAY=172.19.3.254 + HWADDR=fa:16:3e:ed:9a:59 + IPADDR=172.19.1.34 + NETMASK=255.255.252.0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -750,7 +749,6 @@ IPADDR=172.19.1.34 + IPADDR1=10.0.0.10 + NETMASK=255.255.252.0 + NETMASK1=255.255.255.0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -912,7 +910,6 @@ IPV6_AUTOCONF=no + IPV6_DEFAULTGW=2001:DB8::1 + IPV6_FORCE_ACCEPT_RA=no + NETMASK=255.255.252.0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -1143,7 +1140,6 @@ NETWORK_CONFIGS = { + BOOTPROTO=none + DEVICE=eth1 + HWADDR=cf:d6:af:48:e8:80 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -1162,7 +1158,6 @@ NETWORK_CONFIGS = { + IPADDR=192.168.21.3 + NETMASK=255.255.255.0 + METRIC=10000 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -1319,7 +1314,6 @@ NETWORK_CONFIGS = { + BOOTPROTO=none + DEVICE=eth1 + HWADDR=cf:d6:af:48:e8:80 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -1338,7 +1332,6 @@ NETWORK_CONFIGS = { + IPADDR=192.168.21.3 + NETMASK=255.255.255.0 + METRIC=10000 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -1581,7 +1574,6 @@ NETWORK_CONFIGS = { + IPV6_AUTOCONF=no + IPV6_FORCE_ACCEPT_RA=no + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -1725,7 +1717,6 @@ NETWORK_CONFIGS = { + DHCPV6C=yes + IPV6INIT=yes + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -1816,7 +1807,6 @@ NETWORK_CONFIGS = { + IPV6INIT=yes + IPV6_FORCE_ACCEPT_RA=yes + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -1892,7 +1882,6 @@ NETWORK_CONFIGS = { + IPV6INIT=yes + IPV6_FORCE_ACCEPT_RA=no + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -1956,7 +1945,6 @@ NETWORK_CONFIGS = { + IPV6_AUTOCONF=yes + IPV6INIT=yes + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -2014,7 +2002,6 @@ NETWORK_CONFIGS = { + IPV6_AUTOCONF=no + IPV6_FORCE_ACCEPT_RA=no + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -2071,7 +2058,6 @@ NETWORK_CONFIGS = { + IPV6_AUTOCONF=yes + IPV6INIT=yes + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -2157,7 +2143,6 @@ NETWORK_CONFIGS = { + IPV6_FAILURE_FATAL=yes + IPV6_FORCE_ACCEPT_RA=yes + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -2198,7 +2183,6 @@ NETWORK_CONFIGS = { + """\ + BOOTPROTO=dhcp + DEVICE=iface0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -2275,7 +2259,6 @@ NETWORK_CONFIGS = { + BOOTPROTO=dhcp + DEVICE=iface0 + ETHTOOL_OPTS="wol g" +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -2619,7 +2602,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + DHCPV6C=yes + IPV6INIT=yes + MACADDR=aa:bb:cc:dd:ee:ff +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Bond + USERCTL=no""" +@@ -2629,7 +2611,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + BOOTPROTO=dhcp + DEVICE=bond0.200 + DHCLIENT_SET_DEFAULT_ROUTE=no +- NM_CONTROLLED=no + ONBOOT=yes + PHYSDEV=bond0 + USERCTL=no +@@ -2649,7 +2630,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + IPV6_DEFAULTGW=2001:4800:78ff:1b::1 + MACADDR=bb:bb:bb:bb:bb:aa + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + PRIO=22 + STP=no +@@ -2661,7 +2641,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + BOOTPROTO=none + DEVICE=eth0 + HWADDR=c0:d6:9f:2c:e8:80 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -2680,7 +2659,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + MTU=1500 + NETMASK=255.255.255.0 + NETMASK1=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + PHYSDEV=eth0 + USERCTL=no +@@ -2692,7 +2670,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + DEVICE=eth1 + HWADDR=aa:d6:9f:2c:e8:80 + MASTER=bond0 +- NM_CONTROLLED=no + ONBOOT=yes + SLAVE=yes + TYPE=Ethernet +@@ -2704,7 +2681,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + DEVICE=eth2 + HWADDR=c0:bb:9f:2c:e8:80 + MASTER=bond0 +- NM_CONTROLLED=no + ONBOOT=yes + SLAVE=yes + TYPE=Ethernet +@@ -2716,7 +2692,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + BRIDGE=br0 + DEVICE=eth3 + HWADDR=66:bb:9f:2c:e8:80 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -2727,7 +2702,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + BRIDGE=br0 + DEVICE=eth4 + HWADDR=98:bb:9f:2c:e8:80 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -2738,7 +2712,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + DEVICE=eth5 + DHCLIENT_SET_DEFAULT_ROUTE=no + HWADDR=98:bb:9f:2c:e8:8a +- NM_CONTROLLED=no + ONBOOT=no + TYPE=Ethernet + USERCTL=no""" +@@ -2751,7 +2724,6 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + IPADDR=192.168.200.7 + MTU=9000 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=InfiniBand + USERCTL=no""" +@@ -3473,7 +3445,6 @@ iface bond0 inet6 static + MTU=9000 + NETMASK=255.255.255.0 + NETMASK1=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Bond + USERCTL=no +@@ -3485,7 +3456,6 @@ iface bond0 inet6 static + DEVICE=bond0s0 + HWADDR=aa:bb:cc:dd:e8:00 + MASTER=bond0 +- NM_CONTROLLED=no + ONBOOT=yes + SLAVE=yes + TYPE=Ethernet +@@ -3513,7 +3483,6 @@ iface bond0 inet6 static + DEVICE=bond0s1 + HWADDR=aa:bb:cc:dd:e8:01 + MASTER=bond0 +- NM_CONTROLLED=no + ONBOOT=yes + SLAVE=yes + TYPE=Ethernet +@@ -3662,7 +3631,6 @@ iface bond0 inet6 static + BOOTPROTO=none + DEVICE=en0 + HWADDR=aa:bb:cc:dd:e8:00 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -3683,7 +3651,6 @@ iface bond0 inet6 static + MTU=2222 + NETMASK=255.255.255.0 + NETMASK1=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + PHYSDEV=en0 + USERCTL=no +@@ -3811,7 +3778,6 @@ iface bond0 inet6 static + DEVICE=br0 + IPADDR=192.168.2.2 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + PRIO=22 + STP=no +@@ -3829,7 +3795,6 @@ iface bond0 inet6 static + IPV6INIT=yes + IPV6_AUTOCONF=no + IPV6_FORCE_ACCEPT_RA=no +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -3845,7 +3810,6 @@ iface bond0 inet6 static + IPV6INIT=yes + IPV6_AUTOCONF=no + IPV6_FORCE_ACCEPT_RA=no +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -4030,7 +3994,6 @@ iface bond0 inet6 static + HWADDR=52:54:00:12:34:00 + IPADDR=192.168.1.2 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=no + TYPE=Ethernet + USERCTL=no +@@ -4042,7 +4005,6 @@ iface bond0 inet6 static + DEVICE=eth1 + HWADDR=52:54:00:12:34:aa + MTU=1480 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -4053,7 +4015,6 @@ iface bond0 inet6 static + BOOTPROTO=none + DEVICE=eth2 + HWADDR=52:54:00:12:34:ff +- NM_CONTROLLED=no + ONBOOT=no + TYPE=Ethernet + USERCTL=no +@@ -4138,7 +4099,6 @@ iface bond0 inet6 static + BOOTPROTO=none + DEVICE=eth0 + HWADDR=cf:d6:af:48:e8:80 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no""" +@@ -4736,7 +4696,6 @@ class TestRhelSysConfigRendering(CiTestCase): + BOOTPROTO=dhcp + DEVICE=eth1000 + HWADDR=07-1c-c6-75-a4-be +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -4948,7 +4907,6 @@ GATEWAY=10.0.2.2 + HWADDR=52:54:00:12:34:00 + IPADDR=10.0.2.15 + NETMASK=255.255.255.0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -4979,7 +4937,6 @@ HWADDR=fa:16:3e:25:b4:59 + IPADDR=51.68.89.122 + MTU=1500 + NETMASK=255.255.240.0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -4993,7 +4950,6 @@ DEVICE=eth1 + DHCLIENT_SET_DEFAULT_ROUTE=no + HWADDR=fa:16:3e:b1:ca:29 + MTU=9000 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5018,7 +4974,6 @@ USERCTL=no + # + BOOTPROTO=dhcp + DEVICE=eth0 +-NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5251,7 +5206,6 @@ USERCTL=no + IPV6_FORCE_ACCEPT_RA=no + IPV6_DEFAULTGW=2001:db8::1 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5283,7 +5237,6 @@ USERCTL=no + """\ + BOOTPROTO=none + DEVICE=eno1 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5296,7 +5249,6 @@ USERCTL=no + IPADDR=192.6.1.9 + MTU=1495 + NETMASK=255.255.255.0 +- NM_CONTROLLED=no + ONBOOT=yes + PHYSDEV=eno1 + USERCTL=no +@@ -5332,7 +5284,6 @@ USERCTL=no + IPADDR=10.101.8.65 + MTU=1334 + NETMASK=255.255.255.192 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Bond + USERCTL=no +@@ -5344,7 +5295,6 @@ USERCTL=no + BOOTPROTO=none + DEVICE=enp0s0 + MASTER=bond0 +- NM_CONTROLLED=no + ONBOOT=yes + SLAVE=yes + TYPE=Bond +@@ -5357,7 +5307,6 @@ USERCTL=no + BOOTPROTO=none + DEVICE=enp0s1 + MASTER=bond0 +- NM_CONTROLLED=no + ONBOOT=yes + SLAVE=yes + TYPE=Bond +@@ -5388,7 +5337,6 @@ USERCTL=no + DEVICE=eno1 + HWADDR=07-1c-c6-75-a4-be + METRIC=100 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5479,7 +5427,6 @@ USERCTL=no + IPV6_FORCE_ACCEPT_RA=no + MTU=1400 + NETMASK=255.255.248.0 +- NM_CONTROLLED=no + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +-- +2.41.0 + diff --git a/SOURCES/0004-include-NOZEROCONF-yes-in-etc-sysconfig-network.patch b/SOURCES/0004-include-NOZEROCONF-yes-in-etc-sysconfig-network.patch new file mode 100644 index 0000000..fbef017 --- /dev/null +++ b/SOURCES/0004-include-NOZEROCONF-yes-in-etc-sysconfig-network.patch @@ -0,0 +1,53 @@ +From fea3e7fc6d23e988cf4a33dc03064ff31bf1d72d Mon Sep 17 00:00:00 2001 +From: Eduardo Otubo +Date: Fri, 7 May 2021 13:36:13 +0200 +Subject: include 'NOZEROCONF=yes' in /etc/sysconfig/network + +RH-Author: Eduardo Otubo +Message-id: <20190320114559.23708-1-otubo@redhat.com> +Patchwork-id: 84937 +O-Subject: [RHEL-7.7 cloud-init PATCH] include 'NOZEROCONF=yes' in /etc/sysconfig/network +Bugzilla: 1653131 +RH-Acked-by: Cathy Avery +RH-Acked-by: Mohammed Gamal +RH-Acked-by: Vitaly Kuznetsov + +The option NOZEROCONF=yes is not included by default in +/etc/sysconfig/network, which is required by Overcloud instances. The +patch also includes tests for the modifications. + +X-downstream-only: yes +Resolves: rhbz#1653131 + +Signed-off-by: Eduardo Otubo +Signed-off-by: Miroslav Rezanina +(cherry picked from commit ffa647e83efd4293bd027e9e390274aad8a12d94) +Signed-off-by: Ani Sinha +Signed-off-by: Cathy Avery +--- + cloudinit/net/sysconfig.py | 11 ++++++++++- + redhat/scripts/frh.py | 10 +++++++--- + 2 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py +index 3b7a1f93..f01c4236 100644 +--- a/cloudinit/net/sysconfig.py ++++ b/cloudinit/net/sysconfig.py +@@ -1029,7 +1029,16 @@ class Renderer(renderer.Renderer): + # Distros configuring /etc/sysconfig/network as a file e.g. Centos + if sysconfig_path.endswith("network"): + util.ensure_dir(os.path.dirname(sysconfig_path)) +- netcfg = [_make_header(), "NETWORKING=yes"] ++ netcfg = [] ++ for line in util.load_file(sysconfig_path, quiet=True).split("\n"): ++ if "cloud-init" in line: ++ break ++ if not line.startswith( ++ ("NETWORKING=", "IPV6_AUTOCONF=", "NETWORKING_IPV6=") ++ ): ++ netcfg.append(line) ++ # Now generate the cloud-init portion of sysconfig/network ++ netcfg.extend([_make_header(), "NETWORKING=yes"]) + if network_state.use_ipv6: + netcfg.append("NETWORKING_IPV6=yes") + netcfg.append("IPV6_AUTOCONF=no") diff --git a/SOURCES/0005-settings.py-update-settings-for-rhel.patch b/SOURCES/0005-settings.py-update-settings-for-rhel.patch new file mode 100644 index 0000000..9e74f03 --- /dev/null +++ b/SOURCES/0005-settings.py-update-settings-for-rhel.patch @@ -0,0 +1,83 @@ +From f7236c817aee8c39223cca88deb8341b4f2b5dfa Mon Sep 17 00:00:00 2001 +From: Cathy Avery +Date: Mon, 18 Dec 2023 14:13:19 -0500 +Subject: settings.py: update settings for rhel + + commit 2bf34313f2e9599e3304b5446411b5ada6ccd7f0 + Author: Ani Sinha + Date: Tue Apr 11 04:20:00 2023 -0400 + Please see commit 5e1e568d7085fd4443 + +(" Add initial redhat setup") +from rhel8.8.0 branch for setings.py. Applying the same for the rebased +cloud-init. + +X-downstream-only: true + +Signed-off-by: Ani Sinha + +Conflicts: "def_log_file_mode": 0o600 as commit +130899115 'limit permissions on def_log_file' was not applied. + +Signed-off-by: Cathy Avery +--- + cloudinit/settings.py | 7 +++++-- + tests/unittests/cmd/test_main.py | 17 +++++++++++------ + 2 files changed, 16 insertions(+), 8 deletions(-) + +diff --git a/cloudinit/settings.py b/cloudinit/settings.py +index 592e144d..87829ff0 100644 +--- a/cloudinit/settings.py ++++ b/cloudinit/settings.py +@@ -54,13 +54,16 @@ CFG_BUILTIN = { + ], + "def_log_file": "/var/log/cloud-init.log", + "log_cfgs": [], +- "syslog_fix_perms": ["syslog:adm", "root:adm", "root:wheel", "root:root"], ++ "syslog_fix_perms": [], ++ "mount_default_fields": [None, None, "auto", "defaults,nofail", "0", "2"], ++ "ssh_deletekeys": False, ++ "ssh_genkeytypes": [], + "system_info": { + "paths": { + "cloud_dir": "/var/lib/cloud", + "templates_dir": "/etc/cloud/templates/", + }, +- "distro": "ubuntu", ++ "distro": "rhel", + "network": {"renderers": None}, + }, + "vendor_data": {"enabled": True, "prefix": []}, +diff --git a/tests/unittests/cmd/test_main.py b/tests/unittests/cmd/test_main.py +index ab427115..c8c2ae81 100644 +--- a/tests/unittests/cmd/test_main.py ++++ b/tests/unittests/cmd/test_main.py +@@ -119,14 +119,19 @@ class TestMain(FilesystemMockingTestCase): + { + "def_log_file": "/var/log/cloud-init.log", + "log_cfgs": [], +- "syslog_fix_perms": [ +- "syslog:adm", +- "root:adm", +- "root:wheel", +- "root:root", +- ], + "vendor_data": {"enabled": True, "prefix": []}, + "vendor_data2": {"enabled": True, "prefix": []}, ++ "syslog_fix_perms": [], ++ "ssh_deletekeys": False, ++ "ssh_genkeytypes": [], ++ "mount_default_fields": [ ++ None, ++ None, ++ "auto", ++ "defaults,nofail", ++ "0", ++ "2", ++ ], + } + ) + updated_cfg.pop("system_info") +-- +2.41.0 + diff --git a/SOURCES/0013-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch b/SOURCES/0013-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch new file mode 100644 index 0000000..b83fe58 --- /dev/null +++ b/SOURCES/0013-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch @@ -0,0 +1,98 @@ +From 77585bbc6d01399ff88865b55dfb7a47b8640271 Mon Sep 17 00:00:00 2001 +From: Emanuele Giuseppe Esposito +Date: Thu, 20 May 2021 08:53:55 +0200 +Subject: rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in + cloud.cfg + +RH-Author: Ani Sinha +RH-MergeRequest: 113: rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg +RH-Jira: RHEL-16572 +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Commit: [1/1] f506bf58dc5458f50624342ec33bcd390aa0b719 (anisinha/rhel-cloud-init) + +RH-Author: Emanuele Giuseppe Esposito +RH-MergeRequest: 10: rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg +RH-Commit: [1/1] 6da989423b9b6e017afbac2f1af3649b0487310f +RH-Bugzilla: 1957532 +RH-Acked-by: Eduardo Otubo +RH-Acked-by: Cathy Avery +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Mohamed Gamal Morsy + +Currently genkeytypes in cloud.cfg is set to None, so together with +ssh_deletekeys=1 cloudinit on first boot it will just delete the existing +keys and not generate new ones. + +Just removing that property in cloud.cfg is not enough, because +settings.py provides another empty default value that will be used +instead, resulting to no key generated even when the property is not defined. + +Removing genkeytypes also in settings.py will default to GENERATE_KEY_NAMES, +but since we want only 'rsa', 'ecdsa' and 'ed25519', add back genkeytypes in +cloud.cfg with the above defaults. + +Also remove ssh_deletekeys in settings.py as we always need +to 1 (and it also defaults to 1). + +Signed-off-by: Emanuele Giuseppe Esposito +(cherry picked from commit b545a0cbabe8924d048b7172b30e7aad59ed32d5) +(cherry picked from commit 855dec5dcc0892c0f7cedf06b025a794769a2a8d) + +Fix unit test breakage + +Fix unit test breakage due to the downstream change +5d6674508c6478fa2c ("rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg") + +X-downstream-only: true +Fixes: 5d6674508c6478fa2c ("rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg") + +Signed-off-by: Ani Sinha + +Squashed: + commit 1afec9e6008db187d1b675e4473d5a2bf0b3c36b + Author: Emanuele Giuseppe Esposito + Date: Thu May 20 08:53:55 2021 +0200 + Subject: [PATCH 49/51] rhel/cloud.cfg: remove ssh_genkeytypes in settings.py + and set in cloud.cfg + + From fe6fb1843fe8df75899fe189b9e5f8ce3cd75be1 Mon Sep 17 00:00:00 2001 + From: Ani Sinha + Date: Fri, 8 Dec 2023 12:50:15 +0530 + Subject: [PATCH 51/51] Fix unit test breakage + +Signed-off-by: Cathy Avery +--- + cloudinit/settings.py | 2 -- + tests/unittests/cmd/test_main.py | 2 -- + 2 files changed, 4 deletions(-) + +diff --git a/cloudinit/settings.py b/cloudinit/settings.py +index 87829ff0..3a581e5b 100644 +--- a/cloudinit/settings.py ++++ b/cloudinit/settings.py +@@ -56,8 +56,6 @@ CFG_BUILTIN = { + "log_cfgs": [], + "syslog_fix_perms": [], + "mount_default_fields": [None, None, "auto", "defaults,nofail", "0", "2"], +- "ssh_deletekeys": False, +- "ssh_genkeytypes": [], + "system_info": { + "paths": { + "cloud_dir": "/var/lib/cloud", +diff --git a/tests/unittests/cmd/test_main.py b/tests/unittests/cmd/test_main.py +index c8c2ae81..19d26ebe 100644 +--- a/tests/unittests/cmd/test_main.py ++++ b/tests/unittests/cmd/test_main.py +@@ -122,8 +122,6 @@ class TestMain(FilesystemMockingTestCase): + "vendor_data": {"enabled": True, "prefix": []}, + "vendor_data2": {"enabled": True, "prefix": []}, + "syslog_fix_perms": [], +- "ssh_deletekeys": False, +- "ssh_genkeytypes": [], + "mount_default_fields": [ + None, + None, +-- +2.41.0 + diff --git a/SOURCES/ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch b/SOURCES/ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch new file mode 100644 index 0000000..b7933ba --- /dev/null +++ b/SOURCES/ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch @@ -0,0 +1,242 @@ +From ce17b057e4bd5dfaa2cc72991736a1b82704488c Mon Sep 17 00:00:00 2001 +From: Brett Holman +Date: Tue, 23 Jan 2024 11:47:35 -0700 +Subject: [PATCH] Revert "Use grep for faster parsing of cloud config in + ds-identify (#4327)" + +RH-Author: Ani Sinha +RH-MergeRequest: 122: Revert "Use grep for faster parsing of cloud config in ds-identify (#4327)" +RH-Jira: RHEL-22248 +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Acked-by: Jon Maloy +RH-Commit: [1/1] f14ebd0055aad9340249e83381cf976debdbe38d + +This reverts commit 816e05d4830f5e789f1f85ef926e2849156bff3a. + +Reopens LP: 2030729 +Fixes GH-4794 + +(cherry picked from commit 8ff94fe9493ad88344eb8bbf2f023c6ba2db5206) +Signed-off-by: Ani Sinha +--- + tests/unittests/test_ds_identify.py | 146 +--------------------------- + tools/ds-identify | 31 +++--- + 2 files changed, 15 insertions(+), 162 deletions(-) + +diff --git a/tests/unittests/test_ds_identify.py b/tests/unittests/test_ds_identify.py +index ca206fb5..ba0bf779 100644 +--- a/tests/unittests/test_ds_identify.py ++++ b/tests/unittests/test_ds_identify.py +@@ -57,146 +57,6 @@ BLKID_UEFI_UBUNTU = [ + ] + + +-DEFAULT_CLOUD_CONFIG = """\ +-# The top level settings are used as module +-# and base configuration. +-# A set of users which may be applied and/or used by various modules +-# when a 'default' entry is found it will reference the 'default_user' +-# from the distro configuration specified below +-users: +- - default +- +-# If this is set, 'root' will not be able to ssh in and they +-# will get a message to login instead as the default $user +-disable_root: true +- +-# This will cause the set+update hostname module to not operate (if true) +-preserve_hostname: false +- +-# If you use datasource_list array, keep array items in a single line. +-# If you use multi line array, ds-identify script won't read array items. +-# Example datasource config +-# datasource: +-# Ec2: +-# metadata_urls: [ 'blah.com' ] +-# timeout: 5 # (defaults to 50 seconds) +-# max_wait: 10 # (defaults to 120 seconds) +- +-# The modules that run in the 'init' stage +-cloud_init_modules: +- - migrator +- - seed_random +- - bootcmd +- - write-files +- - growpart +- - resizefs +- - disk_setup +- - mounts +- - set_hostname +- - update_hostname +- - update_etc_hosts +- - ca-certs +- - rsyslog +- - users-groups +- - ssh +- +-# The modules that run in the 'config' stage +-cloud_config_modules: +- - wireguard +- - snap +- - ubuntu_autoinstall +- - ssh-import-id +- - keyboard +- - locale +- - set-passwords +- - grub-dpkg +- - apt-pipelining +- - apt-configure +- - ubuntu-advantage +- - ntp +- - timezone +- - disable-ec2-metadata +- - runcmd +- - byobu +- +-# The modules that run in the 'final' stage +-cloud_final_modules: +- - package-update-upgrade-install +- - fan +- - landscape +- - lxd +- - ubuntu-drivers +- - write-files-deferred +- - puppet +- - chef +- - ansible +- - mcollective +- - salt-minion +- - reset_rmc +- - refresh_rmc_and_interface +- - rightscale_userdata +- - scripts-vendor +- - scripts-per-once +- - scripts-per-boot +- - scripts-per-instance +- - scripts-user +- - ssh-authkey-fingerprints +- - keys-to-console +- - install-hotplug +- - phone-home +- - final-message +- - power-state-change +- +-# System and/or distro specific settings +-# (not accessible to handlers/transforms) +-system_info: +- # This will affect which distro class gets used +- distro: ubuntu +- # Default user name + that default users groups (if added/used) +- default_user: +- name: ubuntu +- lock_passwd: True +- gecos: Ubuntu +- groups: [adm, audio, cdrom, floppy, lxd, netdev, plugdev, sudo, video] +- sudo: ["ALL=(ALL) NOPASSWD:ALL"] +- shell: /bin/bash +- network: +- renderers: ['netplan', 'eni', 'sysconfig'] +- activators: ['netplan', 'eni', 'network-manager', 'networkd'] +- # Automatically discover the best ntp_client +- ntp_client: auto +- # Other config here will be given to the distro class and/or path classes +- paths: +- cloud_dir: /var/lib/cloud/ +- templates_dir: /etc/cloud/templates/ +- package_mirrors: +- - arches: [i386, amd64] +- failsafe: +- primary: http://archive.ubuntu.com/ubuntu +- security: http://security.ubuntu.com/ubuntu +- search: +- primary: +- - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/ +- - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/ +- - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/ +- security: [] +- - arches: [arm64, armel, armhf] +- failsafe: +- primary: http://ports.ubuntu.com/ubuntu-ports +- security: http://ports.ubuntu.com/ubuntu-ports +- search: +- primary: +- - http://%(ec2_region)s.ec2.ports.ubuntu.com/ubuntu-ports/ +- - http://%(availability_zone)s.clouds.ports.ubuntu.com/ubuntu-ports/ +- - http://%(region)s.clouds.ports.ubuntu.com/ubuntu-ports/ +- security: [] +- - arches: [default] +- failsafe: +- primary: http://ports.ubuntu.com/ubuntu-ports +- security: http://ports.ubuntu.com/ubuntu-ports +- ssh_svcname: ssh +-""" +- + POLICY_FOUND_ONLY = "search,found=all,maybe=none,notfound=disabled" + POLICY_FOUND_OR_MAYBE = "search,found=all,maybe=all,notfound=disabled" + DI_DEFAULT_POLICY = "search,found=all,maybe=all,notfound=disabled" +@@ -279,10 +139,6 @@ class DsIdentifyBase(CiTestCase): + if files is None: + files = {} + +- cloudcfg = "etc/cloud/cloud.cfg" +- if cloudcfg not in files: +- files[cloudcfg] = DEFAULT_CLOUD_CONFIG +- + if rootd is None: + rootd = self.tmp_dir() + +@@ -1305,7 +1161,7 @@ VALID_CFG = { + # Also include a datasource list of more than just + # [NoCloud, None], because that would automatically select + # NoCloud without checking +- "etc/cloud/cloud.cfg": dedent( ++ "/etc/cloud/cloud.cfg": dedent( + """\ + datasource_list: [ Azure, Openstack, NoCloud, None ] + datasource: +diff --git a/tools/ds-identify b/tools/ds-identify +index 7a537278..ec2cc18a 100755 +--- a/tools/ds-identify ++++ b/tools/ds-identify +@@ -777,24 +777,21 @@ check_config() { + if [ "$1" = "$files" -a ! -f "$1" ]; then + return 1 + fi +- local line="" ret="" found=0 found_fn="" oifs="$IFS" out="" +- out=$(grep "$key\"\?:" "$@" 2>/dev/null) +- IFS=${CR} +- for line in $out; do +- # drop '# comment' +- line=${line%%#*} +- # if more than one file was 'grep'ed, then grep will output filename: +- # but if only one file, line will not be prefixed. +- if [ $# -eq 1 ]; then +- found_fn="$1" +- else +- found_fn="${line%%:*}" +- line=${line#*:} +- fi +- ret=${line#*: }; +- found=$((found+1)) ++ local fname="" line="" ret="" found=0 found_fn="" ++ # shellcheck disable=2094 ++ for fname in "$@"; do ++ [ -f "$fname" ] || continue ++ while read line; do ++ line=${line%%#*} ++ case "$line" in ++ $key:\ *|"${key}":) ++ ret=${line#*:}; ++ ret=${ret# }; ++ found=$((found+1)) ++ found_fn="$fname";; ++ esac ++ done <"$fname" + done +- IFS="$oifs" + if [ $found -ne 0 ]; then + _RET="$ret" + _RET_fname="$found_fn" +-- +2.41.0 + diff --git a/SOURCES/ci-ci-Pin-pytest-8.0.0.-4816.patch b/SOURCES/ci-ci-Pin-pytest-8.0.0.-4816.patch new file mode 100644 index 0000000..fa82b52 --- /dev/null +++ b/SOURCES/ci-ci-Pin-pytest-8.0.0.-4816.patch @@ -0,0 +1,51 @@ +From 3f138f68a36224dcefd5c16befbc00486b09c8ec Mon Sep 17 00:00:00 2001 +From: Brett Holman +Date: Mon, 29 Jan 2024 12:03:36 -0700 +Subject: [PATCH 1/2] ci: Pin pytest<8.0.0. (#4816) + +RH-Author: Cathy Avery +RH-MergeRequest: 123: fix: Add types to network v1 schema (#4841) +RH-Jira: RHEL-21323 +RH-Acked-by: Ani Sinha +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Commit: [1/2] db0348f73893a7bb536e4a3562dc7ef33b2590ad + +The latest pytest release broke some tests in non-obvious ways. Pin +the version for now so that CI passes. + +(cherry picked from commit 7c96c9cd9318e816ce4564b58a2c98271363c447) +Signed-off-by: Cathy Avery +--- + integration-requirements.txt | 2 +- + test-requirements.txt | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/integration-requirements.txt b/integration-requirements.txt +index 1f8b54a5..c0792d63 100644 +--- a/integration-requirements.txt ++++ b/integration-requirements.txt +@@ -7,7 +7,7 @@ pycloudlib>=5.10.0,<1!6 + # test/unittests/conftest.py to be loaded by our integration-tests tox env + # resulting in an unmet dependency issue: + # https://github.com/pytest-dev/pytest/issues/11104 +-pytest!=7.3.2 ++pytest!=7.3.2,<8.0.0 + + packaging + passlib +diff --git a/test-requirements.txt b/test-requirements.txt +index 46a98b4c..3d2480fd 100644 +--- a/test-requirements.txt ++++ b/test-requirements.txt +@@ -4,7 +4,7 @@ + # test/unittests/conftest.py to be loaded by our integration-tests tox env + # resulting in an unmet dependency issue: + # https://github.com/pytest-dev/pytest/issues/11104 +-pytest!=7.3.2 ++pytest!=7.3.2,<8.0.0 + + pytest-cov + pytest-mock +-- +2.39.3 + diff --git a/SOURCES/ci-fix-Add-types-to-network-v1-schema-4841.patch b/SOURCES/ci-fix-Add-types-to-network-v1-schema-4841.patch new file mode 100644 index 0000000..460853c --- /dev/null +++ b/SOURCES/ci-fix-Add-types-to-network-v1-schema-4841.patch @@ -0,0 +1,110 @@ +From 720faf533832ba758dcc8436f144168996508c2a Mon Sep 17 00:00:00 2001 +From: James Falcon +Date: Tue, 6 Feb 2024 09:24:37 -0600 +Subject: [PATCH 2/2] fix: Add types to network v1 schema (#4841) + +RH-Author: Cathy Avery +RH-MergeRequest: 123: fix: Add types to network v1 schema (#4841) +RH-Jira: RHEL-21323 +RH-Acked-by: Ani Sinha +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Commit: [2/2] a73a68dff5a6ef54dc4e3b3527fc778400a461cc + +Conflicts: +For RHEL no log argument as we are not including commit e168b4a1383b6eae9c1dc81411d7684fcbbf7df9 + +Even though it has conflicted with our documentation, we have allowed +nameserver address to a be a string, mtu to be empty, and nameserver +search to be missing. Since we have allowed these, expand our schema +and documentation accordingly. + +Fixes GH-4710 + +(cherry picked from commit b08193b376552ede5d162d8283310adc783d81bf) +Signed-off-by: Cathy Avery +--- + .../config/schemas/schema-network-config-v1.json | 13 +++++++++---- + doc/rtd/reference/network-config-format-v1.rst | 4 ++-- + tests/unittests/config/test_schema.py | 13 +++++++++++++ + 3 files changed, 24 insertions(+), 6 deletions(-) + +diff --git a/cloudinit/config/schemas/schema-network-config-v1.json b/cloudinit/config/schemas/schema-network-config-v1.json +index c77885ec..56dc27c9 100644 +--- a/cloudinit/config/schemas/schema-network-config-v1.json ++++ b/cloudinit/config/schemas/schema-network-config-v1.json +@@ -24,7 +24,10 @@ + "description": "The lowercase MAC address of the physical device." + }, + "mtu": { +- "type": "integer", ++ "type": [ ++ "integer", ++ "null" ++ ], + "description": "The MTU size in bytes. The ``mtu`` key represents a device's Maximum Transmission Unit, which is the largest size packet or frame, specified in octets (eight-bit bytes), that can be sent in a packet- or frame-based network. Specifying ``mtu`` is optional. Values too small or too large for a device may be ignored by that device." + }, + "subnets": { +@@ -384,8 +387,7 @@ + "additionalProperties": false, + "required": [ + "type", +- "address", +- "search" ++ "address" + ], + "properties": { + "type": { +@@ -396,7 +398,10 @@ + }, + "address": { + "description": "List of IPv4 or IPv6 address of nameservers.", +- "type": "array", ++ "type": [ ++ "array", ++ "string" ++ ], + "items": { + "type": "string" + } +diff --git a/doc/rtd/reference/network-config-format-v1.rst b/doc/rtd/reference/network-config-format-v1.rst +index d267eb94..42f2dc22 100644 +--- a/doc/rtd/reference/network-config-format-v1.rst ++++ b/doc/rtd/reference/network-config-format-v1.rst +@@ -252,8 +252,8 @@ Users can specify a ``nameserver`` type. Nameserver dictionaries include + the following keys: + + - ``address``: List of IPv4 or IPv6 address of nameservers. +-- ``search``: List of hostnames to include in the :file:`resolv.conf` search +- path. ++- ``search``: Optional. List of hostnames to include in the :file:`resolv.conf` ++ search path. + - ``interface``: Optional. Ties the nameserver definition to the specified + interface. The value specified here must match the ``name`` of an interface + defined in this config. If unspecified, this nameserver will be considered +diff --git a/tests/unittests/config/test_schema.py b/tests/unittests/config/test_schema.py +index 28f0b39d..52667332 100644 +--- a/tests/unittests/config/test_schema.py ++++ b/tests/unittests/config/test_schema.py +@@ -2048,6 +2048,19 @@ class TestNetworkSchema: + does_not_raise(), + id="bond_with_all_known_properties", + ), ++ pytest.param( ++ { ++ "network": { ++ "version": 1, ++ "config": [ ++ {"type": "physical", "name": "eth0", "mtu": None}, ++ {"type": "nameserver", "address": "8.8.8.8"}, ++ ], ++ } ++ }, ++ does_not_raise(), ++ id="GH-4710_mtu_none_and_str_address", ++ ), + ), + ) + def test_network_schema(self, src_config, expectation): +-- +2.39.3 + diff --git a/SOURCES/ci-fix-clean-stop-warning-when-running-clean-command-47.patch b/SOURCES/ci-fix-clean-stop-warning-when-running-clean-command-47.patch new file mode 100644 index 0000000..636aff0 --- /dev/null +++ b/SOURCES/ci-fix-clean-stop-warning-when-running-clean-command-47.patch @@ -0,0 +1,132 @@ +From a622a094a1f497c87a66932382265c2dbf1b88a2 Mon Sep 17 00:00:00 2001 +From: d1r3ct0r +Date: Sat, 20 Jan 2024 02:11:47 +0300 +Subject: [PATCH 1/2] fix(clean): stop warning when running clean command + (#4761) + +RH-Author: Ani Sinha +RH-MergeRequest: 121: fix(clean): stop warning when running clean command (#4761) +RH-Jira: RHEL-21530 +RH-Acked-by: Cathy Avery +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Commit: [1/2] f7a20c627afabf00db20c80ecd6e7f577053863b + +When the clean command is run, runparts is called and README in +/etc/cloud/clean.d is not executable which leads to a warning. + +No longer deliver the README in our deb package, move content +to our online docs. Continue to deliver the /etc/cloud/clean.d +directory as it is used by installers like subiquity. + +Fixes: GH-4760 +(cherry picked from commit da08a260965e35fa63def1cd8b8b472f7c354ffe) + +There is a downstream only change that is squashed with the upstream commit. +The spec file under `redhat/` has been updated so as to not include +`/etc/cloud/clean.d/README` file. Otherwise, we shall see errors like the +following during the build process: + +`error: File not found: /builddir/build/.../etc/cloud/clean.d/README` + +After a rebase, we can only maintain the downstream spec file change as +the rest of it is clean cherry-pick from upstream. + +X-downstream-only: true +Signed-off-by: Ani Sinha +--- + config/clean.d/README | 18 ------------------ + doc/rtd/reference/cli.rst | 27 +++++++++++++++++++++++++++ + packages/redhat/cloud-init.spec.in | 1 - + packages/suse/cloud-init.spec.in | 1 - + 4 files changed, 27 insertions(+), 20 deletions(-) + delete mode 100644 config/clean.d/README + +diff --git a/config/clean.d/README b/config/clean.d/README +deleted file mode 100644 +index 9b0feebe..00000000 +--- a/config/clean.d/README ++++ /dev/null +@@ -1,18 +0,0 @@ +--- cloud-init's clean.d run-parts directory -- +- +-This directory is provided for third party applications which need +-additional configuration artifact cleanup from the filesystem when +-the command `cloud-init clean` is invoked. +- +-The `cloud-init clean` operation is typically performed by image creators +-when preparing a golden image for clone and redeployment. The clean command +-removes any cloud-init semaphores, allowing cloud-init to treat the next +-boot of this image as the "first boot". When the image is next booted +-cloud-init will performing all initial configuration based on any valid +-datasource meta-data and user-data. +- +-Any executable scripts in this subdirectory will be invoked in lexicographical +-order with run-parts by the command: sudo cloud-init clean. +- +-Typical format of such scripts would be a ##- like the following: +- /etc/cloud/clean.d/99-live-installer +diff --git a/doc/rtd/reference/cli.rst b/doc/rtd/reference/cli.rst +index 04e05c55..c36775a8 100644 +--- a/doc/rtd/reference/cli.rst ++++ b/doc/rtd/reference/cli.rst +@@ -83,6 +83,33 @@ re-run all stages as it did on first boot. + config files for ssh daemon. Argument `network` removes all generated + config files for network. `all` removes config files of all types. + ++.. note:: ++ ++ Cloud-init provides the directory :file:`/etc/cloud/clean.d/` for third party ++ applications which need additional configuration artifact cleanup from ++ the fileystem when the `clean` command is invoked. ++ ++ The :command:`clean` operation is typically performed by image creators ++ when preparing a golden image for clone and redeployment. The clean command ++ removes any cloud-init semaphores, allowing cloud-init to treat the next ++ boot of this image as the "first boot". When the image is next booted ++ cloud-init will performing all initial configuration based on any valid ++ datasource meta-data and user-data. ++ ++ Any executable scripts in this subdirectory will be invoked in lexicographical ++ order with run-parts when running the :command:`clean` command. ++ ++ Typical format of such scripts would be a ##- like the following: ++ :file:`/etc/cloud/clean.d/99-live-installer` ++ ++ An example of a script is: ++ ++ .. code-block:: bash ++ ++ sudo rm -rf /var/lib/installer_imgs/ ++ sudo rm -rf /var/log/installer/ ++ ++ + .. _cli_collect_logs: + + :command:`collect-logs` +diff --git a/packages/redhat/cloud-init.spec.in b/packages/redhat/cloud-init.spec.in +index 97e95096..accfb1b6 100644 +--- a/packages/redhat/cloud-init.spec.in ++++ b/packages/redhat/cloud-init.spec.in +@@ -190,7 +190,6 @@ fi + # Configs + %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg + %dir %{_sysconfdir}/cloud/clean.d +-%config(noreplace) %{_sysconfdir}/cloud/clean.d/README + %dir %{_sysconfdir}/cloud/cloud.cfg.d + %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/*.cfg + %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/README +diff --git a/packages/suse/cloud-init.spec.in b/packages/suse/cloud-init.spec.in +index 62a9129b..fae3c12b 100644 +--- a/packages/suse/cloud-init.spec.in ++++ b/packages/suse/cloud-init.spec.in +@@ -115,7 +115,6 @@ version_pys=$(cd "%{buildroot}" && find . -name version.py -type f) + + # Configs + %dir %{_sysconfdir}/cloud/clean.d +-%config(noreplace) %{_sysconfdir}/cloud/clean.d/README + %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg + %dir %{_sysconfdir}/cloud/cloud.cfg.d + %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/*.cfg +-- +2.41.0 + diff --git a/SOURCES/ci-net-allow-dhcp6-configuration-from-generate_fallback.patch b/SOURCES/ci-net-allow-dhcp6-configuration-from-generate_fallback.patch new file mode 100644 index 0000000..3cb9acf --- /dev/null +++ b/SOURCES/ci-net-allow-dhcp6-configuration-from-generate_fallback.patch @@ -0,0 +1,182 @@ +From 2942fb776cd1fc765089ebd0004e01dc2b3a5920 Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Tue, 21 Nov 2023 13:57:15 +0530 +Subject: [PATCH 2/3] net: allow dhcp6 configuration from + generate_fallback_configuration() + +RH-Author: Ani Sinha +RH-MergeRequest: 119: net: allow dhcp6 configuration from generate_fallback_configuration() +RH-Jira: RHEL-7277 +RH-Acked-by: Jon Maloy +RH-Acked-by: Cathy Avery +RH-Commit: [2/2] b067c813488dfddc79d8ebd5bb51894ff040c356 + +This will make sure on Azure we can use both dhcp4 and dhcp6 when IMDS is not +used. This is useful in situations where only ipv6 network is available and +there is no dhcp4 running. + +This change is mostly a reversal of commit 29ed5f5b646ee and therefore, +re-application of the commit 518047aea9 with some small changes. + +The issue that caused the reversal of 518047aea9 is fixed by the earlier commit: +cab0eaf290af7 ("net/network_manager: do not set "may-fail" to False for both ipv4 and ipv6 dhcp") + +Fixes GH-4439 + +Signed-off-by: Ani Sinha +(cherry picked from commit 0264e969166846b2f5cf87ccdb051a3a795eca15) +--- + cloudinit/net/__init__.py | 7 ++++++- + tests/unittests/net/test_init.py | 4 ++++ + tests/unittests/test_net.py | 24 +++++++++++++++++++++--- + 3 files changed, 31 insertions(+), 4 deletions(-) + +diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py +index bf21633b..c0888f52 100644 +--- a/cloudinit/net/__init__.py ++++ b/cloudinit/net/__init__.py +@@ -571,7 +571,12 @@ def generate_fallback_config(config_driver=None): + match = { + "macaddress": read_sys_net_safe(target_name, "address").lower() + } +- cfg = {"dhcp4": True, "set-name": target_name, "match": match} ++ cfg = { ++ "dhcp4": True, ++ "dhcp6": True, ++ "set-name": target_name, ++ "match": match, ++ } + if config_driver: + driver = device_driver(target_name) + if driver: +diff --git a/tests/unittests/net/test_init.py b/tests/unittests/net/test_init.py +index 561d5151..60a44186 100644 +--- a/tests/unittests/net/test_init.py ++++ b/tests/unittests/net/test_init.py +@@ -261,6 +261,7 @@ class TestGenerateFallbackConfig(CiTestCase): + "eth1": { + "match": {"macaddress": mac}, + "dhcp4": True, ++ "dhcp6": True, + "set-name": "eth1", + } + }, +@@ -278,6 +279,7 @@ class TestGenerateFallbackConfig(CiTestCase): + "eth0": { + "match": {"macaddress": mac}, + "dhcp4": True, ++ "dhcp6": True, + "set-name": "eth0", + } + }, +@@ -293,6 +295,7 @@ class TestGenerateFallbackConfig(CiTestCase): + "ethernets": { + "eth0": { + "dhcp4": True, ++ "dhcp6": True, + "match": {"macaddress": mac}, + "set-name": "eth0", + } +@@ -359,6 +362,7 @@ class TestGenerateFallbackConfig(CiTestCase): + "ethernets": { + "ens3": { + "dhcp4": True, ++ "dhcp6": True, + "match": {"name": "ens3"}, + "set-name": "ens3", + } +diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py +index 54d053f3..e52c2497 100644 +--- a/tests/unittests/test_net.py ++++ b/tests/unittests/test_net.py +@@ -4299,6 +4299,7 @@ class TestGenerateFallbackConfig(CiTestCase): + "ethernets": { + "eth0": { + "dhcp4": True, ++ "dhcp6": True, + "set-name": "eth0", + "match": { + "macaddress": "00:11:22:33:44:55", +@@ -4383,6 +4384,9 @@ iface lo inet loopback + + auto eth0 + iface eth0 inet dhcp ++ ++# control-alias eth0 ++iface eth0 inet6 dhcp + """ + self.assertEqual(expected.lstrip(), contents.lstrip()) + +@@ -4472,6 +4476,9 @@ iface lo inet loopback + + auto eth1 + iface eth1 inet dhcp ++ ++# control-alias eth1 ++iface eth1 inet6 dhcp + """ + self.assertEqual(expected.lstrip(), contents.lstrip()) + +@@ -4695,7 +4702,9 @@ class TestRhelSysConfigRendering(CiTestCase): + # + BOOTPROTO=dhcp + DEVICE=eth1000 ++DHCPV6C=yes + HWADDR=07-1c-c6-75-a4-be ++IPV6INIT=yes + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5593,7 +5602,8 @@ class TestOpenSuseSysConfigRendering(CiTestCase): + expected_content = """ + # Created by cloud-init automatically, do not edit. + # +-BOOTPROTO=dhcp4 ++BOOTPROTO=dhcp ++DHCLIENT6_MODE=managed + LLADDR=07-1c-c6-75-a4-be + STARTMODE=auto + """.lstrip() +@@ -5979,7 +5989,11 @@ class TestNetworkManagerRendering(CiTestCase): + + [ipv4] + method=auto +- may-fail=false ++ may-fail=true ++ ++ [ipv6] ++ method=auto ++ may-fail=true + + """ + ), +@@ -6245,6 +6259,9 @@ iface lo inet loopback + + auto eth1000 + iface eth1000 inet dhcp ++ ++# control-alias eth1000 ++iface eth1000 inet6 dhcp + """ + self.assertEqual(expected.lstrip(), contents.lstrip()) + +@@ -6304,6 +6321,7 @@ class TestNetplanNetRendering: + ethernets: + eth1000: + dhcp4: true ++ dhcp6: true + match: + macaddress: 07-1c-c6-75-a4-be + set-name: eth1000 +@@ -7803,7 +7821,7 @@ class TestNetworkdNetRendering(CiTestCase): + Name=eth1000 + MACAddress=07-1c-c6-75-a4-be + [Network] +- DHCP=ipv4""" ++ DHCP=yes""" + ).rstrip(" ") + + expected = self.create_conf_dict(expected.splitlines()) +-- +2.41.0 + diff --git a/SOURCES/ci-net-network_manager-do-not-set-may-fail-to-False-for.patch b/SOURCES/ci-net-network_manager-do-not-set-may-fail-to-False-for.patch new file mode 100644 index 0000000..adc3246 --- /dev/null +++ b/SOURCES/ci-net-network_manager-do-not-set-may-fail-to-False-for.patch @@ -0,0 +1,150 @@ +From 010cd58942c82e902bc02cb5a34074f6083fc890 Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Thu, 23 Nov 2023 12:27:51 +0530 +Subject: [PATCH 1/3] net/network_manager: do not set "may-fail" to False for + both ipv4 and ipv6 dhcp + +RH-Author: Ani Sinha +RH-MergeRequest: 119: net: allow dhcp6 configuration from generate_fallback_configuration() +RH-Jira: RHEL-7277 +RH-Acked-by: Jon Maloy +RH-Acked-by: Cathy Avery +RH-Commit: [1/2] be07418f69a4c461e2fa02a72b7b985053af9660 + +If "may-fail" is set to False in the Network Manager keyfile for both ipv4 +and ipv6 for dhcp configuration, it essentially means both ipv4 and ipv6 network +initialization using dhcp must succeed for the overall network configuration to +succeed. This means, for environments where only ipv4 or ipv6 is available but +not both and we need to configure both ipv4 and ipv6 dhcp, the overall +network configuration will fail. This is not what we want. When both ipv4 +and ipv6 dhcp are configured, it is enough for the overall configuration to +succeed if any one succeeds. +Therefore, set "may-fail" to True for both ipv4 and ipv6 if and only if both +ipv4 and ipv6 are configured as dhcp in the Network Manager keyfile and +"may-fail" is set to False for both. If both ipv4 and ipv6 are configured +in the keyfile and if for any of them "may-fail" is already set to True,then +do nothing. +All other cases remain same as before. + +Please see discussions in PR #4474. + +Co-authored-by: James Falcon +Signed-off-by: Ani Sinha +(cherry picked from commit 29dd5ace73ad60c7452c39b840045fb47fe0711f) +--- + cloudinit/net/network_manager.py | 59 ++++++++++++++++++++++++++++++++ + tests/unittests/test_net.py | 8 ++--- + 2 files changed, 63 insertions(+), 4 deletions(-) + +diff --git a/cloudinit/net/network_manager.py b/cloudinit/net/network_manager.py +index 8374cfcc..8a99eb3a 100644 +--- a/cloudinit/net/network_manager.py ++++ b/cloudinit/net/network_manager.py +@@ -71,6 +71,57 @@ class NMConnection: + if not self.config.has_option(section, option): + self.config[section][option] = value + ++ def _config_option_is_set(self, section, option): ++ """ ++ Checks if a config option is set. Returns True if it is, ++ else returns False. ++ """ ++ return self.config.has_section(section) and self.config.has_option( ++ section, option ++ ) ++ ++ def _get_config_option(self, section, option): ++ """ ++ Returns the value of a config option if its set, ++ else returns None. ++ """ ++ if self._config_option_is_set(section, option): ++ return self.config[section][option] ++ else: ++ return None ++ ++ def _change_set_config_option(self, section, option, value): ++ """ ++ Overrides the value of a config option if its already set. ++ Else, if the config option is not set, it does nothing. ++ """ ++ if self._config_option_is_set(section, option): ++ self.config[section][option] = value ++ ++ def _set_mayfail_true_if_both_false_dhcp(self): ++ """ ++ If for both ipv4 and ipv6, 'may-fail' is set to be False, ++ set it to True for both of them. ++ """ ++ for family in ["ipv4", "ipv6"]: ++ if self._get_config_option(family, "may-fail") != "false": ++ # if either ipv4 or ipv6 sections are not set/configured, ++ # or if both are configured but for either ipv4 or ipv6, ++ # 'may-fail' is not 'false', do not do anything. ++ return ++ if self._get_config_option(family, "method") not in [ ++ "dhcp", ++ "auto", ++ ]: ++ # if both v4 and v6 are not dhcp, do not do anything. ++ return ++ ++ # If we landed here, it means both ipv4 and ipv6 are configured ++ # with dhcp/auto and both have 'may-fail' set to 'false'. So set ++ # both to 'true'. ++ for family in ["ipv4", "ipv6"]: ++ self._change_set_config_option(family, "may-fail", "true") ++ + def _set_ip_method(self, family, subnet_type): + """ + Ensures there's appropriate [ipv4]/[ipv6] for given family +@@ -271,6 +322,14 @@ class NMConnection: + if family == "ipv4" and "mtu" in subnet: + ipv4_mtu = subnet["mtu"] + ++ # we do not want to set may-fail to false for both ipv4 and ipv6 dhcp ++ # at the at the same time. This will make the network configuration ++ # work only when both ipv4 and ipv6 dhcp succeeds. This may not be ++ # what we want. If we have configured both ipv4 and ipv6 dhcp, any one ++ # succeeding should be enough. Therefore, if "may-fail" is set to ++ # False for both ipv4 and ipv6 dhcp, set them both to True. ++ self._set_mayfail_true_if_both_false_dhcp() ++ + if ipv4_mtu is None: + ipv4_mtu = device_mtu + if not ipv4_mtu == device_mtu: +diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py +index 052b0674..54d053f3 100644 +--- a/tests/unittests/test_net.py ++++ b/tests/unittests/test_net.py +@@ -1470,11 +1470,11 @@ NETWORK_CONFIGS = { + + [ipv4] + method=auto +- may-fail=false ++ may-fail=true + + [ipv6] + method=auto +- may-fail=false ++ may-fail=true + + """ + ), +@@ -1642,11 +1642,11 @@ NETWORK_CONFIGS = { + + [ipv6] + method=auto +- may-fail=false ++ may-fail=true + + [ipv4] + method=auto +- may-fail=false ++ may-fail=true + + """ + ), +-- +2.41.0 + diff --git a/SOURCES/ci-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch b/SOURCES/ci-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch new file mode 100644 index 0000000..f0a5e83 --- /dev/null +++ b/SOURCES/ci-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch @@ -0,0 +1,123 @@ +From ffc8f3fbb4c8c14a4ef2b6a99a9ea61da4bedde7 Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Thu, 7 Dec 2023 02:39:51 +0530 +Subject: [PATCH 3/3] net/nm: check for presence of ifcfg files when nm + connection files are absent (#4645) + +RH-Author: Ani Sinha +RH-MergeRequest: 120: net/nm: check for presence of ifcfg files when nm connection files are absent (#4645) +RH-Jira: RHEL-17610 +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Acked-by: Jon Maloy +RH-Commit: [1/1] e0647418de8b70724a32500f26f544650d701404 + +On systems that use network manager to manage connections and activate network +interfaces, they may also use ifcfg files for configuring +interfaces using ifcfg-rh network manager plugin. When network manager is used +as the activator, we need to also check for the presence of ifcfg interface +config file when the network manager connection file is absent and if ifcfg-rh +plugin is present. +Hence, with this change, network manager activator first tries to use network +manager connection files to bring up or bring down the interface. If the +connection files are not present and if ifcfg-rh plugin is present, it tries to +use ifcfg files for the interface. If the plugin or the ifcfg files are not +present, the activator fails to activate or deactivate the interface and it +bails out with warning log. + +Fixes: GH-4640 + +Signed-off-by: Ani Sinha +(cherry picked from commit d1d5166895da471cff3606c70d4e8ab6eec1c006) +--- + cloudinit/net/activators.py | 7 +++++++ + cloudinit/net/network_manager.py | 33 ++++++++++++++++++++++++++++++-- + 2 files changed, 38 insertions(+), 2 deletions(-) + +diff --git a/cloudinit/net/activators.py b/cloudinit/net/activators.py +index e69da40d..dd858862 100644 +--- a/cloudinit/net/activators.py ++++ b/cloudinit/net/activators.py +@@ -117,6 +117,13 @@ class NetworkManagerActivator(NetworkActivator): + from cloudinit.net.network_manager import conn_filename + + filename = conn_filename(device_name) ++ if filename is None: ++ LOG.warning( ++ "Unable to find an interface config file. " ++ "Unable to bring up interface." ++ ) ++ return False ++ + cmd = ["nmcli", "connection", "load", filename] + if _alter_interface(cmd, device_name): + cmd = ["nmcli", "connection", "up", "filename", filename] +diff --git a/cloudinit/net/network_manager.py b/cloudinit/net/network_manager.py +index 8a99eb3a..76a0ac15 100644 +--- a/cloudinit/net/network_manager.py ++++ b/cloudinit/net/network_manager.py +@@ -17,10 +17,12 @@ from typing import Optional + from cloudinit import subp, util + from cloudinit.net import is_ipv6_address, renderer, subnet_is_ipv6 + from cloudinit.net.network_state import NetworkState ++from cloudinit.net.sysconfig import available_nm_ifcfg_rh + + NM_RUN_DIR = "/etc/NetworkManager" + NM_LIB_DIR = "/usr/lib/NetworkManager" + NM_CFG_FILE = "/etc/NetworkManager/NetworkManager.conf" ++IFCFG_CFG_FILE = "/etc/sysconfig/network-scripts" + NM_IPV6_ADDR_GEN_CONF = """# This is generated by cloud-init. Do not edit. + # + [.config] +@@ -442,7 +444,7 @@ class Renderer(renderer.Renderer): + for con_id, conn in self.connections.items(): + if not conn.valid(): + continue +- name = conn_filename(con_id, target) ++ name = nm_conn_filename(con_id, target) + util.write_file(name, conn.dump(), 0o600) + + # Select EUI64 to be used by default by NM for creating the address +@@ -452,12 +454,39 @@ class Renderer(renderer.Renderer): + ) + + +-def conn_filename(con_id, target=None): ++def nm_conn_filename(con_id, target=None): + target_con_dir = subp.target_path(target, NM_RUN_DIR) + con_file = f"cloud-init-{con_id}.nmconnection" + return f"{target_con_dir}/system-connections/{con_file}" + + ++def sysconfig_conn_filename(devname, target=None): ++ target_con_dir = subp.target_path(target, IFCFG_CFG_FILE) ++ con_file = f"ifcfg-{devname}" ++ return f"{target_con_dir}/{con_file}" ++ ++ ++def conn_filename(devname): ++ """ ++ This function returns the name of the interface config file. ++ It first checks for presence of network manager connection file. ++ If absent and ifcfg-rh plugin for network manager is available, ++ it returns the name of the ifcfg file if it is present. If the ++ plugin is not present or the plugin is present but ifcfg file is ++ not, it returns None. ++ This function is called from NetworkManagerActivator class in ++ activators.py. ++ """ ++ conn_file = nm_conn_filename(devname) ++ # If the network manager connection file is absent, also check for ++ # presence of ifcfg files for the same interface (if nm-ifcfg-rh plugin is ++ # present, network manager can handle ifcfg files). If both network manager ++ # connection file and ifcfg files are absent, return None. ++ if not os.path.isfile(conn_file) and available_nm_ifcfg_rh(): ++ conn_file = sysconfig_conn_filename(devname) ++ return conn_file if os.path.isfile(conn_file) else None ++ ++ + def cloud_init_nm_conf_filename(target=None): + target_con_dir = subp.target_path(target, NM_RUN_DIR) + conf_file = "30-cloud-init-ip6-addr-gen-mode.conf" +-- +2.41.0 + diff --git a/SOURCES/ci-test-jsonschema-Pin-jsonschema-version-4781.patch b/SOURCES/ci-test-jsonschema-Pin-jsonschema-version-4781.patch new file mode 100644 index 0000000..fde374b --- /dev/null +++ b/SOURCES/ci-test-jsonschema-Pin-jsonschema-version-4781.patch @@ -0,0 +1,48 @@ +From c43791eeb00bc9000abff0125c18aa6a7e8b7160 Mon Sep 17 00:00:00 2001 +From: Brett Holman +Date: Tue, 16 Jan 2024 12:43:17 -0700 +Subject: [PATCH 2/2] test(jsonschema): Pin jsonschema version (#4781) + +RH-Author: Ani Sinha +RH-MergeRequest: 121: fix(clean): stop warning when running clean command (#4761) +RH-Jira: RHEL-21530 +RH-Acked-by: Cathy Avery +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Commit: [2/2] f864085d47723b3fb462c3b6fc6e24b90bf040aa + +Release 4.21.0 broke tests + +(cherry picked from commit 034a5cdf10582da0492321f861b2b8b42182a54e) +--- + requirements.txt | 2 +- + test-requirements.txt | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/requirements.txt b/requirements.txt +index edec46a7..a095de18 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -28,7 +28,7 @@ requests + jsonpatch + + # For validating cloud-config sections per schema definitions +-jsonschema ++jsonschema<=4.20.0 + + # Used by DataSourceVMware to inspect the host's network configuration during + # the "setup()" function. +diff --git a/test-requirements.txt b/test-requirements.txt +index 19488b94..46a98b4c 100644 +--- a/test-requirements.txt ++++ b/test-requirements.txt +@@ -9,6 +9,6 @@ pytest!=7.3.2 + pytest-cov + pytest-mock + setuptools +-jsonschema ++jsonschema<=4.20.0 + responses + passlib +-- +2.41.0 + diff --git a/SOURCES/cloud-init-tmpfiles.conf b/SOURCES/cloud-init-tmpfiles.conf new file mode 100644 index 0000000..0c6d2a3 --- /dev/null +++ b/SOURCES/cloud-init-tmpfiles.conf @@ -0,0 +1 @@ +d /run/cloud-init 0700 root root - - diff --git a/SPECS/cloud-init.spec b/SPECS/cloud-init.spec new file mode 100644 index 0000000..d3b479b --- /dev/null +++ b/SPECS/cloud-init.spec @@ -0,0 +1,888 @@ +%{!?license: %global license %%doc} + +# The only reason we are archful is because dmidecode is ExclusiveArch +# https://bugzilla.redhat.com/show_bug.cgi?id=1067089 +%global debug_package %{nil} + +Name: cloud-init +Version: 23.4 +Release: 5%{?dist} +Summary: Cloud instance init scripts + +Group: System Environment/Base +License: GPLv3 +URL: https://github.com/canonical/cloud-init +Source0: https://github.com/canonical/cloud-init/archive/refs/tags/%{version}.tar.gz +Source1: cloud-init-tmpfiles.conf + +Patch0003: 0003-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch +Patch0004: 0004-include-NOZEROCONF-yes-in-etc-sysconfig-network.patch +Patch0005: 0005-settings.py-update-settings-for-rhel.patch +Patch0013: 0013-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch +# For RHEL-7277 - [RFE] [Azure][RHEL8][Network][cloud-init] Can not acquire IPv6 address +Patch14: ci-net-network_manager-do-not-set-may-fail-to-False-for.patch +# For RHEL-7277 - [RFE] [Azure][RHEL8][Network][cloud-init] Can not acquire IPv6 address +Patch15: ci-net-allow-dhcp6-configuration-from-generate_fallback.patch +# For RHEL-17610 - [RHEL-8] NetworkManagerActivator brings up interface failed when using sysconfig renderer +Patch16: ci-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch +# For RHEL-21530 - [RHEL-8.10]subp.py[WARNING]: skipping /etc/cloud/clean.d/README when do cloud-init clean +Patch17: ci-fix-clean-stop-warning-when-running-clean-command-47.patch +# For RHEL-21530 - [RHEL-8.10]subp.py[WARNING]: skipping /etc/cloud/clean.d/README when do cloud-init clean +Patch18: ci-test-jsonschema-Pin-jsonschema-version-4781.patch +# For RHEL-22248 - [Azure][RHEL-8] cloud-init-23.4 cannot read "- Azure" datasource_list format +Patch19: ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch +# For RHEL-21323 - [rhel-8] The schema WARNING info for network-config.json is not suitable in cloud-init-23.4 +Patch20: ci-ci-Pin-pytest-8.0.0.-4816.patch +# For RHEL-21323 - [rhel-8] The schema WARNING info for network-config.json is not suitable in cloud-init-23.4 +Patch21: ci-fix-Add-types-to-network-v1-schema-4841.patch + +BuildArch: noarch + +BuildRequires: pkgconfig(systemd) +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: systemd + +# For tests +BuildRequires: iproute +BuildRequires: python3-configobj +# # https://bugzilla.redhat.com/show_bug.cgi?id=1417029 +BuildRequires: python3-httpretty >= 0.8.14-2 +BuildRequires: python3-jinja2 +BuildRequires: python3-jsonpatch +BuildRequires: python3-jsonschema +BuildRequires: python3-mock +BuildRequires: python3-nose +BuildRequires: python3-oauthlib +BuildRequires: python3-prettytable +BuildRequires: python3-pyserial +BuildRequires: python3-PyYAML +BuildRequires: python3-requests +BuildRequires: python3-six +BuildRequires: python3-unittest2 +# dnf is needed to make cc_ntp unit tests work +# https://bugs.launchpad.net/cloud-init/+bug/1721573 +BuildRequires: /usr/bin/dnf + +Requires: e2fsprogs +Requires: iproute +Requires: libselinux-python3 +Requires: policycoreutils-python3 +Requires: procps +Requires: python3-configobj +Requires: python3-jinja2 +Requires: python3-jsonpatch +Requires: python3-jsonschema +Requires: python3-oauthlib +Requires: python3-prettytable +Requires: python3-pyserial +Requires: python3-PyYAML +Requires: python3-requests +Requires: python3-six +Requires: shadow-utils +Requires: util-linux +Requires: xfsprogs +Requires: dhcp-client +# https://bugzilla.redhat.com/show_bug.cgi?id=2039697 +Requires: gdisk +Requires: openssl +Requires: python3-netifaces + +%{?systemd_requires} + +%description +Cloud-init is a set of init scripts for cloud instances. Cloud instances +need special scripts to run during initialization to retrieve and install +ssh keys and to let the user run various scripts. + + +%prep +%autosetup -p1 + +# Change shebangs +sed -i -e 's|#!/usr/bin/env python|#!/usr/bin/env python3|' \ + -e 's|#!/usr/bin/python|#!/usr/bin/python3|' tools/* cloudinit/ssh_util.py + +%build +%py3_build + + +%install +%py3_install -- + +sed -i "s,@@PACKAGED_VERSION@@,%{version}-%{release}," $RPM_BUILD_ROOT/%{python3_sitelib}/cloudinit/version.py + +mkdir -p $RPM_BUILD_ROOT/var/lib/cloud + +# /run/cloud-init needs a tmpfiles.d entry +mkdir -p $RPM_BUILD_ROOT/run/cloud-init +mkdir -p $RPM_BUILD_ROOT/%{_tmpfilesdir} +cp -p %{SOURCE1} $RPM_BUILD_ROOT/%{_tmpfilesdir}/%{name}.conf + +mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d +cp -p tools/21-cloudinit.conf $RPM_BUILD_ROOT/%{_sysconfdir}/rsyslog.d/21-cloudinit.conf + + +[ ! -d $RPM_BUILD_ROOT/usr/lib/systemd/system-generators ] && mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system-generators +python3 tools/render-template --variant rhel systemd/cloud-init-generator.tmpl > $RPM_BUILD_ROOT/usr/lib/systemd/system-generators/cloud-init-generator +chmod 755 $RPM_BUILD_ROOT/usr/lib/systemd/system-generators/cloud-init-generator + +# installing man pages +mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1/ +for man in cloud-id.1 cloud-init.1 cloud-init-per.1; do + install -c -m 0644 doc/man/${man} ${RPM_BUILD_ROOT}%{_mandir}/man1/${man} + chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/* +done + +%clean +rm -rf $RPM_BUILD_ROOT + + +%post +if [ $1 -eq 1 ] ; then + # Initial installation + # Enabled by default per "runs once then goes away" exception + /bin/systemctl enable cloud-config.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-final.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-init.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-init-local.service >/dev/null 2>&1 || : + /bin/systemctl enable cloud-init.target >/dev/null 2>&1 || : +elif [ $1 -eq 2 ]; then + # Upgrade + # RHBZ 2210012 - check for null ssh_genkeytypes value in cloud.cfg that + # breaks ssh connectivity after upgrade to a newer version of cloud-init. + if [ -f %{_sysconfdir}/cloud/cloud.cfg.rpmnew ] && grep -q '^\s*ssh_genkeytypes:\s*~\s*$' %{_sysconfdir}/cloud/cloud.cfg ; then + echo "***********************************************" + echo "*** WARNING!!!! ***" + echo "" + echo "ssh_genkeytypes set to null in /etc/cloud/cloud.cfg!" + echo "SSH access might be broken after reboot. Please check the following KCS" + echo "for more detailed information:" + echo "" + echo "https://access.redhat.com/solutions/6988034" + echo "" + echo "Please reconcile the differences between /etc/cloud/cloud.cfg and " + echo "/etc/cloud/cloud.cfg.rpmnew and update ssh_genkeytypes configuration in " + echo "/etc/cloud/cloud.cfg to a list of keytype values, something like:" + echo "ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']" + echo "" + echo "************************************************" + fi + # If the upgrade is from a version older than 0.7.9-8, + # there will be stale systemd config + /bin/systemctl is-enabled cloud-config.service >/dev/null 2>&1 && + /bin/systemctl reenable cloud-config.service >/dev/null 2>&1 || : + + /bin/systemctl is-enabled cloud-final.service >/dev/null 2>&1 && + /bin/systemctl reenable cloud-final.service >/dev/null 2>&1 || : + + /bin/systemctl is-enabled cloud-init.service >/dev/null 2>&1 && + /bin/systemctl reenable cloud-init.service >/dev/null 2>&1 || : + + /bin/systemctl is-enabled cloud-init-local.service >/dev/null 2>&1 && + /bin/systemctl reenable cloud-init-local.service >/dev/null 2>&1 || : + + /bin/systemctl is-enabled cloud-init.target >/dev/null 2>&1 && + /bin/systemctl reenable cloud-init.target >/dev/null 2>&1 || : +fi + +%preun +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable cloud-config.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-final.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-init.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-init-local.service >/dev/null 2>&1 || : + /bin/systemctl --no-reload disable cloud-init.target >/dev/null 2>&1 || : + # One-shot services -> no need to stop +fi + +%postun +%systemd_postun cloud-config.service cloud-config.target cloud-final.service cloud-init.service cloud-init.target cloud-init-local.service + +if [ $1 -eq 0 ] ; then + # warn during package removal not upgrade + if [ -f /etc/ssh/sshd_config.d/50-cloud-init.conf ] ; then + echo "/etc/ssh/sshd_config.d/50-cloud-init.conf not removed" + fi + + if [ -f /etc/NetworkManager/conf.d/99-cloud-init.conf ] ; then + echo "/etc/NetworkManager/conf.d/99-cloud-init.conf not removed" + fi + + if [ -f /etc/NetworkManager/conf.d/30-cloud-init-ip6-addr-gen-mode.conf ] ; then + echo "/etc/NetworkManager/conf.d/30-cloud-init-ip6-addr-gen-mode.conf not removed" + fi +fi + +%files +%license LICENSE +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg +%dir %{_sysconfdir}/cloud/cloud.cfg.d +%config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d/*.cfg +%doc %{_sysconfdir}/cloud/cloud.cfg.d/README +%dir %{_sysconfdir}/cloud/templates +%config(noreplace) %{_sysconfdir}/cloud/templates/* +%{_unitdir}/cloud-config.service +%{_unitdir}/cloud-config.target +%{_unitdir}/cloud-final.service +%{_unitdir}/cloud-init-hotplugd.service +%{_unitdir}/cloud-init-hotplugd.socket +%{_unitdir}/cloud-init-local.service +%{_unitdir}/cloud-init.service +%{_unitdir}/cloud-init.target +%{_tmpfilesdir}/%{name}.conf +%{python3_sitelib}/* +%{_libexecdir}/%{name} +%{_bindir}/cloud-init* +%doc %{_datadir}/doc/%{name} +%{_mandir}/man1/* +%dir %verify(not mode) /run/cloud-init +%dir /var/lib/cloud +%{_udevrulesdir}/66-azure-ephemeral.rules +%{_datadir}/bash-completion/completions/cloud-init +%{_bindir}/cloud-id +/usr/lib/systemd/system-generators/cloud-init-generator +%{_sysconfdir}/systemd/system/sshd-keygen@.service.d/disable-sshd-keygen-if-cloud-init-active.conf + + +%dir %{_sysconfdir}/rsyslog.d +%config(noreplace) %{_sysconfdir}/rsyslog.d/21-cloudinit.conf + +%changelog +* Mon Feb 26 2024 Miroslav Rezanina - 23.4-5 +- ci-ci-Pin-pytest-8.0.0.-4816.patch [RHEL-21323] +- ci-fix-Add-types-to-network-v1-schema-4841.patch [RHEL-21323] +- Resolves: RHEL-21323 + ([rhel-8] The schema WARNING info for network-config.json is not suitable in cloud-init-23.4) + +* Fri Feb 02 2024 Jon Maloy - 23.4-4 +- ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch [RHEL-22248] +- Resolves: RHEL-22248 + ([Azure][RHEL-8] cloud-init-23.4 cannot read "- Azure" datasource_list format) + +* Fri Feb 02 2024 Jon Maloy - 23.4-3 +- ci-fix-clean-stop-warning-when-running-clean-command-47.patch [RHEL-21530] +- ci-test-jsonschema-Pin-jsonschema-version-4781.patch [RHEL-21530] +- Resolves: RHEL-21530 + ([RHEL-8.10]subp.py[WARNING]: skipping /etc/cloud/clean.d/README when do cloud-init clean) + +* Tue Jan 16 2024 Jon Maloy - 23.4-2 +- ci-net-network_manager-do-not-set-may-fail-to-False-for.patch [RHEL-7277] +- ci-net-allow-dhcp6-configuration-from-generate_fallback.patch [RHEL-7277] +- ci-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch [RHEL-17610] +- Resolves: RHEL-7277 + ([RFE] [Azure][RHEL8][Network][cloud-init] Can not acquire IPv6 address) +- Resolves: RHEL-17610 + ([RHEL-8] NetworkManagerActivator brings up interface failed when using sysconfig renderer) + +* Mon Jan 8 2024 Jon Maloy - 23.4-1 +- Rebase to 23.4.1 [RHEL-18314] +- Resolves: RHEL-18314 + ([RHEL-8]Rebase cloud-init to 23.4) + +* Thu Nov 23 2023 Camilla Conte - 23.1.1-12 +- ci-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch [RHEL-16572] +- Resolves: RHEL-16572 + ([cloud-init][rhel-8] Backport the patch "rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg" to fix settings.py) + +* Mon Sep 18 2023 Camilla Conte - 23.1.1-11 +- ci-net-fix-ipv6_dhcpv6_stateful-stateless-slaac-configu.patch [bz#2046491] +- Resolves: bz#2046491 + (cloud-init enable both DHCPv4 and DHCPv6 when network type is ipv6_dhcpv6-stateful/ipv6_dhcpv6-stateless) +- Resolves: RHEL-2325 + ([RHEL8.9][cloud-init] Not inform user during upgrade that cloud-init generated config files are left ) + +* Fri Aug 25 2023 Camilla Conte - 23.1.1-10 +- Resolves: bz#2233047 + ([RHEL 8.9] Inform user when cloud-init generated config files are left during uninstalling) + +* Wed Aug 09 2023 Jon Maloy - 23.1.1-9 +- ci-NM-renderer-set-default-IPv6-addr-gen-mode-for-all-i.patch [bz#2229460] +- Resolves: bz#2229460 + ([rhel-8.9] [RFE] Configure "ipv6.addr-gen-mode=eui64' as default in NetworkManager) + +* Thu Jul 27 2023 Camilla Conte - 23.1.1-8 +- ci-DS-VMware-modify-a-few-log-level-4284.patch [bz#2223810] +- Resolves: bz#2223810 + ([cloud-init] [RHEL8.9]There are warning logs if dev has more than one IPV6 address on ESXi) + +* Tue Jul 25 2023 Miroslav Rezanina - 23.1.1-7 +- ci-logging-keep-current-file-mode-of-log-file-if-its-st.patch [bz#2222501] +- Resolves: bz#2222501 + (Don't change log permissions if they are already more restrictive [rhel-8]) + +* Mon Jul 10 2023 Miroslav Rezanina - 23.1.1-6 +- ci-Revert-Manual-revert-Use-Network-Manager-and-Netplan.patch [bz#2219528] +- ci-Revert-Revert-Add-native-NetworkManager-support-1224.patch [bz#2219528] +- ci-nm-generate-ipv6-stateful-dhcp-config-at-par-with-sy.patch [bz#2219528] +- ci-network_manager-add-a-method-for-ipv6-static-IP-conf.patch [bz#2219528] +- ci-net-sysconfig-enable-sysconfig-renderer-if-network-m.patch [bz#2219528] +- ci-network-manager-Set-higher-autoconnect-priority-for-.patch [bz#2219528] +- ci-Set-default-renderer-as-sysconfig-for-centos-rhel-41.patch [bz#2219528] +- Resolves: bz#2219528 + ([RHEL8] Support configuring network by NM keyfiles) + +* Thu Jun 29 2023 Jon Maloy - 23.1.1-4 +- ci-Add-warning-during-upgrade-from-an-old-version-with-.patch [bz#2210012] +- Resolves: bz#2210012 + ([cloud-init] System didn't generate ssh host keys and lost ssh connection after cloud-init removed them with updated cloud-init package.) + +* Wed May 03 2023 Jon Maloy - 23.1.1-3 +- ci-Don-t-change-permissions-of-netrules-target-2076.patch [bz#2182947] +- ci-Make-user-vendor-data-sensitive-and-remove-log-permi.patch [bz#2190081] +- Resolves: bz#2182947 + (Request to backport "Don't change permissions of netrules target (#2076)") +- Resolves: bz#2190081 + (CVE-2023-1786 cloud-init: sensitive data could be exposed in logs [rhel-8]) + +* Tue Apr 25 2023 Jon Maloy - 23.1.1-2 +- ci-rhel-make-sure-previous-hostname-file-ends-with-a-ne.patch [bz#2182407] +- Resolves: bz#2182407 + (cloud-init strips new line from "/etc/hostname" when processing "/var/lib/cloud/data/previous-hostname") + +* Fri Apr 21 2023 Jon Maloy - 23.1.1-1 +- limit-permissions-on-def_log_file.patch +- Resolves bz#1424612 +- include-NOZEROCONF-yes-in-etc-sysconfig-network.patch +- Resolves bz#1653131 +- Rebase to 23.1.1 [bz#2172821] +- Resolves: bz#2172821 + +* Mon Jan 30 2023 Camilla Conte - 22.1-8 +- ci-cc_set_hostname-ignore-var-lib-cloud-data-set-hostna.patch [bz#2162258] +- Resolves: bz#2162258 + (systemd[1]: Failed to start Initial cloud-init job after reboot system via sysrq 'b' [RHEL-8]) + +* Wed Dec 28 2022 Camilla Conte - 22.1-7 +- ci-Ensure-network-ready-before-cloud-init-service-runs-.patch [bz#2151861] +- Resolves: bz#2151861 + ([RHEL-8] Ensure network ready before cloud-init service runs on RHEL) + +* Mon Oct 17 2022 Jon Maloy - 22.1-6 +- ci-cloud.cfg.tmpl-make-sure-centos-settings-are-identic.patch [bz#2115576] +- Resolves: bz#2115576 + (cloud-init configures user "centos" or "rhel" instead of "cloud-user" with cloud-init-22.1) + +* Wed Aug 17 2022 Jon Maloy - 22.1-5 +- ci-Revert-Add-native-NetworkManager-support-1224.patch [bz#2107464 bz#2110066 bz#2117526 bz#2104393 bz#2098624] +- ci-Revert-Use-Network-Manager-and-Netplan-as-default-re.patch [bz#2107464 bz#2110066 bz#2117526 bz#2104393 bz#2098624] +- Resolves: bz#2107464 + ([RHEL-8.7] Cannot run sysconfig when changing the priority of network renderers) +- Resolves: bz#2110066 + (DNS integration with OpenStack/cloud-init/NetworkManager is not working) +- Resolves: bz#2117526 + ([RHEL8.7] Revert patch of configuring networking by NM keyfiles) +- Resolves: bz#2104393 + ([RHEL-8.7]Failed to config static IP and IPv6 according to VMware Customization Config File) +- Resolves: bz#2098624 + ([RHEL-8.7] IPv6 not workable when cloud-init configure network using NM keyfiles) + +* Tue Jul 12 2022 Miroslav Rezanina - 22.1-4 +- ci-cloud-init.spec-adjust-path-for-66-azure-ephemeral.r.patch [bz#2096269] +- ci-setup.py-adjust-udev-rules-default-path-1513.patch [bz#2096269] +- Resolves: bz#2096269 + (Adjust udev/rules default path[RHEL-8]) + +* Thu Jun 23 2022 Jon Maloy - 22.1-3 +- ci-Support-EC2-tags-in-instance-metadata-1309.patch [bz#2082686] +- Resolves: bz#2082686 + ([cloud][init] Add support for reading tags from instance metadata) + +* Tue May 31 2022 Jon Maloy - 22.1-2 +- ci-Add-native-NetworkManager-support-1224.patch [bz#2059872] +- ci-Use-Network-Manager-and-Netplan-as-default-renderers.patch [bz#2059872] +- ci-Align-rhel-custom-files-with-upstream-1431.patch [bz#2082071] +- ci-Remove-rhel-specific-files.patch [bz#2082071] +- Resolves: bz#2059872 + ([RHEL-8]Rebase cloud-init from Fedora so it can configure networking using NM keyfiles) +- Resolves: bz#2082071 + (Align cloud.cfg file and systemd with cloud-init upstream .tmpl files) + +* Mon Apr 25 2022 Amy Chen - 22.1-1 +- Rebaes to 22.1 [bz#2065544] +- Resolves: bz#2065544 + ([RHEL-8.7.0] cloud-init rebase to 22.1) + +* Fri Apr 01 2022 Camilla Conte - 21.1-15 +- ci-Detect-a-Python-version-change-and-clear-the-cache-8.patch [bz#1935826] +- ci-Fix-MIME-policy-failure-on-python-version-upgrade-93.patch [bz#1935826] +- Resolves: bz#1935826 + ([rhel-8] Cloud-init init stage fails after upgrade from RHEL7 to RHEL8.) + +* Fri Feb 25 2022 Jon Maloy - 21.1-14 +- ci-Fix-IPv6-netmask-format-for-sysconfig-1215.patch [bz#2046540] +- Resolves: bz#2046540 + (cloud-init writes route6-$DEVICE config with a HEX netmask. ip route does not like : Error: inet6 prefix is expected rather than "fd00:fd00:fd00::/ffff:ffff:ffff:ffff::".) + +* Tue Jan 25 2022 Jon Maloy - 21.1-13 +- ci-Add-flexibility-to-IMDS-api-version-793.patch [bz#2023940] +- ci-Azure-helper-Ensure-Azure-http-handler-sleeps-betwee.patch [bz#2023940] +- ci-azure-Removing-ability-to-invoke-walinuxagent-799.patch [bz#2023940] +- ci-Azure-eject-the-provisioning-iso-before-reporting-re.patch [bz#2023940] +- ci-Azure-Retrieve-username-and-hostname-from-IMDS-865.patch [bz#2023940] +- ci-Azure-Retry-net-metadata-during-nic-attach-for-non-t.patch [bz#2023940] +- ci-Azure-adding-support-for-consuming-userdata-from-IMD.patch [bz#2023940] +- Resolves: bz#2023940 + ([RHEL-8] Support for provisioning Azure VM with userdata) + +* Wed Jan 19 2022 Jon Maloy - 21.1-12 +- ci-Add-gdisk-and-openssl-as-deps-to-fix-UEFI-Azure-init.patch [bz#2039697] +- ci-Datasource-for-VMware-953.patch [bz#2026587] +- ci-Change-netifaces-dependency-to-0.10.4-965.patch [bz#2026587] +- ci-Update-dscheck_VMware-s-rpctool-check-970.patch [bz#2026587] +- ci-Revert-unnecesary-lcase-in-ds-identify-978.patch [bz#2026587] +- ci-Add-netifaces-package-as-a-Requires-in-cloud-init.sp.patch [bz#2026587] +- Resolves: bz#2039697 + ([RHEL8] [Azure] cloud-init fails to configure the system) +- Resolves: bz#2026587 + ([cloud-init][RHEL8] Support for cloud-init datasource 'cloud-init-vmware-guestinfo') + +* Wed Dec 08 2021 Jon Maloy - 21.1-11 +- ci-cloudinit-net-handle-two-different-routes-for-the-sa.patch [bz#2028028] +- Resolves: bz#2028028 + ([RHEL-8] Above 19.2 of cloud-init fails to configure routes when configuring static and default routes to the same destination IP) + +* Mon Dec 06 2021 Jon Maloy - 21.1-10 +- ci-fix-error-on-upgrade-caused-by-new-vendordata2-attri.patch [bz#2021538] +- Resolves: bz#2021538 + (cloud-init.service fails to start after package update) + +* Mon Oct 25 2021 Jon Maloy - 21.1-9 +- ci-cc_ssh.py-fix-private-key-group-owner-and-permission.patch [bz#2013644] +- Resolves: bz#2013644 + (cloud-init fails to set host key permissions correctly) + +* Thu Sep 23 2021 Miroslav Rezanina - 21.1-8 +- ci-ssh_utils.py-ignore-when-sshd_config-options-are-not.patch [bz#1862933] +- Resolves: bz#1862933 + (cloud-init fails with ValueError: need more than 1 value to unpack[rhel-8]) + +* Fri Aug 27 2021 Miroslav Rezanina - 21.1-7 +- ci-Fix-home-permissions-modified-by-ssh-module-SC-338-9.patch [bz#1995840] +- Resolves: bz#1995840 + ([cloudinit] Fix home permissions modified by ssh module) + +* Wed Aug 11 2021 Miroslav Rezanina - 21.1-6 +- ci-Stop-copying-ssh-system-keys-and-check-folder-permis.patch [bz#1862967] +- Resolves: bz#1862967 + ([cloud-init]Customize ssh AuthorizedKeysFile causes login failure) + +* Fri Aug 06 2021 Miroslav Rezanina - 21.1-5 +- ci-Add-dhcp-client-as-a-dependency.patch [bz#1977385] +- Resolves: bz#1977385 + ([Azure][RHEL-8] cloud-init must require dhcp-client on Azure) + +* Mon Jul 19 2021 Miroslav Rezanina - 21.1-4 +- ci-ssh-util-allow-cloudinit-to-merge-all-ssh-keys-into-.patch [bz#1862967] +- Resolves: bz#1862967 + ([cloud-init]Customize ssh AuthorizedKeysFile causes login failure) + +* Mon Jul 12 2021 Miroslav Rezanina - 21.1-3 +- ci-write-passwords-only-to-serial-console-lock-down-clo.patch [bz#1945891] +- Resolves: bz#1945891 + (CVE-2021-3429 cloud-init: randomly generated passwords logged in clear-text to world-readable file [rhel-8]) + +* Fri Jun 11 2021 Miroslav Rezanina - 21.1-2 +- ci-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch [bz#1957532] +- ci-cloud-init.spec.template-update-systemd_postun-param.patch [bz#1952089] +- Resolves: bz#1957532 + ([cloud-init] From RHEL 82+ cloud-init no longer displays sshd keys fingerprints from instance launched from a backup image) +- Resolves: bz#1952089 + (cloud-init brew build fails on Fedora 33) + +* Thu May 27 2021 Miroslav Rezanina - 21.1-1.el8 +- Rebaes to 21.1 [bz#1958174] +- Resolves: bz#1958174 + ([RHEL-8.5.0] Rebase cloud-init to 21.1) + +* Thu May 13 2021 Miroslav Rezanina - 20.3-10.el8_4.3 +- ci-get_interfaces-don-t-exclude-Open-vSwitch-bridge-bon.patch [bz#1957135] +- ci-net-exclude-OVS-internal-interfaces-in-get_interface.patch [bz#1957135] +- Resolves: bz#1957135 + (Intermittent failure to start cloud-init due to failure to detect macs [rhel-8.4.0.z]) + +* Tue Apr 06 2021 Miroslav Rezanina - 20.3-10.el8_4.1 +- ci-Fix-requiring-device-number-on-EC2-derivatives-836.patch [bz#1942699] +- Resolves: bz#1942699 + ([Aliyun][RHEL8.4][cloud-init] cloud-init service failed to start with Alibaba instance [rhel-8.4.0.z]) + +* Tue Feb 02 2021 Miroslav Rezanina - 20.3-10.el8 +- ci-fix-a-typo-in-man-page-cloud-init.1-752.patch [bz#1913127] +- Resolves: bz#1913127 + (A typo in cloud-init man page) + +* Tue Jan 26 2021 Miroslav Rezanina - 20.3-9.el8 +- ci-DataSourceAzure-update-password-for-defuser-if-exist.patch [bz#1900892] +- ci-Revert-ssh_util-handle-non-default-AuthorizedKeysFil.patch [bz#1919972] +- Resolves: bz#1900892 + ([Azure] Update existing user password RHEL8x) +- Resolves: bz#1919972 + ([RHEL-8.4] ssh keys can be shared across users giving potential root access) + +* Thu Jan 21 2021 Miroslav Rezanina - 20.3-8.el8 +- ci-Missing-IPV6_AUTOCONF-no-to-render-sysconfig-dhcp6-s.patch [bz#1859695] +- Resolves: bz#1859695 + ([Cloud-init] DHCPv6 assigned address is not added to VM's interface) + +* Tue Jan 05 2021 Miroslav Rezanina - 20.3-7.el8 +- ci-Report-full-specific-version-with-cloud-init-version.patch [bz#1898949] +- Resolves: bz#1898949 + (cloud-init should report full specific full version with "cloud-init --version") + +* Mon Dec 14 2020 Miroslav Rezanina - 20.3-6.el8 +- ci-Installing-man-pages-in-the-correct-place-with-corre.patch [bz#1612573] +- ci-Adding-BOOTPROTO-dhcp-to-render-sysconfig-dhcp6-stat.patch [bz#1859695] +- ci-Fix-unit-failure-of-cloud-final.service-if-NetworkMa.patch [bz#1898943] +- ci-ssh_util-handle-non-default-AuthorizedKeysFile-confi.patch [bz#1862967] +- Resolves: bz#1612573 + (Man page scan results for cloud-init) +- Resolves: bz#1859695 + ([Cloud-init] DHCPv6 assigned address is not added to VM's interface) +- Resolves: bz#1898943 + ([rhel-8]cloud-final.service fails if NetworkManager not installed.) +- Resolves: bz#1862967 + ([cloud-init]Customize ssh AuthorizedKeysFile causes login failure) + +* Fri Nov 27 2020 Miroslav Rezanina - 20.3-5.el8 +- ci-network-Fix-type-and-respect-name-when-rendering-vla.patch [bz#1881462] +- Resolves: bz#1881462 + ([rhel8][cloud-init] ifup bond0.504 Error: Connection activation failed: No suitable device found for this connection) + +* Tue Nov 24 2020 Miroslav Rezanina - 20.3-4.el8 +- ci-Changing-permission-of-cloud-init-generator-to-755.patch [bz#1897528] +- Resolves: bz#1897528 + (Change permission on ./systemd/cloud-init-generator.tmpl to 755 instead of 771) + +* Fri Nov 13 2020 Miroslav Rezanina - 20.3-3.el8 +- ci--Removing-net-tools-dependency.patch [bz#1881871] +- ci--Adding-man-pages-to-Red-Hat-spec-file.patch [bz#1612573] +- Resolves: bz#1881871 + (Remove net-tools legacy dependency from spec file) +- Resolves: bz#1612573 + (Man page scan results for cloud-init) + +* Tue Nov 03 2020 Miroslav Rezanina - 20.3-2.el8 +- ci-Explicit-set-IPV6_AUTOCONF-and-IPV6_FORCE_ACCEPT_RA-.patch [bz#1889635] +- ci-Add-config-modules-for-controlling-IBM-PowerVM-RMC.-.patch [bz#1886430] +- Resolves: bz#1886430 + (Support for cloud-init config modules for PowerVM Hypervisor in Red Hat cloud-init) +- Resolves: bz#1889635 + (Add support for ipv6_autoconf on cloud-init-20.3) + +* Fri Oct 23 2020 Eduardo Otubo - 20.3-1.el8 +- Rebase to cloud-init 20.3 [bz#1885185] +- Resolves: bz#1885185 + ([RHEL-8.4.0] cloud-init rebase to 20.3) + +* Wed Sep 02 2020 Miroslav Rezanina - 19.4-11.el8 +- ci-cc_mounts-fix-incorrect-format-specifiers-316.patch [bz#1794664] +- Resolves: bz#1794664 + ([RHEL8] swapon fails with "swapfile has holes" when created on a xfs filesystem by cloud-init) + +* Mon Aug 31 2020 Miroslav Rezanina - 19.4-10.el8 +- ci-Changing-notation-of-subp-call.patch [bz#1839662] +- Resolves: bz#1839662 + ([ESXi][RHEL8.3][cloud-init]ERROR log in cloud-init.log after clone VM on ESXi platform) + +* Mon Aug 24 2020 Miroslav Rezanina - 19.4-9.el8 +- ci-Do-not-use-fallocate-in-swap-file-creation-on-xfs.-7.patch [bz#1794664] +- ci-swap-file-size-being-used-before-checked-if-str-315.patch [bz#1794664] +- ci-Detect-kernel-version-before-swap-file-creation-428.patch [bz#1794664] +- Resolves: bz#1794664 + ([RHEL8] swapon fails with "swapfile has holes" when created on a xfs filesystem by cloud-init) + +* Mon Aug 17 2020 Miroslav Rezanina - 19.4-8.el8 +- ci-When-tools.conf-does-not-exist-running-cmd-vmware-to.patch [bz#1839662] +- ci-ssh-exit-with-non-zero-status-on-disabled-user-472.patch [bz#1833874] +- Resolves: bz#1833874 + ([rhel-8.3]using root user error should cause a non-zero exit code) +- Resolves: bz#1839662 + ([ESXi][RHEL8.3][cloud-init]ERROR log in cloud-init.log after clone VM on ESXi platform) + +* Fri Jun 26 2020 Miroslav Rezanina - 19.4-7.el8 +- Fixing cloud-init-generator permissions [bz#1834173] +- Resolves: bz#1834173 + ([rhel-8.3]Incorrect ds-identify check in cloud-init-generator) + +* Thu Jun 25 2020 Miroslav Rezanina - 19.4-6.el8 +- ci-ec2-only-redact-token-request-headers-in-logs-avoid-.patch [bz#1822343] +- Resolves: bz#1822343 + ([RHEL8.3] Do not log IMDSv2 token values into cloud-init.log) + +* Wed Jun 24 2020 Miroslav Rezanina - 19.4-5.el8 +- ci-ec2-Do-not-log-IMDSv2-token-values-instead-use-REDAC.patch [bz#1822343] +- ci-Render-the-generator-from-template-instead-of-cp.patch [bz#1834173] +- ci-Change-from-redhat-to-rhel-in-systemd-generator-tmpl.patch [bz#1834173] +- ci-cloud-init.service.tmpl-use-rhel-instead-of-redhat-4.patch [bz#1834173] +- Resolves: bz#1822343 + ([RHEL8.3] Do not log IMDSv2 token values into cloud-init.log) +- Resolves: bz#1834173 + ([rhel-8.3]Incorrect ds-identify check in cloud-init-generator) + +* Tue Jun 09 2020 Miroslav Rezanina - 19.4-4.el8 +- ci-changing-ds-identify-patch-from-usr-lib-to-usr-libex.patch [bz#1834173] +- Resolves: bz#1834173 + ([rhel-8.3]Incorrect ds-identify check in cloud-init-generator) + +* Mon Jun 01 2020 Miroslav Rezanina - 19.4-3.el8 +- ci-Make-cloud-init.service-execute-after-network-is-up.patch [bz#1803928] +- Resolves: bz#1803928 + ([RHEL8.3] Race condition of starting cloud-init and NetworkManager) + +* Thu May 28 2020 Miroslav Rezanina - 19.4-2.el8 +- ci-cc_set_password-increase-random-pwlength-from-9-to-2.patch [bz#1812171] +- ci-utils-use-SystemRandom-when-generating-random-passwo.patch [bz#1812174] +- ci-Enable-ssh_deletekeys-by-default.patch [bz#1814152] +- ci-Remove-race-condition-between-cloud-init-and-Network.patch [bz#1840648] +- Resolves: bz#1812171 + (CVE-2020-8632 cloud-init: Too short random password length in cc_set_password in config/cc_set_passwords.py [rhel-8]) +- Resolves: bz#1812174 + (CVE-2020-8631 cloud-init: Use of random.choice when generating random password [rhel-8]) +- Resolves: bz#1814152 + (CVE-2018-10896 cloud-init: default configuration disabled deletion of SSH host keys [rhel-8]) +- Resolves: bz#1840648 + ([cloud-init][RHEL-8.2.0] /etc/resolv.conf lose config after reboot (initial instance is ok)) + +* Mon Apr 20 2020 Miroslav Rezanina - 19.4-1.el8.1 +- Rebase to cloud-init 19.4 [bz#1811912] +- Resolves: bz#1811912 + ([RHEL-8.2.1] cloud-init rebase to 19.4) + +* Tue Mar 10 2020 Miroslav Rezanina - 18.5-12.el8 +- ci-Remove-race-condition-between-cloud-init-and-Network.patch [bz#1807797] +- Resolves: bz#1807797 + ([cloud-init][RHEL-8.2.0] /etc/resolv.conf lose config after reboot (initial instance is ok)) + +* Thu Feb 20 2020 Miroslav Rezanina - 18.5-11.el8 +- ci-azure-avoid-re-running-cloud-init-when-instance-id-i.patch [bz#1788684] +- ci-net-skip-bond-interfaces-in-get_interfaces.patch [bz#1768770] +- ci-net-add-is_master-check-for-filtering-device-list.patch [bz#1768770] +- Resolves: bz#1768770 + (cloud-init complaining about enslaved mac) +- Resolves: bz#1788684 + ([RHEL-8] cloud-init Azure byte swap (hyperV Gen2 Only)) + +* Thu Feb 13 2020 Miroslav Rezanina - 18.5-10.el8 +- ci-cmd-main.py-Fix-missing-modules-init-key-in-modes-di.patch [bz#1802140] +- Resolves: bz#1802140 + ([cloud-init][RHEL8.2]cloud-init cloud-final.service fail with KeyError: 'modules-init' after upgrade to version 18.2-1.el7_6.1 in RHV) + +* Tue Jan 28 2020 Miroslav Rezanina - 18.5-9.el8 +- ci-Removing-cloud-user-from-wheel.patch [bz#1785648] +- Resolves: bz#1785648 + ([RHEL8]cloud-user added to wheel group and sudoers.d causes 'sudo -v' prompts for passphrase) + +* Fri Nov 22 2019 Miroslav Rezanina - 18.5-8.el8 +- ci-Fix-for-network-configuration-not-persisting-after-r.patch [bz#1706482] +- ci-util-json.dumps-on-python-2.7-will-handle-UnicodeDec.patch [bz#1744718] +- Resolves: bz#1706482 + ([cloud-init][RHVM]cloud-init network configuration does not persist reboot [RHEL 8.2.0]) +- Resolves: bz#1744718 + ([cloud-init][RHEL8][OpenStack] cloud-init can't persist instance-data.json) + +* Mon Jul 15 2019 Miroslav Rezanina - 18.5-7.el8 +- Fixing TPS [bz#1729864] +- Resolves: bz#1729864 + (cloud-init tps fail) + +* Thu Jul 04 2019 Miroslav Rezanina - 18.5-6.el8 +- ci-Revert-azure-ensure-that-networkmanager-hook-script-.patch [bz#1692914] +- ci-Azure-Return-static-fallback-address-as-if-failed-to.patch [bz#1691986] +- Resolves: bz#1691986 + ([Azure] [RHEL 8.1] Cloud-init fixes to support fast provisioning for Azure) +- Resolves: bz#1692914 + ([8.1] [WALA][cloud] cloud-init dhclient-hook script has some unexpected side-effects on Azure) + +* Mon Jun 03 2019 Miroslav Rezanina - 18.5-4.el8 +- ci-Azure-Ensure-platform-random_seed-is-always-serializ.patch [bz#1691986] +- ci-DatasourceAzure-add-additional-logging-for-azure-dat.patch [bz#1691986] +- ci-Azure-Changes-to-the-Hyper-V-KVP-Reporter.patch [bz#1691986] +- ci-DataSourceAzure-Adjust-timeout-for-polling-IMDS.patch [bz#1691986] +- ci-cc_mounts-check-if-mount-a-on-no-change-fstab-path.patch [bz#1691986] +- Resolves: bz#1691986 + ([Azure] [RHEL 8.1] Cloud-init fixes to support fast provisioning for Azure) + +* Tue Apr 16 2019 Danilo Cesar Lemes de Paula - 18.5-3.el8 +- ci-Adding-gating-tests-for-Azure-ESXi-and-AWS.patch [bz#1682786] +- Resolves: bz#1682786 + (cloud-init changes blocked until gating tests are added) + +* Wed Apr 10 2019 Danilo C. L. de Paula - 18.5-2 +- Adding gating.yaml file +- Resolves: rhbz#1682786 + (cloud-init changes blocked until gating tests are added) + + +* Wed Apr 10 2019 Danilo de Paula - 18.2-6.el8 +- ci-net-Make-sysconfig-renderer-compatible-with-Network-.patch [bz#1602784] +- Resolves: bz#1602784 + (cloud-init: Sometimes image boots fingerprints is configured, there's a network device present but it's not configured) + +* Fri Jan 18 2019 Miroslav Rezanina - 18.2-5.el8 +- ci-Fix-string-missmatch-when-mounting-ntfs.patch [bz#1664227] +- Resolves: bz#1664227 + ([Azure]String missmatch causes the /dev/sdb1 mounting failed after stop&start VM) + +* Thu Jan 10 2019 Miroslav Rezanina - 18.2-4.el8 +- ci-Enable-cloud-init-by-default-on-vmware.patch [bz#1644335] +- Resolves: bz#1644335 + ([ESXi][RHEL8.0]Enable cloud-init by default on VMware) + +* Wed Nov 28 2018 Miroslav Rezanina - 18.2-3.el8 +- ci-Adding-systemd-mount-options-to-wait-for-cloud-init.patch [bz#1615599] +- ci-Azure-Ignore-NTFS-mount-errors-when-checking-ephemer.patch [bz#1615599] +- ci-azure-Add-reported-ready-marker-file.patch [bz#1615599] +- ci-Adding-disk_setup-to-rhel-cloud.cfg.patch [bz#1615599] +- Resolves: bz#1615599 + ([Azure] cloud-init fails to mount /dev/sdb1 after stop(deallocate)&&start VM) + +* Tue Nov 06 2018 Miroslav Rezanina - 18.2-2.el7 +- Revert "remove 'tee' command from logging configuration" [bz#1626117] +- Resolves: rhbz#1626117] + (cloud-init-0.7.9-9 doesn't feed cloud-init-output.log) + +* Fri Jun 29 2018 Miroslav Rezanina - 18.2-1.el7 +- Rebase to 18.2 [bz#1515909] + Resolves: rhbz#1515909 + +* Tue Feb 13 2018 Ryan McCabe 0.7.9-24 +- Set DHCP_HOSTNAME on Azure to allow for the hostname to be + published correctly when bouncing the network. + Resolves: rhbz#1434109 + +* Mon Jan 15 2018 Ryan McCabe 0.7.9-23 +- Fix a bug tha caused cloud-init to fail as a result of trying + to rename bonds. + Resolves: rhbz#1512247 + +* Mon Jan 15 2018 Ryan McCabe 0.7.9-22 +- Apply patch from -21 + Resolves: rhbz#1489270 + +* Mon Jan 15 2018 Ryan McCabe 0.7.9-21 +- sysconfig: Fix a potential traceback introduced in the + 0.7.9-17 build + Resolves: rhbz#1489270 + +* Sun Dec 17 2017 Ryan McCabe 0.7.9-20 +- sysconfig: Correct rendering for dhcp on ipv6 + Resolves: rhbz#1519271 + +* Thu Nov 30 2017 Ryan McCabe 0.7.9-19 +- sysconfig: Fix rendering of default gateway for ipv6 + Resolves: rhbz#1492726 + +* Fri Nov 24 2017 Ryan McCabe 0.7.9-18 +- Start the cloud-init init local service after the dbus socket is created + so that the hostnamectl command works. + Resolves: rhbz#1450521 + +* Tue Nov 21 2017 Ryan McCabe 0.7.9-17 +- Correctly render DNS and DOMAIN for sysconfig + Resolves: rhbz#1489270 + +* Mon Nov 20 2017 Ryan McCabe 0.7.9-16 +- Disable NetworkManager management of resolv.conf if nameservers + are specified by configuration. + Resolves: rhbz#1454491 + +* Mon Nov 13 2017 Ryan McCabe 0.7.9-15 +- Fix a null reference error in the rh_subscription module + Resolves: rhbz#1498974 + +* Mon Nov 13 2017 Ryan McCabe 0-7.9-14 +- Include gateway if it's included in subnet configration + Resolves: rhbz#1492726 + +* Sun Nov 12 2017 Ryan McCabe 0-7.9-13 +- Do proper cleanup of systemd units when upgrading from versions + 0.7.9-3 through 0.7.9-8. + Resolves: rhbz#1465730 + +* Thu Nov 09 2017 Ryan McCabe 0.7.9-12 +- Prevent Azure NM and dhclient hooks from running when cloud-init is + disabled (rhbz#1474226) + +* Tue Oct 31 2017 Ryan McCabe 0.7.9-11 +- Fix rendering of multiple static IPs per interface file + Resolves: rhbz#bz1497954 + +* Tue Sep 26 2017 Ryan McCabe 0.7.9-10 +- AliCloud: Add support for the Alibaba Cloud datasource (rhbz#1482547) + +* Thu Jun 22 2017 Lars Kellogg-Stedman 0.7.9-9 +- RHEL/CentOS: Fix default routes for IPv4/IPv6 configuration. (rhbz#1438082) +- azure: ensure that networkmanager hook script runs (rhbz#1440831 rhbz#1460206) +- Fix ipv6 subnet detection (rhbz#1438082) + +* Tue May 23 2017 Lars Kellogg-Stedman 0.7.9-8 +- Update patches + +* Mon May 22 2017 Lars Kellogg-Stedman 0.7.9-7 +- Add missing sysconfig unit test data (rhbz#1438082) +- Fix dual stack IPv4/IPv6 configuration for RHEL (rhbz#1438082) +- sysconfig: Raise ValueError when multiple default gateways are present. (rhbz#1438082) +- Bounce network interface for Azure when using the built-in path. (rhbz#1434109) +- Do not write NM_CONTROLLED=no in generated interface config files (rhbz#1385172) + +* Wed May 10 2017 Lars Kellogg-Stedman 0.7.9-6 +- add power-state-change module to cloud_final_modules (rhbz#1252477) +- remove 'tee' command from logging configuration (rhbz#1424612) +- limit permissions on def_log_file (rhbz#1424612) +- Bounce network interface for Azure when using the built-in path. (rhbz#1434109) +- OpenStack: add 'dvs' to the list of physical link types. (rhbz#1442783) + +* Wed May 10 2017 Lars Kellogg-Stedman 0.7.9-5 +- systemd: replace generator with unit conditionals (rhbz#1440831) + +* Thu Apr 13 2017 Charalampos Stratakis 0.7.9-4 +- Import to RHEL 7 +Resolves: rhbz#1427280 + +* Tue Mar 07 2017 Lars Kellogg-Stedman 0.7.9-3 +- fixes for network config generation +- avoid dependency cycle at boot (rhbz#1420946) + +* Tue Jan 17 2017 Lars Kellogg-Stedman 0.7.9-2 +- use timeout from datasource config in openstack get_data (rhbz#1408589) + +* Thu Dec 01 2016 Lars Kellogg-Stedman - 0.7.9-1 +- Rebased on upstream 0.7.9. +- Remove dependency on run-parts + +* Wed Jan 06 2016 Lars Kellogg-Stedman - 0.7.6-8 +- make rh_subscription plugin do nothing in the absence of a valid + configuration [RH:1295953] +- move rh_subscription module to cloud_config stage + +* Wed Jan 06 2016 Lars Kellogg-Stedman - 0.7.6-7 +- correct permissions on /etc/ssh/sshd_config [RH:1296191] + +* Thu Sep 03 2015 Lars Kellogg-Stedman - 0.7.6-6 +- rebuild for ppc64le + +* Tue Jul 07 2015 Lars Kellogg-Stedman - 0.7.6-5 +- bump revision for new build + +* Tue Jul 07 2015 Lars Kellogg-Stedman - 0.7.6-4 +- ensure rh_subscription plugin is enabled by default + +* Wed Apr 29 2015 Lars Kellogg-Stedman - 0.7.6-3 +- added dependency on python-jinja2 [RH:1215913] +- added rhn_subscription plugin [RH:1227393] +- require pyserial to support smartos data source [RH:1226187] + +* Fri Jan 16 2015 Lars Kellogg-Stedman - 0.7.6-2 +- Rebased RHEL version to Fedora rawhide +- Backported fix for https://bugs.launchpad.net/cloud-init/+bug/1246485 +- Backported fix for https://bugs.launchpad.net/cloud-init/+bug/1411829 + +* Fri Nov 14 2014 Colin Walters - 0.7.6-1 +- New upstream version [RH:974327] +- Drop python-cheetah dependency (same as above bug)