class Mikoshi::Plan::Service

Constants

IGNORE_OPTIONS_WHEN_UPDATE
TASK_DEFINITION_WITH_REVISION

Public Class Methods

new(yaml_path: nil, client: nil) click to toggle source
Calls superclass method Mikoshi::Plan::Base::new
# File lib/mikoshi/plan/service.rb, line 13
def initialize(yaml_path: nil, client: nil)
  super

  if @data[:service][:task_definition].match(TASK_DEFINITION_WITH_REVISION).nil?
    raise ArgumentError, 'task_definition should have revision by numerically.'
  end

  @data[:service].store :service_name, @data[:service][:service]
end

Public Instance Methods

create_service() click to toggle source
# File lib/mikoshi/plan/service.rb, line 23
def create_service
  invoke_before_create_hooks

  @client.create_service(@data[:service].except(:service))
  wait_until_services_stable

  invoke_after_create_hooks
end
deploy_service(message: false) click to toggle source
# File lib/mikoshi/plan/service.rb, line 41
def deploy_service(message: false)
  @message = message

  case operation
  when :create
    create_service
  when :update
    update_service
  end
rescue StandardError => e
  invoke_failed_hooks
  raise e
end
update_service() click to toggle source
# File lib/mikoshi/plan/service.rb, line 32
def update_service
  invoke_before_update_hooks

  @client.update_service(@data[:service].except_keys(IGNORE_OPTIONS_WHEN_UPDATE))
  wait_until_services_stable

  invoke_after_update_hooks
end

Private Instance Methods

invoke_failed_hooks() click to toggle source
# File lib/mikoshi/plan/service.rb, line 92
def invoke_failed_hooks
  invoke_hooks(@data[:hooks][:failed]) unless @data.dig(:hooks, :failed).nil?
end
operation() click to toggle source
# File lib/mikoshi/plan/service.rb, line 57
def operation
  if @operation
    @operation
  else
    resp = @client.describe_services(cluster: @data[:service][:cluster], services: [@data[:service][:service]])

    @operation ||=
      if resp.services.empty? || resp.services.first.status == 'INACTIVE'
        :create
      else
        :update
      end
  end
end
wait_until_services_stable() click to toggle source
# File lib/mikoshi/plan/service.rb, line 72
def wait_until_services_stable
  params = { cluster: @data[:service][:cluster], services: [@data[:service][:service]] }

  @client.wait_until(:services_stable, params) do |w|
    w.max_attempts = 30
    w.delay        = 10

    w.before_wait do
      puts 'Waiting to change status of service...' if @message
    end
  end
end