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)
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 as e: 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)
def expand_template(template_name, data, options=None): global template_hook output = StringIO() try: interpreter = Interpreter(output=output, options=options) template_path = os.path.join(template_basepath, template_name) # create copy before manipulating data = dict(data) data['ESCAPE'] = _escape_value data['SNIPPET'] = _expand_snippet interpreter.file(open(template_path), locals=data) value = output.getvalue() if template_hook: template_hook(template_name, data, value) return value except Exception as e: print("%s processing template '%s'" % (e.__class__.__name__, template_name), file=sys.stderr) raise finally: interpreter.shutdown()
def expand_template(template_name, data, options=None): global template_basepath global interpreter global template_hooks output = StringIO() try: interpreter = Interpreter(output=output, options=options) for template_hook in template_hooks or []: interpreter.addHook(template_hook) template_path = os.path.join(template_basepath, template_name) # create copy before manipulating data = dict(data) # add some generic information to context data['template_name'] = template_name now = time.localtime() data['now_str'] = time.strftime( '%Y-%m-%d %H:%M:%S %z', now) data['today_str'] = time.strftime( '%Y-%m-%d (%z)', now) tz_name = time.strftime('%Z', now) tz_offset = time.strftime('%z', now) data['timezone'] = '%s%s%s' % \ (tz_name, '+' if tz_offset[0] == '-' else '-', tz_offset[1:3]) _add_helper_functions(data) interpreter.file(open(template_path, 'r'), locals=data) value = output.getvalue() return value except Exception as e: print("%s processing template '%s'" % (e.__class__.__name__, template_name), file=sys.stderr) raise finally: interpreter.shutdown() interpreter = None
def expand_template(template_name, data, options=None): global interpreter global template_hooks output = StringIO() try: interpreter = Interpreter(output=output, options=options) for template_hook in template_hooks or []: interpreter.addHook(template_hook) template_path = get_template_path(template_name) # create copy before manipulating data = dict(data) # add some generic information to context data['template_name'] = template_name now = time.localtime() data['now_str'] = time.strftime( '%Y-%m-%d %H:%M:%S %z', now) data['today_str'] = time.strftime( '%Y-%m-%d (%z)', now) tz_name = time.strftime('%Z', now) tz_offset = time.strftime('%z', now) data['timezone'] = '%s%s%s' % \ (tz_name, '+' if tz_offset[0] == '-' else '-', tz_offset[1:3]) _add_helper_functions(data) interpreter.file(open(template_path, 'r'), locals=data) value = output.getvalue() return value except Exception as e: print("%s processing template '%s'" % (e.__class__.__name__, template_name), file=sys.stderr) raise finally: interpreter.shutdown() interpreter = None
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_args(argv) # If paths were given explicitly if args.subparser_name == 'explicit': platform_path = args.platform images_path = args.images output_path = args.output # Else just use the given directory path elif args.subparser_name == 'dir': platform_path = 'platform.yaml' images_path = 'images.yaml.em' platform_path = os.path.join(args.directory, platform_path) images_path = os.path.join(args.directory, images_path) output_path = args.directory # Read platform perams with open(platform_path, 'r') as f: # use safe_load instead load platform = yaml.safe_load(f)['platform'] # Ream image perams using platform perams images_yaml = StringIO() try: interpreter = Interpreter(output=images_yaml) interpreter.file(open(images_path, 'r'), locals=platform) images_yaml = images_yaml.getvalue() except Exception as e: print("Error processing %s" % images_path) 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 perams data.update(platform) # Check version if not data['package_version']: checkVersion(data) # Apply version if ('gazebo_packages' in data) and ('package_version' in data): data['gazebo_packages'] = applyVersion(data['gazebo_packages'], data['package_version']) # Get path to save Docker file dockerfile_dir = os.path.join(output_path, image) if not os.path.exists(dockerfile_dir): os.makedirs(dockerfile_dir) data['dockerfile_dir'] = dockerfile_dir # generate Dockerfile create_dockerfile(data)
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_args(argv) # If paths were given explicitly if args.subparser_name == 'explicit': platform_path = args.platform images_path = args.images output_path = args.output # Else just use the given directory path elif args.subparser_name == 'dir': platform_path = 'platform.yaml' images_path = 'images.yaml.em' platform_path = os.path.join(args.directory, platform_path) images_path = os.path.join(args.directory, images_path) output_path = args.directory # Read platform perams with open(platform_path, 'r') as f: # use safe_load instead load platform = yaml.safe_load(f)['platform'] # Ream image perams using platform perams images_yaml = StringIO() try: interpreter = Interpreter(output=images_yaml) interpreter.file(open(images_path, 'r'), locals=platform) images_yaml = images_yaml.getvalue() except Exception as e: print("Error processing %s" % images_path) 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 perams data.update(platform) # Apply version data['gazebo_packages'] = applyVersion(data['gazebo_packages'], data['package_version']) # Get path to save Docker file dockerfile_dir = os.path.join(output_path, image) if not os.path.exists(dockerfile_dir): os.makedirs(dockerfile_dir) data['dockerfile_dir'] = dockerfile_dir # generate Dockerfile create_dockerfile(data)