Class: Awsome::Matchmaker

Inherits:
Object
  • Object
show all
Defined in:
lib/awsome/matchmaker.rb

Constant Summary collapse

@@signature_fields =
%w( ami_id key instance_type availability_zone security_group_ids )

Instance Method Summary collapse

Constructor Details

#initialize(instances, requirements) ⇒ Matchmaker

Returns a new instance of Matchmaker.



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/awsome/matchmaker.rb', line 3

def initialize(instances, requirements)
  @requirement_pools = requirements.instances.reject do |i| 
    requirements.options.except_instance_ids.include?(i.properties['instance_id']) 
  end.group_by { |i| signature_for(i) }

  @instance_pools = instances.reject do |i| 
    requirements.options.except_instance_ids.include?(i.properties['instance_id']) 
  end.group_by { |i| signature_for(i) }

  @signatures = @requirement_pools.keys.to_set + @instance_pools.keys.to_set

  @signatures.each do |s|
    @requirement_pools[s] ||= []
    @instance_pools[s] ||= []

    # nil indicates new instance will be brought up
    shortage = @requirement_pools[s].size - @instance_pools[s].size
    @instance_pools[s] += [nil]*shortage if shortage > 0
  end
end

Instance Method Details

#matchesObject



30
31
32
# File 'lib/awsome/matchmaker.rb', line 30

def matches
  @signatures.reduce({}) { |memo, s| memo.merge(s => best_match(s)) }
end

#signature_for(instance) ⇒ Object



26
27
28
# File 'lib/awsome/matchmaker.rb', line 26

def signature_for(instance)
  @@signature_fields.collect { |k| instance.properties[k] }.join(',')
end