Class: Wrapbox::Runner::Ecs::TaskWaiter

Inherits:
Object
  • Object
show all
Defined in:
lib/wrapbox/runner/ecs/task_waiter.rb

Defined Under Namespace

Classes: TaskMissing, TaskStopped, UnknownFailure, WaitFailure, WaitTimeout

Constant Summary collapse

MAX_DESCRIBABLE_TASK_COUNT =
100

Instance Method Summary collapse

Constructor Details

#initialize(cluster:, region:, delay:) ⇒ TaskWaiter

Returns a new instance of TaskWaiter.



17
18
19
20
21
22
23
24
# File 'lib/wrapbox/runner/ecs/task_waiter.rb', line 17

def initialize(cluster:, region:, delay:)
  @cluster = cluster
  @region = region
  @task_arn_to_described_result = {}
  @mutex = Mutex.new
  @cv = ConditionVariable.new
  Thread.new { update_described_results(delay) }
end

Instance Method Details

#wait_task_running(task_arn, timeout: 0) ⇒ Object

Returns Aws::ECS::Types::Task.

Returns:

  • Aws::ECS::Types::Task



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/wrapbox/runner/ecs/task_waiter.rb', line 27

def wait_task_running(task_arn, timeout: 0)
  Timeout.timeout(timeout) do
    loop do
      result = describe_task(task_arn)
      if result[:failure]
        case result[:failure].reason
        when "MISSING"
          raise TaskMissing
        else
          raise UnknownFailure
        end
      end
      raise TaskStopped if result[:task].last_status == "STOPPED"

      return result[:task] if result[:task].last_status == "RUNNING"
    end
  end
rescue Timeout::Error
  raise WaitTimeout
end

#wait_task_stopped(task_arn, timeout: 0) ⇒ Object

Returns Aws::ECS::Types::Task.

Returns:

  • Aws::ECS::Types::Task



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/wrapbox/runner/ecs/task_waiter.rb', line 49

def wait_task_stopped(task_arn, timeout: 0)
  Timeout.timeout(timeout) do
    result = nil
    loop do
      result = describe_task(task_arn)
      if result[:failure]
        case result[:failure].reason
        when "MISSING"
          raise TaskMissing
        else
          raise UnknownFailure
        end
      end

      return result[:task] if result[:task].last_status == "STOPPED"
    end
  end
rescue Timeout::Error
  raise WaitTimeout
end