From 6e393bfb8145383ac5e71990ebffd9cf049bd7dc Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Feb 09 2018 14:14:24 +0000 Subject: Allow rebuilding base images. Allow including image_extra_repos for particular image name-version. --- diff --git a/freshmaker/config.py b/freshmaker/config.py index 7be1f34..95a188d 100644 --- a/freshmaker/config.py +++ b/freshmaker/config.py @@ -193,6 +193,12 @@ class Config(object): 'default': {}, 'desc': 'Whitelist for build targets of handlers', }, + 'image_extra_repo': { + 'type': dict, + 'default': {}, + 'desc': 'Dict with base container "name-version" as key and URL ' + 'to extra .repo file to include in a rebuild', + }, 'lightblue_server_url': { 'type': str, 'default': '', diff --git a/freshmaker/handlers/__init__.py b/freshmaker/handlers/__init__.py index b283371..7f659ce 100644 --- a/freshmaker/handlers/__init__.py +++ b/freshmaker/handlers/__init__.py @@ -358,13 +358,6 @@ class ContainerBuildHandler(BaseHandler): return args = json.loads(build.build_args) - if not args["parent"]: - # TODO: Rebuild base image. - build.transition( - ArtifactBuildState.FAILED.value, - "Rebuild of container base image is not supported yet.") - return - scm_url = "%s/%s#%s" % (conf.git_base_url, args["repository"], args["commit"]) branch = args["branch"] @@ -414,8 +407,19 @@ class ContainerBuildHandler(BaseHandler): :return: list of repository URLs. :rtype: list """ - return [self.odcs_get_compose(rel.compose.odcs_compose_id)['result_repofile'] - for rel in build.composes] + repo_urls = [] + + # At first include image_extra_repos if any for this name-version. + if build.original_nvr: + parsed_nvr = parse_NVR(build.original_nvr) + name_version = "%s-%s" % (parsed_nvr["name"], parsed_nvr["version"]) + if name_version in conf.image_extra_repo: + repo_urls.append(conf.image_extra_repo[name_version]) + + repo_urls += [self.odcs_get_compose(rel.compose.odcs_compose_id)['result_repofile'] + for rel in build.composes] + + return repo_urls def start_to_build_images(self, builds): """Start to build images diff --git a/tests/test_handler.py b/tests/test_handler.py index 5eb25bf..0c9b3c8 100644 --- a/tests/test_handler.py +++ b/tests/test_handler.py @@ -205,6 +205,18 @@ class TestGetRepoURLs(helpers.ModelsTestCase): ], sorted(repos)) + @patch.object(freshmaker.conf, 'image_extra_repo', new={ + 'build-3': "http://localhost/test.repo" + }) + def test_get_repo_urls_extra_image_repo(self): + build_3 = ArtifactBuild.create( + db.session, self.event, 'build-3', ArtifactType.IMAGE, + state=ArtifactBuildState.PLANNED, original_nvr="build-3-1") + + handler = MyHandler() + repos = handler.get_repo_urls(build_3) + self.assertEqual(repos, ["http://localhost/test.repo"]) + class TestAllowBuildBasedOnWhitelist(helpers.FreshmakerTestCase): """Test BaseHandler.allow_build"""