import os
import re
import shlex
+import urlparse
from teuthology import misc as teuthology
+from teuthology.config import config as teuth_config
from ..orchestra import run
-from ..config import config as teuth_config
-from ..exceptions import (UnsupportedPackageTypeError,
- ConfigError,
- VersionNotFoundError)
+from ..exceptions import (
+ UnsupportedPackageTypeError,
+ ConfigError,
+ VersionNotFoundError,
+)
from ..packaging import (
install_package,
get_koji_build_info,
get_koji_package_name,
get_koji_task_rpm_info,
get_koji_task_result,
- GitbuilderProject,
+ get_builder_project,
)
log = logging.getLogger(__name__)
VERSION_KEYS = ['branch', 'tag', 'sha1', 'deb', 'rpm', 'koji', 'koji_task']
+
def normalize_config(ctx, config):
"""
Returns a config whose keys are all real roles.
new_config[name] = role_config.copy()
return new_config
+
def normalize_and_apply_overrides(ctx, config, overrides):
"""
kernel task config is hierarchical and needs to be transformed into
return (config, timeout)
+
def validate_config(ctx, config):
"""
Make sure that all kernels in the list of remove kernels
return 'ceph-'
return '-g'
+
def need_to_install(ctx, role, version):
"""
Check to see if we need to install a kernel. Get the version of the
uname_fp.close()
return ret
+
def install_firmware(ctx, config):
"""
Go to the github to get the latest firmware.
],
)
+
def gitbuilder_pkg_name(remote):
if remote.os.package_type == 'rpm':
pkg_name = 'kernel.x86_64.rpm'
raise UnsupportedPackageTypeError(remote)
return pkg_name
+
def remote_pkg_path(remote):
"""
This is where kernel packages are copied over (in case of local
"""
return os.path.join('/tmp', gitbuilder_pkg_name(remote))
+
def download_kernel(ctx, config):
"""
Supply each remote with a kernel package:
))
needs_download = True
- gitbuilder = GitbuilderProject(
+ builder = get_builder_project()(
'kernel',
{'sha1': src},
ctx=ctx,
remote=role_remote,
)
- baseurl = gitbuilder.base_url + "/"
-
- pkg_name = gitbuilder_pkg_name(role_remote)
+ if teuth_config.use_shaman:
+ if role_remote.os.package_type == 'rpm':
+ arch = builder.arch
+ baseurl = urlparse.urljoin(
+ builder.base_url,
+ '/'.join([arch, ''])
+ )
+ pkg_name = "kernel-%s.%s.rpm" % (
+ builder.version,
+ arch,
+ )
+ elif role_remote.os.package_type == 'deb':
+ arch = 'amd64' # FIXME
+ baseurl = urlparse.urljoin(
+ builder.base_url,
+ '/'.join([
+ 'pool', 'main', 'l',
+ 'linux-%s' % builder.scm_version, ''
+ ])
+ )
+ pkg_name = 'linux-image-%s_%s_%s.deb' % (
+ builder.scm_version,
+ builder.version,
+ arch,
+ )
+ else:
+ baseurl = builder.base_url + "/"
+ pkg_name = gitbuilder_pkg_name(role_remote)
- log.info("fetching, gitbuilder baseurl is %s", baseurl)
+ log.info("fetching, builder baseurl is %s", baseurl)
if needs_download:
proc = role_remote.run(
args=['sudo', 'ln', '-s', '%s-%s' % (in_file, kernel_ver) , boot1, ],
)
+
def install_and_reboot(ctx, config):
"""
Install and reboot the kernel. This mostly performs remote
log.debug('Waiting for install on %s to complete...', name)
proc.wait()
+
def enable_disable_kdb(ctx, config):
"""
Enable kdb on remote machines in use. Disable on those that are
remote.run( args=['sudo', 'shutdown', '-r', 'now'], wait=False )
return
+
def update_grub_rpm(remote, newversion):
"""
Updates grub file to boot new kernel version on both legacy grub/grub2.
entry_num += 1
remote.run(args=['sudo', grubset, str(entry_num), ])
+
def generate_legacy_grub_entry(remote, newversion):
"""
This will likely need to be used for ceph kernels as well
linenum += 1
return newgrubconf
+
def get_image_version(remote, path):
"""
Get kernel image version from (rpm or deb) package.
need_install[role] = build_info
need_version[role] = version
else:
- gitbuilder = GitbuilderProject(
+ builder = get_builder_project()(
"kernel",
role_config,
ctx=ctx,
remote=role_remote,
)
- sha1 = gitbuilder.sha1
+ sha1 = builder.sha1
log.debug('sha1 for {role} is {sha1}'.format(role=role, sha1=sha1))
ctx.summary['{role}-kernel-sha1'.format(role=role)] = sha1
if need_to_install(ctx, role, sha1):
- version = gitbuilder.version
-
+ if teuth_config.use_shaman:
+ version = builder.scm_version
+ else:
+ version = builder.version
if not version:
- raise VersionNotFoundError("{url} is empty!".format(
- url=gitbuilder.base_url + "/version"))
-
+ raise VersionNotFoundError(builder.base_url)
need_install[role] = sha1
need_version[role] = version