Class: Awsome::Matchmaker
- Inherits:
-
Object
- Object
- Awsome::Matchmaker
- 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
-
#initialize(instances, requirements) ⇒ Matchmaker
constructor
A new instance of Matchmaker.
- #matches ⇒ Object
- #signature_for(instance) ⇒ Object
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..except_instance_ids.include?(i.properties['instance_id']) end.group_by { |i| signature_for(i) } @instance_pools = instances.reject do |i| requirements..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
#matches ⇒ Object
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 |