Sha256: feb96c2d19f7b42c66d39dfa0dfa90046ae9764414ea59d3c30b1c91b50d8ad6

Contents?: true

Size: 1.65 KB

Versions: 25

Compression:

Stored size: 1.65 KB

Contents

class Marty::Diagnostic::Aws::Ec2Instance < Marty::Aws::Request
  attr_reader :tag,
              :nodes,
              :instances

  class InstancesSet
    STATES = [
      :pending, :running, :shutting_down, :terminated, :stopping, :stopped
    ].freeze

    attr_reader *STATES

    def get_state instances, state
      instances.map do |i|
        i.except('state') if i['state']['name'] == state
      end.compact
    end

    def initialize instances
      STATES.each do |s|
        instance_variable_set("@#{s}", get_state(instances, s.to_s))
      end
    end
  end

  def initialize
    super
    @service   = 'ec2'
    @tag       = get_tag
    @instances = InstancesSet.new(get_instances)
    @nodes     = get_private_ips
  end

  private

  def ec2_request action, params = {}
    resp = request({ action: action }, params)
    Hash.from_xml(resp)["#{action}Response"]
  end

  def get_tag
    params = { 'Filter.1.Name' => 'resource-id',
              'Filter.1.Value.1' => get_instance_id,
              'Filter.2.Name'    => 'key',
              'Filter.2.Value.1' => 'Name' }
    ec2_request('DescribeTags', params)['tagSet']['item']['value']
  end

  def get_instances
    params = { 'Filter.1.Name' => 'tag-value',
              'Filter.1.Value.1' => @tag }

    resp = ec2_request('DescribeInstances', params)

    instances = ensure_resp(
      ['reservationSet', 'item', 'instancesSet', 'item'],
      resp
    ).map do |i|
      {
        'id'    => i['instanceId'],
        'ip'    => i['privateIpAddress'],
        'state' => i['instanceState'],
      }
    end.flatten(1)
  end

  def get_private_ips
    @instances.running.map { |i| i['ip'] }.compact
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
marty-4.0.0.rc2 other/marty/diagnostic/aws/ec2_instance.rb
marty-3.0.0 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.9.3 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.9.2 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.9.1 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.8.0 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.7.3 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.7.2 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.7.1 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.7.0 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.8 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.7 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.6 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.5 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.4 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.3 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.2 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.1 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.6.0 other/marty/diagnostic/aws/ec2_instance.rb
marty-2.5.9 other/marty/diagnostic/aws/ec2_instance.rb