def main(argv=sys.argv[1:]):
    """Create Dockerlibrary for images from manafest yaml data"""

    # Create the top-level parser
    parser = DockerlibraryArgParser(
        description="Generate the 'Dockerlibrary for the base docker images")
    parser.set()
    args = parser.parse(argv)

    # Read manifest perams
    with open(args.manifest, 'r') as f:
        manifest = OrderedLoad(f, yaml.SafeLoader)

    # Create a git diff for the current repo
    repo = git.Repo(os.path.join(PWD, '..'))  # , odbt=git.GitCmdObjectDB)

    # Parse the manifest
    repo_name = os.path.basename(PWD)
    manifest = parse_manifest(manifest, repo, repo_name)

    # Flattin manifest data
    data = {**manifest, **manifest['meta']}

    # Create Docker Library
    template_name = data['template_name']
    template_packages = data['template_packages']
    expand_template_prefix_path(template_packages)
    create_dockerlibrary(template_name, data, args.output)
Exemplo n.º 2
0
def main(argv=sys.argv[1:]):
    """Create Dockerlibrary for images from manafest yaml data"""

    # Create the top-level parser
    parser = DockerlibraryArgParser(
        description="Generate the 'Dockerlibrary for the base docker images")
    parser.set()
    args = parser.parse(argv)

    # Read manifest perams
    with open(args.manifest, 'r') as f:
        manifest = OrderedLoad(f, yaml.SafeLoader)

    # Create a git diff for the current repo
    repo = git.Repo(os.path.join(PWD,'..')) #, odbt=git.GitCmdObjectDB)

    # For each release
    for release_name, release_data in manifest['release_names'].items():
        print('release_name: ', release_name)
        # For each os supported
        for os_name, os_data in release_data['os_names'].items():
            print('os_name: ', os_name)
            # For each os distro supported
            for os_code_name, os_code_data in os_data['os_code_names'].items():
                print('os_code_name: ', os_code_name)
                commit_path = os.path.join(sub_repo, release_name, os_name, os_code_name)
                commit_sha = latest_commit_sha(repo, commit_path)
                for tag_name, tag_data in os_code_data['tag_names'].items():
                    print('tag_name: ', tag_name)
                    tags = []
                    for alias_pattern in tag_data['aliases']:
                        alias_template = string.Template(alias_pattern)
                        alias = alias_template.substitute(
                            release_name=release_name,
                            os_name=os_name,
                            os_code_name=os_code_name)
                        tags.append(alias)
                    print('tags: ', tags)
                    tag_data['Tags'] = tags
                    tag_data['Architectures'] = os_code_data['archs']
                    tag_data['GitCommit'] = commit_sha
                    tag_data['Directory'] = os.path.join(commit_path, tag_name)

    data = {**manifest, **manifest['meta']}
    script_path = os.path.join(sub_repo, __file__)
    scripts_sha = latest_commit_sha(repo, commit_path)
    data['script_url'] = urllib.parse.urljoin(data['repo_url'][0:-4]+'/blob/',os.path.join(scripts_sha,script_path))

    template_name = data['template_name']
    template_packages = data['template_packages']
    expand_template_prefix_path(template_packages)
    create_dockerlibrary(template_name, data, sub_repo)
Exemplo n.º 3
0
def main(argv=sys.argv[1:]):
    """Create Dockerfiles for images from platform and image yaml data"""

    # Create the top-level parser
    parser = DockerfileArgParser(
        description="Generate the 'Dockerfile's for the base docker images")
    parser.set()
    args = parser.parse(argv)

    # Read platform params
    with open(args.platform, 'r') as f:
        # use safe_load instead load
        platform = yaml.safe_load(f)['platform']

    # Read image params using platform params
    images_yaml = StringIO()
    try:
        interpreter = Interpreter(output=images_yaml)
        interpreter.file(open(args.images, 'r'), locals=platform)
        images_yaml = images_yaml.getvalue()
    except Exception:
        print("Error processing %s" % args.images)
        raise
    finally:
        interpreter.shutdown()
        interpreter = None
    # Use ordered dict
    images = OrderedLoad(images_yaml, yaml.SafeLoader)['images']

    # For each image tag
    for image in images:

        # Get data for image
        data = dict(images[image])
        data['tag_name'] = image

        # Add platform params
        data.update(platform)

        # Apply package distro/version formatting
        expandPackages(data)

        # Get path to save Docker file
        dockerfile_dir = os.path.join(args.output, image)
        if not os.path.exists(dockerfile_dir):
            os.makedirs(dockerfile_dir)
        data['dockerfile_dir'] = dockerfile_dir

        # generate Dockerfile
        create_files(data)
Exemplo n.º 4
0
def main(argv=sys.argv[1:]):
    """Create Dockerfolders for images from manifest yaml data"""

    # Create the top-level parser
    parser = DockerfolderArgParser(
        description="Generate the Dockerfolders for the base docker images")
    parser.set()
    args = parser.parse(argv)

    # Read manifest params
    with open(args.manifest, 'r') as f:
        manifest = OrderedLoad(f, yaml.SafeLoader)

    # Populate all paths from the manifest
    populate_paths(manifest, args, create_dockerfiles)
Exemplo n.º 5
0
def main(argv=sys.argv[1:]):
    """Create Dockerfolders for images from manafest yaml data"""

    # Create the top-level parser
    parser = DockerfolderArgParser(
        description="Generate the 'Dockerfolders for the base docker images")
    parser.set()
    args = parser.parse(argv)

    # Read manifest perams
    with open(args.manifest, 'r') as f:
        manifest = OrderedLoad(f, yaml.SafeLoader)

    # For each release
    for release_name, release_data in manifest['release_names'].items():
        # For each os supported
        for os_name, os_data in release_data['os_names'].items():
            # For each os distro supported
            for os_code_name, os_code_data in os_data['os_code_names'].items():
                dockerfolder_dir = os.path.join(release_name, os_name, os_code_name)

                os_code_data['release_name'] = release_name
                os_code_data['os_name'] = os_name
                os_code_data['os_code_name'] = os_code_name

                populate_path(data=os_code_data, path=dockerfolder_dir)

                if args.auto:
                    # Run the dockerfile generation script
                    create_dockerfiles.main(('dir', '-d' + dockerfolder_dir))

    # Hacks to add hook scripts for osrf/ros
    if 'hacks' in manifest:
        # For each release
        for release_name, release_data in manifest['hacks'].items():
            # For each os supported
            for os_name, os_data in release_data['os_names'].items():
                # For each os distro supported
                for os_code_name, os_code_data in os_data['os_code_names'].items():
                    # For each tag supported:
                    for tag_name, tag_data in os_code_data['tag_names'].items():
                        hooksfolder_dir = os.path.join(release_name, os_name, os_code_name, tag_name, 'hooks')
                        tag_data['release_name'] = release_name
                        tag_data['os_name'] = os_name
                        tag_data['os_code_name'] = os_code_name
                        tag_data['tag_name'] = tag_name
                        populate_hooks(tag_data, hooksfolder_dir)