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):
"""
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):
"""
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']
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)
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')
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'])
+