From: Sandon Van Ness Date: Fri, 8 Nov 2013 22:35:51 +0000 (-0800) Subject: Distro kernel bug-fixes. X-Git-Tag: 1.1.0~1755^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f0e01ad0e59eb8d167edf7f9eda953467dae54b4;p=teuthology.git Distro kernel bug-fixes. Fixed some things that were being done incorrectly. Some distro kernels have no debug so added | true when disabling kdb. Also changed what was skipping kernels if non-ubuntu to also schedule kernel install if a distro kernel. Signed-off-by: Sandon Van Ness --- diff --git a/schedule_suite.sh b/schedule_suite.sh index 6920f72a6..2026da752 100755 --- a/schedule_suite.sh +++ b/schedule_suite.sh @@ -47,9 +47,14 @@ if [ "$kernel" = "-" ] then kernelvalue="" else - KERNEL_SHA1=`wget http://gitbuilder.ceph.com/kernel-deb-precise-x86_64-basic/ref/$kernel/sha1 -O- 2>/dev/null` - [ -z "$KERNEL_SHA1" ] && schedule_fail "Couldn't find kernel branch $kernel" - kernelvalue="kernel: + if [ "$kernel" = "distro" ] + then + KERNEL_SHA1=distro + else + KERNEL_SHA1=`wget http://gitbuilder.ceph.com/kernel-deb-precise-x86_64-basic/ref/$kernel/sha1 -O- 2>/dev/null` + fi + [ -z "$KERNEL_SHA1" ] && schedule_fail "Couldn't find kernel branch $kernel" + kernelvalue="kernel: kdb: true sha1: $KERNEL_SHA1" fi diff --git a/teuthology/misc.py b/teuthology/misc.py index 9892fe318..0b055e327 100644 --- a/teuthology/misc.py +++ b/teuthology/misc.py @@ -892,9 +892,9 @@ def stop_daemons_of_type(ctx, type_): if exc_info != (None, None, None): raise exc_info[0], exc_info[1], exc_info[2] -def get_system_type(remote): +def get_system_type(remote, distro=False): """ - Return this system type (deb or rpm) + Return this system type (deb or rpm) or Distro. """ r = remote.run( args=[ @@ -904,6 +904,8 @@ def get_system_type(remote): ) system_value = r.stdout.getvalue().strip() log.debug("System to be installed: %s" % system_value) + if distro: + return system_value.lower() if system_value in ['Ubuntu','Debian']: return "deb" if system_value in ['CentOS','Fedora','RedHatEnterpriseServer']: diff --git a/teuthology/run.py b/teuthology/run.py index 4ec1f98a8..307e75c1c 100644 --- a/teuthology/run.py +++ b/teuthology/run.py @@ -139,8 +139,9 @@ def main(ctx): {'internal.vm_setup': None}, ]) if 'kernel' in ctx.config: + sha1 = ctx.config['kernel'].get('sha1') distro = get_distro(ctx) - if distro == 'ubuntu': + if (distro == 'ubuntu') or ('distro' in sha1): init_tasks.append({'kernel': ctx.config['kernel']}) init_tasks.extend([ {'internal.base': None}, diff --git a/teuthology/task/kernel.py b/teuthology/task/kernel.py index 729eaaf27..5df1d7995 100644 --- a/teuthology/task/kernel.py +++ b/teuthology/task/kernel.py @@ -141,12 +141,11 @@ def install_firmware(ctx, config): uri = teuth_config.linux_firmware_git_url or linux_firmware_git_upstream fw_dir = '/lib/firmware/updates' - for role, src in config.iterkeys(): - (role_remote,) = ctx.cluster.only(role).remotes.keys() - if src.find('distro') >= 0: + for role in config.iterkeys(): + if config[role].find('distro') >= 0: log.info('Skipping firmware on distro kernel'); return - + (role_remote,) = ctx.cluster.only(role).remotes.keys() log.info('Installing linux-firmware on {role}...'.format(role=role)) role_remote.run( args=[ @@ -267,8 +266,8 @@ def install_and_reboot(ctx, config): (role_remote,) = ctx.cluster.only(role).remotes.keys() if src.find('distro') >= 0: log.info('Installing distro kernel on {role}...'.format(role=role)) - install_distro_kernel(remote) - return + install_distro_kernel(role_remote) + continue log.info('Installing kernel {src} on {role}...'.format(src=src, role=role)) @@ -425,10 +424,12 @@ def enable_disable_kdb(ctx, config): args=[ 'echo', '', run.Raw('|'), - 'sudo', 'tee', '/sys/module/kgdboc/parameters/kgdboc' + 'sudo', 'tee', '/sys/module/kgdboc/parameters/kgdboc', + run.Raw('|'), + 'true', ]) -def wait_for_reboot(ctx, need_install, timeout): +def wait_for_reboot(ctx, need_install, timeout, distro=False): """ Loop reconnecting and checking kernel versions until they're all correct or the timeout is exceeded. @@ -438,10 +439,17 @@ def wait_for_reboot(ctx, need_install, timeout): while need_install: teuthology.reconnect(ctx, timeout) for client in need_install.keys(): + if 'distro' in need_install[client]: + distro = True log.info('Checking client {client} for new kernel version...'.format(client=client)) try: - assert not need_to_install(ctx, client, need_install[client]), \ - 'failed to install new kernel version within timeout' + if distro: + assert not need_to_install_distro(ctx, client), \ + 'failed to install new distro kernel version within timeout' + + else: + assert not need_to_install(ctx, client, need_install[client]), \ + 'failed to install new kernel version within timeout' del need_install[client] except Exception: log.exception("Saw exception") @@ -452,45 +460,50 @@ def wait_for_reboot(ctx, need_install, timeout): def need_to_install_distro(ctx, role): - system_type = teuthology.get_system_type(role.remote) - ctx.cluster.only(role).run(args=['uname', '-r' ], stdout=output, stderr=err_mess ) - current = output.strip() - + (role_remote,) = ctx.cluster.only(role).remotes.keys() + system_type = teuthology.get_system_type(role_remote) + output, err_mess = StringIO(), StringIO() + role_remote.run(args=['uname', '-r' ], stdout=output, stderr=err_mess ) + current = output.getvalue().strip() if system_type == 'rpm': - try: - ctx.cluster.only(role).run(args=['sudo', 'yum', 'list', 'available', 'kernel' ], stdout=output, stderr=err_mess ) - ctx.cluster.only(role).run(args=['sudo', 'yum', 'install', '-y', 'kernel' ], stdout=output, stderr=err_mess ) - return True - except: - ctx.cluster.only(role).run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess ) - newest=output.split()[0] + role_remote.run(args=['sudo', 'yum', 'install', '-y', 'kernel' ], stdout=output, stderr=err_mess ) + #reset stringIO output. + output, err_mess = StringIO(), StringIO() + role_remote.run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess ) + newest=output.getvalue().split()[0] if system_type == 'deb': - ctx.cluster.only(role).run(args=['lsb_release', '-is'], stdout=system, stderr=err_mess ) - distribution = system.lower() - newest = get_version_from_pkg(ctx.cluster.only(role), distribution) + distribution = teuthology.get_system_type(role_remote, distro=True) + newest = get_version_from_pkg(role_remote, distribution) + output.close() + err_mess.close() if current in newest: return False return True def install_distro_kernel(remote): system_type = teuthology.get_system_type(remote) + distribution = '' if system_type == 'rpm': - ctx.cluster.only(role).run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess ) - newest=output.split()[0].split('kernel-')[1] + output, err_mess = StringIO(), StringIO() + remote.run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess ) + newest=output.getvalue().split()[0].split('kernel-')[1] + log.info('Distro Kernel Version: {version}'.format(version=newest)) update_grub_rpm(remote, newest) - remote.run( args=['sudo', 'shutdown', '-r'], wait=False ) + remote.run( args=['sudo', 'shutdown', '-r', 'now'], wait=False ) + output.close() + err_mess.close() return if system_type == 'deb': - remote.run(args=['lsb_release', '-is'], stdout=system, stderr=err_mess ) - distribution = system.lower() - newversion = get_version_from_pkg(remote, type) + distribution = teuthology.get_system_type(remote, distro=True) + newversion = get_version_from_pkg(remote, distribution) if 'ubuntu' in distribution: - grub2conf = teuthology.get_file(remote, '/boot/grub/grub.cfg', true) + grub2conf = teuthology.get_file(remote, '/boot/grub/grub.cfg', True) submenu = '' - for line in grub2conf: + menuentry = '' + for line in grub2conf.split('\n'): if 'submenu' in line: submenu = line.split('"')[1] if 'menuentry' in line: @@ -501,70 +514,73 @@ def install_distro_kernel(remote): grubvalue = submenu + '>' + menuentry else: grubvalue = menuentry - grubfile = 'cat <