class EcsDeployCli::Runners::UpdateCrons

Public Instance Methods

run!() click to toggle source
# File lib/ecs_deploy_cli/runners/update_crons.rb, line 6
def run!
  _, tasks, crons = @parser.resolve

  crons.each do |cron_name, cron_definition|
    task_definition = tasks[cron_definition[:task_name]]
    unless task_definition
      raise "Undefined task #{cron_definition[:task_name].inspect} in (#{tasks.keys.inspect})"
    end

    updated_task = _update_task(task_definition)

    current_target = load_or_init_target(cron_name)

    cwe_client.put_rule(
      cron_definition[:rule]
    )

    cwe_client.put_targets(
      rule: cron_name,
      targets: [
        id: current_target[:id],
        arn: current_target[:arn],
        role_arn: current_target[:role_arn],
        input: cron_definition[:input].to_json,
        ecs_parameters: cron_definition[:ecs_parameters].merge(task_definition_arn: updated_task[:task_definition_arn])
      ]
    )
    EcsDeployCli.logger.info "Deployed scheduled task \"#{cron_name}\"!"
  end
end

Private Instance Methods

load_or_init_target(cron_name) click to toggle source
# File lib/ecs_deploy_cli/runners/update_crons.rb, line 39
def load_or_init_target(cron_name)
  cwe_client.list_targets_by_rule({ rule: cron_name, limit: 1 }).to_h[:targets].first
rescue Aws::CloudWatchEvents::Errors::ResourceNotFoundException
  {
    id: cron_name,
    arn: "arn:aws:ecs:#{config[:aws_region]}:#{config[:aws_profile_id]}:cluster/#{config[:cluster]}",
    role_arn: "arn:aws:iam::#{config[:aws_profile_id]}:role/ecsEventsRole"
  }
end