Method: Bfire::Rule#scale

Defined in:
lib/bfire/rule.rb

#scale(up_or_down, count = 1) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/bfire/rule.rb', line 36

def scale(up_or_down, count = 1)
  new_computes = []
  count.times do |i|
    sorted_templates = group.templates.sort_by{|t| t.instances.length}
    if up_or_down == :down
      vm_to_delete = sorted_templates.last.instances[0]
      if vm_to_delete.nil?
        group.engine.logger.warn "#{group.banner}No resource to delete!"
      else
        group.engine.logger.info "#{group.banner}Removing compute #{vm_to_delete.signature}..."
        if vm_to_delete.delete
          sorted_templates.last.instances.delete vm_to_delete
          group.trigger :scaled_down
        end
      end
    else
      template = sorted_templates.first
      computes = group.engine.launch_compute(template)
      template.instances.push(*computes)
      new_computes.push(*computes)
    end
  end
  new_computes
end