Example #1
0
def get_package_artifact(package_id_str):
    package_id = pkgpanda.PackageId(package_id_str)
    package_filename = 'packages/{}/{}.tar.xz'.format(package_id.name,
                                                      package_id_str)
    return {
        'reproducible_path': package_filename,
        'local_path': package_filename
    }
Example #2
0
def get_launch_package_id(package_list):
    """scans through the a list of packages ID's to return the one
    that corresponds to dcos-launch
    """
    launch_package_id = None
    for package_id in package_list:
        if pkgpanda.PackageId(package_id).name == 'dcos-launch':
            launch_package_id = package_id
            break
    assert launch_package_id, 'dcos-launch package cannot be found!'
    return launch_package_id
Example #3
0
def make_installer_docker(variant, variant_info, installer_info):
    bootstrap_id = variant_info['bootstrap']
    assert len(bootstrap_id) > 0

    image_version = util.dcos_image_commit[:18] + '-' + bootstrap_id[:18]
    genconf_tar = "dcos-genconf." + image_version + ".tar"
    installer_filename = "packages/cache/dcos_generate_config." + pkgpanda.util.variant_prefix(
        variant) + "sh"
    bootstrap_filename = bootstrap_id + ".bootstrap.tar.xz"
    bootstrap_active_filename = bootstrap_id + ".active.json"
    installer_bootstrap_filename = installer_info[
        'bootstrap'] + '.bootstrap.tar.xz'
    bootstrap_latest_filename = pkgpanda.util.variant_prefix(
        variant) + 'bootstrap.latest'
    latest_complete_filename = pkgpanda.util.variant_prefix(
        variant) + 'complete.latest.json'
    packages_dir = 'packages'
    docker_image_name = 'mesosphere/dcos-genconf:' + image_version

    # TODO(cmaloney): All of this should use package_resources
    with tempfile.TemporaryDirectory() as build_dir:
        assert build_dir[-1] != '/'

        print("Setting up build environment")

        def dest_path(filename):
            return build_dir + '/' + filename

        def copy_to_build(src_prefix, filename):
            dest_filename = dest_path(filename)
            os.makedirs(os.path.dirname(dest_filename), exist_ok=True)
            copy_file(os.getcwd() + '/' + src_prefix + '/' + filename,
                      dest_filename)

        def fill_template(base_name, format_args):
            pkgpanda.util.write_string(
                dest_path(base_name),
                pkg_resources.resource_string(
                    __name__, 'bash/' + base_name +
                    '.in').decode().format(**format_args))

        fill_template(
            'Dockerfile', {
                'installer_bootstrap_filename': installer_bootstrap_filename,
                'bootstrap_filename': bootstrap_filename,
                'bootstrap_active_filename': bootstrap_active_filename,
                'bootstrap_latest_filename': bootstrap_latest_filename,
                'latest_complete_filename': latest_complete_filename,
                'packages_dir': packages_dir
            })

        fill_template(
            'installer_internal_wrapper', {
                'variant': pkgpanda.util.variant_str(variant),
                'bootstrap_id': bootstrap_id,
                'dcos_image_commit': util.dcos_image_commit
            })

        if not is_windows:
            subprocess.check_call(
                ['chmod', '+x',
                 dest_path('installer_internal_wrapper')])

        # TODO(cmaloney) make this use make_bootstrap_artifacts / that set
        # rather than manually keeping everything in sync
        copy_to_build('packages/cache/bootstrap', bootstrap_filename)
        copy_to_build('packages/cache/bootstrap', installer_bootstrap_filename)
        copy_to_build('packages/cache/bootstrap', bootstrap_active_filename)
        copy_to_build('packages/cache/bootstrap', bootstrap_latest_filename)
        copy_to_build('packages/cache/complete', latest_complete_filename)
        for package_id in variant_info['packages']:
            package_name = pkgpanda.PackageId(package_id).name
            copy_to_build(
                'packages/cache/', packages_dir + '/' + package_name + '/' +
                package_id + '.tar.xz')

        # Copy across gen_extra if it exists
        if os.path.exists('gen_extra'):
            copy_directory('gen_extra', dest_path('gen_extra'))
        else:
            make_directory(dest_path('gen_extra'))

        print("Building docker container in " + build_dir)
        subprocess.check_call(
            ['docker', 'build', '-t', docker_image_name, build_dir])

        print("Building", installer_filename)
        pkgpanda.util.write_string(
            installer_filename,
            pkg_resources.resource_string(
                __name__, 'bash/dcos_generate_config.sh.in').decode().format(
                    genconf_tar=genconf_tar,
                    docker_image_name=docker_image_name,
                    variant=variant) + '\n#EOF#\n')
        subprocess.check_call(['docker', 'save', docker_image_name],
                              stdout=open(genconf_tar, 'w'))
        subprocess.check_call(['tar', 'cvf', '-', genconf_tar],
                              stdout=open(installer_filename, 'a'))
        subprocess.check_call(['chmod', '+x', installer_filename])

        # Cleanup
        subprocess.check_call(['rm', genconf_tar])

    return installer_filename
Example #4
0
def make_package_filename(package_id_str):
    package_id = pkgpanda.PackageId(package_id_str)
    extension = '.tar.xz'
    if package_id.version == 'setup':
        extension = '.dcos_config'
    return 'packages/{}/{}{}'.format(package_id.name, package_id_str, extension)