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