Exemplo n.º 1
0
def assembly_group_config(releases_config: Model, assembly: str,
                          group_config: Model) -> Model:
    """
    Returns a group config based on the assembly information
    and the input group config.
    :param releases_config: A Model for releases.yaml.
    :param assembly: The name of the assembly
    :param group_config: The group config to merge into a new group config (original Model will not be altered)
    :param _visited: Keeps track of visited assembly definitions to prevent infinite recursion.
    """
    if not assembly or not isinstance(releases_config, Model):
        return group_config

    _check_recursion(releases_config, assembly)
    target_assembly = releases_config.releases[assembly].assembly

    if target_assembly.basis.assembly:  # Does this assembly inherit from another?
        # Recursively apply ancestor assemblies
        group_config = assembly_group_config(releases_config,
                                             target_assembly.basis.assembly,
                                             group_config)

    target_assembly_group = target_assembly.group
    if not target_assembly_group:
        return group_config
    return Model(dict_to_model=merger(target_assembly_group.primitive(),
                                      group_config.primitive()))
Exemplo n.º 2
0
def assembly_metadata_config(releases_config: Model, assembly: str,
                             meta_type: str, distgit_key: str,
                             meta_config: Model) -> Model:
    """
    Returns a group member's metadata configuration based on the assembly information
    and the initial file-based config.
    :param releases_config: A Model for releases.yaml.
    :param assembly: The name of the assembly
    :param meta_type: 'rpm' or 'image'
    :param distgit_key: The member's distgit_key
    :param meta_config: The meta's config object
    :return: Returns a computed config for the metadata (e.g. value for meta.config).
    """
    if not assembly or not isinstance(releases_config, Model):
        return meta_config

    _check_recursion(releases_config, assembly)
    target_assembly = releases_config.releases[assembly].assembly

    if target_assembly.basis.assembly:  # Does this assembly inherit from another?
        # Recursive apply ancestor assemblies
        meta_config = assembly_metadata_config(releases_config,
                                               target_assembly.basis.assembly,
                                               meta_type, distgit_key,
                                               meta_config)

    config_dict = meta_config.primitive()

    component_list = target_assembly.members[f'{meta_type}s']
    for component_entry in component_list:
        if component_entry.distgit_key == '*' or component_entry.distgit_key == distgit_key and component_entry.metadata:
            config_dict = merger(component_entry.metadata.primitive(),
                                 config_dict)

    return Model(dict_to_model=config_dict)
Exemplo n.º 3
0
 def get_group_config(self):
     # group.yml can contain a `vars` section which should be a
     # single level dict containing keys to str.format(**dict) replace
     # into the YAML content. If `vars` found, the format will be
     # preformed and the YAML model will reloaded from that result
     tmp_config = Model(self.gitdata.load_data(key='group').data)
     replace_vars = tmp_config.vars or Model()
     if self.assembly:
         replace_vars['runtime_assembly'] = self.assembly
     try:
         group_yml = yaml.safe_dump(tmp_config.primitive(), default_flow_style=False)
         tmp_config = Model(yaml.safe_load(group_yml.format(**replace_vars)))
     except KeyError as e:
         raise ValueError('group.yml contains template key `{}` but no value was provided'.format(e.args[0]))
     return assembly_group_config(self.get_releases_config(), self.assembly, tmp_config)