diff options
author | CoprDistGit <infra@openeuler.org> | 2024-08-01 14:04:44 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-08-01 14:04:44 +0000 |
commit | d481c70f0209cdf59881b4f3fd21b9250154a6a4 (patch) | |
tree | 14196011e2d91a8e4d81fbb3dee887cede0e73a6 | |
parent | b8e0e8de72b070819aed7529c0e7b8efe8e20957 (diff) |
automatic import of cloud-initopeneuler24.03_LTSopeneuler23.09
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | 0001-Add-initial-redhat-changes.patch | 99 | ||||
-rw-r--r-- | 0002-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch | 564 | ||||
-rw-r--r-- | 0003-Setting-autoconnect-priority-setting-for-network-scr.patch | 582 | ||||
-rw-r--r-- | 0004-net-network_manager-do-not-set-may-fail-to-False-for.patch | 140 | ||||
-rw-r--r-- | 0005-net-allow-dhcp6-configuration-from-generate_fallback.patch | 172 | ||||
-rw-r--r-- | 0006-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch | 113 | ||||
-rw-r--r-- | 0007-test-jsonschema-Pin-jsonschema-version-4781.patch | 38 | ||||
-rw-r--r-- | 0008-fix-clean-stop-warning-when-running-clean-command-47.patch | 121 | ||||
-rw-r--r-- | ci-Pin-pythes-8.0.0.patch | 44 | ||||
-rw-r--r-- | ci-Retain-exit-code-in-cloud-init-status-for-recoverabl.patch | 65 | ||||
-rw-r--r-- | ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch | 242 | ||||
-rw-r--r-- | ci-fix-Add-types-to-network-v1-schema-4841.patch | 110 | ||||
-rw-r--r-- | cloud-init-tmpfiles.conf | 1 | ||||
-rw-r--r-- | cloud-init.spec | 697 | ||||
-rw-r--r-- | sources | 1 |
16 files changed, 2990 insertions, 0 deletions
@@ -0,0 +1 @@ +/23.4.tar.gz diff --git a/0001-Add-initial-redhat-changes.patch b/0001-Add-initial-redhat-changes.patch new file mode 100644 index 0000000..5024340 --- /dev/null +++ b/0001-Add-initial-redhat-changes.patch @@ -0,0 +1,99 @@ +From 03345a88b8b0008a4a81e010d46290f5ba643ebc Mon Sep 17 00:00:00 2001 +From: Ani Sinha <anisinha@redhat.com> +Date: Wed, 13 Dec 2023 11:54:55 +0530 +Subject: [PATCH] Add initial redhat changes + +Adding minimal set of changes necessary for successful build of the package +on RHEL/CentOS 9 Stream koji. + +Additional changes on top of the changes in 23.1.1 rebase: + - Updated VERSION, TARSHA512, MARKER and BUILD_TARGET_RHEL parameters in + Makefile.common in .dist/ + - Squashed unit test fixes for the downstream changes in cloudinit/settings.py. + +Changes from 23.1.1 rebase follows: + +Merged patches (23.1.1): +724a80ac Add TargetRelease +967a4405b rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg +^ Merged since it removes hunks added in this commit itself + +Discarded because not needed anymore (packit): +e3fd7ce12 Configure Packit to ignore the .gitignore file +e18654e9 Fixes for packit support + +Discarded because file does not exist anymore and templates are aligned with upstream: +3576b12460bf18557857ee25df6bf530dab66612 Adding _netdev to the default mount configuration +8092b57ab245856ff1fdde1469960608a489c95e Remove rhel specific files + +Added the following entry to %files to keep track of the new README file in config/clean.d/README +%doc %{_sysconfdir}/cloud/clean.d/README + +ignored +c75e509b0 Revert "Revert "Setting highest autoconnect priority for network-scripts"" +0eba5c619 Revert "Setting highest autoconnect priority for network-scripts" + +ignored +ba19343c0d9807d0c68a2d8e4ab274f3ca884247 Add Gitlab CI +fe09305a5479a4814d6c46df07a906bafa29d637 Delete .gitlab-ci.yml + +Conflicts: +missing rhel/ static files and "" instead of '' in setup.py + +X-downstram-only: true +Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> +Signed-off-by: Ani Sinha <anisinha@redhat.com> +--- + cloudinit/settings.py | 5 +++-- + tests/unittests/cmd/test_main.py | 15 +++++++++------ + 2 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/cloudinit/settings.py b/cloudinit/settings.py +index 592e144d..5ced21bd 100644 +--- a/cloudinit/settings.py ++++ b/cloudinit/settings.py +@@ -54,13 +54,14 @@ CFG_BUILTIN = { + ], + "def_log_file": "/var/log/cloud-init.log", + "log_cfgs": [], +- "syslog_fix_perms": ["syslog:adm", "root:adm", "root:wheel", "root:root"], ++ "mount_default_fields": [None, None, "auto", "defaults,nofail", "0", "2"], ++ "syslog_fix_perms": [], + "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..19d26ebe 100644 +--- a/tests/unittests/cmd/test_main.py ++++ b/tests/unittests/cmd/test_main.py +@@ -119,14 +119,17 @@ 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": [], ++ "mount_default_fields": [ ++ None, ++ None, ++ "auto", ++ "defaults,nofail", ++ "0", ++ "2", ++ ], + } + ) + updated_cfg.pop("system_info") diff --git a/0002-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch b/0002-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch new file mode 100644 index 0000000..7a224d1 --- /dev/null +++ b/0002-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch @@ -0,0 +1,564 @@ +From 5129908caa1867c7f584ec8d38607cf56b20521a Mon Sep 17 00:00:00 2001 +From: Eduardo Otubo <otubo@redhat.com> +Date: Fri, 7 May 2021 13:36:06 +0200 +Subject: [PATCH] Do not write NM_CONTROLLED=no in generated interface config + files + +Conflicts 20.3: + - Not appplying patch on cloudinit/net/sysconfig.py since it now has a +mechanism to identify if cloud-init is running on RHEL, having the +correct settings for NM_CONTROLLED. + +Merged patches (21.1): +- ecbace48 sysconfig: Don't write BOOTPROTO=dhcp for ipv6 dhcp +- a1a00383 include 'NOZEROCONF=yes' in /etc/sysconfig/network +X-downstream-only: true +Signed-off-by: Eduardo Otubo <otubo@redhat.com> +Signed-off-by: Ryan McCabe <rmccabe@redhat.com> + +Signed-off-by: Ani Sinha <anisinha@redhat.com> +--- + cloudinit/net/sysconfig.py | 12 ++++- + 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, 10 insertions(+), 64 deletions(-) + +diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py +index 7570a5e3..f01c4236 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"}, +@@ -1030,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/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 diff --git a/0003-Setting-autoconnect-priority-setting-for-network-scr.patch b/0003-Setting-autoconnect-priority-setting-for-network-scr.patch new file mode 100644 index 0000000..3a1513b --- /dev/null +++ b/0003-Setting-autoconnect-priority-setting-for-network-scr.patch @@ -0,0 +1,582 @@ +From 8a2fcbbcfdfc1df6f6c18f96588154f40083a239 Mon Sep 17 00:00:00 2001 +From: Ani Sinha <anisinha@redhat.com> +Date: Wed, 13 Dec 2023 11:55:16 +0530 +Subject: [PATCH] Setting autoconnect priority setting for network-scripts + +Squashed the following three downstream only commits from RHEL 9.3: + +Commit 1: + +Setting highest autoconnect priority for network-scripts + +RH-Author: Eduardo Otubo <otubo@redhat.com> +RH-MergeRequest: 22: Setting highest autoconnect priority for network-scripts +RH-Commit: [1/1] 34f1d62f8934a983a124df95b861a1e448681d3b (otubo/cloud-init-src) +RH-Bugzilla: 2036060 +RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com> +RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> + +Set the highest autoconnect priority for network-scripts which is +loaded by NetworkManager ifcfg-rh plugin. Note that keyfile is the only +and default existing plugin on RHEL9, by setting the highest autoconnect +priority for network-scripts, NetworkManager will activate +network-scripts but keyfile. Network-scripts path: + +Since this is a blocking issue, we decided to have this one-liner +downstream-only patch so we can move forward and have a better +NetworkManager support later on the release. + +rhbz: 2036060 +x-downstream-only: yes + +Commit 2: + +net/sysconfig: do not use the highest autoconnect priority + +Using the highest priority is a very big hammer that we may not want to use. We +may want users to override the cloud init generated ifcfg files for custom +configuration of interfaces. If cloud init uses the highest priority, nothing +can beat it. Hence lower the priority to 120 allowing values from 121 to 999 +to be used by users if they want to use a custom interface nm keyfile. + +X-downstream-only: true + +Suggested-by: thaller@redhat.com +fixes: c589da20eb92231 ("Setting highest autoconnect priority for network-scripts") + +Commit 3: + +test fixes: update tests to reflect AUTOCONNECT_PRIORITY setting + +X-downstream-only: true +fixes: 0a2c6b6118ff ("net/sysconfig: do not use the highest autoconnect priority") +fixes: c589da20eb92 ("Setting highest autoconnect priority for network-scripts") + +Signed-off-by: Ani Sinha <anisinha@redhat.com> +--- + 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 insertions(+) + +diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py +index f01c4236..d39f4fe3 100644 +--- a/cloudinit/net/sysconfig.py ++++ b/cloudinit/net/sysconfig.py +@@ -318,6 +318,7 @@ class Renderer(renderer.Renderer): + "ONBOOT": True, + "USERCTL": False, + "BOOTPROTO": "none", ++ "AUTOCONNECT_PRIORITY": 120, + }, + "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 7b9121b2..288e3e37 100644 +--- a/tests/unittests/cmd/devel/test_net_convert.py ++++ b/tests/unittests/cmd/devel/test_net_convert.py +@@ -60,6 +60,7 @@ DHCP=ipv4 + SAMPLE_SYSCONFIG_CONTENT = """\ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth0 + ONBOOT=yes +diff --git a/tests/unittests/distros/test_netconfig.py b/tests/unittests/distros/test_netconfig.py +index 962ff7fb..4c624079 100644 +--- a/tests/unittests/distros/test_netconfig.py ++++ b/tests/unittests/distros/test_netconfig.py +@@ -717,6 +717,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + expected_cfgs = { + self.ifcfg_path("eth0"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 +@@ -730,6 +731,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + ), + self.ifcfg_path("eth1"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth1 + ONBOOT=yes +@@ -754,6 +756,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + expected_cfgs = { + self.ifcfg_path("eth0"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 +@@ -769,6 +772,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + ), + self.ifcfg_path("eth1"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth1 + ONBOOT=yes +@@ -812,6 +816,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + expected_cfgs = { + self.ifcfg_path("eth0"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth0 + HWADDR=00:16:3e:60:7c:df +@@ -824,6 +829,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + ), + self.ifcfg_path("infra0"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=infra0 + IPADDR=10.0.1.2 +@@ -859,6 +865,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + expected_cfgs = { + self.ifcfg_path("eth0"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth0 + IPADDR=192.10.1.2 +@@ -870,6 +877,7 @@ class TestNetCfgDistroRedhat(TestNetCfgDistroBase): + ), + self.ifcfg_path("eth0.1001"): dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth0.1001 + IPADDR=10.0.1.2 +diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py +index 052b0674..cef4fa2d 100644 +--- a/tests/unittests/test_net.py ++++ b/tests/unittests/test_net.py +@@ -578,6 +578,7 @@ dns = none + """ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 +@@ -740,6 +741,7 @@ dns = none + """ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 +@@ -897,6 +899,7 @@ dns = none + """ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 +@@ -1137,6 +1140,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-eth1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth1 + HWADDR=cf:d6:af:48:e8:80 +@@ -1146,6 +1150,7 @@ NETWORK_CONFIGS = { + ), + "ifcfg-eth99": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEFROUTE=yes + DEVICE=eth99 +@@ -1311,6 +1316,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-eth1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth1 + HWADDR=cf:d6:af:48:e8:80 +@@ -1320,6 +1326,7 @@ NETWORK_CONFIGS = { + ), + "ifcfg-eth99": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEFROUTE=yes + DEVICE=eth99 +@@ -1566,6 +1573,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + IPADDR=192.168.14.2 +@@ -1712,6 +1720,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + DHCPV6C=yes +@@ -1801,6 +1810,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + DHCPV6C=yes +@@ -1876,6 +1886,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + DHCPV6C=yes +@@ -1940,6 +1951,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + IPV6_AUTOCONF=yes +@@ -1995,6 +2007,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + IPV6ADDR=2001:1::1/64 +@@ -2051,6 +2064,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + DHCPV6C=yes +@@ -2135,6 +2149,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=iface0 + DHCPV6C=yes +@@ -2181,6 +2196,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=iface0 + ONBOOT=yes +@@ -2256,6 +2272,7 @@ NETWORK_CONFIGS = { + "expected_sysconfig_rhel": { + "ifcfg-iface0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=iface0 + ETHTOOL_OPTS="wol g" +@@ -2591,6 +2608,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + "expected_sysconfig_rhel": { + "ifcfg-bond0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BONDING_MASTER=yes + BONDING_OPTS="mode=active-backup """ + """xmit_hash_policy=layer3+4 """ +@@ -2608,6 +2626,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-bond0.200": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=bond0.200 + DHCLIENT_SET_DEFAULT_ROUTE=no +@@ -2619,6 +2638,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + "ifcfg-br0": textwrap.dedent( + """\ + AGEING=250 ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=br0 +@@ -2638,6 +2658,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth0 + HWADDR=c0:d6:9f:2c:e8:80 +@@ -2647,6 +2668,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth0.101": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0.101 +@@ -2666,6 +2688,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth1 + HWADDR=aa:d6:9f:2c:e8:80 +@@ -2677,6 +2700,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth2": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth2 + HWADDR=c0:bb:9f:2c:e8:80 +@@ -2688,6 +2712,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth3": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + BRIDGE=br0 + DEVICE=eth3 +@@ -2698,6 +2723,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth4": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + BRIDGE=br0 + DEVICE=eth4 +@@ -2708,6 +2734,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-eth5": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth5 + DHCLIENT_SET_DEFAULT_ROUTE=no +@@ -2718,6 +2745,7 @@ pre-down route del -net 10.0.0.0/8 gw 11.0.0.1 metric 3 || true + ), + "ifcfg-ib0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=ib0 + HWADDR=a0:00:02:20:fe:80:00:00:00:00:00:00:ec:0d:9a:03:00:15:e2:c1 +@@ -3422,6 +3450,7 @@ iface bond0 inet6 static + "expected_sysconfig_rhel": { + "ifcfg-bond0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BONDING_MASTER=yes + BONDING_OPTS="mode=active-backup xmit_hash_policy=layer3+4 """ + """miimon=100 num_grat_arp=5 """ +@@ -3452,6 +3481,7 @@ iface bond0 inet6 static + ), + "ifcfg-bond0s0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=bond0s0 + HWADDR=aa:bb:cc:dd:e8:00 +@@ -3479,6 +3509,7 @@ iface bond0 inet6 static + ), + "ifcfg-bond0s1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=bond0s1 + HWADDR=aa:bb:cc:dd:e8:01 +@@ -3628,6 +3659,7 @@ iface bond0 inet6 static + "expected_sysconfig_rhel": { + "ifcfg-en0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=en0 + HWADDR=aa:bb:cc:dd:e8:00 +@@ -3637,6 +3669,7 @@ iface bond0 inet6 static + ), + "ifcfg-en0.99": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=en0.99 +@@ -3774,6 +3807,7 @@ iface bond0 inet6 static + "expected_sysconfig_rhel": { + "ifcfg-br0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=br0 + IPADDR=192.168.2.2 +@@ -3787,6 +3821,7 @@ iface bond0 inet6 static + ), + "ifcfg-eth0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + BRIDGE=br0 + DEVICE=eth0 +@@ -3802,6 +3837,7 @@ iface bond0 inet6 static + ), + "ifcfg-eth1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + BRIDGE=br0 + DEVICE=eth1 +@@ -3989,6 +4025,7 @@ iface bond0 inet6 static + "expected_sysconfig_rhel": { + "ifcfg-eth0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth0 + HWADDR=52:54:00:12:34:00 +@@ -4001,6 +4038,7 @@ iface bond0 inet6 static + ), + "ifcfg-eth1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth1 + HWADDR=52:54:00:12:34:aa +@@ -4012,6 +4050,7 @@ iface bond0 inet6 static + ), + "ifcfg-eth2": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth2 + HWADDR=52:54:00:12:34:ff +@@ -4096,6 +4135,7 @@ iface bond0 inet6 static + "expected_sysconfig_rhel": { + "ifcfg-eth0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eth0 + HWADDR=cf:d6:af:48:e8:80 +@@ -4693,6 +4733,7 @@ class TestRhelSysConfigRendering(CiTestCase): + expected_content = """ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth1000 + HWADDR=07-1c-c6-75-a4-be +@@ -4900,6 +4941,7 @@ USERCTL=no + expected = """\ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=interface0 +@@ -4929,6 +4971,7 @@ USERCTL=no + expected_i1 = """\ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 +@@ -4945,6 +4988,7 @@ USERCTL=no + expected_i2 = """\ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth1 + DHCLIENT_SET_DEFAULT_ROUTE=no +@@ -4972,6 +5016,7 @@ USERCTL=no + expected = """\ + # Created by cloud-init automatically, do not edit. + # ++AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth0 + ONBOOT=yes +@@ -5191,6 +5236,7 @@ USERCTL=no + "expected_sysconfig": { + "ifcfg-ens3": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=ens3 +@@ -5235,6 +5281,7 @@ USERCTL=no + expected = { + "ifcfg-eno1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eno1 + ONBOOT=yes +@@ -5244,6 +5291,7 @@ USERCTL=no + ), + "ifcfg-eno1.1000": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEVICE=eno1.1000 + IPADDR=192.6.1.9 +@@ -5276,6 +5324,7 @@ USERCTL=no + expected = { + "ifcfg-bond0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BONDING_MASTER=yes + BONDING_SLAVE0=enp0s0 + BONDING_SLAVE1=enp0s1 +@@ -5291,6 +5340,7 @@ USERCTL=no + ), + "ifcfg-enp0s0": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BONDING_MASTER=yes + BOOTPROTO=none + DEVICE=enp0s0 +@@ -5303,6 +5353,7 @@ USERCTL=no + ), + "ifcfg-enp0s1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BONDING_MASTER=yes + BOOTPROTO=none + DEVICE=enp0s1 +@@ -5333,6 +5384,7 @@ USERCTL=no + expected = { + "ifcfg-eno1": textwrap.dedent( + """\ ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eno1 + HWADDR=07-1c-c6-75-a4-be +@@ -5411,6 +5463,7 @@ USERCTL=no + """\ + # Created by cloud-init automatically, do not edit. + # ++ AUTOCONNECT_PRIORITY=120 + BOOTPROTO=none + DEFROUTE=yes + DEVICE=eth0 diff --git a/0004-net-network_manager-do-not-set-may-fail-to-False-for.patch b/0004-net-network_manager-do-not-set-may-fail-to-False-for.patch new file mode 100644 index 0000000..f8de026 --- /dev/null +++ b/0004-net-network_manager-do-not-set-may-fail-to-False-for.patch @@ -0,0 +1,140 @@ +From 5fa8113a9efaa90f293b95477c4fa44e3d4b6537 Mon Sep 17 00:00:00 2001 +From: Ani Sinha <anisinha@redhat.com> +Date: Thu, 23 Nov 2023 12:27:51 +0530 +Subject: [PATCH] net/network_manager: do not set "may-fail" to False for both + ipv4 and ipv6 dhcp + +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 <james.falcon@canonical.com> +Signed-off-by: Ani Sinha <anisinha@redhat.com> +(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 cef4fa2d..fb4c863c 100644 +--- a/tests/unittests/test_net.py ++++ b/tests/unittests/test_net.py +@@ -1477,11 +1477,11 @@ NETWORK_CONFIGS = { + + [ipv4] + method=auto +- may-fail=false ++ may-fail=true + + [ipv6] + method=auto +- may-fail=false ++ may-fail=true + + """ + ), +@@ -1650,11 +1650,11 @@ NETWORK_CONFIGS = { + + [ipv6] + method=auto +- may-fail=false ++ may-fail=true + + [ipv4] + method=auto +- may-fail=false ++ may-fail=true + + """ + ), diff --git a/0005-net-allow-dhcp6-configuration-from-generate_fallback.patch b/0005-net-allow-dhcp6-configuration-from-generate_fallback.patch new file mode 100644 index 0000000..56a4ca7 --- /dev/null +++ b/0005-net-allow-dhcp6-configuration-from-generate_fallback.patch @@ -0,0 +1,172 @@ +From 54e87eaad7841270e530beff2dcfe68292ae87ef Mon Sep 17 00:00:00 2001 +From: Ani Sinha <anisinha@redhat.com> +Date: Tue, 21 Nov 2023 13:57:15 +0530 +Subject: [PATCH] net: allow dhcp6 configuration from + generate_fallback_configuration() + +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 <anisinha@redhat.com> +(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 fb4c863c..d9ef493b 100644 +--- a/tests/unittests/test_net.py ++++ b/tests/unittests/test_net.py +@@ -4339,6 +4339,7 @@ class TestGenerateFallbackConfig(CiTestCase): + "ethernets": { + "eth0": { + "dhcp4": True, ++ "dhcp6": True, + "set-name": "eth0", + "match": { + "macaddress": "00:11:22:33:44:55", +@@ -4423,6 +4424,9 @@ iface lo inet loopback + + auto eth0 + iface eth0 inet dhcp ++ ++# control-alias eth0 ++iface eth0 inet6 dhcp + """ + self.assertEqual(expected.lstrip(), contents.lstrip()) + +@@ -4512,6 +4516,9 @@ iface lo inet loopback + + auto eth1 + iface eth1 inet dhcp ++ ++# control-alias eth1 ++iface eth1 inet6 dhcp + """ + self.assertEqual(expected.lstrip(), contents.lstrip()) + +@@ -4736,7 +4743,9 @@ class TestRhelSysConfigRendering(CiTestCase): + AUTOCONNECT_PRIORITY=120 + BOOTPROTO=dhcp + DEVICE=eth1000 ++DHCPV6C=yes + HWADDR=07-1c-c6-75-a4-be ++IPV6INIT=yes + ONBOOT=yes + TYPE=Ethernet + USERCTL=no +@@ -5646,7 +5655,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() +@@ -6032,7 +6042,11 @@ class TestNetworkManagerRendering(CiTestCase): + + [ipv4] + method=auto +- may-fail=false ++ may-fail=true ++ ++ [ipv6] ++ method=auto ++ may-fail=true + + """ + ), +@@ -6298,6 +6312,9 @@ iface lo inet loopback + + auto eth1000 + iface eth1000 inet dhcp ++ ++# control-alias eth1000 ++iface eth1000 inet6 dhcp + """ + self.assertEqual(expected.lstrip(), contents.lstrip()) + +@@ -6357,6 +6374,7 @@ class TestNetplanNetRendering: + ethernets: + eth1000: + dhcp4: true ++ dhcp6: true + match: + macaddress: 07-1c-c6-75-a4-be + set-name: eth1000 +@@ -7856,7 +7874,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()) diff --git a/0006-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch b/0006-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch new file mode 100644 index 0000000..40c2490 --- /dev/null +++ b/0006-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch @@ -0,0 +1,113 @@ +From c0df864e373e1e34bf23c4869acdf7d20aea7aaf Mon Sep 17 00:00:00 2001 +From: Ani Sinha <anisinha@redhat.com> +Date: Thu, 7 Dec 2023 02:39:51 +0530 +Subject: [PATCH] net/nm: check for presence of ifcfg files when nm connection + files are absent (#4645) + +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 <anisinha@redhat.com> +(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" diff --git a/0007-test-jsonschema-Pin-jsonschema-version-4781.patch b/0007-test-jsonschema-Pin-jsonschema-version-4781.patch new file mode 100644 index 0000000..ad7e5d6 --- /dev/null +++ b/0007-test-jsonschema-Pin-jsonschema-version-4781.patch @@ -0,0 +1,38 @@ +From e5258b60a3dbf44ef1faac91db2b45dab09de0b5 Mon Sep 17 00:00:00 2001 +From: Brett Holman <brett.holman@canonical.com> +Date: Tue, 16 Jan 2024 12:43:17 -0700 +Subject: [PATCH] test(jsonschema): Pin jsonschema version (#4781) + +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 diff --git a/0008-fix-clean-stop-warning-when-running-clean-command-47.patch b/0008-fix-clean-stop-warning-when-running-clean-command-47.patch new file mode 100644 index 0000000..72884d5 --- /dev/null +++ b/0008-fix-clean-stop-warning-when-running-clean-command-47.patch @@ -0,0 +1,121 @@ +From 9e8fbb736d5e8db8bcf0fbc35a76bdad9251990a Mon Sep 17 00:00:00 2001 +From: d1r3ct0r <calvin.mwadime@canonical.com> +Date: Sat, 20 Jan 2024 02:11:47 +0300 +Subject: [PATCH] fix(clean): stop warning when running clean command (#4761) + +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 .distro/ 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 <anisinha@redhat.com> +--- + 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 ##-<some-app> 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 ##-<some-app> 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 diff --git a/ci-Pin-pythes-8.0.0.patch b/ci-Pin-pythes-8.0.0.patch new file mode 100644 index 0000000..cdb8413 --- /dev/null +++ b/ci-Pin-pythes-8.0.0.patch @@ -0,0 +1,44 @@ +From 7f3b0ff968409a880596e04aece4e4c504fb9c64 Mon Sep 17 00:00:00 2001 +From: Brett Holman <brett.holman@canonical.com> +Date: Mon, 29 Jan 2024 12:03:36 -0700 +Subject: [PATCH] ci: Pin pytest<8.0.0. (#4816) + +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: Ani Sinha <anisinha@redhat.com> +--- + 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/ci-Retain-exit-code-in-cloud-init-status-for-recoverabl.patch b/ci-Retain-exit-code-in-cloud-init-status-for-recoverabl.patch new file mode 100644 index 0000000..dd63da2 --- /dev/null +++ b/ci-Retain-exit-code-in-cloud-init-status-for-recoverabl.patch @@ -0,0 +1,65 @@ +From cc31dc321ae35995ceff93e67aaf0b0c660aa890 Mon Sep 17 00:00:00 2001 +From: Ani Sinha <anisinha@redhat.com> +Date: Tue, 12 Mar 2024 12:52:10 +0530 +Subject: [PATCH] Retain exit code in cloud-init status for recoverable errors + +RH-Author: Ani Sinha <None> +RH-MergeRequest: 71: Retain exit code in cloud-init status for recoverable errors +RH-Jira: RHEL-28549 +RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> +RH-Acked-by: Cathy Avery <cavery@redhat.com> +RH-Commit: [1/1] 00934ade88c481c012bc1947fa44e5ed59f82858 (anisinha/cloud-init) + +Version 23.4 of cloud-init changed the status code reported by cloud-init for +recoverable errors from 0 to 2. Please see the commit +70acb7f2a30d58 ("Add support for cloud-init "degraded" state (#4500)") + +This change has the potential to break customers who are expecting a 0 status +and where warnings can be expected. Hence, revert the status code from 2 to 0 +even in case of recoverable errors. This retains the old behavior and hence +avoids breaking scripts and software stack that expects 0 on the end user side. + +Cannonical has made a similar change downstream for similar reasons. Please see +https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/2048522 +and the corresponding downstream patch: +https://github.com/canonical/cloud-init/pull/4747/commits/adce34bfd214e4eecdf87329486f30f0898dd303 + +This patch has limited risk as it narrowly only restores the old status +code for recoverable errors and does not modify anything else. + +X-downstream-only: true +Signed-off-by: Ani Sinha <anisinha@redhat.com> +--- + cloudinit/cmd/status.py | 2 +- + tests/unittests/cmd/test_status.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cloudinit/cmd/status.py b/cloudinit/cmd/status.py +index f5ee9c11..849c80bc 100644 +--- a/cloudinit/cmd/status.py ++++ b/cloudinit/cmd/status.py +@@ -225,7 +225,7 @@ def handle_status_args(name, args) -> int: + return 1 + # Recoverable error + elif details.status in UXAppStatusDegradedMap.values(): +- return 2 ++ return 0 + return 0 + + +diff --git a/tests/unittests/cmd/test_status.py b/tests/unittests/cmd/test_status.py +index 6c85a59a..567b517a 100644 +--- a/tests/unittests/cmd/test_status.py ++++ b/tests/unittests/cmd/test_status.py +@@ -636,7 +636,7 @@ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin + }, + None, + MyArgs(long=False, wait=False, format="json"), +- 2, ++ 0, + { + "boot_status_code": "enabled-by-kernel-cmdline", + "datasource": "nocloud", +-- +2.39.3 + diff --git a/ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch b/ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch new file mode 100644 index 0000000..850913f --- /dev/null +++ b/ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch @@ -0,0 +1,242 @@ +From 72b2deeafd9276d15f20831f01b2f8c44616f33d Mon Sep 17 00:00:00 2001 +From: Brett Holman <brett.holman@canonical.com> +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 <None> +RH-MergeRequest: 67: Revert "Use grep for faster parsing of cloud config in ds-identify (#4327)" +RH-Jira: RHEL-22255 +RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> +RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com> +RH-Commit: [1/1] 5997598254cd16ea7f26d87212b0f09920fcdf50 (anisinha/cloud-init) + +This reverts commit 816e05d4830f5e789f1f85ef926e2849156bff3a. + +Reopens LP: 2030729 +Fixes GH-4794 + +(cherry picked from commit 8ff94fe9493ad88344eb8bbf2f023c6ba2db5206) +Signed-off-by: Ani Sinha <anisinha@redhat.com> +--- + 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.39.3 + diff --git a/ci-fix-Add-types-to-network-v1-schema-4841.patch b/ci-fix-Add-types-to-network-v1-schema-4841.patch new file mode 100644 index 0000000..48224c6 --- /dev/null +++ b/ci-fix-Add-types-to-network-v1-schema-4841.patch @@ -0,0 +1,110 @@ +From 2f7f3dc6237ea70825dcb70f71d9718f631a9d95 Mon Sep 17 00:00:00 2001 +From: James Falcon <james.falcon@canonical.com> +Date: Tue, 6 Feb 2024 09:24:37 -0600 +Subject: [PATCH] fix: Add types to network v1 schema (#4841) + +RH-Author: Cathy Avery <cavery@redhat.com> +RH-MergeRequest: 69: fix: Add types to network v1 schema (#4841) +RH-Jira: RHEL-21324 +RH-Acked-by: Ani Sinha <None> +RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> +RH-Commit: [1/1] 59b2b4b07dd9eed956943a22b90af487f18b4cbd (cavery/cloud-init-c-9-s) + +Conflicts: +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 <cavery@redhat.com> +--- + .../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/cloud-init-tmpfiles.conf b/cloud-init-tmpfiles.conf new file mode 100644 index 0000000..0c6d2a3 --- /dev/null +++ b/cloud-init-tmpfiles.conf @@ -0,0 +1 @@ +d /run/cloud-init 0700 root root - - diff --git a/cloud-init.spec b/cloud-init.spec new file mode 100644 index 0000000..88400c8 --- /dev/null +++ b/cloud-init.spec @@ -0,0 +1,697 @@ +Name: cloud-init +Version: 23.4 +Release: 7%{?dist} +Summary: Cloud instance init scripts +License: ASL 2.0 or GPLv3 +URL: http://launchpad.net/cloud-init +Source0: https://github.com/canonical/cloud-init/archive/refs/tags/%{version}.tar.gz +Source1: cloud-init-tmpfiles.conf + +# Source-git patches +Patch1: 0001-Add-initial-redhat-changes.patch +Patch2: 0002-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch +Patch3: 0003-Setting-autoconnect-priority-setting-for-network-scr.patch +Patch4: 0004-net-network_manager-do-not-set-may-fail-to-False-for.patch +Patch5: 0005-net-allow-dhcp6-configuration-from-generate_fallback.patch +Patch6: 0006-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch +Patch7: 0007-test-jsonschema-Pin-jsonschema-version-4781.patch +Patch8: 0008-fix-clean-stop-warning-when-running-clean-command-47.patch +# For RHEL-22255 - [Azure][RHEL-9] cloud-init-23.4 cannot read "- Azure" datasource_list format +Patch9: ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch +Patch10: ci-Pin-pythes-8.0.0.patch +# For RHEL-21324 - [rhel-9] The schema WARNING info for network-config.json is not suitable in cloud-init-23.4 +Patch11: ci-fix-Add-types-to-network-v1-schema-4841.patch +# For RHEL-28549 - [RHEL 9.4] cloud-init 23.4 returns 2 on recoverable errors instead of 0 +Patch12: ci-Retain-exit-code-in-cloud-init-status-for-recoverabl.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=1695953 +BuildRequires: python3-distro +# https://bugzilla.redhat.com/show_bug.cgi?id=1417029 +BuildRequires: python3-httpretty >= 0.8.14-2 +BuildRequires: python3-jinja2 +BuildRequires: python3-jsonpatch +BuildRequires: python3-oauthlib +BuildRequires: python3-prettytable +BuildRequires: python3-pyserial +BuildRequires: python3-PyYAML +BuildRequires: python3-requests +BuildRequires: python3-six +# 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 +# https://bugzilla.redhat.com/show_bug.cgi?id=1695953 +Requires: python3-distro +Requires: python3-jinja2 +Requires: python3-jsonpatch +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=2032524 +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 -- + +%if 0%{?fedora} +python3 tools/render-template --variant fedora > $RPM_BUILD_ROOT/%{_sysconfdir}/cloud/cloud.cfg +%endif + +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%{_systemdgeneratordir} ] && mkdir -p $RPM_BUILD_ROOT%{_systemdgeneratordir} +python3 tools/render-template --variant rhel systemd/cloud-init-generator.tmpl > $RPM_BUILD_ROOT%{_systemdgeneratordir}/cloud-init-generator +chmod 755 $RPM_BUILD_ROOT%{_systemdgeneratordir}/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 +%{_systemdgeneratordir}/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 +* Thu Mar 14 2024 Miroslav Rezanina <mrezanin@redhat.com> - 23.4-7 +- ci-Retain-exit-code-in-cloud-init-status-for-recoverabl.patch [RHEL-28549] +- Resolves: RHEL-28549 + ([RHEL 9.4] cloud-init 23.4 returns 2 on recoverable errors instead of 0) + +* Mon Feb 26 2024 Miroslav Rezanina <mrezanin@redhat.com> - 23.4-6 +- ci-fix-Add-types-to-network-v1-schema-4841.patch [RHEL-21324] +- Resolves: RHEL-21324 + ([rhel-9] The schema WARNING info for network-config.json is not suitable in cloud-init-23.4) + +* Mon Feb 19 2024 Miroslav Rezanina <mrezanin@redhat.com> - 23.4-5 +- ci-Revert-Use-grep-for-faster-parsing-of-cloud-config-i.patch [RHEL-22255] +- Resolves: RHEL-22255 + ([Azure][RHEL-9] cloud-init-23.4 cannot read "- Azure" datasource_list format) + +* Mon Jan 29 2024 Camilla Conte <cconte@redhat.com> - 23.4-4 +- 0008-fix-clean-stop-warning-when-running-clean-command-47.patch [RHEL-21531] +- Resolves: RHEL-21531 + +* Wed Jan 17 2024 Camilla Conte <cconte@redhat.com> - 23.4-3 +- 0004-net-network_manager-do-not-set-may-fail-to-False-for.patch [RHEL-21629] +- 0005-net-allow-dhcp6-configuration-from-generate_fallback.patch [RHEL-21629] +- Resolves: RHEL-21629 +- 0006-net-nm-check-for-presence-of-ifcfg-files-when-nm-con.patch [RHEL-17609] +- Resolves: RHEL-17609 +- 0007-test-jsonschema-Pin-jsonschema-version-4781.patch + +* Wed Jan 10 2024 Camilla Conte <cconte@redhat.com> - 23.4-2 +- 0003-Setting-autoconnect-priority-setting-for-network-scr.patch [RHEL-18313] +- Resolves: RHEL-18313 + +* Fri Sep 15 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-12 +- Resolves: RHEL-2323 +- 0031-net-fix-ipv6_dhcpv6_stateful-stateless-slaac-configu.patch [bz#2227767] +- Resolves: bz#2227767 + +* Thu Aug 17 2023 Miroslav Rezanina <mrezanin@redhat.com> - 23.1.1-11 +- Resolves: bz#2232296 + +* Tue Aug 15 2023 Miroslav Rezanina <6499514-mrezanin@users.noreply.gitlab.com> - 23.1.1-10 +- Resolves: bz#2229660 bz#2229952 + +* Fri Aug 04 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-9 +- 0030-NM-renderer-set-default-IPv6-addr-gen-mode-for-all-i.patch [bz#2188388] +- Resolves: bz#2188388 + +* Wed Jul 26 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-8 +- 0022-test-fixes-update-tests-to-reflect-AUTOCONNECT_PRIOR.patch [bz#2217865] +- 0023-test-fixes-remove-NM_CONTROLLED-no-from-tests.patch [bz#2217865] +- 0024-Revert-limit-permissions-on-def_log_file.patch [bz#2217865] +- 0025-test-fixes-changes-to-apply-RHEL-specific-config-set.patch [bz#2217865] +- 0026-Enable-SUSE-based-distros-for-ca-handling-2036.patch [bz#2217865] +- 0027-Handle-non-existent-ca-cert-config-situation-2073.patch [bz#2217865] +- 0028-logging-keep-current-file-mode-of-log-file-if-its-st.patch [bz#2222498] +- 0029-DS-VMware-modify-a-few-log-level-4284.patch [bz#2225374] +- Resolves: bz#2217865 bz#2222498 bz#2225374 + +* Mon Jun 19 2023 Miroslav Rezanina <mrezanin@redhat.com> - 23.1.1-7 +- 0020-Revert-Set-default-renderer-as-sysconfig-for-c9s-RHE.patch +- 0021-Set-default-renderer-as-sysconfig-for-centos-rhel-41.patch [bz#2209349] +- Resolves: bz#2209349 + +* Tue Jun 06 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-6 +- 0011-Revert-Manual-revert-Use-Network-Manager-and-Netplan.patch +- 0012-Revert-Revert-Add-native-NetworkManager-support-1224.patch +- 0013-net-sysconfig-do-not-use-the-highest-autoconnect-pri.patch +- 0014-net-sysconfig-cosmetic-fix-tox-formatting.patch +- 0015-nm-generate-ipv6-stateful-dhcp-config-at-par-with-sy.patch [bz#2207716] +- 0016-network_manager-add-a-method-for-ipv6-static-IP-conf.patch [bz#2196284] +- 0017-net-sysconfig-enable-sysconfig-renderer-if-network-m.patch [bz#2194050] +- 0018-network-manager-Set-higher-autoconnect-priority-for-.patch [bz#2196231] +- 0019-Set-default-renderer-as-sysconfig-for-c9s-RHEL-9.patch [bz#2209349] +- Resolves: bz#2118235 bz#2194050 bz#2196231 bz#2196284 bz#2207716 bz#2209349 + +* Tue May 16 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-5 +- 0010-Do-not-generate-dsa-and-ed25519-key-types-when-crypt.patch [bz#2187164] +- Resolves: bz#2187164 + +* Fri May 05 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-4 +- 0009-Make-user-vendor-data-sensitive-and-remove-log-permi.patch [bz#2190083] +- Resolves: bz#2190083 + +* Thu Apr 27 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-3 +- 0008-Don-t-change-permissions-of-netrules-target-2076.patch [bz#2182948] +- Resolves: bz#2182948 + +* Tue Apr 18 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-2 +- 0007-rhel-make-sure-previous-hostname-file-ends-with-a-ne.patch [bz#2184608] +- Resolves: bz#2184608 + +* Thu Mar 30 2023 Camilla Conte <cconte@redhat.com> - 23.1.1-1 +- Rebase to 23.1.1 [bz#2172811] +- Resolves: bz#2172811 + +* Wed Feb 08 2023 Camilla Conte <cconte@redhat.com> - 22.1-9 +- ci-Allow-growpart-to-resize-encrypted-partitions-1316.patch [bz#2166245] +- Resolves: bz#2166245 + (Add support for resizing encrypted root volume) + +* Fri Jan 27 2023 Camilla Conte <cconte@redhat.com> - 22.1-8 +- ci-cc_set_hostname-ignore-var-lib-cloud-data-set-hostna.patch [bz#2140893] +- Resolves: bz#2140893 +(systemd[1]: Failed to start Initial cloud-init job after reboot system via sysrq 'b') + +* Wed Dec 21 2022 Camilla Conte <cconte@redhat.com> - 22.1-7 +- ci-Ensure-network-ready-before-cloud-init-service-runs-.patch [bz#2152100] +- Resolves: bz#2152100 + ([RHEL-9] Ensure network ready before cloud-init service runs on RHEL) + +* Tue Sep 27 2022 Camilla Conte <cconte@redhat.com> - 22.1-6 +- ci-cloud.cfg.tmpl-make-sure-centos-settings-are-identic.patch [bz#2115565] +- Resolves: bz#2115565 + (cloud-init configures user "centos" or "rhel" instead of "cloud-user" with cloud-init-22.1) + +* Wed Aug 17 2022 Miroslav Rezanina <mrezanin@redhat.com> - 22.1-5 +- ci-Revert-Add-native-NetworkManager-support-1224.patch [bz#2107463 bz#2104389 bz#2117532 bz#2098501] +- ci-Revert-Use-Network-Manager-and-Netplan-as-default-re.patch [bz#2107463 bz#2104389 bz#2117532 bz#2098501] +- ci-Revert-Revert-Setting-highest-autoconnect-priority-f.patch [bz#2107463 bz#2104389 bz#2117532 bz#2098501] +- Resolves: bz#2107463 + ([RHEL-9.1] Cannot run sysconfig when changing the priority of network renderers) +- Resolves: bz#2104389 + ([RHEL-9.1]Failed to config static IP and IPv6 according to VMware Customization Config File) +- Resolves: bz#2117532 + ([RHEL9.1] Revert patch of configuring networking by NM keyfiles) +- Resolves: bz#2098501 + ([RHEL-9.1] IPv6 not workable when cloud-init configure network using NM keyfiles) + +* Thu Jun 23 2022 Jon Maloy <jmaloy@redhat.com> - 22.1-4 +- ci-Honor-system-locale-for-RHEL-1355.patch [bz#2061604] +- ci-cloud-init.spec-adjust-path-for-66-azure-ephemeral.r.patch [bz#2096270] +- ci-setup.py-adjust-udev-rules-default-path-1513.patch [bz#2096270] +- Resolves: bz#2061604 + (cloud-config will change /etc/locale.conf back to en_US.UTF-8 on rhel-guest-image-9.0) +- Resolves: bz#2096270 + (Adjust udev/rules default path[rhel-9]) + +* Wed Jun 08 2022 Miroslav Rezanina <mrezanin@redhat.com> - 22.1-3 +- ci-Support-EC2-tags-in-instance-metadata-1309.patch [bz#2091640] +- ci-cc_set_hostname-do-not-write-localhost-when-no-hostn.patch [bz#1980403] +- Resolves: bz#2091640 + ([cloud][init] Add support for reading tags from instance metadata) +- Resolves: bz#1980403 + ([RHV] RHEL 9 VM with cloud-init without hostname set doesn't result in the FQDN as hostname) + +* Tue May 31 2022 Miroslav Rezanina <mrezanin@redhat.com> - 22.1-2 +- ci-Add-native-NetworkManager-support-1224.patch [bz#2056964] +- ci-Use-Network-Manager-and-Netplan-as-default-renderers.patch [bz#2056964] +- ci-Revert-Setting-highest-autoconnect-priority-for-netw.patch [bz#2056964] +- ci-Align-rhel-custom-files-with-upstream-1431.patch [bz#2088448] +- ci-Remove-rhel-specific-files.patch [bz#2088448] +- Resolves: bz#2056964 + ([RHEL-9]Rebase cloud-init from Fedora so it can configure networking using NM keyfiles) +- Resolves: bz#2088448 + (Align cloud.cfg file and systemd with cloud-init upstream .tmpl files) + +* Tue Apr 19 2022 Emanuele Giuseppe Esposito <eesposit@redhat.com> - 22.1-1 +- Rebase to 22.1 [bz#2065548] +- Resolves: bz#2065548 + ([RHEL-9.1] cloud-init rebase to 22.1) + +* Fri Feb 25 2022 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-19 +- ci-Fix-IPv6-netmask-format-for-sysconfig-1215.patch [bz#2053546] +- ci-Adding-_netdev-to-the-default-mount-configuration.patch [bz#1998445] +- ci-Setting-highest-autoconnect-priority-for-network-scr.patch [bz#2036060] +- Resolves: bz#2053546 + (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::".) +- Resolves: bz#1998445 + ([Azure][RHEL-9] ordering cycle exists after reboot) +- Resolves: bz#2036060 + ([cloud-init][ESXi][RHEL-9] Failed to config static IP according to VMware Customization Config File) + +* Fri Feb 11 2022 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-18 +- ci-Add-_netdev-option-to-mount-Azure-ephemeral-disk-121.patch [bz#1998445] +- Resolves: bz#1998445 + ([Azure][RHEL-9] ordering cycle exists after reboot) + +* Mon Feb 07 2022 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-17 +- ci-Add-flexibility-to-IMDS-api-version-793.patch [bz#2042351] +- ci-Azure-helper-Ensure-Azure-http-handler-sleeps-betwee.patch [bz#2042351] +- ci-azure-Removing-ability-to-invoke-walinuxagent-799.patch [bz#2042351] +- ci-Azure-eject-the-provisioning-iso-before-reporting-re.patch [bz#2042351] +- ci-Azure-Retrieve-username-and-hostname-from-IMDS-865.patch [bz#2042351] +- ci-Azure-Retry-net-metadata-during-nic-attach-for-non-t.patch [bz#2042351] +- ci-Azure-adding-support-for-consuming-userdata-from-IMD.patch [bz#2042351] +- Resolves: bz#2042351 + ([RHEL-9] Support for provisioning Azure VM with userdata) + +* Fri Jan 21 2022 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-16 +- ci-Datasource-for-VMware-953.patch [bz#2040090] +- ci-Change-netifaces-dependency-to-0.10.4-965.patch [bz#2040090] +- ci-Update-dscheck_VMware-s-rpctool-check-970.patch [bz#2040090] +- ci-Revert-unnecesary-lcase-in-ds-identify-978.patch [bz#2040090] +- ci-Add-netifaces-package-as-a-Requires-in-cloud-init.sp.patch [bz#2040090] +- Resolves: bz#2040090 + ([cloud-init][RHEL9] Support for cloud-init datasource 'cloud-init-vmware-guestinfo') + +* Thu Jan 13 2022 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-15 +- ci-Add-gdisk-and-openssl-as-deps-to-fix-UEFI-Azure-init.patch [bz#2032524] +- Resolves: bz#2032524 + ([RHEL9] [Azure] cloud-init fails to configure the system) + +* Tue Dec 14 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-14 +- ci-cloudinit-net-handle-two-different-routes-for-the-sa.patch [bz#2028031] +- Resolves: bz#2028031 + ([RHEL-9] 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 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-13 +- ci-fix-error-on-upgrade-caused-by-new-vendordata2-attri.patch [bz#2028381] +- Resolves: bz#2028381 + (cloud-init.service fails to start after package update) + +* Mon Nov 01 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-12 +- ci-remove-unnecessary-EOF-string-in-disable-sshd-keygen.patch [bz#2016305] +- Resolves: bz#2016305 + (disable-sshd-keygen-if-cloud-init-active.conf:8: Missing '=', ignoring line) + +* Tue Oct 26 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-11 +- ci-cc_ssh.py-fix-private-key-group-owner-and-permission.patch [bz#2015974] +- Resolves: bz#2015974 + (cloud-init fails to set host key permissions correctly) + +* Mon Oct 18 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-10 +- ci-Inhibit-sshd-keygen-.service-if-cloud-init-is-active.patch [bz#2002492] +- ci-add-the-drop-in-also-in-the-files-section-of-cloud-i.patch [bz#2002492] +- Resolves: bz#2002492 + (util.py[WARNING]: Failed generating key type rsa to file /etc/ssh/ssh_host_rsa_key) + +* Fri Sep 10 2021 Miroslav Rezanina mrezanin@redhat.com - 21.1-9 +- ci-ssh_utils.py-ignore-when-sshd_config-options-are-not.patch [bz#2002302] +- Resolves: bz#2002302 + (cloud-init fails with ValueError: need more than 1 value to unpack[rhel-9]) + +* Fri Sep 03 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-8 +- ci-Fix-home-permissions-modified-by-ssh-module-SC-338-9.patch [bz#1995843] +- Resolves: bz#1995843 + ([cloudinit] Fix home permissions modified by ssh module) + +* Mon Aug 16 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-7 +- ci-Stop-copying-ssh-system-keys-and-check-folder-permis.patch [bz#1979099] +- ci-Report-full-specific-version-with-cloud-init-version.patch [bz#1971002] +- Resolves: bz#1979099 + ([cloud-init]Customize ssh AuthorizedKeysFile causes login failure[RHEL-9.0]) +- Resolves: bz#1971002 + (cloud-init should report full specific full version with "cloud-init --version" [rhel-9]) + +* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 21.1-6 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Aug 06 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-5 +- ci-Add-dhcp-client-as-a-dependency.patch [bz#1964900] +- Resolves: bz#1964900 + ([Azure][RHEL-9] cloud-init must require dhcp-client on Azure) + +* Thu Jul 15 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-4 +- ci-write-passwords-only-to-serial-console-lock-down-clo.patch [bz#1945892] +- ci-ssh-util-allow-cloudinit-to-merge-all-ssh-keys-into-.patch [bz#1979099] +- Resolves: bz#1945892 + (CVE-2021-3429 cloud-init: randomly generated passwords logged in clear-text to world-readable file [rhel-9.0]) +- Resolves: bz#1979099 + ([cloud-init]Customize ssh AuthorizedKeysFile causes login failure[RHEL-9.0]) + +* Fri Jul 02 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-3 +- ci-Fix-requiring-device-number-on-EC2-derivatives-836.patch [bz#1943511] +- Resolves: bz#1943511 + ([Aliyun][RHEL9.0][cloud-init] cloud-init service failed to start with Alibaba instance) + +* Mon Jun 21 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-2 +- ci-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch [bz#1970909] +- ci-Use-_systemdgeneratordir-macro-for-cloud-init-genera.patch [bz#1971480] +- Resolves: bz#1970909 + ([cloud-init] From RHEL 82+ cloud-init no longer displays sshd keys fingerprints from instance launched from a backup image[rhel-9]) +- Resolves: bz#1971480 + (Use systemdgenerators macro in spec file) + +* Thu Jun 10 2021 Miroslav Rezanina <mrezanin@redhat.com> - 21.1-1 +- Rebase to 21.1 [bz#1958209] +- Resolves: bz#1958209 + ([RHEL-9.0] Rebase cloud-init to 21.1) + +* Wed Apr 21 2021 Miroslav Rezanina <mrezanin@redhat.com> - 20.4-5 +- Removing python-mock dependency +- Resolves: bz#1922323 + +* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 20.4-4 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Wed Apr 07 2021 Miroslav Rezanina <mrezanin@redhat.com> - 20.4-3.el9 +- ci-Removing-python-nose-and-python-tox-as-dependency.patch [bz#1916777 bz#1918892] +- Resolves: bz#1916777 + (cloud-init requires python-nose) +- Resolves: bz#1918892 + (cloud-init requires tox) + +* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 20.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Dec 03 2020 Eduardo Otubo <otubo@redhat.com> - 20.4-2 +- Updated to 20.4 [bz#1902250] + +* Mon Sep 07 2020 Eduardo Otubo <otubo@redhat.com> - 19.4-7 +- Fix execution fail with backtrace + +* Mon Sep 07 2020 Eduardo Otubo <otubo@redhat.com> - 19.4-6 +- Adding missing patches to spec file + +* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 19.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon May 25 2020 Miro Hrončok <mhroncok@redhat.com> - 19.4-4 +- Rebuilt for Python 3.9 + +* Tue Apr 14 2020 Eduardo Otubo <otubo@redhat.com> - 19.4-3 +- Fix BZ#1798729 - CVE-2020-8632 cloud-init: Too short random password length + in cc_set_password in config/cc_set_passwords.py +- Fix BZ#1798732 - CVE-2020-8631 cloud-init: Use of random.choice when + generating random password + +* Sun Feb 23 2020 Dusty Mabe <dusty@dustymabe.com> - 19.4-2 +- Fix sed substitutions for unittest2 and assertItemsEqual +- Fix failing unittests by including `BuildRequires: passwd` + - The unittests started failing because of upstream commit + 7c07af2 where cloud-init can now support using `usermod` to + lock an account if `passwd` isn't installed. Since `passwd` + wasn't installed in our mock buildroot it was choosing to + use `usermod` and the unittests were failing. See: + https://github.com/canonical/cloud-init/commit/7c07af2 +- Add missing files to package + - /usr/bin/cloud-id + - /usr/share/bash-completion/completions/cloud-init + +* Fri Feb 14 2020 Eduardo Otubo <otubo@redhat.com> - 19.4-1 +- Updated to 19.4 +- Rebasing the Fedora specific patches but removing patches that don't apply anymore + +* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 17.1-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Nov 08 2019 Miro Hrončok <mhroncok@redhat.com> - 17.1-14 +- Drop unneeded build dependency on python3-unittest2 + +* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 17.1-13 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Sun Aug 18 2019 Miro Hrončok <mhroncok@redhat.com> - 17.1-12 +- Rebuilt for Python 3.8 + +* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 17.1-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Apr 23 2019 Björn Esser <besser82@fedoraproject.org> - 17.1-10 +- Add patch to replace platform.dist() [RH:1695953] +- Add (Build)Requires: python3-distro + +* Tue Apr 23 2019 Björn Esser <besser82@fedoraproject.org> - 17.1-9 +- Fix %%systemd_postun macro [RH:1695953] +- Add patch to fix failing test for EPOCHREALTIME bash env [RH:1695953] + +* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 17.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 17.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Jun 18 2018 Miro Hrončok <mhroncok@redhat.com> - 17.1-6 +- Rebuilt for Python 3.7 + +* Sat Apr 21 2018 Lars Kellogg-Stedman <lars@redhat.com> - 17.1-5 +- Enable dhcp on EC2 interfaces with only local ipv4 addresses [RH:1569321] + (cherry pick upstream commit eb292c1) + +* Mon Mar 26 2018 Patrick Uiterwijk <puiterwijk@redhat.com> - 17.1-4 +- Make sure the patch does not add infinitely many entries + +* Mon Mar 26 2018 Patrick Uiterwijk <puiterwijk@redhat.com> - 17.1-3 +- Add patch to retain old values of /etc/sysconfig/network + +* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 17.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Oct 4 2017 Garrett Holmstrom <gholms@fedoraproject.org> - 17.1-1 +- Updated to 17.1 + +* Tue Sep 26 2017 Ryan McCabe <rmccabe@redhat.com> 0.7.9-10 +- AliCloud: Add support for the Alibaba Cloud datasource (rhbz#1482547) + +* Thu Jun 22 2017 Lars Kellogg-Stedman <lars@redhat.com> 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 <lars@redhat.com> 0.7.9-8 +- Update patches + +* Mon May 22 2017 Lars Kellogg-Stedman <lars@redhat.com> 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 <lars@redhat.com> 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 <lars@redhat.com> 0.7.9-5 +- systemd: replace generator with unit conditionals (rhbz#1440831) + +* Thu Apr 13 2017 Charalampos Stratakis <cstratak@redhat.com> 0.7.9-4 +- Import to RHEL 7 +Resolves: rhbz#1427280 + +* Tue Mar 07 2017 Lars Kellogg-Stedman <lars@redhat.com> 0.7.9-3 +- fixes for network config generation +- avoid dependency cycle at boot (rhbz#1420946) + +* Tue Jan 17 2017 Lars Kellogg-Stedman <lars@redhat.com> 0.7.9-2 +- use timeout from datasource config in openstack get_data (rhbz#1408589) + +* Thu Dec 01 2016 Lars Kellogg-Stedman <lars@redhat.com> - 0.7.9-1 +- Rebased on upstream 0.7.9. +- Remove dependency on run-parts + +* Wed Jan 06 2016 Lars Kellogg-Stedman <lars@redhat.com> - 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 <lars@redhat.com> - 0.7.6-7 +- correct permissions on /etc/ssh/sshd_config [RH:1296191] + +* Thu Sep 03 2015 Lars Kellogg-Stedman <lars@redhat.com> - 0.7.6-6 +- rebuild for ppc64le + +* Tue Jul 07 2015 Lars Kellogg-Stedman <lars@redhat.com> - 0.7.6-5 +- bump revision for new build + +* Tue Jul 07 2015 Lars Kellogg-Stedman <lars@redhat.com> - 0.7.6-4 +- ensure rh_subscription plugin is enabled by default + +* Wed Apr 29 2015 Lars Kellogg-Stedman <lars@redhat.com> - 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 <lars@redhat.com> - 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 <walters@redhat.com> - 0.7.6-1 +- New upstream version [RH:974327] +- Drop python-cheetah dependency (same as above bug) @@ -0,0 +1 @@ +c9951a3016d9edf9d6391d8982cb222f 23.4.tar.gz |