diff --git a/SOURCES/0001-Improvements-for-AlmaLinux-OS-and-CloudLinux-OS.patch b/SOURCES/0001-fix-fix-and-improve-almalinux-and-cloudlinux-support.patch similarity index 79% rename from SOURCES/0001-Improvements-for-AlmaLinux-OS-and-CloudLinux-OS.patch rename to SOURCES/0001-fix-fix-and-improve-almalinux-and-cloudlinux-support.patch index a9d1e46..7fc24b7 100644 --- a/SOURCES/0001-Improvements-for-AlmaLinux-OS-and-CloudLinux-OS.patch +++ b/SOURCES/0001-fix-fix-and-improve-almalinux-and-cloudlinux-support.patch @@ -1,36 +1,26 @@ -From 6701ba45d4cc3a888f2275f8f840ce37bc2f4959 Mon Sep 17 00:00:00 2001 -From: Andrew Lukoshko -Date: Thu, 13 Mar 2025 14:24:23 +0000 -Subject: [PATCH] Improvements for AlmaLinux OS and CloudLinux OS +From 25dc8023e0bfb131e6e8171e78bb5939a29525e0 Mon Sep 17 00:00:00 2001 +From: Elkhan Mammadli +Date: Thu, 13 Mar 2025 18:23:03 +0400 +Subject: [PATCH] fix: fix and improve almalinux and cloudlinux support -Add AlmaLinux OS and CloudLinux OS support to: +- Fix cc_ntp module. +- Add support to cc_ca_certs module. +- Improve support for systemd integration. -Modules: -- cc_ca_certs -- cc_ntp -- cc_resolv_conf - -Datasources: -- Rbx Cloud Datasource - -Systemd services: -- cloud-final.service -- cloud-init-local.service -- cloud-init.service +Signed-off-by: Elkhan Mammadli --- - cloudinit/config/cc_ca_certs.py | 8 ++++ - cloudinit/config/cc_ntp.py | 11 ++--- - cloudinit/config/cc_resolv_conf.py | 2 + - cloudinit/settings.py | 2 +- - cloudinit/sources/DataSourceRbxCloud.py | 2 +- - systemd/cloud-final.service.tmpl | 2 +- - systemd/cloud-init-local.service.tmpl | 10 ++-- - systemd/cloud-init.service.tmpl | 4 +- - templates/chrony.conf.almalinux.tmpl | 51 ++++++++++++++++++++ - templates/chrony.conf.cloudlinux.tmpl | 51 ++++++++++++++++++++ - templates/ntp.conf.almalinux.tmpl | 64 +++++++++++++++++++++++++ - templates/ntp.conf.cloudlinux.tmpl | 64 +++++++++++++++++++++++++ - 12 files changed, 253 insertions(+), 18 deletions(-) + cloudinit/config/cc_ca_certs.py | 8 ++++ + cloudinit/config/cc_ntp.py | 3 ++ + cloudinit/settings.py | 2 +- + systemd/cloud-config.service.tmpl | 2 +- + systemd/cloud-final.service.tmpl | 4 +- + systemd/cloud-init-local.service.tmpl | 12 ++--- + systemd/cloud-init.service.tmpl | 4 +- + templates/chrony.conf.almalinux.tmpl | 51 +++++++++++++++++++++ + templates/chrony.conf.cloudlinux.tmpl | 51 +++++++++++++++++++++ + templates/ntp.conf.almalinux.tmpl | 64 +++++++++++++++++++++++++++ + templates/ntp.conf.cloudlinux.tmpl | 64 +++++++++++++++++++++++++++ + 11 files changed, 253 insertions(+), 12 deletions(-) create mode 100644 templates/chrony.conf.almalinux.tmpl create mode 100644 templates/chrony.conf.cloudlinux.tmpl create mode 100644 templates/ntp.conf.almalinux.tmpl @@ -63,48 +53,19 @@ index 8d3fd9a..4dd5843 100644 "debian", "fedora", diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py -index 9eef24f..1015d43 100644 +index 9eef24f..653db7d 100644 --- a/cloudinit/config/cc_ntp.py +++ b/cloudinit/config/cc_ntp.py -@@ -109,14 +109,6 @@ DISTRO_CLIENT_CONFIG = { - "service_name": "ntpd", - }, - }, -- "centos": { -- "ntp": { -- "service_name": "ntpd", -- }, -- "chrony": { -- "service_name": "chronyd", -- }, -- }, - "cos": { - "chrony": { - "service_name": "chronyd", -@@ -224,6 +216,9 @@ DISTRO_CLIENT_CONFIG = { - for distro in ("opensuse-microos", "opensuse-tumbleweed", "opensuse-leap"): - DISTRO_CLIENT_CONFIG[distro] = DISTRO_CLIENT_CONFIG["opensuse"] - -+for distro in ("almalinux", "centos", "cloudlinux"): -+ DISTRO_CLIENT_CONFIG[distro] = DISTRO_CLIENT_CONFIG["rhel"] -+ +@@ -227,6 +227,9 @@ for distro in ("opensuse-microos", "opensuse-tumbleweed", "opensuse-leap"): for distro in ("sle_hpc", "sle-micro"): DISTRO_CLIENT_CONFIG[distro] = DISTRO_CLIENT_CONFIG["sles"] -diff --git a/cloudinit/config/cc_resolv_conf.py b/cloudinit/config/cc_resolv_conf.py -index aa88919..4eb1d76 100644 ---- a/cloudinit/config/cc_resolv_conf.py -+++ b/cloudinit/config/cc_resolv_conf.py -@@ -57,7 +57,9 @@ meta: MetaSchema = { - "title": "Configure resolv.conf", - "description": MODULE_DESCRIPTION, - "distros": [ -+ "almalinux", - "alpine", -+ "cloudlinux", - "fedora", - "mariner", - "opensuse", ++for distro in ("almalinux", "cloudlinux", "rocky"): ++ DISTRO_CLIENT_CONFIG[distro] = DISTRO_CLIENT_CONFIG["rhel"] ++ + # The schema definition for each cloud-config module is a strict contract for + # describing supported configuration parameters for each cloud-config section. + # It allows cloud-config to validate and alert users to invalid or ignored diff --git a/cloudinit/settings.py b/cloudinit/settings.py index 3a581e5..def6d4b 100644 --- a/cloudinit/settings.py @@ -118,23 +79,32 @@ index 3a581e5..def6d4b 100644 "network": {"renderers": None}, }, "vendor_data": {"enabled": True, "prefix": []}, -diff --git a/cloudinit/sources/DataSourceRbxCloud.py b/cloudinit/sources/DataSourceRbxCloud.py -index 9214f1b..14880ec 100644 ---- a/cloudinit/sources/DataSourceRbxCloud.py -+++ b/cloudinit/sources/DataSourceRbxCloud.py -@@ -60,7 +60,7 @@ def _sub_arp(cmd): - - def gratuitous_arp(items, distro): - source_param = "-S" -- if distro.name in ["fedora", "centos", "rhel"]: -+ if distro.name in ["almalinux", "fedora", "centos", "cloudlinux", "rhel"]: - source_param = "-s" - for item in items: - try: +diff --git a/systemd/cloud-config.service.tmpl b/systemd/cloud-config.service.tmpl +index 76e50ae..047969a 100644 +--- a/systemd/cloud-config.service.tmpl ++++ b/systemd/cloud-config.service.tmpl +@@ -5,7 +5,7 @@ After=network-online.target cloud-config.target + After=snapd.seeded.service + Before=systemd-user-sessions.service + Wants=network-online.target cloud-config.target +-{% if variant == "rhel" %} ++{% if variant in ["almalinux", "cloudlinux", "rhel"] %} + ConditionPathExists=!/etc/cloud/cloud-init.disabled + ConditionKernelCommandLine=!cloud-init=disabled + {% endif %} diff --git a/systemd/cloud-final.service.tmpl b/systemd/cloud-final.service.tmpl -index 85f423a..4faef66 100644 +index 85f423a..578c7f4 100644 --- a/systemd/cloud-final.service.tmpl +++ b/systemd/cloud-final.service.tmpl +@@ -7,7 +7,7 @@ After=multi-user.target + Before=apt-daily.service + {% endif %} + Wants=network-online.target cloud-config.service +-{% if variant == "rhel" %} ++{% if variant in ["almalinux", "cloudlinux", "rhel"] %} + ConditionPathExists=!/etc/cloud/cloud-init.disabled + ConditionKernelCommandLine=!cloud-init=disabled + {% endif %} @@ -19,7 +19,7 @@ ExecStart=/usr/bin/cloud-init modules --mode=final RemainAfterExit=yes TimeoutSec=0 @@ -145,7 +115,7 @@ index 85f423a..4faef66 100644 ExecStartPost=/bin/sh -c 'u=NetworkManager.service; \ out=$(systemctl show --property=SubState $u) || exit; \ diff --git a/systemd/cloud-init-local.service.tmpl b/systemd/cloud-init-local.service.tmpl -index 6f3f9d8..493eaf1 100644 +index 6f3f9d8..3f56494 100644 --- a/systemd/cloud-init-local.service.tmpl +++ b/systemd/cloud-init-local.service.tmpl @@ -1,23 +1,23 @@ @@ -153,7 +123,7 @@ index 6f3f9d8..493eaf1 100644 [Unit] Description=Initial cloud-init job (pre-networking) -{% if variant in ["ubuntu", "unknown", "debian", "rhel" ] %} -+{% if variant in ["almalinux", "cloudlinux", "ubuntu", "unknown", "debian", "rhel" ] %} ++{% if variant in ["almalinux", "cloudlinux", "ubuntu", "unknown", "debian", "rhel"] %} DefaultDependencies=no {% endif %} Wants=network-pre.target @@ -176,7 +146,15 @@ index 6f3f9d8..493eaf1 100644 Before=firewalld.target Conflicts=shutdown.target {% endif %} -@@ -33,7 +33,7 @@ ConditionKernelCommandLine=!cloud-init=disabled +@@ -26,14 +26,14 @@ Before=sysinit.target + Conflicts=shutdown.target + {% endif %} + RequiresMountsFor=/var/lib/cloud +-{% if variant == "rhel" %} ++{% if variant in ["almalinux", "cloudlinux", "rhel"] %} + ConditionPathExists=!/etc/cloud/cloud-init.disabled + ConditionKernelCommandLine=!cloud-init=disabled + {% endif %} [Service] Type=oneshot @@ -323,7 +301,7 @@ index 0000000..43b1f5d +#log measurements statistics tracking diff --git a/templates/ntp.conf.almalinux.tmpl b/templates/ntp.conf.almalinux.tmpl new file mode 100644 -index 0000000..9884df5 +index 0000000..6d166aa --- /dev/null +++ b/templates/ntp.conf.almalinux.tmpl @@ -0,0 +1,64 @@ @@ -342,7 +320,7 @@ index 0000000..9884df5 +# Permit all access over the loopback interface. This could +# be tightened as well, but to do so would effect some of +# the administrative functions. -+restrict 127.0.0.1 ++restrict 127.0.0.1 +restrict -6 ::1 + +# Hosts on local network are less restricted. @@ -377,7 +355,7 @@ index 0000000..9884df5 +includefile /etc/ntp/crypto/pw + +# Key file containing the keys and key identifiers used when operating -+# with symmetric key cryptography. ++# with symmetric key cryptography. +keys /etc/ntp/keys + +# Specify the key identifiers which are trusted. @@ -393,7 +371,7 @@ index 0000000..9884df5 +#statistics clockstats cryptostats loopstats peerstats diff --git a/templates/ntp.conf.cloudlinux.tmpl b/templates/ntp.conf.cloudlinux.tmpl new file mode 100644 -index 0000000..9884df5 +index 0000000..6d166aa --- /dev/null +++ b/templates/ntp.conf.cloudlinux.tmpl @@ -0,0 +1,64 @@ @@ -412,7 +390,7 @@ index 0000000..9884df5 +# Permit all access over the loopback interface. This could +# be tightened as well, but to do so would effect some of +# the administrative functions. -+restrict 127.0.0.1 ++restrict 127.0.0.1 +restrict -6 ::1 + +# Hosts on local network are less restricted. @@ -447,7 +425,7 @@ index 0000000..9884df5 +includefile /etc/ntp/crypto/pw + +# Key file containing the keys and key identifiers used when operating -+# with symmetric key cryptography. ++# with symmetric key cryptography. +keys /etc/ntp/keys + +# Specify the key identifiers which are trusted. @@ -462,5 +440,5 @@ index 0000000..9884df5 +# Enable writing of statistics records. +#statistics clockstats cryptostats loopstats peerstats -- -2.43.5 +2.48.1 diff --git a/SOURCES/ci-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch b/SOURCES/ci-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch deleted file mode 100644 index b0387f2..0000000 --- a/SOURCES/ci-rhel-cloud.cfg-remove-ssh_genkeytypes-in-settings.py.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 5d6674508c6478fa2ca3d8c5d39b533a0bbb317a Mon Sep 17 00:00:00 2001 -From: Emanuele Giuseppe Esposito -Date: Thu, 20 May 2021 08:53:55 +0200 -Subject: [PATCH] rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set - in cloud.cfg - -RH-Author: Ani Sinha -RH-MergeRequest: 113: rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg -RH-Jira: RHEL-16572 -RH-Acked-by: Vitaly Kuznetsov -RH-Acked-by: Emanuele Giuseppe Esposito -RH-Commit: [1/1] f506bf58dc5458f50624342ec33bcd390aa0b719 (anisinha/rhel-cloud-init) - -RH-Author: Emanuele Giuseppe Esposito -RH-MergeRequest: 10: rhel/cloud.cfg: remove ssh_genkeytypes in settings.py and set in cloud.cfg -RH-Commit: [1/1] 6da989423b9b6e017afbac2f1af3649b0487310f -RH-Bugzilla: 1957532 -RH-Acked-by: Eduardo Otubo -RH-Acked-by: Cathy Avery -RH-Acked-by: Vitaly Kuznetsov -RH-Acked-by: Mohamed Gamal Morsy - -Currently genkeytypes in cloud.cfg is set to None, so together with -ssh_deletekeys=1 cloudinit on first boot it will just delete the existing -keys and not generate new ones. - -Just removing that property in cloud.cfg is not enough, because -settings.py provides another empty default value that will be used -instead, resulting to no key generated even when the property is not defined. - -Removing genkeytypes also in settings.py will default to GENERATE_KEY_NAMES, -but since we want only 'rsa', 'ecdsa' and 'ed25519', add back genkeytypes in -cloud.cfg with the above defaults. - -Also remove ssh_deletekeys in settings.py as we always need -to 1 (and it also defaults to 1). - -Signed-off-by: Emanuele Giuseppe Esposito -(cherry picked from commit b545a0cbabe8924d048b7172b30e7aad59ed32d5) -(cherry picked from commit 855dec5dcc0892c0f7cedf06b025a794769a2a8d) ---- - cloudinit/settings.py | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/cloudinit/settings.py b/cloudinit/settings.py -index a36c518d..859ad546 100644 ---- a/cloudinit/settings.py -+++ b/cloudinit/settings.py -@@ -55,8 +55,6 @@ CFG_BUILTIN = { - "log_cfgs": [], - "syslog_fix_perms": [], - "mount_default_fields": [None, None, "auto", "defaults,nofail", "0", "2"], -- "ssh_deletekeys": False, -- "ssh_genkeytypes": [], - "system_info": { - "paths": { - "cloud_dir": "/var/lib/cloud", --- -2.41.0 - diff --git a/SOURCES/net-nm-check-for-presence-of-ifcfg.patch b/SOURCES/net-nm-check-for-presence-of-ifcfg.patch deleted file mode 100644 index 1f3cbbc..0000000 --- a/SOURCES/net-nm-check-for-presence-of-ifcfg.patch +++ /dev/null @@ -1,112 +0,0 @@ -From d1d5166895da471cff3606c70d4e8ab6eec1c006 Mon Sep 17 00:00:00 2001 -From: Ani Sinha -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 ---- - 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 e69da40d371..dd85886212c 100644 ---- a/cloudinit/net/activators.py -+++ b/cloudinit/net/activators.py -@@ -135,6 +135,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 8a99eb3a1c5..76a0ac15eaa 100644 ---- a/cloudinit/net/network_manager.py -+++ b/cloudinit/net/network_manager.py -@@ -17,10 +17,12 @@ from cloudinit import log as logging - 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] -@@ -374,7 +376,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 -@@ -384,12 +386,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/SOURCES/tests-unittests-add-a-new-unit-test.patch b/SOURCES/tests-unittests-add-a-new-unit-test.patch deleted file mode 100644 index 105b957..0000000 --- a/SOURCES/tests-unittests-add-a-new-unit-test.patch +++ /dev/null @@ -1,129 +0,0 @@ -From bb474df78bfe45ea5f05907eb710e8d5de764fc8 Mon Sep 17 00:00:00 2001 -From: Ani Sinha -Date: Thu, 7 Dec 2023 21:03:13 +0530 -Subject: [PATCH] tests/unittests: add a new unit test for network manager net - activator (#4672) - -Some changes in behavior in network manager net activator was brought in with -the commit -d1d5166895da ("net/nm: check for presence of ifcfg files when nm connection files are absent") - -This change adds some unit tests that exercizes network manager activator's -bring_up_interface() method that tests failure scenarios as well as cases -where an ifcfg file is used to bring the interface up. - -Signed-off-by: Ani Sinha ---- - tests/unittests/test_net_activators.py | 103 +++++++++++++++++++++++++ - 1 file changed, 103 insertions(+) - -diff --git a/tests/unittests/test_net_activators.py b/tests/unittests/test_net_activators.py -index 2a363ec415b..d53701efafb 100644 ---- a/tests/unittests/test_net_activators.py -+++ b/tests/unittests/test_net_activators.py -@@ -347,3 +347,105 @@ class TestActivatorsBringDown: - activator.bring_down_all_interfaces(network_state) - for call in m_subp.call_args_list: - assert call in expected_call_list -+ -+class TestNetworkManagerActivatorBringUp: -+ @patch("cloudinit.subp.subp", return_value=("", "")) -+ @patch( -+ "cloudinit.net.network_manager.available_nm_ifcfg_rh", -+ return_value=True, -+ ) -+ @patch("os.path.isfile") -+ @patch("os.path.exists", return_value=True) -+ def test_bring_up_interface_no_nm_conn( -+ self, m_exists, m_isfile, m_plugin, m_subp -+ ): -+ """ -+ There is no network manager connection file but ifcfg-rh plugin is -+ present and ifcfg interface config files are also present. In this -+ case, we should use ifcfg files. -+ """ -+ -+ def fake_isfile_no_nmconn(filename): -+ return False if filename.endswith(".nmconnection") else True -+ -+ m_isfile.side_effect = fake_isfile_no_nmconn -+ -+ expected_call_list = [ -+ ( -+ ( -+ [ -+ "nmcli", -+ "connection", -+ "load", -+ "".join( -+ [ -+ "/etc/sysconfig/network-scripts/ifcfg-eth0", -+ ] -+ ), -+ ], -+ ), -+ {}, -+ ), -+ ( -+ ( -+ [ -+ "nmcli", -+ "connection", -+ "up", -+ "filename", -+ "".join( -+ [ -+ "/etc/sysconfig/network-scripts/ifcfg-eth0", -+ ] -+ ), -+ ], -+ ), -+ {}, -+ ), -+ ] -+ -+ index = 0 -+ assert NetworkManagerActivator.bring_up_interface("eth0") -+ for call in m_subp.call_args_list: -+ assert call == expected_call_list[index] -+ index += 1 -+ -+ @patch("cloudinit.subp.subp", return_value=("", "")) -+ @patch( -+ "cloudinit.net.network_manager.available_nm_ifcfg_rh", -+ return_value=False, -+ ) -+ @patch("os.path.isfile") -+ @patch("os.path.exists", return_value=True) -+ def test_bring_up_interface_no_plugin_no_nm_conn( -+ self, m_exists, m_isfile, m_plugin, m_subp -+ ): -+ """ -+ The ifcfg-rh plugin is absent and nmconnection file is also -+ not present. In this case, we can't use ifcfg file and the -+ interface bring up should fail. -+ """ -+ -+ def fake_isfile_no_nmconn(filename): -+ return False if filename.endswith(".nmconnection") else True -+ -+ m_isfile.side_effect = fake_isfile_no_nmconn -+ assert not NetworkManagerActivator.bring_up_interface("eth0") -+ -+ @patch("cloudinit.subp.subp", return_value=("", "")) -+ @patch( -+ "cloudinit.net.network_manager.available_nm_ifcfg_rh", -+ return_value=True, -+ ) -+ @patch("os.path.isfile", return_value=False) -+ @patch("os.path.exists", return_value=True) -+ def test_bring_up_interface_no_conn_file( -+ self, m_exists, m_isfile, m_plugin, m_subp -+ ): -+ """ -+ Neither network manager connection files are present nor -+ ifcfg files are present. Even if ifcfg-rh plugin is present, -+ we can not bring up the interface. So bring_up_interface() -+ should fail. -+ """ -+ assert not NetworkManagerActivator.bring_up_interface("eth0") diff --git a/SPECS/cloud-init.spec b/SPECS/cloud-init.spec index 25dc8da..d315fa1 100644 --- a/SPECS/cloud-init.spec +++ b/SPECS/cloud-init.spec @@ -59,7 +59,7 @@ Patch31: ci-fix-Clean-cache-if-no-datasource-fallback-5499.patch Patch32: ci-fix-Add-subnet-ipv4-ipv6-to-network-schema-5191.patch # AlmaLinux OS patches -Patch100: 0001-Improvements-for-AlmaLinux-OS-and-CloudLinux-OS.patch +Patch100: 0001-fix-fix-and-improve-almalinux-and-cloudlinux-support.patch BuildArch: noarch