* Tue Apr 23 2024 Miroslav Rezanina <mrezanin@redhat.com> - 24.1.4-2
- ci-Remove-dependency-on-dhcp-client-ISC-DHCP-and-use-dh.patch [RHEL-26304] - ci-fix-Fall-back-to-cached-local-ds-if-no-valid-ds-foun.patch [RHEL-32854] - Resolves: RHEL-26304 ([RFE][rhel-10] Suggest to remove dependency on dhcp-client in cloud-init) - Resolves: RHEL-32854 ([cloud-init][ESXi]VMware datasource resets on every boot causing it to lose network configuration [rhel-10.0])
This commit is contained in:
parent
eb875da6d6
commit
75b3242fce
149
ci-fix-Fall-back-to-cached-local-ds-if-no-valid-ds-foun.patch
Normal file
149
ci-fix-Fall-back-to-cached-local-ds-if-no-valid-ds-foun.patch
Normal file
@ -0,0 +1,149 @@
|
||||
From 79668d45288e7a17bc627fdc05a609423161a44c Mon Sep 17 00:00:00 2001
|
||||
From: PengpengSun <40026211+PengpengSun@users.noreply.github.com>
|
||||
Date: Fri, 29 Mar 2024 22:39:13 +0800
|
||||
Subject: [PATCH 2/2] fix: Fall back to cached local ds if no valid ds found
|
||||
(#4997)
|
||||
|
||||
Rebooting an instance which has finished VMware guest
|
||||
customization with DataSourceVMware will load
|
||||
DataSourceNone due to metadata is NOT available.
|
||||
|
||||
This is mostly a re-post of PR#229, few differences are:
|
||||
1. Let ds decide if fallback is allowed, not always fall back
|
||||
to previous cached LOCAL ds.
|
||||
2. No comparing instance-id of cached ds with previous instance-id
|
||||
due to I think they are always identical.
|
||||
|
||||
Fixes GH-3402
|
||||
|
||||
(cherry picked from commit 9929a00580d50afc60bf4e0fb9f2f39d4f797b4b)
|
||||
Signed-off-by: Ani Sinha <anisinha@redhat.com>
|
||||
|
||||
Conflicts:
|
||||
cloudinit/sources/__init__.py
|
||||
Conflicts because of changes in upstream source coming from
|
||||
30d5e9a3358f4cbaced ("refactor: Use _unpickle rather than hasattr() in sources")
|
||||
---
|
||||
cloudinit/sources/DataSourceVMware.py | 14 +++++++++-
|
||||
cloudinit/sources/__init__.py | 14 ++++++++++
|
||||
cloudinit/stages.py | 40 +++++++++++++++++----------
|
||||
3 files changed, 53 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/cloudinit/sources/DataSourceVMware.py b/cloudinit/sources/DataSourceVMware.py
|
||||
index 77a2de6c..2a91a307 100644
|
||||
--- a/cloudinit/sources/DataSourceVMware.py
|
||||
+++ b/cloudinit/sources/DataSourceVMware.py
|
||||
@@ -223,7 +223,7 @@ class DataSourceVMware(sources.DataSource):
|
||||
break
|
||||
|
||||
if not self.data_access_method:
|
||||
- LOG.error("failed to find a valid data access method")
|
||||
+ LOG.debug("failed to find a valid data access method")
|
||||
return False
|
||||
|
||||
LOG.info("using data access method %s", self._get_subplatform())
|
||||
@@ -317,6 +317,18 @@ class DataSourceVMware(sources.DataSource):
|
||||
self.metadata["instance-id"] = str(id_file.read()).rstrip().lower()
|
||||
return self.metadata["instance-id"]
|
||||
|
||||
+ def check_if_fallback_is_allowed(self):
|
||||
+ if (
|
||||
+ self.data_access_method
|
||||
+ and self.data_access_method == DATA_ACCESS_METHOD_IMC
|
||||
+ and is_vmware_platform()
|
||||
+ ):
|
||||
+ LOG.debug(
|
||||
+ "Cache fallback is allowed for : %s", self._get_subplatform()
|
||||
+ )
|
||||
+ return True
|
||||
+ return False
|
||||
+
|
||||
def get_public_ssh_keys(self):
|
||||
for key_name in (
|
||||
"public-keys-data",
|
||||
diff --git a/cloudinit/sources/__init__.py b/cloudinit/sources/__init__.py
|
||||
index 4ea1fc56..e2b3029e 100644
|
||||
--- a/cloudinit/sources/__init__.py
|
||||
+++ b/cloudinit/sources/__init__.py
|
||||
@@ -332,6 +332,10 @@ class DataSource(CloudInitPickleMixin, metaclass=abc.ABCMeta):
|
||||
self.vendordata2_raw = None
|
||||
if not hasattr(self, "skip_hotplug_detect"):
|
||||
self.skip_hotplug_detect = False
|
||||
+
|
||||
+ if not hasattr(self, "check_if_fallback_is_allowed"):
|
||||
+ setattr(self, "check_if_fallback_is_allowed", lambda: False)
|
||||
+
|
||||
if hasattr(self, "userdata") and self.userdata is not None:
|
||||
# If userdata stores MIME data, on < python3.6 it will be
|
||||
# missing the 'policy' attribute that exists on >=python3.6.
|
||||
@@ -925,6 +929,16 @@ class DataSource(CloudInitPickleMixin, metaclass=abc.ABCMeta):
|
||||
# quickly (local check only) if self.instance_id is still
|
||||
return False
|
||||
|
||||
+ def check_if_fallback_is_allowed(self):
|
||||
+ """check_if_fallback_is_allowed()
|
||||
+ Checks if a cached ds is allowed to be restored when no valid ds is
|
||||
+ found in local mode by checking instance-id and searching valid data
|
||||
+ through ds list.
|
||||
+
|
||||
+ @return True if a ds allows fallback, False otherwise.
|
||||
+ """
|
||||
+ return False
|
||||
+
|
||||
@staticmethod
|
||||
def _determine_dsmode(candidates, default=None, valid=None):
|
||||
# return the first candidate that is non None, warn if not valid
|
||||
diff --git a/cloudinit/stages.py b/cloudinit/stages.py
|
||||
index e95bb76f..894eeac5 100644
|
||||
--- a/cloudinit/stages.py
|
||||
+++ b/cloudinit/stages.py
|
||||
@@ -380,20 +380,32 @@ class Init:
|
||||
LOG.debug(myrep.description)
|
||||
|
||||
if not ds:
|
||||
- util.del_file(self.paths.instance_link)
|
||||
- (cfg_list, pkg_list) = self._get_datasources()
|
||||
- # Deep copy so that user-data handlers can not modify
|
||||
- # (which will affect user-data handlers down the line...)
|
||||
- (ds, dsname) = sources.find_source(
|
||||
- self.cfg,
|
||||
- self.distro,
|
||||
- self.paths,
|
||||
- copy.deepcopy(self.ds_deps),
|
||||
- cfg_list,
|
||||
- pkg_list,
|
||||
- self.reporter,
|
||||
- )
|
||||
- LOG.info("Loaded datasource %s - %s", dsname, ds)
|
||||
+ try:
|
||||
+ cfg_list, pkg_list = self._get_datasources()
|
||||
+ # Deep copy so that user-data handlers can not modify
|
||||
+ # (which will affect user-data handlers down the line...)
|
||||
+ ds, dsname = sources.find_source(
|
||||
+ self.cfg,
|
||||
+ self.distro,
|
||||
+ self.paths,
|
||||
+ copy.deepcopy(self.ds_deps),
|
||||
+ cfg_list,
|
||||
+ pkg_list,
|
||||
+ self.reporter,
|
||||
+ )
|
||||
+ util.del_file(self.paths.instance_link)
|
||||
+ LOG.info("Loaded datasource %s - %s", dsname, ds)
|
||||
+ except sources.DataSourceNotFoundException as e:
|
||||
+ if existing != "check":
|
||||
+ raise e
|
||||
+ ds = self._restore_from_cache()
|
||||
+ if ds and ds.check_if_fallback_is_allowed():
|
||||
+ LOG.info(
|
||||
+ "Restored fallback datasource from checked cache: %s",
|
||||
+ ds,
|
||||
+ )
|
||||
+ else:
|
||||
+ raise e
|
||||
self.datasource = ds
|
||||
# Ensure we adjust our path members datasource
|
||||
# now that we have one (thus allowing ipath to be used)
|
||||
--
|
||||
2.39.3
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Name: cloud-init
|
||||
Version: 24.1.4
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Cloud instance init scripts
|
||||
License: Apache-2.0 OR GPL-3.0-only
|
||||
URL: https://github.com/canonical/cloud-init
|
||||
@ -18,6 +18,7 @@ Patch2: 0002-fix-rhel-Fix-network-ordering-in-sysconfig.patch
|
||||
Patch3: 0003-Do-not-write-NM_CONTROLLED-no-in-generated-interface.patch
|
||||
Patch4: 0004-Setting-autoconnect-priority-setting-for-network-scr.patch
|
||||
Patch5: 0005-feat-Use-NetworkManager-renderer-by-default-in-RHEL-.patch
|
||||
Patch6: ci-fix-Fall-back-to-cached-local-ds-if-no-valid-ds-foun.patch
|
||||
|
||||
BuildArch: noarch
|
||||
|
||||
@ -38,12 +39,11 @@ BuildRequires: python3dist(responses)
|
||||
BuildRequires: python3dist(passlib)
|
||||
%endif
|
||||
|
||||
# ISC DHCP is no longer maintained and cloud-init will ship a
|
||||
# release with dhcpcd support soon. See BZ 2247055 for details.
|
||||
# ISC DHCP is no longer maintained and cloud-init 24.1 now supports
|
||||
# dhcpcd. See commit 21b2b6e4423b0fec325 and the upstream PR
|
||||
# https://github.com/canonical/cloud-init/pull/4746.
|
||||
#
|
||||
# Cloud-init dhcpcd support is pending a release here:
|
||||
# https://github.com/canonical/cloud-init/pull/4746/files
|
||||
Requires: dhcp-client
|
||||
Requires: dhcpcd
|
||||
|
||||
Requires: hostname
|
||||
Requires: e2fsprogs
|
||||
@ -220,6 +220,14 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Apr 23 2024 Miroslav Rezanina <mrezanin@redhat.com> - 24.1.4-2
|
||||
- ci-Remove-dependency-on-dhcp-client-ISC-DHCP-and-use-dh.patch [RHEL-26304]
|
||||
- ci-fix-Fall-back-to-cached-local-ds-if-no-valid-ds-foun.patch [RHEL-32854]
|
||||
- Resolves: RHEL-26304
|
||||
([RFE][rhel-10] Suggest to remove dependency on dhcp-client in cloud-init)
|
||||
- Resolves: RHEL-32854
|
||||
([cloud-init][ESXi]VMware datasource resets on every boot causing it to lose network configuration [rhel-10.0])
|
||||
|
||||
* Mon Apr 22 2024 Miroslav Rezanina <mrezanin@redhat.com> - 24.1.4-1
|
||||
- Rebase to 24.1.4 [RHEL-33439]
|
||||
- Resolves: RHEL-33439
|
||||
|
Loading…
Reference in New Issue
Block a user