class Rollo::Model::HostCluster
Attributes
last_scaling_activity[R]
Public Class Methods
new(asg_name, region, asg_resource = nil, waiter = nil)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 13 def initialize(asg_name, region, asg_resource = nil, waiter = nil) @region = region @asg_name = asg_name @asg_resource = asg_resource || Aws::AutoScaling::Resource.new(region: region) @asg = @asg_resource.group(@asg_name) record_latest_scaling_activity @waiter = waiter || Wait.new(attempts: 720, timeout: 30, delay: 5) end
Public Instance Methods
decrease_capacity_by(capacity_delta, &block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 73 def decrease_capacity_by(capacity_delta, &block) initial = desired_capacity decreased = initial - capacity_delta callbacks_for(block).try_respond_with( :prepare, initial, decreased) ensure_capacity_changed_to(decreased, &block) end
desired_capacity()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 32 def desired_capacity @asg.desired_capacity end
desired_capacity=(capacity)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 36 def desired_capacity=(capacity) @asg.set_desired_capacity({desired_capacity: capacity}) end
ensure_capacity_changed_to(capacity, &block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 83 def ensure_capacity_changed_to(capacity, &block) self.desired_capacity = capacity wait_for_capacity_change_start(&block) wait_for_capacity_change_end(&block) wait_for_capacity_health(&block) record_latest_scaling_activity end
has_completed_changing_capacity?()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 55 def has_completed_changing_capacity? scaling_activities.all?(&:is_complete?) end
has_desired_capacity?()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 40 def has_desired_capacity? hosts.size == desired_capacity && hosts.all? {|h| h.is_in_service? && h.is_healthy?} end
has_started_changing_capacity?()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 49 def has_started_changing_capacity? scaling_activities .select {|a| a.started_after_completion_of?(@last_scaling_activity)} .size > 0 end
hosts()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 59 def hosts @asg.instances.collect {|h| Host.new(h)} end
increase_capacity_by(capacity_delta, &block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 63 def increase_capacity_by(capacity_delta, &block) initial = desired_capacity increased = initial + capacity_delta callbacks_for(block).try_respond_with( :prepare, initial, increased) ensure_capacity_changed_to(increased, &block) end
name()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 28 def name @asg_name end
record_latest_scaling_activity()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 118 def record_latest_scaling_activity @last_scaling_activity = scaling_activities.first end
reload()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 24 def reload @asg.reload end
scaling_activities()
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 45 def scaling_activities @asg.activities.collect {|a| ScalingActivity.new(a)} end
wait_for_capacity_change_end(&block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 100 def wait_for_capacity_change_end(&block) @waiter.until do |attempt| reload callbacks_for(block) .try_respond_with(:waiting_for_end, attempt) if block has_completed_changing_capacity? end end
wait_for_capacity_change_start(&block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 91 def wait_for_capacity_change_start(&block) @waiter.until do |attempt| reload callbacks_for(block) .try_respond_with(:waiting_for_start, attempt) if block has_started_changing_capacity? end end
wait_for_capacity_health(&block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 109 def wait_for_capacity_health(&block) @waiter.until do |attempt| reload callbacks_for(block) .try_respond_with(:waiting_for_health, attempt) if block has_desired_capacity? end end
Private Instance Methods
callbacks_for(block)
click to toggle source
# File lib/rollo/model/host_cluster.rb, line 124 def callbacks_for(block) Hollerback::Callbacks.new(block) end