package core.aws.task.ec2;
import core.aws.client.AWS;
import core.aws.env.Context;
import core.aws.resource.ec2.Instance;
import core.aws.util.ToStringHelper;
import core.aws.workflow.Action;
import core.aws.workflow.Task;
import java.util.List;
/**
* @author neo
*/
@Action("start-instance")
public class StartInstanceTask extends Task<Instance> {
public StartInstanceTask(Instance instance) {
super(instance);
}
@Override
public void execute(Context context) throws Exception {
List<String> instanceIds = resource.stoppedInstanceIds();
AWS.ec2.startInstances(instanceIds);
if (resource.elb != null) {
// ELB uses instance ip to register, after stop/start, ELB will not refresh if instance ip changed, here it has to reattach instance to ELB
String elbName = resource.elb.remoteELB.getLoadBalancerName();
AWS.elb.detachInstances(elbName, instanceIds);
AWS.elb.attachInstances(elbName, instanceIds, false);
}
context.output("instance/" + resource.id, "startedInstanceIds" + instanceIds);
}
@Override
public String toString() {
return new ToStringHelper(this)
.add(resource)
.add("remoteInstanceIds", resource.stoppedInstanceIds())
.toString();
}
}