Update ELevate patch

This commit is contained in:
Andrew Lukoshko 2023-01-27 08:15:16 +01:00
parent a7c657c2b2
commit 3d5217f69d
2 changed files with 401 additions and 21 deletions

View File

@ -1,5 +1,5 @@
diff --git a/README.md b/README.md
index 4de458b..9975f06 100644
index 4de458b..c82651d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,61 @@
@ -83,7 +83,7 @@ index 4de458b..9975f06 100644
- When filing an issue, include:
- Steps to reproduce the issue
- *All files in /var/log/leapp*
@@ -25,7 +88,613 @@
@@ -25,7 +88,638 @@
Then you may attach only the `leapp-logs.tgz` file.
### Where can I seek help?
@ -191,14 +191,39 @@ index 4de458b..9975f06 100644
+Required fields:
+
+- action: what action to perform on the listed package
+- 0 - present
+- 1 - removed
+- 2 - deprecated
+- 3 - replaced
+- 4 - split
+- 5 - merged
+- 6 - moved to new repository
+- 7 - renamed
+ - 0 - present
+ - keep the packages in `in_packageset` to make sure the repo they're in on the target system gets enabled
+ - additional behaviour present, see below
+ - 1 - removed
+ - remove all packages in `in_packageset`
+ - 2 - deprecated
+ - keep the packages in `in_packageset` to make sure the repo they're in on the target system gets enabled
+ - 3 - replaced
+ - remove all packages in `in_packageset`
+ - install parts of the `out_packageset` that are not present on the system
+ - keep the packages from `out_packageset` that are already installed
+ - 4 - split
+ - install parts of the `out_packageset` that are not present on the system
+ - keep the present `out_packageset`
+ - remove packages from `in_packageset` that are not present in `out_packageset`
+ - in case of package X being split to Y and Z, package X will be removed
+ - in case of package X being split to X and Y, package X will **not** be removed
+ - 5 - merged
+ - same as `split`
+ - additional behaviour present, see below
+ - 6 - moved to new repository
+ - keep the package to make sure the repo it's in on the target system gets enabled
+ - nothing is done to `in_packageset` as it always contains one package - the same as the "out" package
+ - 7 - renamed
+ - remove the `in_packageset` and install the `out_packageset` if not installed
+ - if already installed, keep the `out_packageset` as-is
+ - 8 - reinstalled
+ - reinstall the `in_packageset` package during the upgrade transaction
+ - mostly useful for packages that have the same version string between major versions, and thus won't be upgraded automatically
+ - Additional notes:
+ - any event except `present` is ignored if any of packages in `in_packageset` are marked for removal
+ - any event except `merged` is ignored if any of packages in `in_packageset` are neither installed nor marked for installation
+ - for `merged` events it is sufficient to have at least one package from `in_packageset` are either installed or marked for installation
+- arches: what system architectures the listed entry relates to
+- id: entry ID, must be unique
+- in_packageset: set of packages on the old system
@ -835,6 +860,15 @@ index 75ffa6a..379d480 100644
+ for position, report in enumerate(inhibitors, start=1):
+ logger.error('{idx:5}. Inhibitor: {title}'.format(idx=position, title=report['title']))
+ logger.info('Consult the pre-upgrade report for details and possible remediation.')
diff --git a/etc/leapp/transaction/to_reinstall b/etc/leapp/transaction/to_reinstall
new file mode 100644
index 0000000..c6694a8
--- /dev/null
+++ b/etc/leapp/transaction/to_reinstall
@@ -0,0 +1,3 @@
+### List of packages (each on new line) to be reinstalled to the upgrade transaction
+### Useful for packages that have identical version strings but contain binary changes between major OS versions
+### Packages that aren't installed will be skipped
diff --git a/packaging/leapp-repository.spec b/packaging/leapp-repository.spec
index af4b31d..0d8f6c8 100644
--- a/packaging/leapp-repository.spec
@ -1752,10 +1786,10 @@ index 14bd6e3..f6adacf 100755
# This should not happen as /etc/initrd-release is supposed to have API
# stability, but check is better than broken system.
diff --git a/repos/system_upgrade/common/actors/efibootorderfix/finalization/actor.py b/repos/system_upgrade/common/actors/efibootorderfix/finalization/actor.py
index f42909f..171fdd2 100644
index f42909f..2728cb4 100644
--- a/repos/system_upgrade/common/actors/efibootorderfix/finalization/actor.py
+++ b/repos/system_upgrade/common/actors/efibootorderfix/finalization/actor.py
@@ -1,17 +1,101 @@
@@ -1,17 +1,102 @@
+import os
+import re
+
@ -1793,6 +1827,7 @@ index f42909f..171fdd2 100644
+ 'Oracle Linux Server': 'redhat',
+ 'Red Hat Enterprise Linux': 'redhat',
+ 'Rocky Linux': 'rocky',
+ 'Scientific Linux': 'redhat',
+ 'CloudLinux': 'centos',
+ }
+
@ -1861,6 +1896,41 @@ index f42909f..171fdd2 100644
+
+ if not has_grub_cfg:
+ run(['/sbin/grub2-mkconfig', '-o', grub_cfg_path])
diff --git a/repos/system_upgrade/common/actors/filterrpmtransactionevents/actor.py b/repos/system_upgrade/common/actors/filterrpmtransactionevents/actor.py
index e0d89d9..52f93ef 100644
--- a/repos/system_upgrade/common/actors/filterrpmtransactionevents/actor.py
+++ b/repos/system_upgrade/common/actors/filterrpmtransactionevents/actor.py
@@ -32,6 +32,7 @@ class FilterRpmTransactionTasks(Actor):
to_remove = set()
to_keep = set()
to_upgrade = set()
+ to_reinstall = set()
modules_to_enable = {}
modules_to_reset = {}
for event in self.consume(RpmTransactionTasks, PESRpmTransactionTasks):
@@ -39,13 +40,14 @@ class FilterRpmTransactionTasks(Actor):
to_install.update(event.to_install)
to_remove.update(installed_pkgs.intersection(event.to_remove))
to_keep.update(installed_pkgs.intersection(event.to_keep))
+ to_reinstall.update(installed_pkgs.intersection(event.to_reinstall))
modules_to_enable.update({'{}:{}'.format(m.name, m.stream): m for m in event.modules_to_enable})
modules_to_reset.update({'{}:{}'.format(m.name, m.stream): m for m in event.modules_to_reset})
to_remove.difference_update(to_keep)
# run upgrade for the rest of RH signed pkgs which we do not have rule for
- to_upgrade = installed_pkgs - (to_install | to_remove)
+ to_upgrade = installed_pkgs - (to_install | to_remove | to_reinstall)
self.produce(FilteredRpmTransactionTasks(
local_rpms=list(local_rpms),
@@ -53,5 +55,6 @@ class FilterRpmTransactionTasks(Actor):
to_remove=list(to_remove),
to_keep=list(to_keep),
to_upgrade=list(to_upgrade),
+ to_reinstall=list(to_reinstall),
modules_to_reset=list(modules_to_reset.values()),
modules_to_enable=list(modules_to_enable.values())))
diff --git a/repos/system_upgrade/common/actors/ipuworkflowconfig/libraries/ipuworkflowconfig.py b/repos/system_upgrade/common/actors/ipuworkflowconfig/libraries/ipuworkflowconfig.py
index edf978f..7fea4ec 100644
--- a/repos/system_upgrade/common/actors/ipuworkflowconfig/libraries/ipuworkflowconfig.py
@ -1935,10 +2005,25 @@ index fadf76b..7ef2664 100644
+ if pesfile[:-len(pes_json_suffix)] in active_vendors:
+ pes_events_scanner(VENDORS_DIR, pesfile)
diff --git a/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner.py b/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner.py
index 1be2caa..072de17 100644
index 1be2caa..aca8a72 100644
--- a/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner.py
+++ b/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner.py
@@ -138,19 +138,26 @@ def _get_repositories_mapping(target_pesids):
@@ -59,12 +59,14 @@ class Action(IntEnum):
MERGED = 5
MOVED = 6
RENAMED = 7
+ REINSTALLED = 8
class Task(IntEnum):
KEEP = 0
INSTALL = 1
REMOVE = 2
+ REINSTALL = 3
def past(self):
return ['kept', 'installed', 'removed'][self]
@@ -138,19 +140,26 @@ def _get_repositories_mapping(target_pesids):
:return: Dictionary with all repositories mapped.
"""
@ -1975,7 +2060,15 @@ index 1be2caa..072de17 100644
# NOTE: We have to calculate expected target repositories
# like in the setuptargetrepos actor. It's planned to handle this in different
# way in future...
@@ -324,7 +331,7 @@ def parse_pes_events(json_data):
@@ -233,6 +242,7 @@ def get_transaction_configuration():
transaction_configuration.to_install.extend(tasks.to_install)
transaction_configuration.to_remove.extend(tasks.to_remove)
transaction_configuration.to_keep.extend(tasks.to_keep)
+ transaction_configuration.to_reinstall.extend(tasks.to_reinstall)
return transaction_configuration
@@ -324,7 +334,7 @@ def parse_pes_events(json_data):
:return: List of Event tuples, where each event contains event type and input/output pkgs
"""
data = json.loads(json_data)
@ -1984,6 +2077,135 @@ index 1be2caa..072de17 100644
raise ValueError('Found PES data with invalid structure')
return list(chain(*[parse_entry(entry) for entry in data['packageinfo']]))
@@ -565,6 +575,13 @@ def process_events(releases, events, installed_pkgs):
if event.action in [Action.RENAMED, Action.REPLACED, Action.REMOVED]:
add_packages_to_tasks(current, event.in_pkgs, Task.REMOVE)
+ if event.action == Action.REINSTALLED:
+ # These packages have the same version string but differ in contents.
+ # noarch packages will most likely work fine after the upgrade, but
+ # the others may break due to library/binary incompatibilities.
+ # This is why we mark them for reinstallation.
+ add_packages_to_tasks(current, event.in_pkgs, Task.REINSTALL)
+
do_not_remove = set()
for package in current[Task.REMOVE]:
if package in tasks[Task.KEEP]:
@@ -572,6 +589,11 @@ def process_events(releases, events, installed_pkgs):
'{p} :: {r} to be kept / currently removed - removing package'.format(
p=package[0], r=current[Task.REMOVE][package]))
del tasks[Task.KEEP][package]
+ if package in tasks[Task.REINSTALL]:
+ api.current_logger().warning(
+ '{p} :: {r} to be reinstalled / currently removed - removing package'.format(
+ p=package[0], r=current[Task.REMOVE][package]))
+ del tasks[Task.REINSTALL][package]
elif package in tasks[Task.INSTALL]:
api.current_logger().warning(
'{p} :: {r} to be installed / currently removed - ignoring tasks'.format(
@@ -599,6 +621,11 @@ def process_events(releases, events, installed_pkgs):
'{p} :: {r} to be removed / currently kept - keeping package'.format(
p=package[0], r=current[Task.KEEP][package]))
del tasks[Task.REMOVE][package]
+ if package in tasks[Task.REINSTALL]:
+ api.current_logger().warning(
+ '{p} :: {r} to be reinstalled / currently kept - keeping package'.format(
+ p=package[0], r=current[Task.KEEP][package]))
+ del tasks[Task.REINSTALL][package]
for key in Task: # noqa: E1133; pylint: disable=not-an-iterable
for package in current[key]:
@@ -610,7 +637,9 @@ def process_events(releases, events, installed_pkgs):
map_repositories(tasks[Task.INSTALL])
map_repositories(tasks[Task.KEEP])
+ map_repositories(tasks[Task.REINSTALL])
filter_out_pkgs_in_blacklisted_repos(tasks[Task.INSTALL])
+ filter_out_pkgs_in_blacklisted_repos(tasks[Task.REINSTALL])
resolve_conflicting_requests(tasks)
return tasks
@@ -689,15 +718,24 @@ def resolve_conflicting_requests(tasks):
-> without this function, sip would reside in both [Task.KEEP] and [Task.REMOVE], causing a dnf conflict
"""
pkgs_in_conflict = set()
- for pkg in list(tasks[Task.INSTALL].keys()) + list(tasks[Task.KEEP].keys()):
+ preserve_keys = (
+ list(tasks[Task.INSTALL].keys())
+ + list(tasks[Task.KEEP].keys())
+ + list(tasks[Task.REINSTALL].keys())
+ )
+
+ for pkg in preserve_keys:
if pkg in tasks[Task.REMOVE]:
pkgs_in_conflict.add(pkg)
del tasks[Task.REMOVE][pkg]
if pkgs_in_conflict:
- api.current_logger().debug('The following packages were marked to be kept/installed and removed at the same'
- ' time. Leapp will upgrade them.\n{}'.format(
- '\n'.join(sorted(pkg[0] for pkg in pkgs_in_conflict))))
+ api.current_logger().debug(
+ "The following packages were marked to be kept/installed/reinstalled"
+ " and removed at the same time. Leapp will upgrade them.\n{}".format(
+ "\n".join(sorted(pkg[0] for pkg in pkgs_in_conflict))
+ )
+ )
def get_repositories_blacklisted():
@@ -773,7 +811,7 @@ def add_output_pkgs_to_transaction_conf(transaction_configuration, events):
message = 'The following target system packages will not be installed:\n'
for event in events:
- if event.action in (Action.SPLIT, Action.MERGED, Action.REPLACED, Action.RENAMED):
+ if event.action in (Action.SPLIT, Action.MERGED, Action.REPLACED, Action.RENAMED, Action.REINSTALLED):
if all([pkg.name in transaction_configuration.to_remove for pkg in event.in_pkgs]):
transaction_configuration.to_remove.extend(pkg.name for pkg in event.out_pkgs)
message += (
@@ -800,6 +838,7 @@ def filter_out_transaction_conf_pkgs(tasks, transaction_configuration):
"""
do_not_keep = [p for p in tasks[Task.KEEP] if p[0] in transaction_configuration.to_remove]
do_not_install = [p for p in tasks[Task.INSTALL] if p[0] in transaction_configuration.to_remove]
+ do_not_reinstall = [p for p in tasks[Task.REINSTALL] if p[0] in transaction_configuration.to_remove]
do_not_remove = [p for p in tasks[Task.REMOVE] if p[0] in transaction_configuration.to_install
or p[0] in transaction_configuration.to_keep]
@@ -813,6 +852,12 @@ def filter_out_transaction_conf_pkgs(tasks, transaction_configuration):
api.current_logger().debug('The following packages will not be installed because of the'
' /etc/leapp/transaction/to_remove transaction configuration file:'
'\n- ' + '\n- '.join(p[0] for p in sorted(do_not_install)))
+ if do_not_reinstall:
+ for pkg in do_not_reinstall:
+ tasks[Task.REINSTALL].pop(pkg)
+ api.current_logger().debug('The following packages will not be reinstalled because of the'
+ ' /etc/leapp/transaction/to_remove transaction configuration file:'
+ '\n- ' + '\n- '.join(p[0] for p in sorted(do_not_reinstall)))
if do_not_remove:
for pkg in do_not_remove:
tasks[Task.REMOVE].pop(pkg)
@@ -837,17 +882,20 @@ def produce_messages(tasks):
# Type casting to list to be Py2&Py3 compatible as on Py3 keys() returns dict_keys(), not a list
to_install_pkgs = sorted(tasks[Task.INSTALL].keys())
to_remove_pkgs = sorted(tasks[Task.REMOVE].keys())
+ to_reinstall_pkgs = sorted(tasks[Task.REINSTALL].keys())
to_enable_repos = sorted(set(tasks[Task.INSTALL].values()) | set(tasks[Task.KEEP].values()))
- if to_install_pkgs or to_remove_pkgs:
+ if to_install_pkgs or to_remove_pkgs or to_reinstall_pkgs:
enabled_modules = _get_enabled_modules()
modules_to_enable = [Module(name=p[1][0], stream=p[1][1]) for p in to_install_pkgs if p[1]]
modules_to_reset = enabled_modules
to_install_pkg_names = [p[0] for p in to_install_pkgs]
to_remove_pkg_names = [p[0] for p in to_remove_pkgs]
+ to_reinstall_pkg_names = [p[0] for p in to_reinstall_pkgs]
api.produce(PESRpmTransactionTasks(to_install=to_install_pkg_names,
to_remove=to_remove_pkg_names,
+ to_reinstall=to_reinstall_pkg_names,
modules_to_enable=modules_to_enable,
modules_to_reset=modules_to_reset))
diff --git a/repos/system_upgrade/common/actors/peseventsscanner/tests/unit_test_peseventsscanner.py b/repos/system_upgrade/common/actors/peseventsscanner/tests/unit_test_peseventsscanner.py
index f4b02e9..c22165e 100644
--- a/repos/system_upgrade/common/actors/peseventsscanner/tests/unit_test_peseventsscanner.py
@ -2000,7 +2222,7 @@ index f4b02e9..c22165e 100644
def test_pes_data_not_found(monkeypatch):
def read_or_fetch_mocked(filename, directory="/etc/leapp/files", service=None, allow_empty=False):
diff --git a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py
index 01f6df3..badb888 100644
index 01f6df3..9a4990e 100644
--- a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py
+++ b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py
@@ -1,27 +1,67 @@
@ -2096,7 +2318,7 @@ index 01f6df3..badb888 100644
def is_gpg_pubkey(pkg):
"""Check if gpg-pubkey pkg exists or LEAPP_DEVEL_RPMS_ALL_SIGNED=1
@@ -44,15 +84,15 @@ class RedHatSignedRpmScanner(Actor):
@@ -44,15 +84,30 @@ class RedHatSignedRpmScanner(Actor):
gpg-pubkey is not signed as it would require another package
to verify its signature
"""
@ -2114,10 +2336,25 @@ index 01f6df3..badb888 100644
"""Whitelist the katello package."""
- return pkg.name.startswith('katello-ca-consumer')
+ return pkg.name.startswith("katello-ca-consumer")
+
+ def has_cpanel_prefix(pkg):
+ """
+ Whitelist the cPanel packages.
+ A side effect of the cPanel's deployment method is that its packages both have no
+ PGP signature and aren't associated with any package repository.
+ They do, however, have a specific naming scheme that can be used to include them into
+ the upgrade process.
+ """
+
+ # NOTE: if another case like this and the above katello occurs, consider adding a
+ # mechanism (a third-party extension) to do this in a way that allows extending it to
+ # other configurations.
+ # A separate file for the "vendors.d" folder with package name wildcards?
+ return pkg.name.startswith("cpanel-")
def is_azure_pkg(pkg):
"""Whitelist Azure config package."""
@@ -68,16 +108,24 @@ class RedHatSignedRpmScanner(Actor):
@@ -68,16 +123,25 @@ class RedHatSignedRpmScanner(Actor):
for pkg in rpm_pkgs.items:
if any(
[
@ -2125,6 +2362,7 @@ index 01f6df3..badb888 100644
+ has_vendorsig(pkg),
is_gpg_pubkey(pkg),
has_katello_prefix(pkg),
+ has_cpanel_prefix(pkg),
is_azure_pkg(pkg),
]
):
@ -2335,6 +2573,54 @@ index 3c0b04b..3480432 100644
@pytest.fixture
def adjust_cwd():
previous_cwd = os.getcwd()
diff --git a/repos/system_upgrade/common/actors/rpmtransactionconfigtaskscollector/libraries/rpmtransactionconfigtaskscollector.py b/repos/system_upgrade/common/actors/rpmtransactionconfigtaskscollector/libraries/rpmtransactionconfigtaskscollector.py
index 05797f5..e6f7803 100644
--- a/repos/system_upgrade/common/actors/rpmtransactionconfigtaskscollector/libraries/rpmtransactionconfigtaskscollector.py
+++ b/repos/system_upgrade/common/actors/rpmtransactionconfigtaskscollector/libraries/rpmtransactionconfigtaskscollector.py
@@ -18,21 +18,37 @@ def load_tasks_file(path, logger):
return []
+def filter_out(installed_rpm_names, to_filter, debug_msg):
+ # These are the packages that aren't installed on the system.
+ filtered_ok = [pkg for pkg in to_filter if pkg not in installed_rpm_names]
+
+ # And these ones are the ones that are.
+ filtered_out = list(set(to_filter) - set(filtered_ok))
+ if filtered_out:
+ api.current_logger().debug(
+ debug_msg +
+ '\n- ' + '\n- '.join(filtered_out)
+ )
+ # We may want to use either of the two sets.
+ return filtered_ok, filtered_out
+
+
def load_tasks(base_dir, logger):
# Loads configuration files to_install, to_keep, and to_remove from the given base directory
rpms = next(api.consume(InstalledRedHatSignedRPM))
rpm_names = [rpm.name for rpm in rpms.items]
+
to_install = load_tasks_file(os.path.join(base_dir, 'to_install'), logger)
+ install_debug_msg = 'The following packages from "to_install" file will be ignored as they are already installed:'
# we do not want to put into rpm transaction what is already installed (it will go to "to_upgrade" bucket)
- to_install_filtered = [pkg for pkg in to_install if pkg not in rpm_names]
+ to_install_filtered, _ = filter_out(rpm_names, to_install, install_debug_msg)
- filtered = set(to_install) - set(to_install_filtered)
- if filtered:
- api.current_logger().debug(
- 'The following packages from "to_install" file will be ignored as they are already installed:'
- '\n- ' + '\n- '.join(filtered))
+ to_reinstall = load_tasks_file(os.path.join(base_dir, 'to_reinstall'), logger)
+ reinstall_debug_msg = 'The following packages from "to_reinstall" file will be ignored as they are not installed:'
+ _, to_reinstall_filtered = filter_out(rpm_names, to_reinstall, reinstall_debug_msg)
return RpmTransactionTasks(
to_install=to_install_filtered,
+ to_reinstall=to_reinstall_filtered,
to_keep=load_tasks_file(os.path.join(base_dir, 'to_keep'), logger),
to_remove=load_tasks_file(os.path.join(base_dir, 'to_remove'), logger))
diff --git a/repos/system_upgrade/common/actors/scancustomrepofile/actor.py b/repos/system_upgrade/common/actors/scancustomrepofile/actor.py
index d46018f..bb49b4e 100644
--- a/repos/system_upgrade/common/actors/scancustomrepofile/actor.py
@ -3049,6 +3335,27 @@ index 0000000..ba27cbb
+ # self.produce(vendor_repomap_collection)
+ # for repomap in vendor_repomap_collection.maps:
+ # self.produce(repomap)
diff --git a/repos/system_upgrade/common/files/rhel_upgrade.py b/repos/system_upgrade/common/files/rhel_upgrade.py
index 62221a7..f5b4c70 100644
--- a/repos/system_upgrade/common/files/rhel_upgrade.py
+++ b/repos/system_upgrade/common/files/rhel_upgrade.py
@@ -171,6 +171,7 @@ class RhelUpgradeCommand(dnf.cli.Command):
to_install = self.plugin_data['pkgs_info']['to_install']
to_remove = self.plugin_data['pkgs_info']['to_remove']
to_upgrade = self.plugin_data['pkgs_info']['to_upgrade']
+ to_reinstall = self.plugin_data['pkgs_info']['to_reinstall']
# Modules to enable
self._process_entities(entities=[modules_to_enable], op=module_base.enable, entity_name='Module stream')
@@ -181,6 +182,8 @@ class RhelUpgradeCommand(dnf.cli.Command):
self._process_entities(entities=to_install, op=self.base.install, entity_name='Package')
# Packages to be upgraded
self._process_entities(entities=to_upgrade, op=self.base.upgrade, entity_name='Package')
+ # Packages to be reinstalled
+ self._process_entities(entities=to_reinstall, op=self.base.reinstall, entity_name='Package')
self.base.distro_sync()
diff --git a/repos/system_upgrade/common/libraries/config/version.py b/repos/system_upgrade/common/libraries/config/version.py
index 03f3cd4..2ab78ea 100644
--- a/repos/system_upgrade/common/libraries/config/version.py
@ -3065,7 +3372,7 @@ index 03f3cd4..2ab78ea 100644
diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py
index 4010e9f..fdb8e66 100644
index 4010e9f..09085c0 100644
--- a/repos/system_upgrade/common/libraries/dnfplugin.py
+++ b/repos/system_upgrade/common/libraries/dnfplugin.py
@@ -4,6 +4,8 @@ import json
@ -3077,7 +3384,15 @@ index 4010e9f..fdb8e66 100644
from leapp.exceptions import StopActorExecutionError
from leapp.libraries.common import dnfconfig, guards, mounting, overlaygen, rhsm, utils
from leapp.libraries.common.config.version import get_target_major_version, get_target_version
@@ -213,10 +215,17 @@ def _transaction(context, stage, target_repoids, tasks, plugin_info, test=False,
@@ -85,6 +87,7 @@ def build_plugin_data(target_repoids, debug, test, tasks, on_aws):
'to_install': tasks.to_install,
'to_remove': tasks.to_remove,
'to_upgrade': tasks.to_upgrade,
+ 'to_reinstall': tasks.to_reinstall,
'modules_to_enable': ['{}:{}'.format(m.name, m.stream) for m in tasks.modules_to_enable],
},
'dnf_conf': {
@@ -213,10 +216,17 @@ def _transaction(context, stage, target_repoids, tasks, plugin_info, test=False,
message='Failed to execute dnf. Reason: {}'.format(str(e))
)
except CalledProcessError as e:
@ -3297,6 +3612,18 @@ index c187333..ea6a75d 100644
mapping = fields.List(fields.Model(RepoMapEntry), default=[])
repositories = fields.List(fields.Model(PESIDRepositoryEntry), default=[])
+ vendor = fields.Nullable(fields.String())
diff --git a/repos/system_upgrade/common/models/rpmtransactiontasks.py b/repos/system_upgrade/common/models/rpmtransactiontasks.py
index 7e2870d..05d4e94 100644
--- a/repos/system_upgrade/common/models/rpmtransactiontasks.py
+++ b/repos/system_upgrade/common/models/rpmtransactiontasks.py
@@ -10,6 +10,7 @@ class RpmTransactionTasks(Model):
to_keep = fields.List(fields.String(), default=[])
to_remove = fields.List(fields.String(), default=[])
to_upgrade = fields.List(fields.String(), default=[])
+ to_reinstall = fields.List(fields.String(), default=[])
modules_to_enable = fields.List(fields.Model(Module), default=[])
modules_to_reset = fields.List(fields.Model(Module), default=[])
diff --git a/repos/system_upgrade/common/models/targetrepositories.py b/repos/system_upgrade/common/models/targetrepositories.py
index 3604772..33f5dc8 100644
--- a/repos/system_upgrade/common/models/targetrepositories.py
@ -3584,3 +3911,56 @@ index 0cb9081..7a962b7 100644
+ error = 'Failed to open sshd_config: {}'.format(str(err))
+ api.current_logger().error(error)
+ return
diff --git a/repos/system_upgrade/el7toel8/actors/updateyumvars/actor.py b/repos/system_upgrade/el7toel8/actors/updateyumvars/actor.py
new file mode 100644
index 0000000..6252fba
--- /dev/null
+++ b/repos/system_upgrade/el7toel8/actors/updateyumvars/actor.py
@@ -0,0 +1,18 @@
+from leapp.actors import Actor
+from leapp.libraries.actor import updateyumvars
+from leapp.tags import ThirdPartyApplicationsPhaseTag, IPUWorkflowTag
+
+
+class UpdateYumVars(Actor):
+ """
+ Update the files corresponding to the current major
+ OS version in the /etc/yum/vars folder.
+ """
+
+ name = 'update_yum_vars'
+ consumes = ()
+ produces = ()
+ tags = (ThirdPartyApplicationsPhaseTag, IPUWorkflowTag)
+
+ def process(self):
+ updateyumvars.vars_update()
diff --git a/repos/system_upgrade/el7toel8/actors/updateyumvars/libraries/updateyumvars.py b/repos/system_upgrade/el7toel8/actors/updateyumvars/libraries/updateyumvars.py
new file mode 100644
index 0000000..b77f784
--- /dev/null
+++ b/repos/system_upgrade/el7toel8/actors/updateyumvars/libraries/updateyumvars.py
@@ -0,0 +1,23 @@
+import os
+
+from leapp.libraries.stdlib import api
+
+VAR_FOLDER = "/etc/yum/vars"
+
+
+def vars_update():
+ """ Iterate through and modify the variables. """
+ if not os.path.isdir(VAR_FOLDER):
+ api.current_logger().debug(
+ "The {} directory doesn't exist. Nothing to do.".format(VAR_FOLDER)
+ )
+ return
+
+ for varfile_name in os.listdir(VAR_FOLDER):
+ # cp_centos_major_version contains the current OS' major version.
+ if varfile_name == 'cp_centos_major_version':
+ varfile_path = os.path.join(VAR_FOLDER, varfile_name)
+
+ with open(varfile_path, 'w') as varfile:
+ # Overwrite the value from outdated "7".
+ varfile.write('8')

View File

@ -43,7 +43,7 @@ py2_byte_compile "%1" "%2"}
Epoch: 1
Name: leapp-repository
Version: 0.16.0
Release: 6%{?dist}.elevate.5
Release: 6%{?dist}.elevate.6
Summary: Repositories for leapp
License: ASL 2.0