]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
various updates to redhat internal install task
authorVasu Kulkarni <vasu@redhat.com>
Thu, 30 Apr 2020 20:18:05 +0000 (13:18 -0700)
committerVasu Kulkarni <vasu@redhat.com>
Tue, 12 May 2020 01:59:07 +0000 (18:59 -0700)
Signed-off-by: Vasu Kulkarni <vasu@redhat.com>
teuthology/task/internal/redhat.py

index 430fff1e7f167dd7d6438ed882db9d7f4b5290a2..99929110d982f12b73b241c396dc370d235a350d 100644 (file)
@@ -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'])
+