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 }
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
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
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)