Skip to content

Commit

Permalink
Modules and packages defined in overrides are not ignored anymore
Browse files Browse the repository at this point in the history
This fix makes sure that when a package or modules is defined in
overrides only it gets added to the resulting image.

Same applies to artifacts.

Fixes cekit#489
  • Loading branch information
goldmann committed Apr 24, 2019
1 parent 84247e0 commit d049b08
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 9 deletions.
7 changes: 3 additions & 4 deletions cekit/descriptor/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,6 @@ def apply_image_overrides(self, overrides):
if override.osbs != None:
self.osbs = override.osbs.merge(self.osbs)

# should we really allow overrides to contribute content?
for package in override.packages.install:
if package not in self.packages.install:
self.packages.install.append(package)
Expand All @@ -271,9 +270,9 @@ def apply_image_overrides(self, overrides):
# collect override so we can apply it to modules.
# this allows us to override module versions without affecting ordering.
module_overrides[name] = module
if name in image_modules:
# apply override to image descriptor
image_modules[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:
Expand Down
2 changes: 1 addition & 1 deletion cekit/descriptor/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ def __init__(self, descriptor, path, artifact_dir):

@property
def execute(self):
return self.get('execute', [])
return self.get('execute')
4 changes: 2 additions & 2 deletions cekit/descriptor/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ def __init__(self, descriptor, path):

@property
def repositories(self):
return self.get('repositories', [])
return self.get('repositories')

@property
def install(self):
return self.get('install', [])
return self.get('install')



Expand Down
6 changes: 4 additions & 2 deletions cekit/descriptor/packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,19 @@ def _prepare(self):
self._descriptor['repositories'] = [Repository(x)
for x in self._descriptor.get('repositories', [])]

self._descriptor['install'] = self._descriptor.get('install', [])

@property
def manager(self):
return self.get('manager')

@property
def repositories(self):
return self.get('repositories', [])
return self.get('repositories')

@property
def install(self):
return self.get('install', [])
return self.get('install')

@property
def content_sets(self):
Expand Down
52 changes: 52 additions & 0 deletions tests/test_validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@
'install': [{'name': 'foo'}]}
}

simple_image_descriptor = {
'schema_version': 1,
'from': 'centos:latest',
'name': 'test/image',
'version': '1.0'
}

feature_label_test = """
@test
Feature: Test test
Expand Down Expand Up @@ -408,6 +415,51 @@ def test_module_override(tmpdir, mocker):
assert check_dockerfile(image_dir, 'RUN [ "bash", "-x", "/tmp/scripts/foo/script" ]')


# https://github.com/cekit/cekit/issues/489
def test_override_add_module_and_packages_in_overrides(tmpdir, mocker):
image_dir = str(tmpdir.mkdir('source'))
copy_repos(image_dir)

with open(os.path.join(image_dir, 'image.yaml'), 'w') as fd:
yaml.dump(simple_image_descriptor, fd, default_flow_style=False)

overrides_descriptor = {
'schema_version': 1,
'modules': {
'repositories': [
{
'name': 'modules',
'path': 'tests/modules/repo_3'
}
]
}
}

with open(os.path.join(image_dir, 'overrides.yaml'), 'w') as fd:
yaml.dump(overrides_descriptor, fd, default_flow_style=False)

run_cekit(image_dir,
['-v',
'build',
'--dry-run',
'--overrides-file', 'overrides.yaml',
'--overrides', '{"modules": {"install": [{"name": "master"}, {"name": "child"}] } }',
'--overrides', '{"packages": {"install": ["package1", "package2"] } }',
'--overrides', '{"artifacts": [{"name": "test", "path": "image.yaml"}] }',
'docker'])

module_dir = os.path.join(image_dir,
'target',
'image',
'modules',
'foo')

assert check_dockerfile(
image_dir, 'RUN yum --setopt=tsflags=nodocs install -y package1 package2 \\')
assert check_dockerfile(image_dir, 'RUN [ "bash", "-x", "/tmp/scripts/master/script_a" ]')
assert check_dockerfile_text(image_dir, 'COPY \\\n test \\\n /tmp/artifacts/')


def check_dockerfile(image_dir, match):
with open(os.path.join(image_dir, 'target', 'image', 'Dockerfile'), 'r') as fd:
for line in fd.readlines():
Expand Down

0 comments on commit d049b08

Please sign in to comment.