Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion teuthology/orchestra/opsys.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ class OS(object):
__slots__ = ['name', 'version', 'codename', 'package_type']

_deb_distros = ('debian', 'ubuntu')
_rpm_distros = ('fedora', 'rhel', 'centos', 'opensuse', 'sle')
_rpm_distros = ('alma', 'rocky', 'fedora', 'rhel', 'centos', 'opensuse', 'sle')

def __init__(self, name=None, version=None, codename=None):
self.name = name
Expand Down
58 changes: 56 additions & 2 deletions teuthology/task/install/rpm.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ def _remove(ctx, config, remote, rpm):
if repos:
if dist_release in ['opensuse', 'sle']:
_zypper_removerepo(remote, repos)
if dist_release in ['centos', 'rocky', 'alma']:
_yum_removerepo(remote, repos)
else:
raise Exception('Custom repos were specified for %s ' % remote_os +
'but these are currently not supported')
Expand Down Expand Up @@ -114,6 +116,54 @@ def _zypper_wipe_all_repos(remote):
'sudo rm -f /etc/zypp/repos.d/* || '
'true')


def _yum_addrepo(remote, repo_list):
"""
Add dnf repos to the remote system.

:param remote: remote node where to add packages
:param repo_list: list of dictionaries with keys 'name', 'url'
:return:
"""
for repo in repo_list:
repo_lines = [f"[{repo['name']}]"]
repo_lines += [
f"name={repo['name']}",
f"baseurl={repo['url']}",
"enabled=1",
"gpgcheck=0",
]
if 'priority' in repo:
repo_lines += [f"priority={repo['priority']}"]
repo_path=f"/etc/yum.repos.d/{repo['name']}.repo"
remote.sudo_write_file(repo_path, "\n".join(repo_lines))


def _yum_removerepo(remote, repo_list):
"""
Remove yum repos on the remote system.

:param remote: remote node where to remove packages from
:param repo_list: list of dictionaries with keys 'name', 'url'
:return:
"""
for repo in repo_list:
repo_path=f"/etc/yum.repos.d/{repo['name']}.repo"
remote.run(args=['sudo', 'rm', repo_path])


def _yum_wipe_all_repos(remote):
"""
Completely "wipe" (remove) all yum repos

:param remote: remote node where to wipe zypper repos
:return:
"""
log.info("Wiping yum repos (if any)")
remote.sh('sudo rm -f /etc/yum.repos.d/* || '
'true')


def _downgrade_packages(ctx, remote, pkgs, pkg_version, config):
"""
Downgrade packages listed by 'downgrade_packages'
Expand Down Expand Up @@ -185,18 +235,20 @@ def _update_package_list_and_install(ctx, remote, rpm, config):
log.debug("_update_package_list_and_install: config is {}".format(config))
repos = config.get('repos')
install_ceph_packages = config.get('install_ceph_packages')
builder = _get_builder_project(ctx, remote, config)
repos_only = config.get('repos_only')

if repos:
log.debug("Adding repos: %s" % repos)
if dist_release in ['opensuse', 'sle']:
_zypper_wipe_all_repos(remote)
_zypper_addrepo(remote, repos)
if dist_release in ['centos', 'rocky', 'alma']:
_yum_addrepo(remote, repos)
else:
raise Exception('Custom repos were specified for %s ' % remote_os +
'but these are currently not supported')
else:
builder = _get_builder_project(ctx, remote, config)
log.info('Pulling from %s', builder.base_url)
log.info('Package version is %s', builder.version)
builder.install_repo()
Expand Down Expand Up @@ -226,7 +278,7 @@ def _update_package_list_and_install(ctx, remote, rpm, config):
log.info("Installing packages: {pkglist} on remote rpm {arch}".format(
pkglist=", ".join(packages), arch=remote.arch))

if dist_release not in ['opensuse', 'sle']:
if dist_release not in ['opensuse', 'sle'] and not repos:
project = builder.project
uri = builder.uri_reference
_yum_fix_repo_priority(remote, project, uri)
Expand All @@ -247,6 +299,8 @@ def _update_package_list_and_install(ctx, remote, rpm, config):
else:
remove_cmd = 'sudo yum -y remove'
install_cmd = 'sudo yum -y install'

if dist_release not in ['opensuse', 'sle'] and not repos:
# to compose version string like "0.94.10-87.g116a558.el7"
pkg_version = '.'.join([builder.version, builder.dist_release])
packages = _downgrade_packages(ctx, remote, packages, pkg_version, config)
Expand Down
Loading