package tw.com.parameters; import com.amazonaws.services.cloudformation.model.Parameter; import com.amazonaws.services.cloudformation.model.TemplateParameter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tw.com.entity.ProjectAndEnv; import tw.com.exceptions.CannotFindVpcException; import tw.com.exceptions.InvalidStackParameterException; import java.io.IOException; import java.util.Collection; import java.util.LinkedList; import java.util.List; public class EnvVarParams extends PopulatesParameters { private static final Logger logger = LoggerFactory.getLogger(EnvVarParams.class); @Override public void addParameters(Collection<Parameter> result, List<TemplateParameter> declaredParameters, ProjectAndEnv projAndEnv, ProvidesZones providesZones) throws CannotFindVpcException, IOException, InvalidStackParameterException { List<String> toPopulate = findParametersToFill(declaredParameters); populateFromEnv(result, toPopulate); } private List<String> findParametersToFill(List<TemplateParameter> declaredParameters) { List<String> results = new LinkedList<>(); for(TemplateParameter candidate : declaredParameters) { if (shouldPopulateFor(candidate)) { results.add(candidate.getParameterKey()); } } return results; } private boolean shouldPopulateFor(TemplateParameter candidate) { if (candidate.getDescription()==null) { return false; } return candidate.getDescription().equals(PopulatesParameters.ENV_TAG); } private void populateFromEnv(Collection<Parameter> result, List<String> toPopulate) throws InvalidStackParameterException { for(String name : toPopulate) { logger.info("Attempt to populate parameters from environmental variable: " + name); String value = System.getenv(name); if (value==null) { logger.error("Environment variable not set, name was " + name); throw new InvalidStackParameterException(name); } result.add(new Parameter().withParameterKey(name).withParameterValue(value)); } } }