Module: Awspec::Helper::Finder::Ec2

Included in:
Awspec::Helper::Finder
Defined in:
lib/awspec/helper/finder/ec2.rb

Instance Method Summary collapse

Instance Method Details

#find_ec2(id) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/awspec/helper/finder/ec2.rb', line 4

def find_ec2(id)
  if id.is_a?(Array)
    # Aws::EC2::Client.describe_instances native filters format
    res = @ec2_client.describe_instances({
                                           filters: id
                                         })
  elsif id.is_a?(Hash)
    # syntax sugar
    filters = []
    id.each do |k, v|
      filters.push({ name: k, values: Array(v) })
    end
    res = @ec2_client.describe_instances({
                                           filters: filters
                                         })
  elsif id.is_a?(String)
    # instance_id or tag:Name
    begin
      res = @ec2_client.describe_instances({
                                             instance_ids: [id]
                                           })
    rescue
      # Aws::EC2::Errors::InvalidInstanceIDMalformed
      # Aws::EC2::Errors::InvalidInstanceIDNotFound
      res = @ec2_client.describe_instances({
                                             filters: [{ name: 'tag:Name', values: [id] }]
                                           })
    end
  else
    return nil
  end
  return res[:reservations].first[:instances].first if res[:reservations].count == 1 && \
                                                       res[:reservations].first[:instances].count == 1
end

#find_ec2_attribute(id, attribute) ⇒ Object



39
40
41
42
43
# File 'lib/awspec/helper/finder/ec2.rb', line 39

def find_ec2_attribute(id, attribute)
  res = @ec2_client.describe_instance_attribute({
                                                  instance_id: id, attribute: attribute
                                                })
end

#find_internet_gateway(gateway_id) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/awspec/helper/finder/ec2.rb', line 56

def find_internet_gateway(gateway_id)
  res = @ec2_client.describe_internet_gateways({
                                                 filters: [{ name: 'internet-gateway-id', values: [gateway_id] }]
                                               })
  return res[:internet_gateways].first if res[:internet_gateways].count == 1
  res = @ec2_client.describe_internet_gateways({
                                                 filters: [{ name: 'tag:Name', values: [gateway_id] }]
                                               })
  return res[:internet_gateways].first if res[:internet_gateways].count == 1
end

#find_security_group(sg_id) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/awspec/helper/finder/ec2.rb', line 67

def find_security_group(sg_id)
  res = @ec2_client.describe_security_groups({
                                               filters: [{ name: 'group-id', values: [sg_id] }]
                                             })
  return res[:security_groups].first if res[:security_groups].count == 1
  res = @ec2_client.describe_security_groups({
                                               filters: [{ name: 'group-name', values: [sg_id] }]
                                             })
  return res[:security_groups].first if res[:security_groups].count == 1
  res = @ec2_client.describe_security_groups({
                                               filters: [{ name: 'tag:Name', values: [sg_id] }]
                                             })
  return res[:security_groups].first if res[:security_groups].count == 1
end

#find_subnet(subnet_id) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/awspec/helper/finder/ec2.rb', line 45

def find_subnet(subnet_id)
  res = @ec2_client.describe_subnets({
                                       filters: [{ name: 'subnet-id', values: [subnet_id] }]
                                     })
  return res[:subnets].first if res[:subnets].count == 1
  res = @ec2_client.describe_subnets({
                                       filters: [{ name: 'tag:Name', values: [subnet_id] }]
                                     })
  return res[:subnets].first if res[:subnets].count == 1
end

#select_ec2_by_vpc_id(vpc_id) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/awspec/helper/finder/ec2.rb', line 82

def select_ec2_by_vpc_id(vpc_id)
  res = @ec2_client.describe_instances({
                                         filters: [{ name: 'vpc-id', values: [vpc_id] }]
                                       })
  instances = []
  return instances unless res[:reservations].count > 0
  res[:reservations].each do |reservation|
    reservation.instances.each do |instance|
      instances.push(instance)
    end
  end
  instances
end

#select_eip_by_instance_id(id) ⇒ Object



96
97
98
99
100
101
102
# File 'lib/awspec/helper/finder/ec2.rb', line 96

def select_eip_by_instance_id(id)
  res = @ec2_client.describe_addresses({
                                         filters: [{ name: 'instance-id', values: [id] }]
                                       })
  return [] unless res[:addresses].count > 0
  res[:addresses]
end