Exemple #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}'");
        }
Exemple #2
0
        public static async Task AwaitInstanceStateCode(this EC2Helper ec2, string instanceId, InstanceStateCode instanceStateCode, int timeout_ms, int intensity = 1500, 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.InstanceState.Code == (int)instanceStateCode)
                {
                    return;
                }
            }while (sw.ElapsedMilliseconds < timeout_ms);

            throw new TimeoutException($"Instance {instanceId} could not reach state code {instanceStateCode.ToString()}, last state: {status?.InstanceState?.Code.ToEnumStringOrDefault<InstanceStateCode>($"<convertion failure of value {status?.InstanceState?.Code}>")}");
        }