forked from rpms/leapp-repository
Update ELevate patch
This commit is contained in:
parent
2d63448e48
commit
20bd4411b5
@ -1165,22 +1165,24 @@ index 0000000..1b1ffbc
|
|||||||
+ checkpanelmemory.process()
|
+ checkpanelmemory.process()
|
||||||
diff --git a/repos/system_upgrade/cloudlinux/actors/checkpanelmemory/libraries/checkpanelmemory.py b/repos/system_upgrade/cloudlinux/actors/checkpanelmemory/libraries/checkpanelmemory.py
|
diff --git a/repos/system_upgrade/cloudlinux/actors/checkpanelmemory/libraries/checkpanelmemory.py b/repos/system_upgrade/cloudlinux/actors/checkpanelmemory/libraries/checkpanelmemory.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..3d77ec1
|
index 0000000..81c6566
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/repos/system_upgrade/cloudlinux/actors/checkpanelmemory/libraries/checkpanelmemory.py
|
+++ b/repos/system_upgrade/cloudlinux/actors/checkpanelmemory/libraries/checkpanelmemory.py
|
||||||
@@ -0,0 +1,55 @@
|
@@ -0,0 +1,57 @@
|
||||||
+from leapp import reporting
|
+from leapp import reporting
|
||||||
+from leapp.exceptions import StopActorExecutionError
|
+from leapp.exceptions import StopActorExecutionError
|
||||||
+from leapp.libraries.stdlib import api
|
+from leapp.libraries.stdlib import api
|
||||||
+from leapp.models import MemoryInfo, InstalledControlPanel
|
+from leapp.models import MemoryInfo, InstalledControlPanel
|
||||||
+
|
+
|
||||||
+from leapp.libraries.common.detectcontrolpanel import (
|
+from leapp.libraries.common.detectcontrolpanel import (
|
||||||
|
+ NOPANEL_NAME,
|
||||||
+ UNKNOWN_NAME,
|
+ UNKNOWN_NAME,
|
||||||
+ INTEGRATED_NAME,
|
+ INTEGRATED_NAME,
|
||||||
+ CPANEL_NAME,
|
+ CPANEL_NAME,
|
||||||
+)
|
+)
|
||||||
+
|
+
|
||||||
+required_memory = {
|
+required_memory = {
|
||||||
|
+ NOPANEL_NAME: 1536 * 1024, # 1.5 Gb
|
||||||
+ UNKNOWN_NAME: 1536 * 1024, # 1.5 Gb
|
+ UNKNOWN_NAME: 1536 * 1024, # 1.5 Gb
|
||||||
+ INTEGRATED_NAME: 1536 * 1024, # 1.5 Gb
|
+ INTEGRATED_NAME: 1536 * 1024, # 1.5 Gb
|
||||||
+ CPANEL_NAME: 2048 * 1024, # 2 Gb
|
+ CPANEL_NAME: 2048 * 1024, # 2 Gb
|
||||||
@ -1832,10 +1834,10 @@ index 0000000..1d5e4a0
|
|||||||
+ ))
|
+ ))
|
||||||
diff --git a/repos/system_upgrade/cloudlinux/actors/detectcontrolpanel/actor.py b/repos/system_upgrade/cloudlinux/actors/detectcontrolpanel/actor.py
|
diff --git a/repos/system_upgrade/cloudlinux/actors/detectcontrolpanel/actor.py b/repos/system_upgrade/cloudlinux/actors/detectcontrolpanel/actor.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..4eed3ec
|
index 0000000..75904d9
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/repos/system_upgrade/cloudlinux/actors/detectcontrolpanel/actor.py
|
+++ b/repos/system_upgrade/cloudlinux/actors/detectcontrolpanel/actor.py
|
||||||
@@ -0,0 +1,53 @@
|
@@ -0,0 +1,54 @@
|
||||||
+from leapp.actors import Actor
|
+from leapp.actors import Actor
|
||||||
+from leapp import reporting
|
+from leapp import reporting
|
||||||
+from leapp.reporting import Report
|
+from leapp.reporting import Report
|
||||||
@ -1845,6 +1847,7 @@ index 0000000..4eed3ec
|
|||||||
+
|
+
|
||||||
+from leapp.libraries.common.cllaunch import run_on_cloudlinux
|
+from leapp.libraries.common.cllaunch import run_on_cloudlinux
|
||||||
+from leapp.libraries.common.detectcontrolpanel import (
|
+from leapp.libraries.common.detectcontrolpanel import (
|
||||||
|
+ NOPANEL_NAME,
|
||||||
+ UNKNOWN_NAME,
|
+ UNKNOWN_NAME,
|
||||||
+ INTEGRATED_NAME,
|
+ INTEGRATED_NAME,
|
||||||
+ CPANEL_NAME,
|
+ CPANEL_NAME,
|
||||||
@ -1869,7 +1872,7 @@ index 0000000..4eed3ec
|
|||||||
+
|
+
|
||||||
+ if panel.name == CPANEL_NAME:
|
+ if panel.name == CPANEL_NAME:
|
||||||
+ self.log.debug('cPanel detected, upgrade proceeding')
|
+ self.log.debug('cPanel detected, upgrade proceeding')
|
||||||
+ elif panel.name == INTEGRATED_NAME or panel.name == UNKNOWN_NAME:
|
+ elif panel.name == INTEGRATED_NAME or panel.name == UNKNOWN_NAME or panel.name == NOPANEL_NAME:
|
||||||
+ self.log.debug('Integrated/no panel detected, upgrade proceeding')
|
+ self.log.debug('Integrated/no panel detected, upgrade proceeding')
|
||||||
+ elif panel:
|
+ elif panel:
|
||||||
+ # Block the upgrade on any systems with a non-supported panel detected.
|
+ # Block the upgrade on any systems with a non-supported panel detected.
|
||||||
@ -2024,21 +2027,23 @@ index 0000000..358403b
|
|||||||
+ )
|
+ )
|
||||||
diff --git a/repos/system_upgrade/cloudlinux/actors/replacerpmnewconfigs/actor.py b/repos/system_upgrade/cloudlinux/actors/replacerpmnewconfigs/actor.py
|
diff --git a/repos/system_upgrade/cloudlinux/actors/replacerpmnewconfigs/actor.py b/repos/system_upgrade/cloudlinux/actors/replacerpmnewconfigs/actor.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..4ddb755
|
index 0000000..56cce4f
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/repos/system_upgrade/cloudlinux/actors/replacerpmnewconfigs/actor.py
|
+++ b/repos/system_upgrade/cloudlinux/actors/replacerpmnewconfigs/actor.py
|
||||||
@@ -0,0 +1,65 @@
|
@@ -0,0 +1,81 @@
|
||||||
+from __future__ import print_function
|
+from __future__ import print_function
|
||||||
+import os
|
+import os
|
||||||
+import fileinput
|
+import fileinput
|
||||||
+
|
+
|
||||||
+from leapp.actors import Actor
|
+from leapp.actors import Actor
|
||||||
+from leapp.tags import FirstBootPhaseTag, IPUWorkflowTag
|
+from leapp.tags import ApplicationsPhaseTag, IPUWorkflowTag
|
||||||
+from leapp import reporting
|
+from leapp import reporting
|
||||||
|
+from leapp.reporting import Report
|
||||||
+from leapp.libraries.common.cllaunch import run_on_cloudlinux
|
+from leapp.libraries.common.cllaunch import run_on_cloudlinux
|
||||||
+
|
+
|
||||||
+REPO_DIR = '/etc/yum.repos.d'
|
+REPO_DIR = '/etc/yum.repos.d'
|
||||||
+CL_MARKERS = ['cloudlinux', 'imunify']
|
+REPO_DELETE_MARKERS = ['cloudlinux', 'imunify', 'epel']
|
||||||
|
+REPO_BACKUP_MARKERS = []
|
||||||
+RPMNEW = '.rpmnew'
|
+RPMNEW = '.rpmnew'
|
||||||
+LEAPP_BACKUP_SUFFIX = '.leapp-backup'
|
+LEAPP_BACKUP_SUFFIX = '.leapp-backup'
|
||||||
+
|
+
|
||||||
@ -2050,16 +2055,27 @@ index 0000000..4ddb755
|
|||||||
+
|
+
|
||||||
+ name = 'replace_rpmnew_configs'
|
+ name = 'replace_rpmnew_configs'
|
||||||
+ consumes = ()
|
+ consumes = ()
|
||||||
+ produces = ()
|
+ produces = (Report,)
|
||||||
+ tags = (FirstBootPhaseTag, IPUWorkflowTag)
|
+ tags = (ApplicationsPhaseTag, IPUWorkflowTag)
|
||||||
+
|
+
|
||||||
+ @run_on_cloudlinux
|
+ @run_on_cloudlinux
|
||||||
+ def process(self):
|
+ def process(self):
|
||||||
|
+ deleted_repofiles = []
|
||||||
+ renamed_repofiles = []
|
+ renamed_repofiles = []
|
||||||
+
|
+
|
||||||
+ for reponame in os.listdir(REPO_DIR):
|
+ for reponame in os.listdir(REPO_DIR):
|
||||||
+ if any(mark in reponame for mark in CL_MARKERS) and RPMNEW in reponame:
|
+ if any(mark in reponame for mark in REPO_DELETE_MARKERS) and RPMNEW in reponame:
|
||||||
+ base_reponame = reponame[:-7]
|
+ base_reponame = reponame[:-len(RPMNEW)]
|
||||||
|
+ base_path = os.path.join(REPO_DIR, base_reponame)
|
||||||
|
+ new_file_path = os.path.join(REPO_DIR, reponame)
|
||||||
|
+
|
||||||
|
+ os.unlink(base_path)
|
||||||
|
+ os.rename(new_file_path, base_path)
|
||||||
|
+ deleted_repofiles.append(base_reponame)
|
||||||
|
+ self.log.debug('Yum repofile replaced: {}'.format(base_path))
|
||||||
|
+
|
||||||
|
+ if any(mark in reponame for mark in REPO_BACKUP_MARKERS) and RPMNEW in reponame:
|
||||||
|
+ base_reponame = reponame[:-len(RPMNEW)]
|
||||||
+ base_path = os.path.join(REPO_DIR, base_reponame)
|
+ base_path = os.path.join(REPO_DIR, base_reponame)
|
||||||
+ new_file_path = os.path.join(REPO_DIR, reponame)
|
+ new_file_path = os.path.join(REPO_DIR, reponame)
|
||||||
+ backup_path = os.path.join(REPO_DIR, base_reponame + LEAPP_BACKUP_SUFFIX)
|
+ backup_path = os.path.join(REPO_DIR, base_reponame + LEAPP_BACKUP_SUFFIX)
|
||||||
@ -2067,6 +2083,7 @@ index 0000000..4ddb755
|
|||||||
+ os.rename(base_path, backup_path)
|
+ os.rename(base_path, backup_path)
|
||||||
+ os.rename(new_file_path, base_path)
|
+ os.rename(new_file_path, base_path)
|
||||||
+ renamed_repofiles.append(base_reponame)
|
+ renamed_repofiles.append(base_reponame)
|
||||||
|
+ self.log.debug('Yum repofile replaced with backup: {}'.format(base_path))
|
||||||
+
|
+
|
||||||
+ # Disable any old repositories.
|
+ # Disable any old repositories.
|
||||||
+ for reponame in os.listdir(REPO_DIR):
|
+ for reponame in os.listdir(REPO_DIR):
|
||||||
@ -2078,17 +2095,19 @@ index 0000000..4ddb755
|
|||||||
+ else:
|
+ else:
|
||||||
+ print(line, end='')
|
+ print(line, end='')
|
||||||
+
|
+
|
||||||
+ if renamed_repofiles:
|
+ if renamed_repofiles or deleted_repofiles:
|
||||||
+ replaced_string = '\n'.join(['- {}'.format(repofile_name) for repofile_name in renamed_repofiles])
|
+ deleted_string = '\n'.join(['{}'.format(repofile_name) for repofile_name in deleted_repofiles])
|
||||||
|
+ replaced_string = '\n'.join(['{}'.format(repofile_name) for repofile_name in renamed_repofiles])
|
||||||
+ reporting.create_report([
|
+ reporting.create_report([
|
||||||
+ reporting.Title('CloudLinux repository config files replaced by updated versions'),
|
+ reporting.Title('CloudLinux repository config files replaced by updated versions'),
|
||||||
+ reporting.Summary(
|
+ reporting.Summary(
|
||||||
+ 'One or more RPM repository configuration files related to CloudLinux '
|
+ 'One or more RPM repository configuration files '
|
||||||
+ 'have been replaced with new versions provided by the upgraded packages. '
|
+ 'have been replaced with new versions provided by the upgraded packages. '
|
||||||
+ 'Any manual modifications to these files have been overriden by this process. '
|
+ 'Any manual modifications to these files have been overriden by this process. '
|
||||||
+ 'Old versions of files were backed up to files with a naming pattern '
|
+ 'Old versions of backed up files are contained in files with a naming pattern '
|
||||||
+ '<repository_file_name>.leapp-backup. '
|
+ '<repository_file_name>.leapp-backup. '
|
||||||
+ 'Replaced repository files: \n{}'.format(replaced_string)
|
+ 'Deleted repository files: \n{}\n'
|
||||||
|
+ 'Backed up repository files: \n{}'.format(deleted_string, replaced_string)
|
||||||
+ ),
|
+ ),
|
||||||
+ reporting.Severity(reporting.Severity.MEDIUM),
|
+ reporting.Severity(reporting.Severity.MEDIUM),
|
||||||
+ reporting.Tags([reporting.Tags.UPGRADE_PROCESS])
|
+ reporting.Tags([reporting.Tags.UPGRADE_PROCESS])
|
||||||
@ -2126,15 +2145,17 @@ index 0000000..21b2164
|
|||||||
+ f.writelines(config_data)
|
+ f.writelines(config_data)
|
||||||
diff --git a/repos/system_upgrade/cloudlinux/actors/restoremysqldata/actor.py b/repos/system_upgrade/cloudlinux/actors/restoremysqldata/actor.py
|
diff --git a/repos/system_upgrade/cloudlinux/actors/restoremysqldata/actor.py b/repos/system_upgrade/cloudlinux/actors/restoremysqldata/actor.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..d1ec819
|
index 0000000..8e27d99
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/repos/system_upgrade/cloudlinux/actors/restoremysqldata/actor.py
|
+++ b/repos/system_upgrade/cloudlinux/actors/restoremysqldata/actor.py
|
||||||
@@ -0,0 +1,22 @@
|
@@ -0,0 +1,46 @@
|
||||||
+import os
|
+import os
|
||||||
+from leapp.actors import Actor
|
+from leapp.actors import Actor
|
||||||
|
+from leapp import reporting
|
||||||
|
+from leapp.models import Report
|
||||||
+from leapp.tags import ThirdPartyApplicationsPhaseTag, IPUWorkflowTag
|
+from leapp.tags import ThirdPartyApplicationsPhaseTag, IPUWorkflowTag
|
||||||
+from leapp.libraries.common.cllaunch import run_on_cloudlinux
|
+from leapp.libraries.common.cllaunch import run_on_cloudlinux
|
||||||
+from leapp.libraries.common.backup import restore_file, CLSQL_BACKUP_FILES
|
+from leapp.libraries.common.backup import restore_file, CLSQL_BACKUP_FILES, BACKUP_DIR
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
+class RestoreMySqlData(Actor):
|
+class RestoreMySqlData(Actor):
|
||||||
@ -2144,14 +2165,36 @@ index 0000000..d1ec819
|
|||||||
+
|
+
|
||||||
+ name = 'restore_my_sql_data'
|
+ name = 'restore_my_sql_data'
|
||||||
+ consumes = ()
|
+ consumes = ()
|
||||||
+ produces = ()
|
+ produces = (Report,)
|
||||||
+ tags = (ThirdPartyApplicationsPhaseTag, IPUWorkflowTag)
|
+ tags = (ThirdPartyApplicationsPhaseTag, IPUWorkflowTag)
|
||||||
+
|
+
|
||||||
+ @run_on_cloudlinux
|
+ @run_on_cloudlinux
|
||||||
+ def process(self):
|
+ def process(self):
|
||||||
+ for filename in CLSQL_BACKUP_FILES:
|
+ failed_files = []
|
||||||
+ if os.path.isfile(filename):
|
+
|
||||||
+ restore_file(filename, os.path.basename(filename))
|
+ for filepath in CLSQL_BACKUP_FILES:
|
||||||
|
+ try:
|
||||||
|
+ restore_file(os.path.basename(filepath), filepath)
|
||||||
|
+ except OSError as e:
|
||||||
|
+ failed_files.append(filepath)
|
||||||
|
+ self.log.error('Could not restore file {}: {}'.format(filepath, e.strerror))
|
||||||
|
+
|
||||||
|
+ if failed_files:
|
||||||
|
+ title = "Failed to restore backed up configuration files"
|
||||||
|
+ summary = (
|
||||||
|
+ "Some backed up configuration files were unable to be restored automatically."
|
||||||
|
+ " Please check the upgrade log for detailed error descriptions"
|
||||||
|
+ " and restore the files from the backup directory {} manually if needed."
|
||||||
|
+ " Files not restored: {}".format(BACKUP_DIR, failed_files)
|
||||||
|
+ )
|
||||||
|
+ reporting.create_report(
|
||||||
|
+ [
|
||||||
|
+ reporting.Title(title),
|
||||||
|
+ reporting.Summary(summary),
|
||||||
|
+ reporting.Severity(reporting.Severity.HIGH),
|
||||||
|
+ reporting.Tags([reporting.Tags.UPGRADE_PROCESS]),
|
||||||
|
+ ]
|
||||||
|
+ )
|
||||||
diff --git a/repos/system_upgrade/cloudlinux/actors/scancontrolpanel/actor.py b/repos/system_upgrade/cloudlinux/actors/scancontrolpanel/actor.py
|
diff --git a/repos/system_upgrade/cloudlinux/actors/scancontrolpanel/actor.py b/repos/system_upgrade/cloudlinux/actors/scancontrolpanel/actor.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..96524ed
|
index 0000000..96524ed
|
||||||
@ -2507,22 +2550,23 @@ index 0000000..f04f6c5
|
|||||||
+ return None
|
+ return None
|
||||||
diff --git a/repos/system_upgrade/cloudlinux/libraries/detectcontrolpanel.py b/repos/system_upgrade/cloudlinux/libraries/detectcontrolpanel.py
|
diff --git a/repos/system_upgrade/cloudlinux/libraries/detectcontrolpanel.py b/repos/system_upgrade/cloudlinux/libraries/detectcontrolpanel.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..15b797a
|
index 0000000..7c92f10
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/repos/system_upgrade/cloudlinux/libraries/detectcontrolpanel.py
|
+++ b/repos/system_upgrade/cloudlinux/libraries/detectcontrolpanel.py
|
||||||
@@ -0,0 +1,68 @@
|
@@ -0,0 +1,69 @@
|
||||||
+import os
|
+import os
|
||||||
+import os.path
|
+import os.path
|
||||||
+
|
+
|
||||||
+from leapp.libraries.stdlib import api
|
+from leapp.libraries.stdlib import api
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
|
+NOPANEL_NAME = 'No panel'
|
||||||
+CPANEL_NAME = 'cPanel'
|
+CPANEL_NAME = 'cPanel'
|
||||||
+DIRECTADMIN_NAME = 'DirectAdmin'
|
+DIRECTADMIN_NAME = 'DirectAdmin'
|
||||||
+PLESK_NAME = 'Plesk'
|
+PLESK_NAME = 'Plesk'
|
||||||
+ISPMANAGER_NAME = 'ISPManager'
|
+ISPMANAGER_NAME = 'ISPManager'
|
||||||
+INTERWORX_NAME = 'InterWorx'
|
+INTERWORX_NAME = 'InterWorx'
|
||||||
+UNKNOWN_NAME = 'Unknown'
|
+UNKNOWN_NAME = 'Unknown (legacy)'
|
||||||
+INTEGRATED_NAME = 'Integrated'
|
+INTEGRATED_NAME = 'Integrated'
|
||||||
+
|
+
|
||||||
+CLSYSCONFIG = '/etc/sysconfig/cloudlinux'
|
+CLSYSCONFIG = '/etc/sysconfig/cloudlinux'
|
||||||
@ -2558,7 +2602,7 @@ index 0000000..15b797a
|
|||||||
+ This function will try to detect control panels supported by CloudLinux
|
+ This function will try to detect control panels supported by CloudLinux
|
||||||
+ :return: Detected control panel name or None
|
+ :return: Detected control panel name or None
|
||||||
+ """
|
+ """
|
||||||
+ panel_name = None
|
+ panel_name = NOPANEL_NAME
|
||||||
+ if os.path.isfile('/opt/cpvendor/etc/integration.ini'):
|
+ if os.path.isfile('/opt/cpvendor/etc/integration.ini'):
|
||||||
+ panel_name = INTEGRATED_NAME
|
+ panel_name = INTEGRATED_NAME
|
||||||
+ elif os.path.isfile('/usr/local/cpanel/cpanel'):
|
+ elif os.path.isfile('/usr/local/cpanel/cpanel'):
|
||||||
@ -2653,7 +2697,7 @@ index bb89c9f..2b8e7c8 100644
|
|||||||
'--args',
|
'--args',
|
||||||
diff --git a/repos/system_upgrade/common/actors/checkenabledvendorrepos/actor.py b/repos/system_upgrade/common/actors/checkenabledvendorrepos/actor.py
|
diff --git a/repos/system_upgrade/common/actors/checkenabledvendorrepos/actor.py b/repos/system_upgrade/common/actors/checkenabledvendorrepos/actor.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..5284aec
|
index 0000000..52f5af9
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/repos/system_upgrade/common/actors/checkenabledvendorrepos/actor.py
|
+++ b/repos/system_upgrade/common/actors/checkenabledvendorrepos/actor.py
|
||||||
@@ -0,0 +1,53 @@
|
@@ -0,0 +1,53 @@
|
||||||
@ -2669,7 +2713,7 @@ index 0000000..5284aec
|
|||||||
+
|
+
|
||||||
+class CheckEnabledVendorRepos(Actor):
|
+class CheckEnabledVendorRepos(Actor):
|
||||||
+ """
|
+ """
|
||||||
+ Create a list of vendors whose repositories are present on the system.
|
+ Create a list of vendors whose repositories are present on the system and enabled.
|
||||||
+ Only those vendors' configurations (new repositories, PES actions, etc.)
|
+ Only those vendors' configurations (new repositories, PES actions, etc.)
|
||||||
+ will be included in the upgrade process.
|
+ will be included in the upgrade process.
|
||||||
+ """
|
+ """
|
||||||
@ -2683,24 +2727,24 @@ index 0000000..5284aec
|
|||||||
+ vendor_mapping_data = {}
|
+ vendor_mapping_data = {}
|
||||||
+ active_vendors = set()
|
+ active_vendors = set()
|
||||||
+
|
+
|
||||||
+ # Make a dict for easy lookup of repoid -> vendor name.
|
+ # Make a dict for easy mapping of repoid -> corresponding vendor name.
|
||||||
+ for vendor_src_repodata in api.consume(VendorSourceRepos):
|
+ for vendor_src_repodata in api.consume(VendorSourceRepos):
|
||||||
+ for vendor_src_repo in vendor_src_repodata.source_repoids:
|
+ for vendor_src_repo in vendor_src_repodata.source_repoids:
|
||||||
+ vendor_mapping_data[vendor_src_repo] = vendor_src_repodata.vendor
|
+ vendor_mapping_data[vendor_src_repo] = vendor_src_repodata.vendor
|
||||||
+
|
+
|
||||||
+ # Is the repo listed in the vendor map as from_repoid present on the system?
|
+ # Is the repo listed in the vendor map as from_repoid present on the system?
|
||||||
+ for repos in api.consume(RepositoriesFacts):
|
+ for repos_facts in api.consume(RepositoriesFacts):
|
||||||
+ for repo_file in repos.repositories:
|
+ for repo_file in repos_facts.repositories:
|
||||||
+ for repo in repo_file.data:
|
+ for repo_data in repo_file.data:
|
||||||
+ self.log.debug(
|
+ self.log.debug(
|
||||||
+ "Looking for repository {} in vendor maps".format(repo.repoid)
|
+ "Looking for repository {} in vendor maps".format(repo_data.repoid)
|
||||||
+ )
|
+ )
|
||||||
+ if repo.repoid in vendor_mapping_data:
|
+ if repo_data.enabled and repo_data.repoid in vendor_mapping_data:
|
||||||
+ # If the vendor's repository is present in the system, count the vendor as active.
|
+ # If the vendor's repository is present in the system and enabled, count the vendor as active.
|
||||||
+ new_vendor = vendor_mapping_data[repo.repoid]
|
+ new_vendor = vendor_mapping_data[repo_data.repoid]
|
||||||
+ self.log.debug(
|
+ self.log.debug(
|
||||||
+ "Repository {} found, enabling vendor {}".format(
|
+ "Repository {} found and enabled, enabling vendor {}".format(
|
||||||
+ repo.repoid, new_vendor
|
+ repo_data.repoid, new_vendor
|
||||||
+ )
|
+ )
|
||||||
+ )
|
+ )
|
||||||
+ active_vendors.add(new_vendor)
|
+ active_vendors.add(new_vendor)
|
||||||
@ -2710,6 +2754,37 @@ index 0000000..5284aec
|
|||||||
+ api.produce(ActiveVendorList(data=list(active_vendors)))
|
+ api.produce(ActiveVendorList(data=list(active_vendors)))
|
||||||
+ else:
|
+ else:
|
||||||
+ self.log.info("No active vendors found, vendor list not generated")
|
+ self.log.info("No active vendors found, vendor list not generated")
|
||||||
|
diff --git a/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py b/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py
|
||||||
|
index ed5089e..8cf4b75 100644
|
||||||
|
--- a/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py
|
||||||
|
+++ b/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py
|
||||||
|
@@ -1,22 +1,21 @@
|
||||||
|
from leapp import reporting
|
||||||
|
from leapp.models import PkgManagerInfo, RHUIInfo
|
||||||
|
from leapp.libraries.stdlib import api
|
||||||
|
+from leapp.libraries.common.config.version import get_target_major_version
|
||||||
|
|
||||||
|
|
||||||
|
def handle_etc_releasever():
|
||||||
|
|
||||||
|
- target_version = api.current_actor().configuration.version.target
|
||||||
|
+ target_version = get_target_major_version()
|
||||||
|
reporting.create_report([
|
||||||
|
reporting.Title(
|
||||||
|
- 'Release version in /etc/dnf/vars/releasever will be set to the current target release'
|
||||||
|
+ 'Release version in /etc/dnf/vars/releasever will be set to the major target release'
|
||||||
|
),
|
||||||
|
reporting.Summary(
|
||||||
|
'On this system, Leapp detected "releasever" variable is either configured through DNF/YUM configuration '
|
||||||
|
'file and/or the system is using RHUI infrastructure. In order to avoid issues with repofile URLs '
|
||||||
|
'(when --release option is not provided) in cases where there is the previous major.minor version value '
|
||||||
|
- 'in the configuration, release version will be set to the target release version ({}). This will also '
|
||||||
|
- 'ensure the system stays on the target version after the upgrade. In order to enable latest minor version '
|
||||||
|
- 'updates, you can remove "/etc/dnf/vars/releasever" file.'.format(
|
||||||
|
+ 'in the configuration, release version will be set to the major target release version ({}).'.format(
|
||||||
|
target_version
|
||||||
|
)
|
||||||
|
),
|
||||||
diff --git a/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh b/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh
|
diff --git a/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh b/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh
|
||||||
index acdb93b..da1e814 100755
|
index acdb93b..da1e814 100755
|
||||||
--- a/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh
|
--- a/repos/system_upgrade/common/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh
|
||||||
@ -3486,6 +3561,193 @@ index 01f6df3..9a4990e 100644
|
|||||||
|
|
||||||
self.produce(signed_pkgs)
|
self.produce(signed_pkgs)
|
||||||
self.produce(unsigned_pkgs)
|
self.produce(unsigned_pkgs)
|
||||||
|
diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/actor.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/actor.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..5674ee3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/actor.py
|
||||||
|
@@ -0,0 +1,24 @@
|
||||||
|
+from leapp.actors import Actor
|
||||||
|
+from leapp.libraries.actor import removeobsoleterpmgpgkeys
|
||||||
|
+from leapp.models import DNFWorkaround, InstalledRPM
|
||||||
|
+from leapp.tags import FactsPhaseTag, IPUWorkflowTag
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+class RemoveObsoleteGpgKeys(Actor):
|
||||||
|
+ """
|
||||||
|
+ Remove obsoleted RPM GPG keys.
|
||||||
|
+
|
||||||
|
+ New version might make existing RPM GPG keys obsolete. This might be caused
|
||||||
|
+ for example by the hashing algorithm becoming deprecated or by the key
|
||||||
|
+ getting replaced.
|
||||||
|
+
|
||||||
|
+ A DNFWorkaround is registered to actually remove the keys.
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ name = "remove_obsolete_gpg_keys"
|
||||||
|
+ consumes = (InstalledRPM,)
|
||||||
|
+ produces = (DNFWorkaround,)
|
||||||
|
+ tags = (FactsPhaseTag, IPUWorkflowTag)
|
||||||
|
+
|
||||||
|
+ def process(self):
|
||||||
|
+ removeobsoleterpmgpgkeys.process()
|
||||||
|
diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..11c61e3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py
|
||||||
|
@@ -0,0 +1,51 @@
|
||||||
|
+from leapp.libraries.common.config.version import get_target_major_version
|
||||||
|
+from leapp.libraries.common.rpms import has_package
|
||||||
|
+from leapp.libraries.stdlib import api
|
||||||
|
+from leapp.models import DNFWorkaround, InstalledRPM
|
||||||
|
+
|
||||||
|
+# maps target version to keys obsoleted in that version
|
||||||
|
+OBSOLETED_KEYS_MAP = {
|
||||||
|
+ 7: [],
|
||||||
|
+ 8: [
|
||||||
|
+ "gpg-pubkey-2fa658e0-45700c69",
|
||||||
|
+ "gpg-pubkey-37017186-45761324",
|
||||||
|
+ "gpg-pubkey-db42a60e-37ea5438",
|
||||||
|
+ ],
|
||||||
|
+ 9: [
|
||||||
|
+ "gpg-pubkey-d4082792-5b32db75",
|
||||||
|
+ "gpg-pubkey-3abb34f8-5ffd890e",
|
||||||
|
+ "gpg-pubkey-6275f250-5e26cb2e",
|
||||||
|
+ ],
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+def _get_obsolete_keys():
|
||||||
|
+ """
|
||||||
|
+ Return keys obsoleted in target and previous versions
|
||||||
|
+ """
|
||||||
|
+ keys = []
|
||||||
|
+ for version in range(7, int(get_target_major_version()) + 1):
|
||||||
|
+ for key in OBSOLETED_KEYS_MAP[version]:
|
||||||
|
+ name, version, release = key.rsplit("-", 2)
|
||||||
|
+ if has_package(InstalledRPM, name, version=version, release=release):
|
||||||
|
+ keys.append(key)
|
||||||
|
+
|
||||||
|
+ return keys
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+def register_dnfworkaround(keys):
|
||||||
|
+ api.produce(
|
||||||
|
+ DNFWorkaround(
|
||||||
|
+ display_name="remove obsolete RPM GPG keys from RPM DB",
|
||||||
|
+ script_path=api.current_actor().get_common_tool_path("removerpmgpgkeys"),
|
||||||
|
+ script_args=keys,
|
||||||
|
+ )
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+def process():
|
||||||
|
+ keys = _get_obsolete_keys()
|
||||||
|
+ if not keys:
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ register_dnfworkaround(keys)
|
||||||
|
diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..1d48781
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py
|
||||||
|
@@ -0,0 +1,94 @@
|
||||||
|
+import pytest
|
||||||
|
+
|
||||||
|
+from leapp.libraries.actor import removeobsoleterpmgpgkeys
|
||||||
|
+from leapp.libraries.common.config.version import get_target_major_version
|
||||||
|
+from leapp.libraries.common.rpms import has_package
|
||||||
|
+from leapp.libraries.common.testutils import CurrentActorMocked, produce_mocked
|
||||||
|
+from leapp.libraries.stdlib import api
|
||||||
|
+from leapp.models import DNFWorkaround, InstalledRPM, RPM
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+def _get_test_installedrpm():
|
||||||
|
+ return InstalledRPM(
|
||||||
|
+ items=[
|
||||||
|
+ RPM(
|
||||||
|
+ name='gpg-pubkey',
|
||||||
|
+ version='d4082792',
|
||||||
|
+ release='5b32db75',
|
||||||
|
+ epoch='0',
|
||||||
|
+ packager='Red Hat, Inc. (auxiliary key 2) <security@redhat.com>',
|
||||||
|
+ arch='noarch',
|
||||||
|
+ pgpsig=''
|
||||||
|
+ ),
|
||||||
|
+ RPM(
|
||||||
|
+ name='gpg-pubkey',
|
||||||
|
+ version='2fa658e0',
|
||||||
|
+ release='45700c69',
|
||||||
|
+ epoch='0',
|
||||||
|
+ packager='Red Hat, Inc. (auxiliary key) <security@redhat.com>',
|
||||||
|
+ arch='noarch',
|
||||||
|
+ pgpsig=''
|
||||||
|
+ ),
|
||||||
|
+ RPM(
|
||||||
|
+ name='gpg-pubkey',
|
||||||
|
+ version='12345678',
|
||||||
|
+ release='abcdefgh',
|
||||||
|
+ epoch='0',
|
||||||
|
+ packager='made up',
|
||||||
|
+ arch='noarch',
|
||||||
|
+ pgpsig=''
|
||||||
|
+ ),
|
||||||
|
+ ]
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+@pytest.mark.parametrize(
|
||||||
|
+ "version, expected",
|
||||||
|
+ [
|
||||||
|
+ (9, ["gpg-pubkey-d4082792-5b32db75", "gpg-pubkey-2fa658e0-45700c69"]),
|
||||||
|
+ (8, ["gpg-pubkey-2fa658e0-45700c69"])
|
||||||
|
+ ]
|
||||||
|
+)
|
||||||
|
+def test_get_obsolete_keys(monkeypatch, version, expected):
|
||||||
|
+ def get_target_major_version_mocked():
|
||||||
|
+ return version
|
||||||
|
+
|
||||||
|
+ monkeypatch.setattr(
|
||||||
|
+ removeobsoleterpmgpgkeys,
|
||||||
|
+ "get_target_major_version",
|
||||||
|
+ get_target_major_version_mocked,
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+ monkeypatch.setattr(
|
||||||
|
+ api,
|
||||||
|
+ "current_actor",
|
||||||
|
+ CurrentActorMocked(
|
||||||
|
+ msgs=[_get_test_installedrpm()]
|
||||||
|
+ ),
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+ keys = removeobsoleterpmgpgkeys._get_obsolete_keys()
|
||||||
|
+ assert set(keys) == set(expected)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+@pytest.mark.parametrize(
|
||||||
|
+ "keys, should_register",
|
||||||
|
+ [
|
||||||
|
+ (["gpg-pubkey-d4082792-5b32db75"], True),
|
||||||
|
+ ([], False)
|
||||||
|
+ ]
|
||||||
|
+)
|
||||||
|
+def test_workaround_should_register(monkeypatch, keys, should_register):
|
||||||
|
+ def get_obsolete_keys_mocked():
|
||||||
|
+ return keys
|
||||||
|
+
|
||||||
|
+ monkeypatch.setattr(
|
||||||
|
+ removeobsoleterpmgpgkeys,
|
||||||
|
+ '_get_obsolete_keys',
|
||||||
|
+ get_obsolete_keys_mocked
|
||||||
|
+ )
|
||||||
|
+ monkeypatch.setattr(api, 'produce', produce_mocked())
|
||||||
|
+ monkeypatch.setattr(api, "current_actor", CurrentActorMocked())
|
||||||
|
+
|
||||||
|
+ removeobsoleterpmgpgkeys.process()
|
||||||
|
+ assert api.produce.called == should_register
|
||||||
diff --git a/repos/system_upgrade/common/actors/repositoriesmapping/libraries/repositoriesmapping.py b/repos/system_upgrade/common/actors/repositoriesmapping/libraries/repositoriesmapping.py
|
diff --git a/repos/system_upgrade/common/actors/repositoriesmapping/libraries/repositoriesmapping.py b/repos/system_upgrade/common/actors/repositoriesmapping/libraries/repositoriesmapping.py
|
||||||
index b2d00f3..e9458c5 100644
|
index b2d00f3..e9458c5 100644
|
||||||
--- a/repos/system_upgrade/common/actors/repositoriesmapping/libraries/repositoriesmapping.py
|
--- a/repos/system_upgrade/common/actors/repositoriesmapping/libraries/repositoriesmapping.py
|
||||||
@ -4075,6 +4337,26 @@ index 0000000..cb5c7ab
|
|||||||
+ msg = "The {} file exists, but is empty. Nothing to do.".format(scancustomrepofile.CUSTOM_REPO_PATH)
|
+ msg = "The {} file exists, but is empty. Nothing to do.".format(scancustomrepofile.CUSTOM_REPO_PATH)
|
||||||
+ assert api.current_logger.infomsg == msg
|
+ assert api.current_logger.infomsg == msg
|
||||||
+ assert not api.produce.called
|
+ assert not api.produce.called
|
||||||
|
diff --git a/repos/system_upgrade/common/actors/setetcreleasever/libraries/setetcreleasever.py b/repos/system_upgrade/common/actors/setetcreleasever/libraries/setetcreleasever.py
|
||||||
|
index 73d1ffd..046f3fb 100644
|
||||||
|
--- a/repos/system_upgrade/common/actors/setetcreleasever/libraries/setetcreleasever.py
|
||||||
|
+++ b/repos/system_upgrade/common/actors/setetcreleasever/libraries/setetcreleasever.py
|
||||||
|
@@ -1,5 +1,6 @@
|
||||||
|
from leapp.libraries.stdlib import api
|
||||||
|
from leapp.models import PkgManagerInfo, RHUIInfo
|
||||||
|
+from leapp.libraries.common.config.version import get_target_major_version
|
||||||
|
|
||||||
|
|
||||||
|
def _set_releasever(releasever):
|
||||||
|
@@ -10,7 +11,7 @@ def _set_releasever(releasever):
|
||||||
|
|
||||||
|
|
||||||
|
def process():
|
||||||
|
- target_version = api.current_actor().configuration.version.target
|
||||||
|
+ target_version = get_target_major_version()
|
||||||
|
|
||||||
|
pkg_facts = next(api.consume(PkgManagerInfo), None)
|
||||||
|
rhui_facts = next(api.consume(RHUIInfo), None)
|
||||||
diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/actor.py b/repos/system_upgrade/common/actors/setuptargetrepos/actor.py
|
diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/actor.py b/repos/system_upgrade/common/actors/setuptargetrepos/actor.py
|
||||||
index 00de073..95cedcd 100644
|
index 00de073..95cedcd 100644
|
||||||
--- a/repos/system_upgrade/common/actors/setuptargetrepos/actor.py
|
--- a/repos/system_upgrade/common/actors/setuptargetrepos/actor.py
|
||||||
@ -4485,7 +4767,7 @@ index 03f3cd4..2ab78ea 100644
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py
|
diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py
|
||||||
index 4010e9f..09085c0 100644
|
index 4010e9f..f095575 100644
|
||||||
--- a/repos/system_upgrade/common/libraries/dnfplugin.py
|
--- a/repos/system_upgrade/common/libraries/dnfplugin.py
|
||||||
+++ b/repos/system_upgrade/common/libraries/dnfplugin.py
|
+++ b/repos/system_upgrade/common/libraries/dnfplugin.py
|
||||||
@@ -4,6 +4,8 @@ import json
|
@@ -4,6 +4,8 @@ import json
|
||||||
@ -4524,6 +4806,22 @@ index 4010e9f..09085c0 100644
|
|||||||
)
|
)
|
||||||
finally:
|
finally:
|
||||||
if stage == 'check':
|
if stage == 'check':
|
||||||
|
@@ -241,7 +251,14 @@ def apply_workarounds(context=None):
|
||||||
|
for workaround in api.consume(DNFWorkaround):
|
||||||
|
try:
|
||||||
|
api.show_message('Applying transaction workaround - {}'.format(workaround.display_name))
|
||||||
|
- context.call(['/bin/bash', '-c', workaround.script_path])
|
||||||
|
+ if workaround.script_args:
|
||||||
|
+ cmd_str = '{script} {args}'.format(
|
||||||
|
+ script=workaround.script_path,
|
||||||
|
+ args=' '.join(workaround.script_args)
|
||||||
|
+ )
|
||||||
|
+ else:
|
||||||
|
+ cmd_str = workaround.script_path
|
||||||
|
+ context.call(['/bin/bash', '-c', cmd_str])
|
||||||
|
except (OSError, CalledProcessError) as e:
|
||||||
|
raise StopActorExecutionError(
|
||||||
|
message=('Failed to exceute script to apply transaction workaround {display_name}.'
|
||||||
diff --git a/repos/system_upgrade/common/libraries/fetch.py b/repos/system_upgrade/common/libraries/fetch.py
|
diff --git a/repos/system_upgrade/common/libraries/fetch.py b/repos/system_upgrade/common/libraries/fetch.py
|
||||||
index 1c58148..37313b6 100644
|
index 1c58148..37313b6 100644
|
||||||
--- a/repos/system_upgrade/common/libraries/fetch.py
|
--- a/repos/system_upgrade/common/libraries/fetch.py
|
||||||
@ -4786,6 +5084,43 @@ index b7e4b21..dc038bf 100644
|
|||||||
|
|
||||||
|
|
||||||
def with_rhsm(f):
|
def with_rhsm(f):
|
||||||
|
diff --git a/repos/system_upgrade/common/libraries/rpms.py b/repos/system_upgrade/common/libraries/rpms.py
|
||||||
|
index 86767c7..1bc93ca 100644
|
||||||
|
--- a/repos/system_upgrade/common/libraries/rpms.py
|
||||||
|
+++ b/repos/system_upgrade/common/libraries/rpms.py
|
||||||
|
@@ -39,18 +39,28 @@ def create_lookup(model, field, keys, context=stdlib.api):
|
||||||
|
return set()
|
||||||
|
|
||||||
|
|
||||||
|
-def has_package(model, package_name, arch=None, context=stdlib.api):
|
||||||
|
+def has_package(model, package_name, arch=None, version=None, release=None, context=stdlib.api):
|
||||||
|
"""
|
||||||
|
Expects a model InstalledRedHatSignedRPM or InstalledUnsignedRPM.
|
||||||
|
Can be useful in cases like a quick item presence check, ex. check in actor that
|
||||||
|
a certain package is installed.
|
||||||
|
-
|
||||||
|
:param model: model class
|
||||||
|
:param package_name: package to be checked
|
||||||
|
:param arch: filter by architecture. None means all arches.
|
||||||
|
+ :param version: filter by version. None means all versions.
|
||||||
|
+ :param release: filter by release. None means all releases.
|
||||||
|
"""
|
||||||
|
if not (isinstance(model, type) and issubclass(model, InstalledRPM)):
|
||||||
|
return False
|
||||||
|
- keys = ('name',) if not arch else ('name', 'arch')
|
||||||
|
+ keys = ['name']
|
||||||
|
+ if arch:
|
||||||
|
+ keys.append('arch')
|
||||||
|
+ if version:
|
||||||
|
+ keys.append('version')
|
||||||
|
+ if release:
|
||||||
|
+ keys.append('release')
|
||||||
|
+
|
||||||
|
+ attributes = [package_name]
|
||||||
|
+ attributes += [attr for attr in (arch, version, release) if attr is not None]
|
||||||
|
rpm_lookup = create_lookup(model, field='items', keys=keys, context=context)
|
||||||
|
- return (package_name, arch) in rpm_lookup if arch else (package_name,) in rpm_lookup
|
||||||
|
+ return tuple(attributes) in rpm_lookup
|
||||||
diff --git a/repos/system_upgrade/common/libraries/utils.py b/repos/system_upgrade/common/libraries/utils.py
|
diff --git a/repos/system_upgrade/common/libraries/utils.py b/repos/system_upgrade/common/libraries/utils.py
|
||||||
index 6793de6..d201677 100644
|
index 6793de6..d201677 100644
|
||||||
--- a/repos/system_upgrade/common/libraries/utils.py
|
--- a/repos/system_upgrade/common/libraries/utils.py
|
||||||
@ -4818,6 +5153,33 @@ index 0000000..de4056f
|
|||||||
+class ActiveVendorList(Model):
|
+class ActiveVendorList(Model):
|
||||||
+ topic = VendorTopic
|
+ topic = VendorTopic
|
||||||
+ data = fields.List(fields.String())
|
+ data = fields.List(fields.String())
|
||||||
|
diff --git a/repos/system_upgrade/common/models/dnfworkaround.py b/repos/system_upgrade/common/models/dnfworkaround.py
|
||||||
|
index c921c5f..4a813dc 100644
|
||||||
|
--- a/repos/system_upgrade/common/models/dnfworkaround.py
|
||||||
|
+++ b/repos/system_upgrade/common/models/dnfworkaround.py
|
||||||
|
@@ -15,6 +15,20 @@ class DNFWorkaround(Model):
|
||||||
|
topic = SystemInfoTopic
|
||||||
|
|
||||||
|
script_path = fields.String()
|
||||||
|
- """ Absolute path to a bash script to execute """
|
||||||
|
+ """
|
||||||
|
+ Absolute path to a bash script to execute
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ script_args = fields.List(fields.String(), default=[])
|
||||||
|
+ """
|
||||||
|
+ Arguments with which the script should be executed
|
||||||
|
+
|
||||||
|
+ In case that an argument contains a whitespace or an escapable character,
|
||||||
|
+ the argument must be already treated correctly. e.g.
|
||||||
|
+ `script_args = ['-i', 'my\\ string']
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
display_name = fields.String()
|
||||||
|
- """ Name to display for this script when executed """
|
||||||
|
+ """
|
||||||
|
+ Name to display for this script when executed
|
||||||
|
+ """
|
||||||
diff --git a/repos/system_upgrade/common/models/installedrpm.py b/repos/system_upgrade/common/models/installedrpm.py
|
diff --git a/repos/system_upgrade/common/models/installedrpm.py b/repos/system_upgrade/common/models/installedrpm.py
|
||||||
index 28b0aba..e53ab93 100644
|
index 28b0aba..e53ab93 100644
|
||||||
--- a/repos/system_upgrade/common/models/installedrpm.py
|
--- a/repos/system_upgrade/common/models/installedrpm.py
|
||||||
@ -4901,6 +5263,25 @@ index 0000000..b7a219b
|
|||||||
+ topic = VendorTopic
|
+ topic = VendorTopic
|
||||||
+ vendor = fields.String()
|
+ vendor = fields.String()
|
||||||
+ source_repoids = fields.List(fields.String())
|
+ source_repoids = fields.List(fields.String())
|
||||||
|
diff --git a/repos/system_upgrade/common/tools/removerpmgpgkeys b/repos/system_upgrade/common/tools/removerpmgpgkeys
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..afe1906
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/repos/system_upgrade/common/tools/removerpmgpgkeys
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+#!/usr/bin/sh
|
||||||
|
+
|
||||||
|
+exit_code=0
|
||||||
|
+
|
||||||
|
+for key in "$@"; do
|
||||||
|
+ echo >&2 "Info: Removing RPM GPG key: $key"
|
||||||
|
+ rpm --erase "$key" || {
|
||||||
|
+ exit_code=1
|
||||||
|
+ echo >&2 "Error: Failed to remove RPM GPG key: $key"
|
||||||
|
+ }
|
||||||
|
+done
|
||||||
|
+
|
||||||
|
+exit $exit_code
|
||||||
diff --git a/repos/system_upgrade/common/topics/vendortopic.py b/repos/system_upgrade/common/topics/vendortopic.py
|
diff --git a/repos/system_upgrade/common/topics/vendortopic.py b/repos/system_upgrade/common/topics/vendortopic.py
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..014b7af
|
index 0000000..014b7af
|
||||||
@ -4913,7 +5294,7 @@ index 0000000..014b7af
|
|||||||
+class VendorTopic(Topic):
|
+class VendorTopic(Topic):
|
||||||
+ name = 'vendor_topic'
|
+ name = 'vendor_topic'
|
||||||
diff --git a/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py b/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py
|
diff --git a/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py b/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py
|
||||||
index 0c53950..7840219 100644
|
index 0c53950..33d7c1f 100644
|
||||||
--- a/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py
|
--- a/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py
|
||||||
+++ b/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py
|
+++ b/repos/system_upgrade/el7toel8/actors/checkleftoverpackages/actor.py
|
||||||
@@ -1,8 +1,24 @@
|
@@ -1,8 +1,24 @@
|
||||||
@ -4954,7 +5335,7 @@ index 0c53950..7840219 100644
|
|||||||
|
|
||||||
+ def skip_leftover_pkg(self, name, unsigned_set):
|
+ def skip_leftover_pkg(self, name, unsigned_set):
|
||||||
+ # Packages like these are expected to be not updated.
|
+ # Packages like these are expected to be not updated.
|
||||||
+ is_unsigned = name not in unsigned_set
|
+ is_unsigned = name in unsigned_set
|
||||||
+ # Packages like these are updated outside of Leapp.
|
+ # Packages like these are updated outside of Leapp.
|
||||||
+ is_external = name.startswith(CPANEL_SUFFIX)
|
+ is_external = name.startswith(CPANEL_SUFFIX)
|
||||||
+
|
+
|
||||||
|
@ -43,7 +43,7 @@ py2_byte_compile "%1" "%2"}
|
|||||||
Epoch: 1
|
Epoch: 1
|
||||||
Name: leapp-repository
|
Name: leapp-repository
|
||||||
Version: 0.16.0
|
Version: 0.16.0
|
||||||
Release: 6%{?dist}.elevate.9
|
Release: 6%{?dist}.elevate.10
|
||||||
Summary: Repositories for leapp
|
Summary: Repositories for leapp
|
||||||
|
|
||||||
License: ASL 2.0
|
License: ASL 2.0
|
||||||
|
Loading…
Reference in New Issue
Block a user