def check_module_version(path, version): descriptor = Module( tools.load_descriptor(os.path.join(path, 'module.yaml')), path, os.path.dirname(os.path.abspath(os.path.join(path, 'module.yaml')))) if hasattr(descriptor, 'version') and descriptor.version != version: raise CekitError("Requested conflicting version '%s' of module '%s'" % (version, descriptor['name']))
def override(self, overrides_path): logger.info("Using overrides file from '%s'." % overrides_path) descriptor = Overrides( tools.load_descriptor(overrides_path), os.path.dirname(os.path.abspath(overrides_path))) descriptor.merge(self.image) return descriptor
def __init__(self, descriptor_path, target, builder, overrides, params): self._type = builder descriptor = tools.load_descriptor(descriptor_path) # if there is a local modules directory and no modules are defined # we will inject it for a backward compatibility local_mod_path = os.path.join( os.path.abspath(os.path.dirname(descriptor_path)), 'modules') if os.path.exists(local_mod_path) and 'modules' in descriptor: modules = descriptor.get('modules') if not modules.get('repositories'): modules['repositories'] = [{ 'path': local_mod_path, 'name': 'modules' }] self.image = Image(descriptor, os.path.dirname(os.path.abspath(descriptor_path))) self.target = target self._params = params self._fetch_repos = False if overrides: for override in overrides: self.image = self.override(override) logger.info("Initializing image descriptor...")
def init(self): """ Initializes the image object. """ LOGGER.debug("Removing old target directory") shutil.rmtree(self.target, ignore_errors=True) os.makedirs(os.path.join(self.target, 'image')) # Read the main image descriptor and create an Image object from it descriptor = tools.load_descriptor(self._descriptor_path) if isinstance(descriptor, list): LOGGER.info( "Descriptor contains multiple elements, assuming multi-stage image" ) LOGGER.info( "Found {} builder image(s) and one target image".format( len(descriptor[:-1]))) # Iterate over images defined in image descriptor and # create Image objects out of them for image_descriptor in descriptor[:-1]: self.builder_images.append( Image( image_descriptor, os.path.dirname(os.path.abspath( self._descriptor_path)))) descriptor = descriptor[-1] self.image = Image( descriptor, os.path.dirname(os.path.abspath(self._descriptor_path))) # Construct list of all images (builder images + main one) self.images = [self.image] + self.builder_images for image in self.images: # Apply overrides to all image definitions: # intermediate (builder) images and target image as well # It is required to build the module registry image.apply_image_overrides(self._overrides) # Load definitions of modules # We need to load it after we apply overrides so that any changes to modules # will be reflected there as well self.build_module_registry() for image in self.images: # Process included modules image.apply_module_overrides(self._module_registry) image.process_defaults() # Add build labels self.add_build_labels()
def load_repository(self, repo_dir): for modules_dir, _, files in os.walk(repo_dir): if 'module.yaml' in files: module_descriptor_path = os.path.abspath(os.path.expanduser( os.path.normcase(os.path.join(modules_dir, 'module.yaml')))) module = Module(tools.load_descriptor(module_descriptor_path), modules_dir, os.path.dirname(module_descriptor_path)) LOGGER.debug("Adding module '{}', path: '{}'".format(module.name, module.path)) self._module_registry.add_module(module)
def init(self): """ Initializes the image object. """ LOGGER.debug("Removing old target directory") shutil.rmtree(self.target, ignore_errors=True) os.makedirs(os.path.join(self.target, 'image')) # Read the main image descriptor and create an Image object from it descriptor = tools.load_descriptor(self._descriptor_path) if isinstance(descriptor, list): LOGGER.info( "Descriptor contains multiple elements, assuming multi-stage image" ) LOGGER.info( "Found {} builder image(s) and one target image".format( len(descriptor[:-1]))) # Iterate over images defined in image descriptor and # create Image objects out of them for image_descriptor in descriptor[:-1]: self.builder_images.append( Image( image_descriptor, os.path.dirname(os.path.abspath( self._descriptor_path)))) descriptor = descriptor[-1] self.image = Image( descriptor, os.path.dirname(os.path.abspath(self._descriptor_path))) # apply overrides to the image definition self.image.apply_image_overrides(self._overrides) for builder in self.builder_images: builder.apply_image_overrides(self._overrides) # add build labels self.add_build_labels() # load the definitions of the modules self.build_module_registry() # process included modules self.image.apply_module_overrides(self._module_registry) self.image.process_defaults()
def __init__(self, descriptor_path, target, overrides): self._descriptor_path = descriptor_path self._overrides = [] self.target = target self._fetch_repos = False self._module_registry = ModuleRegistry() self.image = None if overrides: for override in overrides: # TODO: If the overrides is provided as text, why do we try to get path to it? LOGGER.debug("Loading override '%s'" % (override)) self._overrides.append(Overrides(tools.load_descriptor( override), os.path.dirname(os.path.abspath(override)))) LOGGER.info("Initializing image descriptor...")
def discover_modules(repo_dir): """Looks through the directory trees for modules descriptor. When module is found, it create cekit.module.Module instance and add this instance to the cekit.module.modules list. """ for modules_dir, _, files in os.walk(repo_dir): if 'module.yaml' in files: module = Module( tools.load_descriptor(os.path.join(modules_dir, 'module.yaml')), modules_dir, os.path.dirname( os.path.abspath(os.path.join(modules_dir, 'module.yaml')))) module.fetch_dependencies(repo_dir) logger.debug("Adding module '%s', path: '%s'" % (module.name, module.path)) modules.append(module)
def init(self): """ Initializes the image object. """ # Read the main image descriptor and create an Image object from it descriptor = tools.load_descriptor(self._descriptor_path) self.image = Image(descriptor, os.path.dirname(os.path.abspath(self._descriptor_path))) # apply overrides to the image definition self.image.apply_image_overrides(self._overrides) # add build labels self.add_build_labels() # load the definitions of the modules self.build_module_registry() # process included modules self.apply_module_overrides() self.image.process_defaults()
def __init__(self, descriptor_path, target, overrides): self._descriptor_path = descriptor_path self._overrides = [] self.target = target self._fetch_repos = False self._module_registry = ModuleRegistry() self.image = None self.builder_images = [] self.images = [] if overrides: for override in overrides: LOGGER.debug("Loading override '{}'".format(override)) override_artifact_dir = os.path.dirname(os.path.abspath(override)) if not os.path.exists(override): override_artifact_dir = os.path.dirname(os.path.abspath(descriptor_path)) self._overrides.append(Overrides(tools.load_descriptor( override), override_artifact_dir)) LOGGER.info("Initializing image descriptor...")
def init(self): """ Initializes the image object. """ LOGGER.debug("Removing old target directory") shutil.rmtree(self.target, ignore_errors=True) os.makedirs(os.path.join(self.target, 'image')) # Read the main image descriptor and create an Image object from it descriptor = tools.load_descriptor(self._descriptor_path) self.image = Image( descriptor, os.path.dirname(os.path.abspath(self._descriptor_path))) # apply overrides to the image definition self.image.apply_image_overrides(self._overrides) # add build labels self.add_build_labels() # load the definitions of the modules self.build_module_registry() # process included modules self.apply_module_overrides() self.image.process_defaults()