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.CommandExecutor; import tw.com.commandline.CommandLineException; import tw.com.entity.ProjectAndEnv; import tw.com.exceptions.CfnAssistException; import java.io.IOException; import java.util.Collection; import java.util.List; public class SSHCommandAction extends SharedAction { private static final Logger logger = LoggerFactory.getLogger(SSHCommandAction.class); @SuppressWarnings("static-access") public SSHCommandAction() { createOptionalWithOptionalArg("ssh", "Create ssh command for the project/env combination"); } @Override public void invoke(FacadeFactory factory, ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argument) throws IOException, InterruptedException, CfnAssistException, MissingArgumentException { AwsFacade aws = factory.createFacade(); CommandExecutor commandExecutor = factory.getCommandExecutor(); String user = (argument==null) ? "ec2-user" : argument[0]; List<String> sshCommand = aws.createSSHCommand(projectAndEnv, user); logger.info("About to execute " + sshCommand); commandExecutor.execute(sshCommand); } @Override public void validate(ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argumentForAction) throws CommandLineException { guardForProjectAndEnv(projectAndEnv); guardForNoBuildNumber(projectAndEnv); guardForNoArtifacts(artifacts); } @Override public boolean usesProject() { return true; } @Override public boolean usesComment() { return false; } @Override public boolean usesSNS() { return false; } }