Class: Rollo::Model::Service

Inherits:
Object
  • Object
show all
Defined in:
lib/rollo/model/service.rb

Instance Method Summary collapse

Constructor Details

#initialize(ecs_cluster_name, ecs_service_arn, region, ecs_resource = nil, waiter = nil) ⇒ Service

Returns a new instance of Service.



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rollo/model/service.rb', line 10

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

Instance Method Details

#decrease_instance_count_by(count_delta, options = {}, &block) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/rollo/model/service.rb', line 72

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_countObject



42
43
44
# File 'lib/rollo/model/service.rb', line 42

def desired_count
  @ecs_service.desired_count
end

#desired_count=(count) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/rollo/model/service.rb', line 46

def desired_count=(count)
  @ecs_resource.client
               .update_service(
                 cluster: @ecs_cluster_name,
                 service: @ecs_service_arn,
                 desired_count: count
               )
end

#desired_count_met?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/rollo/model/service.rb', line 55

def desired_count_met?
  running_count == desired_count
end

#ensure_instance_count(count, &block) ⇒ Object



85
86
87
88
# File 'lib/rollo/model/service.rb', line 85

def ensure_instance_count(count, &block)
  self.desired_count = count
  wait_for_service_health(&block)
end

#increase_instance_count_by(count_delta, options = {}, &block) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/rollo/model/service.rb', line 59

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

#instanceObject



26
27
28
# File 'lib/rollo/model/service.rb', line 26

def instance
  @ecs_service
end

#nameObject



22
23
24
# File 'lib/rollo/model/service.rb', line 22

def name
  @ecs_service.service_name
end

#reloadObject



30
31
32
# File 'lib/rollo/model/service.rb', line 30

def reload
  @ecs_service = ecs_service
end

#replica?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/rollo/model/service.rb', line 34

def replica?
  @ecs_service.scheduling_strategy == 'REPLICA'
end

#running_countObject



38
39
40
# File 'lib/rollo/model/service.rb', line 38

def running_count
  @ecs_service.running_count
end

#wait_for_service_health(&block) ⇒ Object



90
91
92
93
94
95
96
97
98
99
# File 'lib/rollo/model/service.rb', line 90

def wait_for_service_health(&block)
  @waiter.until do |attempt|
    reload
    if block
      callbacks_for(block)
        .try_respond_with(:waiting_for_health, attempt)
    end
    desired_count_met?
  end
end