new_config[name] = role_config
return new_config
-def _find_arch_and_dist(ctx):
- """
- Return the arch and distro value as a tuple.
-
- Currently this only returns armv7l on the quantal distro or x86_64
- on the precise distro
-
- :param ctx: Context
- :returns: arch,distro
- """
- info = ctx.config.get('machine_type', 'plana')
- if teuthology.is_arm(info):
- return ('armv7l', 'quantal')
- return ('x86_64', 'precise')
-
def validate_config(ctx, config):
"""
Make sure that all kernels in the list of remove kernels
log.info('Downloading kernel {sha1} on {role}...'.format(sha1=src,
role=role))
if package_type == 'rpm':
- dist, ver = teuthology.get_system_type(role_remote, distro=True, version=True)
- if '.' in ver:
- ver = ver.split('.')[0]
- ldist = '{dist}{ver}'.format(dist=dist, ver=ver)
- _, rpm_url = teuthology.get_ceph_binary_url(
- package='kernel',
- sha1=src,
- format='rpm',
- flavor='basic',
- arch='x86_64',
- dist=ldist,
- )
-
- kernel_url = urlparse.urljoin(rpm_url, 'kernel.x86_64.rpm')
+ kernelstring, kernel_url = get_version_from_rpm(role_remote, src)
+ unamestring = kernelstring.split('-')[1]
output, err_mess = StringIO(), StringIO()
role_remote.run(args=['sudo', 'yum', 'list', 'installed', 'kernel'], stdout=output, stderr=err_mess )
# Check if short (first 8 digits) sha1 is in uname output as expected
short_sha1 = src[0:7]
- if short_sha1 in output.getvalue():
+ if short_sha1 in output.getvalue() or unamestring in output.getvalue():
output.close()
err_mess.close()
continue
procs[role_remote.name] = proc
continue
- larch, ldist = _find_arch_and_dist(ctx)
+ larch, ldist = role_remote.arch, role_remote.os.codename
_, deb_url = teuthology.get_ceph_binary_url(
package='kernel',
sha1=src,
current = output.getvalue().strip()
if system_type == 'rpm':
role_remote.run(args=['sudo', 'yum', 'install', '-y', 'kernel'], stdout=output, stderr=err_mess )
+ if 'Nothing to do' in output.getvalue():
+ output.truncate(0), err_mess.truncate(0)
+ role_remote.run(args=['sudo', 'yum', 'reinstall', '-y', 'kernel', run.Raw('||'), 'true'], stdout=output, stderr=err_mess )
+ if 'Skipping the running kernel' in output.getvalue():
+ if 'Error: Nothing to do' in output.getvalue():
+ # Current running kernel is already newest and updated
+ log.info('Newest distro kernel already installed/running')
+ return False
#reset stringIO output.
- output, err_mess = StringIO(), StringIO()
+ output.truncate(0), err_mess.truncate(0)
role_remote.run(args=['rpm', '-q', 'kernel', '--last' ], stdout=output, stderr=err_mess )
for kernel in output.getvalue().split():
if kernel.startswith('kernel'):
log.info('Not newest distro kernel. Curent: {cur} Expected: {new}'.format(cur=current, new=newest))
return True
+def get_version_from_rpm(remote, sha1):
+ """
+ Get Actual version string from kernel file RPM URL.
+ """
+ system_type, system_ver = teuthology.get_system_type(remote, distro=True, version=True)
+ if '.' in system_ver:
+ system_ver = system_ver.split('.')[0]
+ ldist = '{system_type}{system_ver}'.format(system_type=system_type, system_ver=system_ver)
+ _, rpm_url = teuthology.get_ceph_binary_url(
+ package='kernel',
+ sha1=sha1,
+ format='rpm',
+ flavor='basic',
+ arch='x86_64',
+ dist=ldist,
+ )
+ kernel_url = urlparse.urljoin(rpm_url, 'kernel.x86_64.rpm')
+ kerninfo, kern_err = StringIO(), StringIO()
+ remote.run(args=['rpm', '-qp', kernel_url ], stdout=kerninfo, stderr=kern_err)
+ kernelstring = ''
+ if '\n' in kerninfo.getvalue():
+ kernelstring = kerninfo.getvalue().split('\n')[0]
+ else:
+ kernelstring = kerninfo.getvalue()
+ return kernelstring, kernel_url
def install_kernel(remote, sha1=None):
"""
output, err_mess = StringIO(), StringIO()
kern_out, kern_err = StringIO(), StringIO()
if short_sha1:
+ kernelstring, kernel_url = get_version_from_rpm(remote, sha1)
remote.run(args=['rpm', '-q', 'kernel' ], stdout=output, stderr=err_mess )
- if short_sha1 in output.getvalue():
+ if kernelstring in output.getvalue():
for kernel in output.getvalue().split('\n'):
- if short_sha1 in kernel:
+ if kernelstring in kernel:
remote.run(args=['rpm', '-ql', kernel ], stdout=kern_out, stderr=kern_err )
for file in kern_out.getvalue().split('\n'):
if 'vmlinuz' in file:
if line.startswith('menuentry'):
if newversion in line:
break
- entry_num =+ 1
+ entry_num += 1
remote.run(args=['sudo', grubset, str(entry_num), ])
def generate_legacy_grub_entry(remote, newversion):
need_install[role] = 'distro'
need_version[role] = 'distro'
else:
- larch, ldist = _find_arch_and_dist(ctx)
+ (role_remote,) = ctx.cluster.only(role).remotes.keys()
+ larch = role_remote.arch
+ package_type = role_remote.os.package_type
+ system_type, system_ver = role_remote.os.name, role_remote.os.version
+ if package_type == 'rpm':
+ if '.' in system_ver:
+ system_ver = system_ver.split('.')[0]
+ ldist = '{system_type}{system_ver}'.format(system_type=system_type, system_ver=system_ver)
+ if package_type == 'deb':
+ system_ver = role_remote.os.codename
+ ldist = '{system_ver}'.format(system_ver=system_ver)
sha1, base_url = teuthology.get_ceph_binary_url(
package='kernel',
branch=role_config.get('branch'),
tag=role_config.get('tag'),
sha1=role_config.get('sha1'),
flavor='basic',
- format='deb',
+ format=package_type,
dist=ldist,
arch=larch,
)