From b80636dc784a691ee083d609265b7b7e5828dc5b Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 3 Apr 2023 18:02:53 +0200 Subject: [PATCH] In updater.py, repo list is built using YUM enabled repositories Signed-off-by: Ronan Abhamon --- SOURCES/etc/xapi.d/plugins/updater.py | 12 ++++++++---- tests/mocked_yum.py | 8 ++++++++ tests/test_updater.py | 10 ++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/SOURCES/etc/xapi.d/plugins/updater.py b/SOURCES/etc/xapi.d/plugins/updater.py index 088d1ae..fe3e74f 100755 --- a/SOURCES/etc/xapi.d/plugins/updater.py +++ b/SOURCES/etc/xapi.d/plugins/updater.py @@ -106,11 +106,11 @@ def display_package(p): return {'name': p.name, 'version': p.version, 'release': p.release, 'description': p.summary, 'changelog': changelog, 'url': p.url, 'size': p.size, 'license': p.license} -def build_repo_list(additional_repos): +def build_repo_list(enabled_repos, additional_repos): repos = list(DEFAULT_REPOS) if additional_repos: repos += [x.strip() for x in additional_repos.split(',')] - return repos + return [x.id for x in enabled_repos if x.id in repos] def install_helper(session, args, action): assert action in ('install', 'update') @@ -119,7 +119,11 @@ def install_helper(session, args, action): if action == 'install' and not packages: raise Exception('Missing or empty argument `packages`') - repos = build_repo_list(args.get('repos')) + yum_instance = yum.YumBase() + yum_instance.preconf.debuglevel = 0 + yum_instance.preconf.plugins = False + repos = build_repo_list(yum_instance.repos.listEnabled(), args.get('repos')) + task = None res = None error = None @@ -157,10 +161,10 @@ def install(session, args): @error_wrapped @operationlock() def check_update(session, args): - repos = build_repo_list(args.get('repos')) yum_instance = yum.YumBase() yum_instance.preconf.debuglevel = 0 yum_instance.preconf.plugins = True + repos = build_repo_list(yum_instance.repos.listEnabled(), args.get('repos')) yum_instance.repos.disableRepo('*') yum_instance.repos.enableRepo(','.join(repos)) packages = yum_instance.doPackageLists(pkgnarrow='updates') diff --git a/tests/mocked_yum.py b/tests/mocked_yum.py index c8bcb93..833b97e 100644 --- a/tests/mocked_yum.py +++ b/tests/mocked_yum.py @@ -8,6 +8,14 @@ def enableRepo(self, repos): def disableRepo(self, repos): return 0 + def listEnabled(self): + repos = ['xcp-ng-base', 'xcp-ng-updates', 'totoro', 'lalala', 'riri', 'fifi', 'loulou'] + + class RepoObject: + def __init__(self, repo): + self.id = repo + return [RepoObject(repo) for repo in repos] + class Ts: def __init__(self): return diff --git a/tests/test_updater.py b/tests/test_updater.py index 72d5e4f..9379a3a 100644 --- a/tests/test_updater.py +++ b/tests/test_updater.py @@ -88,6 +88,16 @@ def test_update_with_additional_repos(self, run_command, fs): ['yum', 'update', '--disablerepo=*', '--enablerepo=' + ','.join(repos), '-y'] ) + def test_update_with_disabled_repo(self, run_command, fs): + run_command.return_value = {} + + repos = list(DEFAULT_REPOS) + repos.append('ignored_repo') + update(mock.MagicMock(), {'repos': 'ignored_repo'}) + run_command.assert_called_once_with( + ['yum', 'update', '--disablerepo=*', '--enablerepo=' + ','.join(DEFAULT_REPOS), '-y'] + ) + def test_update_with_additional_repos_and_packages(self, run_command, fs): run_command.return_value = {}