withAvailabilityZone(availabilityZone.get()));
log.info("Placement.AvailabilityZone=" + availabilityZone.get());
}
RunInstancesResult runInstancesResult = ec2Client.runInstances(runInstancesRequest);
DescribeInstanceStatusRequest describeInstanceStatusRequest = new DescribeInstanceStatusRequest().
withInstanceIds(runInstancesResult.getReservation().getInstances().get(0).getInstanceId());
try
{
while (true)
{
log.info("Sleeping for " + sleep + " ms");
Thread.sleep(sleep);
DescribeInstanceStatusResult describeInstanceStatusResult = ec2Client.describeInstanceStatus(describeInstanceStatusRequest);
if (describeInstanceStatusResult.getInstanceStatuses().isEmpty())
{
continue;
}
InstanceStatus instance = describeInstanceStatusResult.getInstanceStatuses().get(0);
String instanceState = instance.getInstanceState().getName();
log.info("instanceState = " + instanceState);
if ("pending".equals(instanceState))
{
continue;
}
if (!"running".equals(instanceState))
{
return Optional.absent();
}
String instanceStatus = instance.getInstanceStatus().getStatus();
String systemStatus = instance.getSystemStatus().getStatus();
log.info("instanceStatus = " + instanceStatus);
log.info("systemStatus = " + systemStatus);
if ("impaired".equals(instanceStatus))
{
return Optional.absent();
}
if ("impaired".equals(systemStatus))
{
return Optional.absent();
}
if (!"ok".equals(instanceStatus))
{
continue;
}
if (!"ok".equals(systemStatus))
{
continue;
}
break;
}
}
catch (InterruptedException e)
{
return Optional.absent();
}
DescribeInstancesResult describeInstancesResult = ec2Client.describeInstances(new DescribeInstancesRequest().
withInstanceIds(runInstancesResult.getReservation().getInstances().get(0).getInstanceId()));
return Optional.fromNullable(describeInstancesResult.getReservations().get(0).getInstances().get(0));
}