예제 #1
0
def test_merging_plain_descriptors():
    desc1 = MockedDescriptor({'name': 'foo', 'a': 1, 'b': 2})

    desc2 = MockedDescriptor({'name': 'foo', 'b': 5, 'c': 3})

    expected = MockedDescriptor({'name': 'foo', 'a': 1, 'b': 2, 'c': 3})
    assert expected == _merge_descriptors(desc1, desc2)
    assert expected.items() == _merge_descriptors(desc1, desc2).items()
예제 #2
0
def test_merging_description_override():
    desc1 = Image({'name': 'foo', 'version': 1}, None)

    desc2 = Overrides({'name': 'mod1', 'description': 'mod_desc'}, None)

    merged = _merge_descriptors(desc2, desc1)
    assert 'description' in merged
예제 #3
0
def test_merging_description_modules():
    desc1 = Module({'name': 'foo'}, None, None)

    desc2 = Module({'name': 'mod1', 'description': 'mod_desc'}, None, None)

    merged = _merge_descriptors(desc1, desc2)
    assert 'description' not in merged
예제 #4
0
def test_merging_description_image():
    desc1 = Image({'name': 'foo', 'version': 1}, None)

    desc2 = Module({
        'name': 'mod1',
        'version': 2,
        'description': 'mod_desc'
    }, None, None)

    merged = _merge_descriptors(desc1, desc2)
    assert 'description' not in merged
예제 #5
0
def test_merging_emdedded_descriptors():
    desc1 = TestDescriptor({'name': 'a',
                            'a': 1,
                            'b': {'name': 'b',
                                  'b1': 10,
                                  'b2': 20}})
    desc2 = TestDescriptor({'b': {'name': 'b',
                                  'b2': 50,
                                  'b3': 30},
                            'c': {'name': 'c'}})

    expected = TestDescriptor({'name': 'a',
                               'a': 1,
                               'b': {'name': 'b',
                                     'b1': 10,
                                     'b2': 20,
                                     'b3': 30},
                               'c': {'name': 'c'}})

    assert expected == _merge_descriptors(desc1, desc2)
예제 #6
0
파일: image.py 프로젝트: hmlnarik/cekit
    def apply_image_overrides(self, overrides):
        """
        Applies overrides to the image descriptor.
        """
        if not overrides:
            return
        for override in overrides:
            if override.name:
                self.name = override.name
            if override.version:
                self.version = override.version
            if override.base:
                self.base = override.base
            if override.description:
                self.description = override.description

            labels = Image._to_dict(self.labels)
            for label in override.labels:
                name = label.name
                if name in labels:
                    labels[name] = label.merge(labels[name])
                else:
                    labels[name] = label
            self._descriptor['labels'] = list(labels.values())

            envs = Image._to_dict(self.envs)
            for env in override.envs:
                name = env.name
                if name in envs:
                    envs[name] = env.merge(envs[name])
                else:
                    envs[name] = env
            self._descriptor['envs'] = list(envs.values())

            ports = Image._to_dict(self.ports)
            for port in override.ports:
                name = port.value
                if name in ports:
                    ports[name] = port.merge(ports[name])
                else:
                    ports[name] = port
            self._descriptor['ports'] = list(ports.values())

            module_repositories = Image._to_dict(self.modules.repositories)
            for repository in override.modules.repositories:
                name = repository.name
                if name in module_repositories:
                    module_repositories[name] = repository.merge(
                        module_repositories[name])
                else:
                    module_repositories[name] = repository
            self.modules._descriptor['repositories'] = list(
                module_repositories.values())

            package_repositories = Image._to_dict(self.packages.repositories)
            for repository in override.packages.repositories:
                name = repository.name
                if name in package_repositories:
                    package_repositories[name] = repository.merge(
                        package_repositories[name])
                else:
                    package_repositories[name] = repository
            self.packages._descriptor['repositories'] = list(
                package_repositories.values())

            if override.packages.manager:
                self.packages._descriptor[
                    'manager'] = override.packages.manager

            # If the key is set (value could be None!)
            if 'content_sets' in override.packages:
                # If value is different than None, merge it
                if override.packages.content_sets:
                    self.packages.content_sets = _merge_descriptors(
                        override.packages.content_sets,
                        self.packages.content_sets)
                else:
                    # If key exists and value is None - remove it from the main packages section
                    self.packages._descriptor.pop('content_sets', None)

            # If the key is set (value could be None!)
            if 'content_sets_file' in override.packages:
                # If value is different than None, set it
                if override.packages.content_sets_file:
                    self.packages.content_sets_file = override.packages.content_sets_file
                else:
                    # If key exists and value is None - remove it from the main packages section
                    # Remove 'content_sets' too, because this is where it should already be translated into
                    self.packages._descriptor.pop('content_sets_file', None)
                    self.packages._descriptor.pop('content_sets', None)

            if override.osbs != None:
                self.osbs = override.osbs.merge(self.osbs)

            for package in override.packages.install:
                if package not in self.packages.install:
                    self.packages.install.append(package)

            artifact_overrides = self._image_overrides['artifacts']
            image_artifacts = Image._to_dict(self.artifacts)
            for artifact in override.artifacts:
                name = artifact.name
                # collect override so we can apply it to modules
                artifact_overrides[name] = artifact
                # add it to the list of everything
                self._all_artifacts[name] = artifact
                # Apply override to image descriptor
                image_artifacts[name] = artifact
            self._descriptor['artifacts'] = list(image_artifacts.values())

            module_overrides = self._image_overrides['modules']
            image_modules = Image._to_dict(self.modules.install)
            for module in override.modules.install:
                name = module.name
                # collect override so we can apply it to modules.
                # this allows us to override module versions without affecting ordering.
                module_overrides[name] = module
                # Apply override to image descriptor
                # If the module does not exists in the original descriptor, add it there
                image_modules[name] = module
            self.modules._descriptor['install'] = list(image_modules.values())

            if override.run != None:
                if self.run:
                    self.run = override.run.merge(self.run)
                else:
                    self.run = override.run