Class: Full360::Sequencer::RunECSTask
- Inherits:
-
RunTaskBase
- Object
- RunTaskBase
- Full360::Sequencer::RunECSTask
- Defined in:
- lib/full360_sequencer/run_ecs_task.rb
Instance Attribute Summary collapse
-
#cluster ⇒ Object
readonly
Returns the value of attribute cluster.
-
#ecs_client ⇒ Object
Returns the value of attribute ecs_client.
-
#logger ⇒ Object
Returns the value of attribute logger.
-
#params ⇒ Object
Returns the value of attribute params.
-
#start_time ⇒ Object
readonly
Returns the value of attribute start_time.
-
#task_arn ⇒ Object
readonly
Returns the value of attribute task_arn.
-
#task_name ⇒ Object
Returns the value of attribute task_name.
Attributes inherited from RunTaskBase
Instance Method Summary collapse
- #completed? ⇒ Boolean
-
#determine_success(resp) ⇒ Object
success is determined by all containers having zero exit code.
- #ecs_describe_tasks ⇒ Object
- #ecs_run_task ⇒ Object
-
#initialize(task_name, params, ecs_client = nil, logger = nil) ⇒ RunECSTask
constructor
A new instance of RunECSTask.
-
#last_task_status(resp) ⇒ Object
parses last status from aws API response.
- #run_task ⇒ Object
Methods inherited from RunTaskBase
Constructor Details
#initialize(task_name, params, ecs_client = nil, logger = nil) ⇒ RunECSTask
Returns a new instance of RunECSTask.
16 17 18 19 20 21 22 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 16 def initialize(task_name, params, ecs_client = nil, logger = nil) @logger = logger ||= Logger.new(STDOUT) @ecs_client = ecs_client ||= Aws::ECS::Client.new @task_name = task_name @params = params[:parameters] @cluster = self.params[:cluster] end |
Instance Attribute Details
#cluster ⇒ Object (readonly)
Returns the value of attribute cluster.
12 13 14 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 12 def cluster @cluster end |
#ecs_client ⇒ Object
Returns the value of attribute ecs_client.
9 10 11 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 9 def ecs_client @ecs_client end |
#logger ⇒ Object
Returns the value of attribute logger.
10 11 12 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 10 def logger @logger end |
#params ⇒ Object
Returns the value of attribute params.
8 9 10 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 8 def params @params end |
#start_time ⇒ Object (readonly)
Returns the value of attribute start_time.
14 15 16 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 14 def start_time @start_time end |
#task_arn ⇒ Object (readonly)
Returns the value of attribute task_arn.
13 14 15 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 13 def task_arn @task_arn end |
#task_name ⇒ Object
Returns the value of attribute task_name.
7 8 9 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 7 def task_name @task_name end |
Instance Method Details
#completed? ⇒ Boolean
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 53 def completed? retries ||= 0 resp = ecs_describe_tasks status = last_task_status(resp) logger.info("#{task_name}: #{task_arn} current status: #{status}") completed = false if status == "STOPPED" logger.info("#{task_name} completed in #{Time.new.utc - start_time} seconds") # parse exit_code(s) and return completion @success = determine_success(resp) completed = true end completed rescue => e logger.warn(e.) logger.warn("task completion check failed, trying again ##{retries}") sleep 10*retries retry if (retries += 1) < 3 logger.error("SEQUENCER_ERROR: #{e.message}") e.backtrace.each { |r| logger.error(r) } end |
#determine_success(resp) ⇒ Object
success is determined by all containers having zero exit code
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 89 def determine_success(resp) success = true resp.tasks.first.containers.each do |c| logger.info("#{task_name}: container #{c.name} #{c.container_arn} completed with exit_code #{c.exit_code}") # we had a problem! success = false if c.exit_code != 0 end success end |
#ecs_describe_tasks ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 44 def ecs_describe_tasks ecs_client.describe_tasks( { cluster: cluster, tasks: [task_arn], } ) end |
#ecs_run_task ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 33 def ecs_run_task logger.debug("running ECS task #{task_name}...") @start_time = Time.new.utc resp = ecs_client.run_task(params) resp rescue => e logger.error("SEQUENCER_ERROR: response from ECS #{resp}") raise e end |
#last_task_status(resp) ⇒ Object
parses last status from aws API response
84 85 86 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 84 def last_task_status(resp) resp.tasks.first.last_status end |
#run_task ⇒ Object
24 25 26 27 28 29 30 31 |
# File 'lib/full360_sequencer/run_ecs_task.rb', line 24 def run_task logger.info("starting ECS task #{task_name}") resp = ecs_run_task @task_arn = resp.tasks.first.task_arn logger.info("#{task_name} task created #{task_arn} on cluster #{cluster}") end |