public static async Task AwaitInstanceStatus(this EC2Helper ec2, string instanceId, InstanceSummaryStatus summaryStatus, int timeout_ms, int intensity = 1500, bool thowOnTermination = true, CancellationToken cancellationToken = default(CancellationToken)) { var sw = Stopwatch.StartNew(); InstanceStatus status = null; do { if (status != null) { await Task.Delay(intensity); } status = await ec2.DescribeInstanceStatusAsync(instanceId, cancellationToken); if (status.Status.Status == summaryStatus.ToSummaryStatus()) { return; } if (thowOnTermination && (status.InstanceState?.Name == InstanceStateName.Stopping || status.InstanceState?.Name == InstanceStateName.Terminated)) { throw new Exception($"Failed Status Await, Instane is terminated or terminating: '{status.InstanceState.Name}'"); } }while (sw.ElapsedMilliseconds < timeout_ms); throw new TimeoutException($"Instance {instanceId} could not reach status summary '{summaryStatus}', last status summary: '{status.Status.Status}'"); }
public static SummaryStatus ToSummaryStatus(this InstanceSummaryStatus status) { switch (status) { case InstanceSummaryStatus.Initializing: return(SummaryStatus.Initializing); case InstanceSummaryStatus.InsufficientData: return(SummaryStatus.InsufficientData); case InstanceSummaryStatus.NotApplicable: return(SummaryStatus.NotApplicable); case InstanceSummaryStatus.Ok: return(SummaryStatus.Ok); default: throw new Exception($"Unrecognized instance summary status: {status.ToString()}"); } }