package tw.com.commandline.actions;
import com.amazonaws.services.cloudformation.model.Parameter;
import com.amazonaws.services.ec2.model.KeyPair;
import org.apache.commons.cli.MissingArgumentException;
import tw.com.AwsFacade;
import tw.com.FacadeFactory;
import tw.com.commandline.CommandLineException;
import tw.com.entity.ProjectAndEnv;
import tw.com.exceptions.CfnAssistException;
import java.io.IOException;
import java.util.Collection;
import static java.lang.String.format;
public class CreateKeyPairAction extends SharedAction {
@SuppressWarnings("static-access")
public CreateKeyPairAction() {
createOptionalWithOptionalArg("keypair", "Create a new keypair for the given project and environment");
}
@Override
public void invoke(FacadeFactory factory, ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams,
Collection<Parameter> artifacts, String... argument) throws IOException, InterruptedException,
CfnAssistException, MissingArgumentException {
AwsFacade facade = factory.createFacade();
String filename;
if (argument==null) {
String home = System.getenv("HOME");
String keypairName = format("%s_%s", projectAndEnv.getProject(), projectAndEnv.getEnv());
filename = format("%s/.ssh/%s.pem", home, keypairName);
} else {
filename = argument[0];
}
KeyPair keyPair = facade.createKeyPair(projectAndEnv, factory.getSavesFile(), filename);
System.out.println(format("Created key %s with fingerprint %s", keyPair.getKeyName(),
keyPair.getKeyFingerprint()));
}
@Override
public void validate(ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argumentForAction) throws CommandLineException {
guardForProjectAndEnv(projectAndEnv);
}
@Override
public boolean usesProject() {
return true;
}
@Override
public boolean usesComment() {
return false;
}
@Override
public boolean usesSNS() {
return false;
}
}