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
38
39
40
41
42
43
44
45
46
|
# File 'lib/aws_public_ips/checks/ec2.rb', line 9
def self.run
client = ::Aws::EC2::Client.new
return [] unless ::AwsPublicIps::Utils.has_service?(client)
client.describe_instances.flat_map do |response|
response.reservations.flat_map do |reservation|
reservation.instances.flat_map do |instance|
ip_addresses = [instance.public_ip_address].compact + instance.network_interfaces.flat_map do |interface|
public_ip = []
interface.private_ip_addresses.flat_map do |private_ip|
if private_ip.association && private_ip.association.public_ip
public_ip << private_ip.association.public_ip
end
end
public_ip + interface.ipv_6_addresses.map(&:ipv_6_address)
end
next [] if ip_addresses.empty?
hostname = instance.public_dns_name.empty? ? nil : instance.public_dns_name
{
id: instance.instance_id,
hostname: hostname,
ip_addresses: ip_addresses.uniq
}
end
end
end
end
|