コード例 #1
0
        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}'");
        }
コード例 #2
0
        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()}");
            }
        }