import Oracle_OSS cloud-init-24.4-6.0.1.el10_1.2

This commit is contained in:
AlmaLinux RelEng Bot 2026-04-13 02:12:54 -04:00
parent 81ec5822fa
commit 4310ecc497
15 changed files with 1277 additions and 1 deletions

View File

@ -0,0 +1,50 @@
Enable ec2_utils to stop retrying to get ec2 metadata
Signed-off-by: David Sloboda <david.x.sloboda@oracle.com>
Reviewed-by: Laurence Rochfort <laurence.rochfort@oracle.com>
diff -ruN a/cloudinit/sources/helpers/openstack.py b/cloudinit/sources/helpers/openstack.py
--- a/cloudinit/sources/helpers/openstack.py 2018-04-02 12:51:20.053828637 -0700
+++ b/cloudinit/sources/helpers/openstack.py 2018-04-02 12:33:20.000000000 -0700
@@ -464,6 +464,16 @@
return results
+def should_retry_cb(_request_args, cause):
+ try:
+ code = int(cause.code)
+ if code >= 400:
+ return False
+ except (TypeError, ValueError):
+ # Older versions of requests didn't have a code.
+ pass
+ return True
+
class MetadataReader(BaseReader):
def __init__(self, base_url, ssl_details=None, timeout=5, retries=5):
@@ -489,16 +499,6 @@
return self._versions
def _path_read(self, path, decode=False):
- def should_retry_cb(_request_args, cause):
- try:
- code = int(cause.code)
- if code >= 400:
- return False
- except (TypeError, ValueError):
- # Older versions of requests didn't have a code.
- pass
- return True
-
response = url_helper.readurl(
path,
retries=self.retries,
@@ -519,6 +519,7 @@
ssl_details=self.ssl_details,
timeout=self.timeout,
retries=self.retries,
+ exception_cb=should_retry_cb,
)

View File

@ -0,0 +1,136 @@
From 37a6837813e418486af8cbef436ab82a8be3e3fa Mon Sep 17 00:00:00 2001
From: Darren Archibald <darren.archibald@oracle.com>
Date: Fri, 23 Feb 2024 06:06:30 -0800
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 <anisinha@redhat.com>
(cherry picked from commit bb474df78bfe45ea5f05907eb710e8d5de764fc8)
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
---
tests/unittests/test_net_activators.py | 101 +++++++++++++++++++++++++
1 file changed, 101 insertions(+)
diff --git a/tests/unittests/test_net_activators.py b/tests/unittests/test_net_activators.py
index 2a363ec..f95c8a7 100644
--- a/tests/unittests/test_net_activators.py
+++ b/tests/unittests/test_net_activators.py
@@ -288,6 +288,107 @@ class TestActivatorsBringUp:
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")
IF_UP_DOWN_BRING_DOWN_CALL_LIST: list = [
((["ifdown", "eth0"],), {}),
--
2.31.1

View File

@ -0,0 +1,96 @@
From c96e5802145fd0c7e0d939b335f1abe953643063 Mon Sep 17 00:00:00 2001
From: Ani Sinha <anisinha@redhat.com>
Date: Mon, 23 Mar 2026 13:50:11 +0530
Subject: [PATCH 3/3] downstream: fix test_cloudstack.py since pytest fixtures
cannot be used
RH-Author: Ani Sinha <anisinha@redhat.com>
RH-MergeRequest: 178: fix(cloudstack): Improve domain-name DHCP lease lookup
RH-Jira: RHEL-159032
RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
RH-Acked-by: xiachen <xiachen@redhat.com>
RH-Commit: [3/3] 0c7a39a2ee00228bfbd5de87d95e08d0d9c32101
pytest.mark.parametrize decorator cannot be used for functions inside classes
that are derived from unittest.TestCase[1]. Here, the test class is derived
from CiTestCase which in turn is derived from TestCase class which is again
itself derived from unittest.TestCase. This was removed from the upstream
commit 589c9461db1 ("Fix: Add Ephemeral Network for CloudStackLocal DS (#6144)")
which we are not backporting. Hence, we change the test code such that the
main test function is called for each of the previously declared parameterized
values.
This patch should not be needed after a rebase when 589c9461db1 pulled in
through rebase.
X-downstream-only: true
1. https://stackoverflow.com/questions/63720118/pytest-parametrize-i-am-getting-missing-required-positional-arguments
Signed-off-by: Ani Sinha <anisinha@redhat.com>
---
tests/unittests/sources/test_cloudstack.py | 45 ++++++++++++----------
1 file changed, 24 insertions(+), 21 deletions(-)
diff --git a/tests/unittests/sources/test_cloudstack.py b/tests/unittests/sources/test_cloudstack.py
index 0f987066..f3b08a47 100644
--- a/tests/unittests/sources/test_cloudstack.py
+++ b/tests/unittests/sources/test_cloudstack.py
@@ -328,31 +328,34 @@ class TestCloudStackHostname(CiTestCase):
result = ds.get_hostname(fqdn=True)
self.assertTupleEqual(expected, result)
- @pytest.mark.parametrize(
- "lease_key,expected_domain",
- [
- ("DOMAINNAME", "example.com"),
- ("Domain", "example.com"),
- ("domain-name", "example.com"),
- ],
- )
def test__get_domainname_supports_all_casing_variants(
- self, lease_key, expected_domain
+ self,
):
"""Ensure _get_domainname works with DOMAINNAME, Domain and
domain-name."""
- # Mock the helper to return the domain only when the exact key is asked
- with patch(
- "cloudinit.net.dhcp.networkd_get_option_from_leases"
- ) as m_get:
- m_get.side_effect = lambda key, extra_keys=None: (
- "example.com " if key == lease_key else None
- )
-
- ds = DataSourceCloudStack(
- {}, distro=MockDistro(), paths=helpers.Paths({})
- )
- assert ds._get_domainname() == expected_domain
+ cases = [
+ ("DOMAINNAME", "example.com"),
+ ("Domain", "example.com"),
+ ("domain-name", "example.com"),
+ ]
+
+ def testit(lease_key, expected_domain):
+ # Mock the helper to return the domain only when
+ # the exact key is asked
+ with patch(
+ "cloudinit.net.dhcp.networkd_get_option_from_leases"
+ ) as m_get:
+ m_get.side_effect = lambda key, extra_keys=None: (
+ "example.com " if key == lease_key else None
+ )
+
+ ds = DataSourceCloudStack(
+ {}, distro=MockDistro(), paths=helpers.Paths({})
+ )
+ assert ds._get_domainname() == expected_domain
+
+ for lease_key, expected_domain in cases:
+ testit(lease_key, expected_domain)
@pytest.mark.usefixtures("dhclient_exists")
--
2.47.3

View File

@ -0,0 +1,40 @@
From c016e0c7521f45e343874e8df6da857be64c5ea7 Mon Sep 17 00:00:00 2001
From: Leah <76408777+goldberl@users.noreply.github.com>
Date: Tue, 6 Jan 2026 15:01:59 -0500
Subject: [PATCH 1/3] fix: Pass interface string to get_newest_lease() (#6648)
RH-Author: Ani Sinha <anisinha@redhat.com>
RH-MergeRequest: 178: fix(cloudstack): Improve domain-name DHCP lease lookup
RH-Jira: RHEL-159032
RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
RH-Acked-by: xiachen <xiachen@redhat.com>
RH-Commit: [1/3] a5eb297936e0253fc93e9ba4808af8d5636eb285
In DataSourceCloudStack.py, get_newest_lease() is currently being
passed a Distro object, causing a Python type error. This PR
changes the Distro object to the interface string to fix this error.
(cherry picked from commit e02b739fc094eb8b56391705c2989f4aecbe139b)
Signed-off-by: Ani Sinha <anisinha@redhat.com>
---
cloudinit/sources/DataSourceCloudStack.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/cloudinit/sources/DataSourceCloudStack.py b/cloudinit/sources/DataSourceCloudStack.py
index 61bf94f5..6d19077c 100644
--- a/cloudinit/sources/DataSourceCloudStack.py
+++ b/cloudinit/sources/DataSourceCloudStack.py
@@ -314,7 +314,9 @@ def get_vr_address(distro):
return latest_address
with suppress(FileNotFoundError):
- latest_lease = distro.dhcp_client.get_newest_lease(distro)
+ latest_lease = distro.dhcp_client.get_newest_lease(
+ distro.fallback_interface
+ )
if latest_lease:
LOG.debug(
"Found SERVER_ADDRESS '%s' via ephemeral %s lease ",
--
2.47.3

View File

@ -0,0 +1,156 @@
From d45780e65158d7f9b0a00933f8998934f5ceb4cf Mon Sep 17 00:00:00 2001
From: CodeBleu <400979+CodeBleu@users.noreply.github.com>
Date: Tue, 20 Jan 2026 13:52:54 -0500
Subject: [PATCH 2/3] fix(cloudstack): Improve domain-name DHCP lease lookup
(Cloudstack) (#6554)
RH-Author: Ani Sinha <anisinha@redhat.com>
RH-MergeRequest: 178: fix(cloudstack): Improve domain-name DHCP lease lookup
RH-Jira: RHEL-159032
RH-Acked-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
RH-Acked-by: xiachen <xiachen@redhat.com>
RH-Commit: [2/3] 5f3c7dac734ddcc068f086866963d05c42e0c24f
* Adding case-insensitive options for systemd-networkd leases ("DOMAINNAME", "Domain", "domain-name").
* Falling back gracefully from systemd leases to ISC dhclient leases.
* Including dhcpcd ephemeral leases as an additional fallback.
* Returning an empty string when no domain name found instead of None for non-fatal missing cases.
(cherry picked from commit d2bf883931723cfdc9f529eba5395d83059d09c6)
Signed-off-by: Ani Sinha <anisinha@redhat.com>
---
cloudinit/sources/DataSourceCloudStack.py | 50 +++++++++++-----------
tests/unittests/sources/test_cloudstack.py | 27 ++++++++++++
2 files changed, 53 insertions(+), 24 deletions(-)
diff --git a/cloudinit/sources/DataSourceCloudStack.py b/cloudinit/sources/DataSourceCloudStack.py
index 6d19077c..98189c23 100644
--- a/cloudinit/sources/DataSourceCloudStack.py
+++ b/cloudinit/sources/DataSourceCloudStack.py
@@ -23,6 +23,7 @@ from cloudinit import sources, subp
from cloudinit import url_helper as uhelp
from cloudinit import util
from cloudinit.net import dhcp
+from cloudinit.net.dhcp import NoDHCPLeaseError
from cloudinit.sources.helpers import ec2
LOG = logging.getLogger(__name__)
@@ -97,46 +98,47 @@ class DataSourceCloudStack(sources.DataSource):
self.cfg = {}
def _get_domainname(self):
+ """Try obtaining a "domain-name" DHCP lease parameter:
+ - From systemd-networkd lease (case-insensitive)
+ - From ISC dhclient
+ - From dhcpcd (ephemeral)
+ - Return empty string if not found (non-fatal)
"""
- Try obtaining a "domain-name" DHCP lease parameter:
- - From systemd-networkd lease
- - From dhclient lease
- """
+
LOG.debug("Try obtaining domain name from networkd leases")
- domainname = dhcp.networkd_get_option_from_leases("DOMAINNAME")
- if domainname:
- return domainname
+ for key in ["DOMAINNAME", "Domain", "domain-name"]:
+ domainname = dhcp.networkd_get_option_from_leases(key)
+ if domainname:
+ return domainname.strip()
+
LOG.debug(
- "Could not obtain FQDN from networkd leases. "
- "Falling back to ISC dhclient"
+ "Could not obtain FQDN from networkd leases. Falling back to "
+ "ISC dhclient"
)
-
- # some distros might use isc-dhclient for network setup via their
- # network manager. If this happens, the lease is more recent than the
- # ephemeral lease, so use it first.
with suppress(dhcp.NoDHCPLeaseMissingDhclientError):
domain_name = dhcp.IscDhclient().get_key_from_latest_lease(
self.distro, "domain-name"
)
if domain_name:
- return domain_name
+ return domain_name.strip()
LOG.debug(
- "Could not obtain FQDN from ISC dhclient leases. "
- "Falling back to %s",
+ "Could not obtain FQDN from ISC dhclient leases. Falling back to "
+ "%s",
self.distro.dhcp_client.client_name,
)
-
- # If no distro leases were found, check the ephemeral lease that
- # cloud-init set up.
- with suppress(FileNotFoundError):
+ try:
latest_lease = self.distro.dhcp_client.get_newest_lease(
self.distro.fallback_interface
)
- domain_name = latest_lease.get("domain-name") or None
- return domain_name
- LOG.debug("No dhcp leases found")
- return None
+ domain_name = latest_lease.get("domain-name")
+ if domain_name:
+ return domain_name.strip()
+ except (NoDHCPLeaseError, FileNotFoundError, AttributeError):
+ pass
+
+ LOG.debug("No domain name found in any DHCP lease; returning empty")
+ return ""
def get_hostname(
self,
diff --git a/tests/unittests/sources/test_cloudstack.py b/tests/unittests/sources/test_cloudstack.py
index a64d80f3..0f987066 100644
--- a/tests/unittests/sources/test_cloudstack.py
+++ b/tests/unittests/sources/test_cloudstack.py
@@ -1,5 +1,6 @@
# This file is part of cloud-init. See LICENSE file for license information.
from textwrap import dedent
+from unittest.mock import patch
import pytest
@@ -327,6 +328,32 @@ class TestCloudStackHostname(CiTestCase):
result = ds.get_hostname(fqdn=True)
self.assertTupleEqual(expected, result)
+ @pytest.mark.parametrize(
+ "lease_key,expected_domain",
+ [
+ ("DOMAINNAME", "example.com"),
+ ("Domain", "example.com"),
+ ("domain-name", "example.com"),
+ ],
+ )
+ def test__get_domainname_supports_all_casing_variants(
+ self, lease_key, expected_domain
+ ):
+ """Ensure _get_domainname works with DOMAINNAME, Domain and
+ domain-name."""
+ # Mock the helper to return the domain only when the exact key is asked
+ with patch(
+ "cloudinit.net.dhcp.networkd_get_option_from_leases"
+ ) as m_get:
+ m_get.side_effect = lambda key, extra_keys=None: (
+ "example.com " if key == lease_key else None
+ )
+
+ ds = DataSourceCloudStack(
+ {}, distro=MockDistro(), paths=helpers.Paths({})
+ )
+ assert ds._get_domainname() == expected_domain
+
@pytest.mark.usefixtures("dhclient_exists")
class TestCloudStackPasswordFetching(CiTestCase):
--
2.47.3

View File

@ -6,7 +6,7 @@
Name: cloud-init
Version: 24.4
Release: 6%{?dist}.1
Release: 6.0.1%{?dist}.2
Summary: Cloud instance init scripts
License: Apache-2.0 OR GPL-3.0-only
URL: https://github.com/canonical/cloud-init
@ -32,6 +32,27 @@ Patch11: ci-feat-aliyun-datasource-support-crawl-metadata-at-onc.patch
Patch12: ci-fix-Don-t-attempt-to-identify-non-x86-OpenStack-inst.patch
# For RHEL-100617 - CVE-2024-6174 cloud-init: From CVEorg collector [rhel-10.1]
Patch13: ci-fix-strict-disable-in-ds-identify-on-no-datasources-.patch
# For RHEL-159032 - [GSS][Secure Support] [RHEL-10] cloud-init requests lease before DHCP can provide one [rhel-10.1.z]
Patch14: ci-fix-Pass-interface-string-to-get_newest_lease-6648.patch
# For RHEL-159032 - [GSS][Secure Support] [RHEL-10] cloud-init requests lease before DHCP can provide one [rhel-10.1.z]
Patch15: ci-fix-cloudstack-Improve-domain-name-DHCP-lease-lookup.patch
# For RHEL-159032 - [GSS][Secure Support] [RHEL-10] cloud-init requests lease before DHCP can provide one [rhel-10.1.z]
Patch16: ci-downstream-fix-test_cloudstack.py-since-pytest-fixtu.patch
# Oracle patches
Patch100: 0041-enable-ec2_utils-to-stop-retrying-to-get-ec2-metadata.patch
Patch101: ignore-enslaved-interface.patch
Patch102: ol-sysconfig-add-Oracle-Linux-variant-to-known-distros.patch
Patch103: 0106-tests-unittests-add-a-new-unit-test-for-network-mana.patch
# Oracle specific patches (preferred prefix: "ol" or "orabugNNNNNNNN")
Patch1001: orabug30435672-003-cloud-init-collect-logs.patch
Patch1002: orabug30435672-004-ol-cloud-config.patch
Patch1003: orabug30435672-006-cc_spacewalk.py.patch
Patch1005: orabug32183938-009-missing-sshd-services.patch
Patch1006: orabug32183938-010-missing-sshd-services-in-rhel-systemd.patch
Patch1007: orabug34845400-Add-Oracle-to-distro-detection-logic-in-cloud.cfg.tm.patch
Patch1008: orabug37065979-DataSourceOracle-network-getdata-retries.patch
BuildArch: noarch
@ -179,6 +200,18 @@ elif [ $1 -eq 2 ]; then
# 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
%systemd_preun cloud-config.service cloud-config.target cloud-final.service cloud-init.service cloud-init.target cloud-init-local.service
@ -237,6 +270,30 @@ fi
%changelog
* Tue Apr 07 2026 EL Errata <el-errata_ww@oracle.com> - 24.4-6.0.1.el10_1.2
- NetworkManagerActivator brings up interface failed when using sysconfig renderer [RHEL-18981]
- Include module cc_write_files_deferred in config template [Orabug: 36959464]
- Fix Oracle Datasource network, getdata methods and increase retries [Orabug: 37065979]
- Fix log file permission [Orabug: 35302969]
- Update detection logic for OL distros in config template [Orabug: 34845400]
- Added missing services in rhel/systemd/cloud-init.service [Orabug: 32183938]
- Added missing services in cloud-init.service.tmpl for sshd [Orabug: 32183938]
- Forward port applicable cloud-init 18.4-2.0.3 changes to cloud-init-18-5 [Orabug: 30435672]
- limit permissions [Orabug: 31352433]
- Changes to ignore all enslaved interfaces [Orabug: 30092148]
- add modified version of enable-ec2_utils-to-stop-retrying-to-get-ec2-metadata.patch:
1. Enable ec2_utils.py having a way to stop retrying to get ec2 metadata
2. Apply stop retrying to get ec2 metadata to helper/openstack.py MetadataReader
Resolves: Oracle-Bug:41660 (Bugzilla)
- added OL to list of known distros
* Thu Mar 26 2026 Miroslav Rezanina <mrezanin@redhat.com> - 24.4-6.el10_1.2
- ci-fix-Pass-interface-string-to-get_newest_lease-6648.patch [RHEL-159032]
- ci-fix-cloudstack-Improve-domain-name-DHCP-lease-lookup.patch [RHEL-159032]
- ci-downstream-fix-test_cloudstack.py-since-pytest-fixtu.patch [RHEL-159032]
- Resolves: RHEL-159032
([GSS][Secure Support] [RHEL-10] cloud-init requests lease before DHCP can provide one [rhel-10.1.z])
* Wed Dec 10 2025 Miroslav Rezanina <mrezanin@redhat.com> - 24.4-6.el10_1.1
- ci-downstream-Do-not-override-changes-in-disable-sshd-k.patch [RHEL-128905]
- Resolves: RHEL-128905
@ -500,3 +557,4 @@ fi
* Wed Feb 16 2022 Charalampos Stratakis <cstratak@redhat.com> - 21.3-6
- Remove redundant dependencies on nose and mock

View File

@ -0,0 +1,44 @@
From e7aba0f0ccd6f023667f41385f25044a94428ed3 Mon Sep 17 00:00:00 2001
From: Darren Archibald <darren.archibald@oracle.com>
Date: Fri, 23 Feb 2024 05:56:06 -0800
Subject: [PATCH] ignore enslaved interface
Changes to ignore all enslaved interfaces.
https://jira.oci.oraclecorp.com/browse/LINUX-1947
Orabug: 30092148
Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
---
cloudinit/net/__init__.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py
index c0888f5..b093796 100644
--- a/cloudinit/net/__init__.py
+++ b/cloudinit/net/__init__.py
@@ -335,6 +335,10 @@ def is_netfail_standby(devname, driver=None):
return True
+def is_slave(devname):
+ return os.path.exists(sys_dev_path(devname, "master"))
+
+
def is_renamed(devname):
"""
/* interface name assignment types (sysfs name_assign_type attribute) */
@@ -1054,6 +1058,9 @@ def get_interfaces(
if is_bridge(name):
filtered_logger("Ignoring bridge interface: %s", name)
continue
+ if is_slave(name):
+ filtered_logger("Ignoring bridge interface: %s", name)
+ continue
if filter_vlan and is_vlan(name):
continue
if is_bond(name):
--
2.31.1

View File

@ -0,0 +1,26 @@
From 8735577c8a683407e94abed0cfccc3aacbb9aa47 Mon Sep 17 00:00:00 2001
From: Si-Wei Liu <si-wei.liu@oracle.com>
Date: Wed, 10 Jun 2020 20:59:29 -0400
Subject: [PATCH] sysconfig: add Oracle Linux variant to known distros
otherwise anything sysconfig breaks on Oracle Linux.
JIRA: https://jira.oci.oraclecorp.com/browse/LINUX-6128
Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
---
cloudinit/net/sysconfig.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
index e94590f..55b7db5 100644
--- a/cloudinit/net/sysconfig.py
+++ b/cloudinit/net/sysconfig.py
@@ -35,6 +35,7 @@
"suse",
"TencentOS",
"virtuozzo",
+ "ol",
]

View File

@ -0,0 +1,72 @@
From c6d9e755b6233e98764678bb86a1bc45df168df2 Mon Sep 17 00:00:00 2001
From: Darren Archibald <darren.archibald@oracle.com>
Date: Thu, 29 Aug 2024 04:00:14 -0700
Subject: [PATCH] Update cloud-init collect-logs for Oracle Linux
Updating the code to collect triage logs with OL distro specic methods.
Orabug: 30435672
Signed-off-by: Vijay Balakrishna <vijay.balakrishna@oracle.com>
Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com>
Acked-by: Joe Kennedy <joe.kennedy@oracle.com>
Reviewed-by: Laurence Rochfort <laurence.rochfort@oracle.com
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
Signed-off-by: Rajesh Harekal <rajesh.harekal@oracle.com>
diff -urN a/cloudinit/cmd/devel/logs.py b/cloudinit/cmd/devel/logs.py
--- a/cloudinit/cmd/devel/logs.py 2025-01-27 15:12:24.357097951 -0800
+++ b/cloudinit/cmd/devel/logs.py 2025-01-27 15:50:44.097173379 -0800
@@ -21,7 +21,7 @@
from cloudinit.stages import Init
from cloudinit.subp import ProcessExecutionError, subp
from cloudinit.temp_utils import tempdir
-from cloudinit.util import copy, get_config_logfiles, write_file
+from cloudinit.util import copy, get_config_logfiles, write_file, system_info
LOG = cast(loggers.CustomLoggerType, logging.getLogger(__name__))
@@ -214,13 +214,23 @@
file_path=log_dir / "version",
msg="cloud-init --version",
)
- dpkg_ver = _write_command_output_to_file(
- cmd=["dpkg-query", "--show", "-f=${Version}\n", "cloud-init"],
- file_path=log_dir / "dpkg-version",
- msg="dpkg version",
- )
- if not version:
- version = dpkg_ver or "not-available"
+ if system_info()['variant'] == "ol":
+ rpm_ver = _write_command_output_to_file(
+ cmd=["rpm", "-q", "--queryformat",
+ "[%{VERSION}-%{RELEASE}.%{ARCH}]\n", "cloud-init"],
+ file_path=log_dir / "rpm-version",
+ msg="rpm version",
+ )
+ if not version:
+ version = rpm_ver if rpm_ver else "not-available"
+ else:
+ dpkg_ver = _write_command_output_to_file(
+ cmd=["dpkg-query", "--show", "-f=${Version}\n", "cloud-init"],
+ file_path=log_dir / "dpkg-version",
+ msg="dpkg version",
+ )
+ if not version:
+ version = dpkg_ver if dpkg_ver else "not-available"
def _collect_system_logs(
diff -urN a/cloudinit/util.py b/cloudinit/util.py
--- a/cloudinit/util.py 2025-01-27 16:02:32.019230892 -0800
+++ b/cloudinit/util.py 2025-01-27 16:03:05.491012873 -0800
@@ -629,6 +629,7 @@
"suse",
"tencentos",
"virtuozzo",
+ "ol",
):
variant = linux_dist
elif linux_dist in ("ubuntu", "linuxmint", "mint"):

View File

@ -0,0 +1,112 @@
From 250aa45f74e29b95f81b24811c972369605bd24e Mon Sep 17 00:00:00 2001
From: Vijay Balakrishna <vijay.balakrishna@oracle.com>
Date: Tue, 5 Nov 2019 16:00:21 -0500
Subject: [PATCH] Add static cloud.cfg file for OL7.
Adding OL specific cloud.cfg file to enable updates cloud-init
config file independently, adding newly verified ntp module.
Orabug: 30435672
Signed-off-by: Vijay Balakrishna <vijay.balakrishna@oracle.com>
Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
Acked-by: Joe Kennedy <joe.kennedy@oracle.com>
Reviewed-by: Laurence Rochfort <laurence.rochfort@oracle.com>
---
ol/README.ol | 6 ++++++
ol/cloud.cfg | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 75 insertions(+)
create mode 100644 ol/README.ol
create mode 100644 ol/cloud.cfg
diff --git a/ol/README.ol b/ol/README.ol
new file mode 100644
index 0000000..f59d559
--- /dev/null
+++ b/ol/README.ol
@@ -0,0 +1,6 @@
+The following cloud-init modules are currently unsupported on this OS:
+ - apt_update_upgrade ('apt_update', 'apt_upgrade', 'apt_mirror', 'apt_preserve_sources_list', 'apt_old_mirror', 'apt_sources', 'debconf_selections', 'packages' options)
+ - byobu ('byobu_by_default' option)
+ - chef
+ - grub_dpkg
+ - rh_subscription
diff --git a/ol/cloud.cfg b/ol/cloud.cfg
new file mode 100644
index 0000000..2ee1fb3
--- /dev/null
+++ b/ol/cloud.cfg
@@ -0,0 +1,69 @@
+users:
+ - default
+
+disable_root: 1
+ssh_pwauth: 0
+
+mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
+resize_rootfs_tmp: /dev
+ssh_deletekeys: 0
+ssh_genkeytypes: ~
+syslog_fix_perms: ~
+disable_vmware_customization: false
+
+cloud_init_modules:
+ - disk_setup
+ - migrator
+ - bootcmd
+ - write-files
+ - growpart
+ - resizefs
+ - set_hostname
+ - update_hostname
+ - update_etc_hosts
+ - rsyslog
+ - users-groups
+ - ssh
+
+cloud_config_modules:
+ - mounts
+ - locale
+ - set-passwords
+ - ntp
+ - yum-add-repo
+ - package-update-upgrade-install
+ - timezone
+ - puppet
+ - chef
+ - salt-minion
+ - mcollective
+ - disable-ec2-metadata
+ - runcmd
+
+cloud_final_modules:
+ - rightscale_userdata
+ - scripts-per-once
+ - scripts-per-boot
+ - scripts-per-instance
+ - scripts-user
+ - ssh-authkey-fingerprints
+ - keys-to-console
+ - phone-home
+ - final-message
+ - power-state-change
+
+system_info:
+ default_user:
+ name: cloud-user
+ lock_passwd: true
+ gecos: Cloud User
+ groups: [adm, systemd-journal]
+ sudo: ["ALL=(ALL) NOPASSWD:ALL"]
+ shell: /bin/bash
+ distro: rhel
+ paths:
+ cloud_dir: /var/lib/cloud
+ templates_dir: /etc/cloud/templates
+ ssh_svcname: sshd
+
+# vim:syntax=yaml
--
1.8.3.1

View File

@ -0,0 +1,51 @@
From 2b92e042bb8a4510abec38fcfc302d8de1e28f37 Mon Sep 17 00:00:00 2001
From: Darren Archibald <darren.archibald@oracle.com>
Date: Fri, 23 Feb 2024 06:55:32 -0800
Subject: [PATCH] spacewalk: fix CA cert file path for Oracle Linux
Update the CA cert file that is available in Oracle Linux to register with ULN.
Orabug: 30435672
Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
Signed-off-by: Vijay Balakrishna <vijay.balakrishna@oracle.com>
Acked-by: Joe Kennedy <joe.kennedy@oracle.com>
Reviewed-by: Laurence Rochfort <laurence.rochfort@oracle.com>
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
Signed-off-by: Rajesh Harekal <rajesh.harekal@oracle.com>
diff -urN a/cloudinit/config/cc_spacewalk.py b/cloudinit/config/cc_spacewalk.py
--- a/cloudinit/config/cc_spacewalk.py 2025-01-28 10:51:15.364254013 -0800
+++ b/cloudinit/config/cc_spacewalk.py 2025-01-28 10:53:56.899893366 -0800
@@ -3,7 +3,7 @@
import logging
-from cloudinit import subp
+from cloudinit import subp, util
from cloudinit.cloud import Cloud
from cloudinit.config import Config
from cloudinit.config.schema import MetaSchema
@@ -21,6 +21,7 @@
distros = ["redhat", "fedora", "openeuler"]
required_packages = ["rhn-setup"]
def_ca_cert_path = "/usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT"
+ol_ca_cert_path = "/usr/share/rhn/ULN-CA-CERT"
def is_registered():
@@ -74,9 +75,14 @@
# Need to have this installed before further things will work.
cloud.distro.install_packages(required_packages)
if not is_registered():
+ if util.system_info()['variant'] == "ol":
+ cert = ol_ca_cert_path
+ else:
+ cert = def_ca_cert_path
do_register(
spacewalk_server,
cloud.datasource.get_hostname(fqdn=True).hostname,
+ ca_cert_path=cert,
proxy=cfg.get("proxy"),
activation_key=cfg.get("activation_key"),
)

View File

@ -0,0 +1,31 @@
cloud-init service file is missing sshd required services
Orabug: 32183938
in the systemd sshd-keygen.target file, the following services are listed:
[Unit]
Wants=sshd-keygen@rsa.service
Wants=sshd-keygen@ecdsa.service
Wants=sshd-keygen@ed25519.service
Need to add the following to the cloud-init service file:
Before=sshd-keygen@rsa.service
Before=sshd-keygen@ecdsa.service
Before=sshd-keygen@ed25519.service
Signed-off-by: Isaac Chen <isaac.chen@oracle.com>
Signed-off-by: Rajesh Harekal <rajesh.harekal@oracle.com>
diff -urN cloud-init-24.4/systemd/cloud-init.service.tmpl.orig cloud-init-24.4/systemd/cloud-init.service.tmpl
--- cloud-init-24.4/systemd/cloud-init.service.tmpl 2025-01-28 11:13:57.339346352 -0800
+++ cloud-init-24.4/systemd/cloud-init.service.tmpl 2025-01-28 11:14:31.587669418 -0800
@@ -28,7 +28,9 @@
After=dbus.service
{% endif %}
Before=network-online.target
-Before=sshd-keygen.service
+Before=sshd-keygen@rsa.service
+Before=sshd-keygen@ecdsa.service
+Before=sshd-keygen@ed25519.service
Before=sshd.service
Before=systemd-user-sessions.service
{% if variant in ["ubuntu", "unknown", "debian"] %}

View File

@ -0,0 +1,22 @@
cloud-init service file is missing sshd required services
Orabug: 32183938
This patch is the supplement of patch orabug32183938-009, where changes
to cloud-init.service also need to be added to files in rhel/systemd.
Signed-off-by: Isaac Chen <isaac.chen@oracle.com>
diff -up cloud-init-19.4/systemd/cloud-init.service.tmpl.orig cloud-init-19.4/systemd/cloud-init.service.tmpl
--- cloud-init-19.4/systemd/cloud-init.service.tmpl.orig 2020-12-11 19:59:37.331277979 -0800
+++ cloud-init-19.4/systemd/cloud-init.service.tmpl 2020-12-11 20:00:38.867459043 -0800
@@ -5,7 +5,9 @@
DefaultDependencies=no
{% endif %}
Wants=cloud-init-local.service
-Wants=sshd-keygen.service
+Wants=sshd-keygen@rsa.service
+Wants=sshd-keygen@ecdsa.service
+Wants=sshd-keygen@ed25519.service
Wants=sshd.service
After=cloud-init-local.service
After=systemd-networkd-wait-online.service

View File

@ -0,0 +1,267 @@
From 1042542db662f362fc74469e1c24df4eb08bf346 Mon Sep 17 00:00:00 2001
From: Darren Archibald <darren.archibald@oracle.com>
Date: Thu, 29 Aug 2024 04:26:17 -0700
Subject: [PATCH] Add Oracle to distro detection logic in cloud.cfg.tmpl
Oracle Linux is being detected as "ol" variant by cloud-init.
This patch adds "ol" to the list of supported variants, and applies needed settings to it.
You can notice that variant "ol" is being set as distro "rhel" in a couple of places,
that is expected as this designated that base distro for "ol" is "rhel" ( which is true )
The main reason for this change is that cloud-init package dropped hardcoded configs that set OL as rhel
and to make cloud-init behave on OL systems as expected we need to add "ol" designation to supported list.
Orabug: 34845400
Signed-off-by: Alex Burmashev <alexander.burmashev@oracle.com>
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
---
cloudinit/distros/__init__.py | 1 +
cloudinit/sources/DataSourceRbxCloud.py | 2 +-
config/cloud.cfg.tmpl | 43 +++++++++++++++++--------
systemd/cloud-final.service | 4 ++-
systemd/cloud-init-local.service.tmpl | 12 ++++---
systemd/cloud-init.service.tmpl | 8 +++--
systemd/cloud-init-generator.tmpl | 1 +++--
tests/unittests/test_util.py | 1 +
7 files changed, 50 insertions(+), 21 deletions(-)
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py
index 9c4d6b2..47629c6 100644
--- a/cloudinit/distros/__init__.py
+++ b/cloudinit/distros/__init__.py
@@ -79,6 +79,7 @@ OSFAMILIES = {
"rhel",
"rocky",
"virtuozzo",
+ "ol",
],
"suse": [
"opensuse",
diff --git a/cloudinit/sources/DataSourceRbxCloud.py b/cloudinit/sources/DataSourceRbxCloud.py
index 6729e84..2265ddb 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 ["fedora", "centos", "rhel", "ol"]:
source_param = "-s"
for item in items:
try:
diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl
index a470120..f440830 100644
--- a/config/cloud.cfg.tmpl
+++ b/config/cloud.cfg.tmpl
@@ -59,10 +59,10 @@
{% endif %}
{%- if variant in ["alpine", "amazon", "fedora", "OpenCloudOS", "openeuler",
- "openmandriva", "photon", "TencentOS"] or is_rhel %}
+ "openmandriva", "photon", "TencentOS", "ol"] or is_rhel %}
-{% if is_rhel %}
-mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.after=cloud-init-network.service,_netdev', '0', '2']
+{% if variant in ["ol"] or is_rhel %}
+mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.after=cloud-init.service,_netdev', '0', '2']
{% else %}
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
{% endif %}
@@ -166,18 +166,20 @@
- ubuntu_pro
{% endif %}
{% elif variant in ["azurelinux", "fedora", "mariner", "openeuler",
- "openmandriva", "photon"] or is_rhel %}
+ "openmandriva", "photon", "ol"] or is_rhel %}
{% if is_rhel %}
- rh_subscription
{% endif %}
-{% if variant not in ["azurelinux", "mariner", "photon"] %}
+{% if variant not in ["azurelinux", "mariner", "photon", "ol"] %}
- spacewalk
{% endif %}
- yum_add_repo
{% elif variant == "suse" %}
- zypper_add_repo
{% endif %}
+{% if variant not in ["ol"] %}
- ntp
+{% endif %}
- timezone
{% if variant not in ["azurelinux"] %}
- disable_ec2_metadata
@@ -207,6 +209,8 @@
{% if variant not in ["azurelinux"] %}
- mcollective
- salt_minion
+{% endif %}
+{% if variant not in ["azurelinux", "ol"] %}
- reset_rmc
{% endif %}
- scripts_vendor
@@ -230,6 +234,8 @@
"OpenCloudOS", "openeuler", "openmandriva", "photon", "suse",
"TencentOS", "ubuntu"] or is_rhel %}
distro: {{ variant }}
+{% elif variant == "ol" %}
+ distro: rhel
{% elif variant == "dragonfly" %}
distro: dragonflybsd
{% else %}
@@ -238,7 +244,9 @@
{% endif %}
# Default user name + that default users groups (if added/used)
default_user:
-{% if variant in usernames %}
+{% if variant == "ol" %}
+ name: cloud-user
+{% elif variant in usernames %}
name: {{ usernames[variant] }}
{% else %}
name: {{ variant }}
@@ -246,11 +254,13 @@
{% if variant in ["alpine", "amazon", "aosc", "arch", "azurelinux", "debian", "fedora",
"gentoo", "mariner", "OpenCloudOS", "openeuler",
"openmandriva", "photon", "suse", "TencentOS", "ubuntu",
- "unknown"]
+ "unknown", "ol"]
or is_bsd or is_rhel %}
lock_passwd: True
{% endif %}
-{% if variant in gecos %}
+{% if variant == "ol" %}
+ gecos: Cloud User
+{% elif variant in gecos %}
gecos: {{ gecos[variant] }}
{% else %}
gecos: {{ variant }} Cloud User
@@ -328,7 +338,7 @@
{% if variant in ["alpine", "amazon", "aosc", "arch", "azurelinux", "debian", "fedora",
"gentoo", "mariner", "OpenCloudOS", "openeuler",
"openmandriva", "photon", "suse", "TencentOS", "ubuntu",
- "unknown"]
+ "unknown", "ol"]
or is_rhel %}
# Other config here will be given to the distro class and/or path classes
paths:
@@ -375,7 +385,7 @@
ssh_svcname: ssh
{% elif variant in ["alpine", "amazon", "aosc", "arch", "azurelinux", "fedora",
"gentoo", "mariner", "OpenCloudOS", "openeuler",
- "openmandriva", "photon", "suse", "TencentOS"]
+ "openmandriva", "photon", "suse", "TencentOS", "ol"]
or is_rhel %}
ssh_svcname: sshd
{% endif %}
diff --git a/systemd/cloud-final.service b/systemd/cloud-final.service
index ab3daed..1c69dde 100644
--- a/systemd/cloud-final.service
+++ b/systemd/cloud-final.service
@@ -3,7 +3,6 @@
Description=Cloud-init: Final Stage
After=network-online.target time-sync.target cloud-config.service rc-local.service
After=multi-user.target
-Before=apt-daily.service
Wants=network-online.target cloud-config.service
ConditionPathExists=!/etc/cloud/cloud-init.disabled
ConditionKernelCommandLine=!cloud-init=disabled
diff --git a/systemd/cloud-init-local.service.tmpl b/systemd/cloud-init-local.service.tmpl
index 3a1ca7f..4750c36 100644
--- a/systemd/cloud-init-local.service.tmpl
+++ b/systemd/cloud-init-local.service.tmpl
@@ -2,19 +2,21 @@
[Unit]
# https://docs.cloud-init.io/en/latest/explanation/boot.html
Description=Cloud-init: Local Stage (pre-network)
-{% if variant in ["almalinux", "cloudlinux", "ubuntu", "unknown", "debian", "rhel"] %}
+{% if variant in ["almalinux", "cloudlinux", "ubuntu", "unknown", "debian", "rhel", "ol"] %}
DefaultDependencies=no
{% endif %}
Wants=network-pre.target
+{% if variant not in ["ol"] %}
After=hv_kvp_daemon.service
-{% if variant in ["almalinux", "cloudlinux", "rhel"] %}
+{% endif %}
+{% if variant in ["almalinux", "cloudlinux", "rhel", "ol"] %}
Requires=dbus.socket
After=dbus.socket
{% endif %}
After=systemd-remount-fs.service
Before=network-pre.target
Before=shutdown.target
-{% if variant in ["almalinux", "cloudlinux", "rhel"] %}
+{% if variant in ["almalinux", "cloudlinux", "rhel", "ol"] %}
Before=firewalld.target
{% endif %}
{% if variant in ["ubuntu", "unknown", "debian"] %}
@@ -28,7 +30,7 @@
[Service]
Type=oneshot
-{% if variant in ["almalinux", "cloudlinux", "rhel"] %}
+{% if variant in ["almalinux", "cloudlinux", "rhel", "ol"] %}
ExecStartPre=/sbin/restorecon /run/cloud-init
{% endif %}
ExecStart=/usr/bin/cloud-init init --local
diff --git a/systemd/cloud-init.service.tmpl b/systemd/cloud-init.service.tmpl
index 90d45f2..2e1ce48 100644
--- a/systemd/cloud-init.service.tmpl
+++ b/systemd/cloud-init.service.tmpl
@@ -2,7 +2,7 @@
[Unit]
# https://docs.cloud-init.io/en/latest/explanation/boot.html
Description=Cloud-init: Network Stage
-{% if variant not in ["almalinux", "cloudlinux", "photon", "rhel"] %}
+{% if variant not in ["almalinux", "cloudlinux", "photon", "rhel", "ol"] %}
DefaultDependencies=no
{% endif %}
Wants=cloud-init-local.service
@@ -11,13 +11,15 @@
Wants=sshd-keygen@ed25519.service
Wants=sshd.service
After=cloud-init-local.service
+{% if variant not in ["ol"] %}
After=systemd-networkd-wait-online.service
+{% endif %}
{% if variant in ["ubuntu", "unknown", "debian"] %}
After=networking.service
{% endif %}
{% if variant in ["almalinux", "centos", "cloudlinux", "eurolinux", "fedora",
"miraclelinux", "openeuler", "OpenCloudOS", "openmandriva", "rhel", "rocky",
- "suse", "TencentOS", "virtuozzo"] %}
+ "suse", "TencentOS", "virtuozzo", "ol"] %}
After=NetworkManager.service
After=NetworkManager-wait-online.service
diff --git a/systemd/cloud-init-generator.tmpl b/systemd/cloud-init-generator.tmpl
--- a/systemd/cloud-init-generator.tmpl
+++ b/systemd/cloud-init-generator.tmpl
@@ -21,7 +21,7 @@
CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target"
{% endif %}
{% if variant in ["almalinux", "centos", "cloudlinux", "eurolinux", "fedora",
- "miraclelinux", "openeuler", "OpenCloudOS", "openmandriva", "rhel", "rocky", "TencentOS", "virtuozzo"] %}
+ "miraclelinux", "openeuler", "OpenCloudOS", "openmandriva", "rhel", "rocky", "TencentOS", "virtuozzo", "ol"] %}
dsidentify="/usr/libexec/cloud-init/ds-identify"
{% elif variant == "benchmark" %}
dsidentify="/bin/true"
diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py
index b534a1a..49087ad 100644
--- a/tests/unittests/test_util.py
+++ b/tests/unittests/test_util.py
@@ -1334,6 +1334,7 @@ class TestGetVariant:
({"system": "linux", "dist": ("sles",)}, "suse"),
({"system": "linux", "dist": ("sle_hpc",)}, "suse"),
({"system": "linux", "dist": ("my_distro",)}, "linux"),
+ ({"system": "linux", "dist": ("ol",)}, "ol"),
({"system": "Windows", "dist": ("dontcare",)}, "windows"),
({"system": "Darwin", "dist": ("dontcare",)}, "darwin"),
({"system": "Freebsd", "dist": ("dontcare",)}, "freebsd"),
--
2.31.1

View File

@ -0,0 +1,115 @@
Patch to adapt DataSourceOracle and make it functional for OCI.
Also includes setting for retries and timeouts previously provided by
a separate patch to help PCA instances get IMDS data.
Orabug: 37065979
Signed-off-by: Rajesh Harekal <rajesh.harekal@oracle.com>
---
diff -git a/cloudinit/sources/DataSourceOracle.py b/cloudinit/sources/DataSourceOracle.py
--- a/cloudinit/sources/DataSourceOracle.py 2025-03-07 16:04:37.773216485 -0800
+++ a/cloudinit/sources/DataSourceOracle.py 2025-03-07 16:32:33.174574170 -0800
@@ -15,6 +15,7 @@
import base64
import ipaddress
+import os
import json
import logging
import time
@@ -32,6 +33,8 @@
LOG = logging.getLogger(__name__)
+ISCSI_IBFT_PATH='/sys/firmware/acpi/tables/iBFT'
+
BUILTIN_DS_CONFIG = {
# Don't use IMDS to configure secondary NICs by default
"configure_secondary_nics": False,
@@ -135,8 +138,8 @@
perform_dhcp_setup = True
# Careful...these can be overridden in __init__
- url_max_wait = 30
- url_timeout = 5
+ url_max_wait = 180
+ url_timeout = 20
def __init__(self, sys_cfg, *args, **kwargs):
super(DataSourceOracle, self).__init__(sys_cfg, *args, **kwargs)
@@ -149,7 +152,7 @@
]
)
self._network_config_source = KlibcOracleNetworkConfigSource()
- self._network_config: dict = {"config": [], "version": 1}
+ self._network_config = sources.UNSET
url_params = self.get_url_params()
self.url_max_wait = url_params.max_wait_seconds
@@ -274,7 +277,7 @@
def _is_iscsi_root(self) -> bool:
"""Return whether we are on a iscsi machine."""
- return self._network_config_source.is_applicable()
+ return self._network_config_source.is_applicable() or bool(os.path.exists(ISCSI_IBFT_PATH))
def _get_iscsi_config(self) -> dict:
return self._network_config_source.render_config()
@@ -294,34 +297,31 @@
set_primary = False
# this is v1
- if self._is_iscsi_root():
- self._network_config = self._get_iscsi_config()
- if not self._has_network_config():
- LOG.warning(
- "Could not obtain network configuration from initramfs. "
- "Falling back to IMDS."
+ if self._network_config == sources.UNSET:
+ # this is v1
+ if not self._has_network_config():
+ self._network_config = self.distro.generate_fallback_config()
+ set_primary = True
+
+ set_secondary = self.ds_cfg.get(
+ "configure_secondary_nics",
+ BUILTIN_DS_CONFIG["configure_secondary_nics"],
)
- set_primary = True
-
- set_secondary = self.ds_cfg.get(
- "configure_secondary_nics",
- BUILTIN_DS_CONFIG["configure_secondary_nics"],
- )
- if set_primary or set_secondary:
- try:
- # Mutate self._network_config to include primary and/or
- # secondary VNICs
- self._add_network_config_from_opc_imds(set_primary)
- except Exception:
- util.logexc(
- LOG,
- "Failed to parse IMDS network configuration!",
- )
+ if set_primary or set_secondary:
+ try:
+ # Mutate self._network_config to include primary and/or
+ # secondary VNICs
+ self._add_network_config_from_opc_imds(set_primary)
+ except Exception:
+ util.logexc(
+ LOG,
+ "Failed to parse IMDS network configuration!",
+ )
- # we need to verify that the nic selected is not a netfail over
- # device and, if it is a netfail master, then we need to avoid
- # emitting any match by mac
- _ensure_netfailover_safe(self._network_config)
+ # we need to verify that the nic selected is not a netfail over
+ # device and, if it is a netfail master, then we need to avoid
+ # emitting any match by mac
+ _ensure_netfailover_safe(self._network_config)
return self._network_config