package tw.com.commandline.actions; import com.amazonaws.services.cloudformation.model.Parameter; import org.apache.commons.cli.MissingArgumentException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tw.com.AwsFacade; import tw.com.FacadeFactory; import tw.com.commandline.CommandLineException; import tw.com.entity.ProjectAndEnv; import tw.com.entity.StackNameAndId; import tw.com.exceptions.CfnAssistException; import java.io.File; import java.io.IOException; import java.util.Collection; public class FileAction extends SharedAction { static final Logger logger = LoggerFactory.getLogger(FileAction.class); @SuppressWarnings("static-access") public FileAction() { createOptionWithArg("file", "The single template file to apply"); } public void invoke(FacadeFactory factory, ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... args) throws IOException, CfnAssistException, InterruptedException, MissingArgumentException { File templateFile = new File(args[0]); AwsFacade aws = factory.createFacade(); uploadArtifacts(factory, projectAndEnv, artifacts, cfnParams); StackNameAndId stackId = aws.applyTemplate(templateFile, projectAndEnv, cfnParams); logger.info("Created stack name "+stackId); } @Override public void validate(ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argumentForAction) throws CommandLineException { guardForProjectAndEnv(projectAndEnv); guardForArtifactAndRequiredParams(projectAndEnv, artifacts); } @Override public boolean usesProject() { return true; } @Override public boolean usesComment() { return true; } @Override public boolean usesSNS() { return true; } }