Sha256: c038b5f746cb7cd3c04b46abb42cfee10b0469f018d4d19808c05773b0e4c597

Contents?: true

Size: 1.79 KB

Versions: 7

Compression:

Stored size: 1.79 KB

Contents

require 'net/http'
require 'aws-sdk'

class EC2
  class Host
    class ClientUtil
      def self.ec2(reload = false)
        if @ec2.nil? || reload
          @ec2 = Aws::EC2::Client.new(region: Config.aws_region, credentials: Config.aws_credentials)
        end
        @ec2
      end

      def self.instances(condition)
        describe_instances =
          if instance_id = condition[:instance_id]
            ec2.describe_instances(instance_ids: Array(instance_id))
          elsif role = (condition[:role] || condition[:usage]) and role.size == 1
            ec2.describe_instances(filters: [{name: "tag:#{Config.roles_tag}", values: ["*#{role.first}*"]}])
          elsif role1 = (condition[:role1] || condition[:usage1]) and role1.size == 1
            ec2.describe_instances(filters: [{name: "tag:#{Config.roles_tag}", values: ["*#{role1.first}*"]}])
          elsif role2 = (condition[:role2] || condition[:usage2]) and role2.size == 1
            ec2.describe_instances(filters: [{name: "tag:#{Config.roles_tag}", values: ["*#{role2.first}*"]}])
          elsif role3 = (condition[:role3] || condition[:usage3]) and role3.size == 1
            ec2.describe_instances(filters: [{name: "tag:#{Config.roles_tag}", values: ["*#{role3.first}*"]}])
          else
            ec2.describe_instances
          end
        describe_instances.reservations.map(&:instances).flatten
      end

      def self.instance_id
        return @instance_id if @instance_id
        begin
          http_conn = Net::HTTP.new('169.254.169.254')
          http_conn.open_timeout = 5
          @instance_id = http_conn.start {|http| http.get('/latest/meta-data/instance-id').body }
        rescue Net::OpenTimeout
          raise "HTTP connection to 169.254.169.254 is timeout. Probably, not an EC2 instance?"
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ec2-host-0.3.1 lib/ec2/host/client_util.rb
ec2-host-0.3.0 lib/ec2/host/client_util.rb
ec2-host-0.2.4 lib/ec2/host/client_util.rb
ec2-host-0.2.3 lib/ec2/host/client_util.rb
ec2-host-0.2.1 lib/ec2/host/client_util.rb
ec2-host-0.2.0 lib/ec2/host/client_util.rb
ec2-host-0.1.1 lib/ec2/host/client_util.rb