Sha256: e120e3c6022fcda71b37f1b18ac775a29801a2f3397e45dd0ec6f80e92f46af1

Contents?: true

Size: 896 Bytes

Versions: 1

Compression:

Stored size: 896 Bytes

Contents

require "forwardable"
module RodeoClown
  class EC2  < Struct.new(:ec2)
    def self.instances
      ec2.instances
    end

    def self.ec2
      @ec2 ||= AWS::EC2.new
    end

    def self.by_name(name)
      new instances[name]
    end

    #
    # options: keys: [ foo... , scope: :all], [:values scope: any]
    #
    def self.filter_instances(options = {})
      filtered = filter_by_tag_options(instances, options[:keys], :tagged)

      filter_by_tag_options(filtered, options[:values], :tagged_values)
    end

    def self.filter_by_tag_options(instances, options, filter = :tagged_values)
      return instances if options.nil? || options.empty?

      all = options.delete(:scope) == :all
      vals = options.delete(:values)

      if all
        vals.inject(instances) { |i, value| i.send(filter, value) }
      else
        instances.send filter, *vals
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rodeo_clown-0.0.1 lib/rodeo_clown/ec2.rb