package com.sequenceiq.cloudbreak.service.image; import java.util.Map; import java.util.Optional; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.cloud.model.HDPInfo; @Component public class ImageNameUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ImageNameUtil.class); private static final String DEFAULT = "default"; @Inject private Environment environment; public String determineImageName(String platform, String region, String ambariVersion, String hdpVersion, Optional<String> customImage) { String image = getDefaultImage(platform, region); if (customImage.isPresent()) { image = customImage.get(); } else if (ambariVersion != null) { String specificImage = getSpecificImage(platform, region, ambariVersion, hdpVersion); if (specificImage != null) { image = specificImage; } else { LOGGER.info("The specified ambari-hdp version image not found: ambari: {} hdp: {}", ambariVersion, hdpVersion); } } LOGGER.info("Selected VM image for CloudPlatform '{}' is: {}", platform, image); return image; } public String determineImageName(HDPInfo hdpInfo, String platform, String region, Optional<String> customImage) { Map<String, String> regions = hdpInfo.getImages().get(platform); if (customImage.isPresent()) { return customImage.get(); } else if (regions != null) { String image = regions.get(region); return image == null ? regions.get(DEFAULT) : image; } return null; } private String getDefaultImage(String platform, String region) { String image = getImage(platform + "." + region); if (image == null) { image = getImage(platform + "." + DEFAULT); } return image; } private String getSpecificImage(String platform, String region, String ambariVersion, String hdpVersion) { String image = getImage(String.format("%s-ambari_%s-hdp_%s.%s", platform, ambariVersion, hdpVersion, region)); if (image == null) { image = getImage(String.format("%s-ambari_%s-hdp_%s.%s", platform, ambariVersion, hdpVersion, DEFAULT)); } return image; } private String getImage(String key) { return environment.getProperty(key); } }