package tw.com.commandline.actions; import com.amazonaws.services.cloudformation.model.Parameter; import org.apache.commons.cli.MissingArgumentException; import tw.com.AwsFacade; import tw.com.FacadeFactory; import tw.com.commandline.CommandLineException; import tw.com.entity.InstanceSummary; import tw.com.entity.ProjectAndEnv; import tw.com.entity.SearchCriteria; import tw.com.exceptions.CfnAssistException; import java.io.IOException; import java.util.Collection; import java.util.List; public class InstancesAction extends SharedAction { @SuppressWarnings("static-access") public InstancesAction() { createOption("instances", "List out sumamry of instances"); } @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(); SearchCriteria criteria = new SearchCriteria(projectAndEnv); List<InstanceSummary> results = aws.listInstances(criteria); render(results); } @Override public void validate(ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argumentForAction) throws CommandLineException { guardForProject(projectAndEnv); guardForNoBuildNumber(projectAndEnv); guardForNoArtifacts(artifacts); } private void render(List<InstanceSummary> results) { System.out.println("id\tPrivate IP\tTags"); for(InstanceSummary entry : results) { System.out.println(String.format("%s\t%s\t%s", entry.getInstance(), entry.getPrivateIP(), entry.getTags())); } } @Override public boolean usesProject() { return true; } @Override public boolean usesComment() { return false; } @Override public boolean usesSNS() { return false; } }