381 lines
18 KiB
Diff
381 lines
18 KiB
Diff
From b4c3de448324a35da8b92905c04cc169430cf4a0 Mon Sep 17 00:00:00 2001
|
|
From: PeterMocary <petermocary@gmail.com>
|
|
Date: Sun, 26 Jun 2022 13:56:24 +0200
|
|
Subject: [PATCH 16/32] Merge of the yumconfigscanner actor into the
|
|
scanpkgmanager actor
|
|
|
|
---
|
|
.../actors/checkyumpluginsenabled/actor.py | 8 ++--
|
|
.../libraries/checkyumpluginsenabled.py | 6 +--
|
|
.../tests/test_checkyumpluginsenabled.py | 6 +--
|
|
.../libraries/pluginscanner.py} | 48 +++++++------------
|
|
.../libraries/scanpkgmanager.py | 6 ++-
|
|
.../tests/test_pluginscanner.py} | 26 +++++-----
|
|
.../tests/test_scanpkgmanager.py | 2 +-
|
|
.../common/actors/yumconfigscanner/actor.py | 18 -------
|
|
.../common/models/packagemanagerinfo.py | 2 +
|
|
.../system_upgrade/common/models/yumconfig.py | 8 ----
|
|
10 files changed, 48 insertions(+), 82 deletions(-)
|
|
rename repos/system_upgrade/common/actors/{yumconfigscanner/libraries/yumconfigscanner.py => scanpkgmanager/libraries/pluginscanner.py} (56%)
|
|
rename repos/system_upgrade/common/actors/{yumconfigscanner/tests/test_yumconfigscanner.py => scanpkgmanager/tests/test_pluginscanner.py} (74%)
|
|
delete mode 100644 repos/system_upgrade/common/actors/yumconfigscanner/actor.py
|
|
delete mode 100644 repos/system_upgrade/common/models/yumconfig.py
|
|
|
|
diff --git a/repos/system_upgrade/common/actors/checkyumpluginsenabled/actor.py b/repos/system_upgrade/common/actors/checkyumpluginsenabled/actor.py
|
|
index c6872fa7..fbc2f8bc 100644
|
|
--- a/repos/system_upgrade/common/actors/checkyumpluginsenabled/actor.py
|
|
+++ b/repos/system_upgrade/common/actors/checkyumpluginsenabled/actor.py
|
|
@@ -1,6 +1,6 @@
|
|
from leapp.actors import Actor
|
|
from leapp.libraries.actor.checkyumpluginsenabled import check_required_yum_plugins_enabled
|
|
-from leapp.models import YumConfig
|
|
+from leapp.models import PkgManagerInfo
|
|
from leapp.reporting import Report
|
|
from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
|
|
|
|
@@ -11,10 +11,10 @@ class CheckYumPluginsEnabled(Actor):
|
|
"""
|
|
|
|
name = 'check_yum_plugins_enabled'
|
|
- consumes = (YumConfig,)
|
|
+ consumes = (PkgManagerInfo,)
|
|
produces = (Report,)
|
|
tags = (ChecksPhaseTag, IPUWorkflowTag)
|
|
|
|
def process(self):
|
|
- yum_config = next(self.consume(YumConfig))
|
|
- check_required_yum_plugins_enabled(yum_config)
|
|
+ pkg_manager_info = next(self.consume(PkgManagerInfo))
|
|
+ check_required_yum_plugins_enabled(pkg_manager_info)
|
|
diff --git a/repos/system_upgrade/common/actors/checkyumpluginsenabled/libraries/checkyumpluginsenabled.py b/repos/system_upgrade/common/actors/checkyumpluginsenabled/libraries/checkyumpluginsenabled.py
|
|
index 7c7398df..48f38d0a 100644
|
|
--- a/repos/system_upgrade/common/actors/checkyumpluginsenabled/libraries/checkyumpluginsenabled.py
|
|
+++ b/repos/system_upgrade/common/actors/checkyumpluginsenabled/libraries/checkyumpluginsenabled.py
|
|
@@ -10,16 +10,16 @@ REQUIRED_YUM_PLUGINS = {'subscription-manager', 'product-id'}
|
|
FMT_LIST_SEPARATOR = '\n - '
|
|
|
|
|
|
-def check_required_yum_plugins_enabled(yum_config):
|
|
+def check_required_yum_plugins_enabled(pkg_manager_info):
|
|
"""
|
|
Checks whether the yum plugins required by the IPU are enabled.
|
|
|
|
If they are not enabled, a report is produced informing the user about it.
|
|
|
|
- :param yum_config: YumConfig
|
|
+ :param pkg_manager_info: PkgManagerInfo
|
|
"""
|
|
|
|
- missing_required_plugins = REQUIRED_YUM_PLUGINS - set(yum_config.enabled_plugins)
|
|
+ missing_required_plugins = REQUIRED_YUM_PLUGINS - set(pkg_manager_info.enabled_plugins)
|
|
|
|
if skip_rhsm():
|
|
missing_required_plugins -= {'subscription-manager', 'product-id'}
|
|
diff --git a/repos/system_upgrade/common/actors/checkyumpluginsenabled/tests/test_checkyumpluginsenabled.py b/repos/system_upgrade/common/actors/checkyumpluginsenabled/tests/test_checkyumpluginsenabled.py
|
|
index 896d31d5..9bf9a3ba 100644
|
|
--- a/repos/system_upgrade/common/actors/checkyumpluginsenabled/tests/test_checkyumpluginsenabled.py
|
|
+++ b/repos/system_upgrade/common/actors/checkyumpluginsenabled/tests/test_checkyumpluginsenabled.py
|
|
@@ -4,7 +4,7 @@ from leapp import reporting
|
|
from leapp.libraries.actor.checkyumpluginsenabled import check_required_yum_plugins_enabled
|
|
from leapp.libraries.common.testutils import create_report_mocked, CurrentActorMocked
|
|
from leapp.libraries.stdlib import api
|
|
-from leapp.models import YumConfig
|
|
+from leapp.models import PkgManagerInfo
|
|
from leapp.utils.report import is_inhibitor
|
|
|
|
|
|
@@ -38,7 +38,7 @@ def test__create_report_mocked(monkeypatch):
|
|
|
|
def test_report_when_missing_required_plugins(monkeypatch):
|
|
"""Test whether a report entry is created when any of the required YUM plugins are missing."""
|
|
- yum_config = YumConfig(enabled_plugins=['product-id', 'some-user-plugin'])
|
|
+ yum_config = PkgManagerInfo(enabled_plugins=['product-id', 'some-user-plugin'])
|
|
|
|
actor_reports = create_report_mocked()
|
|
|
|
@@ -62,7 +62,7 @@ def test_nothing_is_reported_when_rhsm_disabled(monkeypatch):
|
|
monkeypatch.setattr(api, 'current_actor', actor_mocked)
|
|
monkeypatch.setattr(reporting, 'create_report', create_report_mocked())
|
|
|
|
- yum_config = YumConfig(enabled_plugins=[])
|
|
+ yum_config = PkgManagerInfo(enabled_plugins=[])
|
|
check_required_yum_plugins_enabled(yum_config)
|
|
|
|
assert not reporting.create_report.called, 'Report was created even if LEAPP_NO_RHSM was set'
|
|
diff --git a/repos/system_upgrade/common/actors/yumconfigscanner/libraries/yumconfigscanner.py b/repos/system_upgrade/common/actors/scanpkgmanager/libraries/pluginscanner.py
|
|
similarity index 56%
|
|
rename from repos/system_upgrade/common/actors/yumconfigscanner/libraries/yumconfigscanner.py
|
|
rename to repos/system_upgrade/common/actors/scanpkgmanager/libraries/pluginscanner.py
|
|
index 0b7d5fe6..7bb03996 100644
|
|
--- a/repos/system_upgrade/common/actors/yumconfigscanner/libraries/yumconfigscanner.py
|
|
+++ b/repos/system_upgrade/common/actors/scanpkgmanager/libraries/pluginscanner.py
|
|
@@ -1,26 +1,25 @@
|
|
import re
|
|
|
|
from leapp.libraries.common.config.version import get_source_major_version
|
|
-from leapp.libraries.stdlib import api, run
|
|
-from leapp.models import YumConfig
|
|
+from leapp.libraries.stdlib import run
|
|
|
|
# When the output spans multiple lines, each of the lines after the first one
|
|
# start with a ' <SPACES> : '
|
|
-YUM_LOADED_PLUGINS_NEXT_LINE_START = ' +: '
|
|
+LOADED_PLUGINS_NEXT_LINE_START = ' +: '
|
|
|
|
|
|
-def _parse_loaded_plugins(yum_output):
|
|
+def _parse_loaded_plugins(package_manager_output):
|
|
"""
|
|
- Retrieves a list of plugins that are being loaded when calling yum.
|
|
+ Retrieves a list of plugins that are being loaded when calling dnf/yum.
|
|
|
|
- :param dict yum_output: The result of running the yum command.
|
|
+ :param dict package_manager_output: The result of running the package manager command.
|
|
:rtype: list
|
|
- :returns: A list of plugins that are being loaded when calling yum.
|
|
+ :returns: A list of plugins that are being loaded by the package manager.
|
|
"""
|
|
- # YUM might break the information about loaded plugins into multiple lines,
|
|
+ # Package manager might break the information about loaded plugins into multiple lines,
|
|
# we need to concaternate the list ourselves
|
|
loaded_plugins_str = ''
|
|
- for line in yum_output['stdout']:
|
|
+ for line in package_manager_output['stdout']:
|
|
if line.startswith('Loaded plugins:'):
|
|
# We have found the first line that contains the plugins
|
|
plugins_on_this_line = line[16:] # Remove the `Loaded plugins: ` part
|
|
@@ -32,7 +31,7 @@ def _parse_loaded_plugins(yum_output):
|
|
continue
|
|
|
|
if loaded_plugins_str:
|
|
- if re.match(YUM_LOADED_PLUGINS_NEXT_LINE_START, line):
|
|
+ if re.match(LOADED_PLUGINS_NEXT_LINE_START, line):
|
|
# The list of plugins continues on this line
|
|
plugins_on_this_line = line.lstrip(' :') # Remove the leading spaces and semicolon
|
|
|
|
@@ -49,39 +48,28 @@ def _parse_loaded_plugins(yum_output):
|
|
return loaded_plugins_str.split(', ')
|
|
|
|
|
|
-def scan_enabled_yum_plugins():
|
|
+def scan_enabled_package_manager_plugins():
|
|
"""
|
|
- Runs the `yum` command and parses its output for enabled/loaded plugins.
|
|
+ Runs package manager (yum/dnf) command and parses its output for enabled/loaded plugins.
|
|
|
|
:return: A list of enabled plugins.
|
|
:rtype: List
|
|
"""
|
|
|
|
- # We rely on yum itself to report what plugins are used when it is invoked.
|
|
- # An alternative approach would be to check /usr/lib/yum-plugins/ (install
|
|
- # path for yum plugins) and parse corresponding configurations from
|
|
- # /etc/yum/pluginconf.d/
|
|
+ # We rely on package manager itself to report what plugins are used when it is invoked.
|
|
+ # An alternative approach would be to check the install path for package manager plugins
|
|
+ # and parse corresponding plugin configuration files.
|
|
|
|
if get_source_major_version() == '7':
|
|
# in case of yum, set debuglevel=2 to be sure the output is always
|
|
# same. The format of data is different for various debuglevels
|
|
- yum_cmd = ['yum', '--setopt=debuglevel=2']
|
|
+ cmd = ['yum', '--setopt=debuglevel=2']
|
|
else:
|
|
# the verbose mode in dnf always set particular debuglevel, so the
|
|
# output is not affected by the default debug level set on the
|
|
# system
|
|
- yum_cmd = ['dnf', '-v'] # On RHEL8 we need to supply an extra switch
|
|
+ cmd = ['dnf', '-v'] # On RHEL8 we need to supply an extra switch
|
|
|
|
- yum_output = run(yum_cmd, split=True, checked=False) # The yum command will certainly fail (does not matter).
|
|
+ pkg_manager_output = run(cmd, split=True, checked=False) # The command will certainly fail (does not matter).
|
|
|
|
- return _parse_loaded_plugins(yum_output)
|
|
-
|
|
-
|
|
-def scan_yum_config():
|
|
- """
|
|
- Scans the YUM configuration and produces :class:`YumConfig` message with the information found.
|
|
- """
|
|
- config = YumConfig()
|
|
- config.enabled_plugins = scan_enabled_yum_plugins()
|
|
-
|
|
- api.produce(config)
|
|
+ return _parse_loaded_plugins(pkg_manager_output)
|
|
diff --git a/repos/system_upgrade/common/actors/scanpkgmanager/libraries/scanpkgmanager.py b/repos/system_upgrade/common/actors/scanpkgmanager/libraries/scanpkgmanager.py
|
|
index 7c97fb1a..bf7ec0be 100644
|
|
--- a/repos/system_upgrade/common/actors/scanpkgmanager/libraries/scanpkgmanager.py
|
|
+++ b/repos/system_upgrade/common/actors/scanpkgmanager/libraries/scanpkgmanager.py
|
|
@@ -1,6 +1,7 @@
|
|
import os
|
|
import re
|
|
|
|
+from leapp.libraries.actor import pluginscanner
|
|
from leapp.libraries.common.config.version import get_source_major_version
|
|
from leapp.libraries.stdlib import api
|
|
from leapp.models import PkgManagerInfo
|
|
@@ -43,9 +44,9 @@ def _get_proxy_if_set(manager_config_path):
|
|
"""
|
|
Get proxy address from specified package manager config.
|
|
|
|
- :param manager_config_path: path to a package manager config
|
|
+ :param str manager_config_path: path to a package manager config
|
|
:returns: proxy address or None when not set
|
|
- :rtype: String
|
|
+ :rtype: str
|
|
"""
|
|
|
|
config = _get_config_contents(manager_config_path)
|
|
@@ -79,5 +80,6 @@ def process():
|
|
pkg_manager_info = PkgManagerInfo()
|
|
pkg_manager_info.etc_releasever = get_etc_releasever()
|
|
pkg_manager_info.configured_proxies = get_configured_proxies()
|
|
+ pkg_manager_info.enabled_plugins = pluginscanner.scan_enabled_package_manager_plugins()
|
|
|
|
api.produce(pkg_manager_info)
|
|
diff --git a/repos/system_upgrade/common/actors/yumconfigscanner/tests/test_yumconfigscanner.py b/repos/system_upgrade/common/actors/scanpkgmanager/tests/test_pluginscanner.py
|
|
similarity index 74%
|
|
rename from repos/system_upgrade/common/actors/yumconfigscanner/tests/test_yumconfigscanner.py
|
|
rename to repos/system_upgrade/common/actors/scanpkgmanager/tests/test_pluginscanner.py
|
|
index 8406ef00..f0260e54 100644
|
|
--- a/repos/system_upgrade/common/actors/yumconfigscanner/tests/test_yumconfigscanner.py
|
|
+++ b/repos/system_upgrade/common/actors/scanpkgmanager/tests/test_pluginscanner.py
|
|
@@ -1,6 +1,6 @@
|
|
import pytest
|
|
|
|
-from leapp.libraries.actor import yumconfigscanner
|
|
+from leapp.libraries.actor import pluginscanner
|
|
|
|
CMD_YUM_OUTPUT = '''Loaded plugins: langpacks, my plugin, subscription-manager, product-id
|
|
Usage: yum [options] COMMAND
|
|
@@ -16,23 +16,23 @@ Usage: yum [options] COMMAND
|
|
|
|
|
|
def assert_plugins_identified_as_enabled(expected_plugins, identified_plugins):
|
|
- fail_description = 'Failed to parse a plugin from the yum output.'
|
|
+ fail_description = 'Failed to parse a plugin from the package manager output.'
|
|
for expected_enabled_plugin in expected_plugins:
|
|
assert expected_enabled_plugin in identified_plugins, fail_description
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
- ('source_major_version', 'yum_command'),
|
|
+ ('source_major_version', 'command'),
|
|
[
|
|
('7', ['yum', '--setopt=debuglevel=2']),
|
|
('8', ['dnf', '-v']),
|
|
]
|
|
)
|
|
-def test_scan_enabled_plugins(monkeypatch, source_major_version, yum_command):
|
|
- """Tests whether the enabled plugins are correctly retrieved from the yum output."""
|
|
+def test_scan_enabled_plugins(monkeypatch, source_major_version, command):
|
|
+ """Tests whether the enabled plugins are correctly retrieved from the package manager output."""
|
|
|
|
def run_mocked(cmd, **kwargs):
|
|
- if cmd == yum_command:
|
|
+ if cmd == command:
|
|
return {
|
|
'stdout': CMD_YUM_OUTPUT.split('\n'),
|
|
'stderr': 'You need to give some command',
|
|
@@ -45,10 +45,10 @@ def test_scan_enabled_plugins(monkeypatch, source_major_version, yum_command):
|
|
|
|
# The library imports `run` all the way into its namespace (from ...stdlib import run),
|
|
# we must overwrite it there then:
|
|
- monkeypatch.setattr(yumconfigscanner, 'run', run_mocked)
|
|
- monkeypatch.setattr(yumconfigscanner, 'get_source_major_version', get_source_major_version_mocked)
|
|
+ monkeypatch.setattr(pluginscanner, 'run', run_mocked)
|
|
+ monkeypatch.setattr(pluginscanner, 'get_source_major_version', get_source_major_version_mocked)
|
|
|
|
- enabled_plugins = yumconfigscanner.scan_enabled_yum_plugins()
|
|
+ enabled_plugins = pluginscanner.scan_enabled_package_manager_plugins()
|
|
assert_plugins_identified_as_enabled(
|
|
['langpacks', 'my plugin', 'subscription-manager', 'product-id'],
|
|
enabled_plugins
|
|
@@ -63,7 +63,7 @@ def test_scan_enabled_plugins(monkeypatch, source_major_version, yum_command):
|
|
(CMD_YUM_OUTPUT_MULTILINE_BREAK_ON_WHITESPACE,)
|
|
])
|
|
def test_yum_loaded_plugins_multiline_output(yum_output, monkeypatch):
|
|
- """Tests whether the library correctly handles yum plugins getting reported on multiple lines."""
|
|
+ """Tests whether the library correctly handles plugins getting reported on multiple lines."""
|
|
def run_mocked(cmd, **kwargs):
|
|
return {
|
|
'stdout': yum_output.split('\n'),
|
|
@@ -71,10 +71,10 @@ def test_yum_loaded_plugins_multiline_output(yum_output, monkeypatch):
|
|
'exit_code': 1
|
|
}
|
|
|
|
- monkeypatch.setattr(yumconfigscanner, 'run', run_mocked)
|
|
- monkeypatch.setattr(yumconfigscanner, 'get_source_major_version', lambda: '7')
|
|
+ monkeypatch.setattr(pluginscanner, 'run', run_mocked)
|
|
+ monkeypatch.setattr(pluginscanner, 'get_source_major_version', lambda: '7')
|
|
|
|
- enabled_plugins = yumconfigscanner.scan_enabled_yum_plugins()
|
|
+ enabled_plugins = pluginscanner.scan_enabled_package_manager_plugins()
|
|
|
|
assert len(enabled_plugins) == 4, 'Identified more yum plugins than available in the mocked yum output.'
|
|
assert_plugins_identified_as_enabled(
|
|
diff --git a/repos/system_upgrade/common/actors/scanpkgmanager/tests/test_scanpkgmanager.py b/repos/system_upgrade/common/actors/scanpkgmanager/tests/test_scanpkgmanager.py
|
|
index e78b532f..75c5c5ba 100644
|
|
--- a/repos/system_upgrade/common/actors/scanpkgmanager/tests/test_scanpkgmanager.py
|
|
+++ b/repos/system_upgrade/common/actors/scanpkgmanager/tests/test_scanpkgmanager.py
|
|
@@ -3,7 +3,7 @@ import os
|
|
import pytest
|
|
|
|
from leapp.libraries import stdlib
|
|
-from leapp.libraries.actor import scanpkgmanager
|
|
+from leapp.libraries.actor import pluginscanner, scanpkgmanager
|
|
from leapp.libraries.common import testutils
|
|
from leapp.libraries.common.testutils import CurrentActorMocked, produce_mocked
|
|
from leapp.libraries.stdlib import api
|
|
diff --git a/repos/system_upgrade/common/actors/yumconfigscanner/actor.py b/repos/system_upgrade/common/actors/yumconfigscanner/actor.py
|
|
deleted file mode 100644
|
|
index 95aee415..00000000
|
|
--- a/repos/system_upgrade/common/actors/yumconfigscanner/actor.py
|
|
+++ /dev/null
|
|
@@ -1,18 +0,0 @@
|
|
-from leapp.actors import Actor
|
|
-from leapp.libraries.actor.yumconfigscanner import scan_yum_config
|
|
-from leapp.models import YumConfig
|
|
-from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
|
|
-
|
|
-
|
|
-class YumConfigScanner(Actor):
|
|
- """
|
|
- Scans the configuration of the YUM package manager.
|
|
- """
|
|
-
|
|
- name = 'yum_config_scanner'
|
|
- consumes = ()
|
|
- produces = (YumConfig,)
|
|
- tags = (IPUWorkflowTag, ChecksPhaseTag)
|
|
-
|
|
- def process(self):
|
|
- scan_yum_config()
|
|
diff --git a/repos/system_upgrade/common/models/packagemanagerinfo.py b/repos/system_upgrade/common/models/packagemanagerinfo.py
|
|
index aa450978..bf969338 100644
|
|
--- a/repos/system_upgrade/common/models/packagemanagerinfo.py
|
|
+++ b/repos/system_upgrade/common/models/packagemanagerinfo.py
|
|
@@ -22,3 +22,5 @@ class PkgManagerInfo(Model):
|
|
"""
|
|
A sorted list of proxies present in yum and dnf configuration files.
|
|
"""
|
|
+
|
|
+ enabled_plugins = fields.List(fields.String(), default=[])
|
|
diff --git a/repos/system_upgrade/common/models/yumconfig.py b/repos/system_upgrade/common/models/yumconfig.py
|
|
deleted file mode 100644
|
|
index 506ce47e..00000000
|
|
--- a/repos/system_upgrade/common/models/yumconfig.py
|
|
+++ /dev/null
|
|
@@ -1,8 +0,0 @@
|
|
-from leapp.models import fields, Model
|
|
-from leapp.topics import SystemFactsTopic
|
|
-
|
|
-
|
|
-class YumConfig(Model):
|
|
- topic = SystemFactsTopic
|
|
-
|
|
- enabled_plugins = fields.List(fields.String(), default=[])
|
|
--
|
|
2.38.1
|
|
|