/// <summary>
/// This method waits for all instances passed in to be marked as running in AWS. I assume
/// we can start using them once they are running :)
/// </summary>
/// <param name="ec2Client"></param>
/// <param name="instanceIds"></param>
private void WaitForInstancesToBeRunning(AmazonEC2Client ec2Client, List<string> instanceIds)
{
List<IsAgentReady> agentsThatAreReady =
instanceIds.Select(instanceId => new IsAgentReady {InstanceID = instanceId, IsReady = false}).ToList();
while (agentsThatAreReady.Any(x => x.IsReady == false))
{
foreach (string instanceId in instanceIds)
{
//first check this isnt already ready
bool already = agentsThatAreReady.Any(x => x.InstanceID == instanceId && x.IsReady);
if (already) continue;
//get its status
var describeInstanceStatusRequest = new DescribeInstanceStatusRequest
{
InstanceIds = new List<string>
{
instanceId
}
};
DescribeInstanceStatusResponse response =
ec2Client.DescribeInstanceStatus(describeInstanceStatusRequest);
if (response.InstanceStatuses.Count > 0 &&
response.InstanceStatuses[0].InstanceState.Name == InstanceStateName.Running)
{
IsAgentReady agent = agentsThatAreReady.First(x => x.InstanceID == instanceId);
agent.IsReady = true;
}
}
}
}