class Rollo::Model::Service

Public Class Methods

new( ecs_cluster_name, ecs_service_arn, region, ecs_resource = nil, waiter = nil) click to toggle source
# File lib/rollo/model/service.rb, line 8
def initialize(
    ecs_cluster_name, ecs_service_arn, region,
        ecs_resource = nil, waiter = nil)
  @ecs_cluster_name = ecs_cluster_name
  @ecs_service_arn = ecs_service_arn
  @ecs_resource = ecs_resource || Aws::ECS::Resource.new(region: region)
  reload

  @waiter = waiter || Wait.new(attempts: 720, timeout: 30, delay: 5)
end

Public Instance Methods

decrease_instance_count_by(count_delta, options = {}, &block) click to toggle source
# File lib/rollo/model/service.rb, line 67
def decrease_instance_count_by(count_delta, options = {}, &block)
  minimum = options[:minimum_instance_count] || 0
  initial = desired_count
  decreased = initial - count_delta
  target = [decreased, minimum].max

  callbacks_for(block).try_respond_with(
      :prepare, initial, target)

  ensure_instance_count(target, &block)
end
desired_count() click to toggle source
# File lib/rollo/model/service.rb, line 39
def desired_count
  @ecs_service.desired_count
end
desired_count=(count) click to toggle source
# File lib/rollo/model/service.rb, line 43
def desired_count=(count)
  @ecs_resource.client
      .update_service(
          cluster: @ecs_cluster_name,
          service: @ecs_service_arn,
          desired_count: count)
end
ensure_instance_count(count, &block) click to toggle source
# File lib/rollo/model/service.rb, line 79
def ensure_instance_count(count, &block)
  self.desired_count = count
  wait_for_service_health(&block)
end
has_desired_count?() click to toggle source
# File lib/rollo/model/service.rb, line 51
def has_desired_count?
  running_count == desired_count
end
increase_instance_count_by(count_delta, options = {}, &block) click to toggle source
# File lib/rollo/model/service.rb, line 55
def increase_instance_count_by(count_delta, options = {}, &block)
  maximum = options[:maximum_instance_count] || Float::INFINITY
  initial = desired_count
  increased = initial + count_delta
  target = [increased, maximum].min

  callbacks_for(block).try_respond_with(
      :prepare, initial, target)

  ensure_instance_count(target, &block)
end
instance() click to toggle source
# File lib/rollo/model/service.rb, line 23
def instance
  @ecs_service
end
is_replica?() click to toggle source
# File lib/rollo/model/service.rb, line 31
def is_replica?
  @ecs_service.scheduling_strategy == 'REPLICA'
end
name() click to toggle source
# File lib/rollo/model/service.rb, line 19
def name
  @ecs_service.service_name
end
reload() click to toggle source
# File lib/rollo/model/service.rb, line 27
def reload
  @ecs_service = get_ecs_service
end
running_count() click to toggle source
# File lib/rollo/model/service.rb, line 35
def running_count
  @ecs_service.running_count
end
wait_for_service_health(&block) click to toggle source
# File lib/rollo/model/service.rb, line 84
def wait_for_service_health(&block)
  @waiter.until do |attempt|
    reload
    callbacks_for(block)
        .try_respond_with(:waiting_for_health, attempt) if block
    has_desired_count?
  end
end

Private Instance Methods

callbacks_for(block) click to toggle source
# File lib/rollo/model/service.rb, line 103
def callbacks_for(block)
  Hollerback::Callbacks.new(block)
end
get_ecs_service() click to toggle source
# File lib/rollo/model/service.rb, line 95
def get_ecs_service
  @ecs_resource.client
      .describe_services(
          cluster: @ecs_cluster_name,
          services: [@ecs_service_arn])
      .services[0]
end