From e8b9c68b6b9e64700125033d27fe7f99cdc4a369 Mon Sep 17 00:00:00 2001 From: Vasu Kulkarni Date: Thu, 30 Apr 2020 13:18:05 -0700 Subject: [PATCH] various updates to redhat internal install task Signed-off-by: Vasu Kulkarni --- teuthology/task/internal/redhat.py | 110 ++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 3 deletions(-) diff --git a/teuthology/task/internal/redhat.py b/teuthology/task/internal/redhat.py index 430fff1e7f..99929110d9 100644 --- a/teuthology/task/internal/redhat.py +++ b/teuthology/task/internal/redhat.py @@ -5,13 +5,66 @@ import contextlib import logging import requests from tempfile import NamedTemporaryFile +from teuthology.config import config as teuthconfig from teuthology.parallel import parallel from teuthology.orchestra import run from teuthology.task.install.redhat import set_deb_repo +from teuthology.exceptions import CommandFailedError, ConfigError log = logging.getLogger(__name__) +@contextlib.contextmanager +def setup_stage_cdn(ctx, config): + """ + Configure internal stage cdn + """ + rhbuild = ctx.config.get('redhat').get('rhbuild') + if not rhbuild: + raise ConfigError("Provide rhbuild attribute") + teuthconfig.rhbuild = str(rhbuild) + with parallel() as p: + for remote in ctx.cluster.remotes.iterkeys(): + if remote.os.name == 'rhel': + log.info("subscribing stage cdn on : %s", remote.shortname) + p.spawn(_subscribe_stage_cdn, remote) + try: + yield + finally: + with parallel() as p: + for remote in ctx.cluster.remotes.iterkeys(): + p.spawn(_unsubscribe_stage_cdn, remote) + + +def _subscribe_stage_cdn(remote): + _unsubscribe_stage_cdn(remote) + cdn_config = teuthconfig.get('cdn-config', dict()) + server_url = cdn_config.get('server-url', 'subscription.rhsm.stage.redhat.com:443/subscription') + base_url = cdn_config.get('base-url', 'https://cdn.stage.redhat.com') + username = cdn_config.get('username', 'cephuser') + password = cdn_config.get('password') + remote.run( + args=[ + 'sudo', 'subscription-manager', '--force', 'register', + run.Raw('--serverurl=' + server_url), + run.Raw('--baseurl=' + base_url), + run.Raw('--username=' + username), + run.Raw('--password=' + password), + '--auto-attach' + ], + timeout=720) + _enable_rhel_repos(remote) + + +def _unsubscribe_stage_cdn(remote): + try: + remote.run(args=['sudo', 'subscription-manager', 'unregister'], + check_status=False) + except CommandFailedError: + # FIX ME + log.info("unregistring subscription-manager failed, ignoring") + + @contextlib.contextmanager def setup_cdn_repo(ctx, config): """ @@ -41,11 +94,37 @@ def setup_additional_repo(ctx, config): if remote.os.package_type == 'rpm': remote.run(args=['sudo', 'wget', '-O', '/etc/yum.repos.d/rh_add.repo', add_repo]) - remote.run(args=['sudo', 'yum', 'update', 'metadata']) + if not remote.os.version.startswith('8'): + remote.run(args=['sudo', 'yum', 'update', 'metadata']) yield +def _enable_rhel_repos(remote): + rhel_7_rpms = ['rhel-7-server-rpms', + 'rhel-7-server-optional-rpms', + 'rhel-7-server-extras-rpms'] + + rhel_8_rpms = ['rhel-8-for-x86_64-appstream-rpms', + 'rhel-8-for-x86_64-baseos-rpms', + 'ansible-2.8-for-rhel-8-x86_64-rpms'] + + if teuthconfig.rhbuild.startswith("3"): + rhel_7_rpms.append('rhel-7-server-ansible-2.6-rpms') + elif teuthconfig.rhbuild.startswith("4"): + rhel_7_rpms.append('rhel-7-server-ansible-2.8-rpms') + + repos_to_subscribe = {'7': rhel_7_rpms, + '8': rhel_8_rpms} + + for repo in repos_to_subscribe.get(remote.os.version[0]): + remote.run(args=['sudo', 'subscription-manager', + 'repos', '--enable={r}'.format(r=repo)]) + + if remote.os.version.startswith('8'): + workaround(remote) + + @contextlib.contextmanager def setup_base_repo(ctx, config): """ @@ -83,8 +162,20 @@ def _setup_latest_repo(ctx, config): with parallel(): for remote in ctx.cluster.remotes.keys(): if remote.os.package_type == 'rpm': - remote.run(args=['sudo', 'subscription-manager', 'repos', - run.Raw('--disable=*ceph*')]) + # pre-cleanup + remote.run(args=['sudo', 'rm', run.Raw('/etc/yum.repos.d/rh*')], + check_status=False) + remote.run(args=['sudo', 'yum', 'clean', 'metadata']) + if not remote.os.version.startswith('8'): + remote.run(args=['sudo', 'yum', 'update', 'metadata']) + # skip is required for beta iso testing + if config.get('skip-subscription-manager', False) is True: + log.info("Skipping subscription-manager command") + else: + remote.run(args=['sudo', 'subscription-manager', 'repos', + run.Raw('--disable=*ceph*')], + check_status=False + ) base_url = config.get('base-repo-url', '') installer_url = config.get('installer-repo-url', '') repos = ['MON', 'OSD', 'Tools', 'Calamari', 'Installer'] @@ -101,6 +192,7 @@ def _setup_latest_repo(ctx, config): remote.put_file(base_repo_file.name, base_repo_file.name) remote.run(args=['sudo', 'cp', base_repo_file.name, '/etc/yum.repos.d/rh_ceph.repo']) + remote.run(args=['sudo', 'yum', 'clean', 'metadata']) if installer_url.startswith('http'): irepo_to_use = _get_repos_to_use( installer_url, installer_repos) @@ -109,6 +201,9 @@ def _setup_latest_repo(ctx, config): remote.put_file(installer_file.name, installer_file.name) remote.run(args=['sudo', 'cp', installer_file.name, '/etc/yum.repos.d/rh_inst.repo']) + remote.run(args=['sudo', 'yum', 'clean', 'metadata']) + if not remote.os.version.startswith('8'): + remote.run(args=['sudo', 'yum', 'update', 'metadata']) else: if config.get('deb-repo-url'): deb_repo = config.get('deb-repo-url') @@ -141,3 +236,12 @@ def _create_temp_repo_file(repos, repo_file): repo_file.write(gpgcheck) repo_file.write(enabled) repo_file.close() + + +def workaround(remote): + log.info('temporary workaround') + remote.run(args=['sudo', + 'yum', + 'install', '-y', + 'http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/d/dbench-4.0-10.el7.x86_64.rpm']) + -- 2.39.5