diff --git a/doozer/doozerlib/metadata.py b/doozer/doozerlib/metadata.py index 107725a81..b93bcfe0d 100644 --- a/doozer/doozerlib/metadata.py +++ b/doozer/doozerlib/metadata.py @@ -1,5 +1,6 @@ import datetime import io +import os import pathlib import re import fnmatch @@ -676,17 +677,27 @@ def get_component_name(self) -> str: def resolve_dockerfile_name(self) -> str: """ :return: Upstream Dockerfile name - If content.source.dockerfile is not specified, use content.source.dockerfile_fallback - If content.source.dockerfile_fallback is not specified, use "Dockerfile" + Resolve the Dockerfile name of upstream. If file specified in content.source.dockerfile doesn't exist, + try looking at the one specified in content.source.dockerfile_fallback as well. """ - dockerfile_name = "Dockerfile" if self.config.content.source.dockerfile is not Missing: - # Be aware that this attribute sometimes contains path elements + # Be aware that this attribute sometimes contains path elements too. dockerfile_name = self.config.content.source.dockerfile - elif self.config.content.source.dockerfile_fallback is not Missing: - dockerfile_name = self.config.content.source.dockerfile_fallback - self.logger.info(f"source.dockerfile not found, using source.dockerfile_fallback {dockerfile_name}") - return dockerfile_name + + source_dockerfile_path = os.path.join(self.config.content.source.path, dockerfile_name) + + if not os.path.isfile(source_dockerfile_path): + dockerfile_name_fallback = self.config.content.source.dockerfile_fallback + if dockerfile_name_fallback is not Missing: + self.logger.info( + f"Could not find source dockerfile at {dockerfile_name}, using fallback {dockerfile_name_fallback}") + return dockerfile_name_fallback + raise IOError( + f"Fallback dockerfile {dockerfile_name_fallback} is Missing and source dockerfile {source_dockerfile_path} doesn't exist") + else: + return dockerfile_name + else: + return "Dockerfile" def needs_rebuild(self): if self.config.targets: