Module: Audit53::Route53

Includes:
Contracts
Defined in:
lib/audit53/route53.rb

Class Method Summary collapse

Class Method Details

.client(region: 'us-west-1') ⇒ Object



9
10
11
# File 'lib/audit53/route53.rb', line 9

def self.client(region: 'us-west-1')
  @client ||= Aws::Route53::Client.new region: region
end

.cname_ips(zone_id:) ⇒ Object



40
41
42
43
44
45
# File 'lib/audit53/route53.rb', line 40

def self.cname_ips(zone_id:)
  records_subset(zone_id: zone_id, type: 'CNAME')
    .select { |k, _| k.start_with? 'ec2' }
    .map { |k, v| { k.split('.').first.split('-').last(4).join('.') => v } }
    .reduce({}, :update)
end

.ips(zone_id:) ⇒ Object



48
49
50
# File 'lib/audit53/route53.rb', line 48

def self.ips(zone_id:)
  records_subset(zone_id: zone_id, type: 'A"').merge cname_ips(zone_id: zone_id)
end

.records(zone_id:) ⇒ Object



24
25
26
27
28
29
# File 'lib/audit53/route53.rb', line 24

def self.records(zone_id:)
  @records ||= client.list_resource_record_sets(hosted_zone_id: zone_id)
               .each_page
               .flat_map(&:resource_record_sets)
               .reject(&:alias_target)
end

.records_subset(zone_id:, type:) ⇒ Object



32
33
34
35
36
37
# File 'lib/audit53/route53.rb', line 32

def self.records_subset(zone_id:, type:)
  records(zone_id: zone_id)
    .select { |r| r.type == type }
    .map { |r| { r.resource_records.first.value => r.name } }
    .reduce({}, :update)
end

.zone_id(domain:) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/audit53/route53.rb', line 14

def self.zone_id(domain:)
  domain += '.' unless domain.end_with? '.'
  @zone_id ||= client.list_hosted_zones
               .hosted_zones
               .select { |z| z.name == domain }
               .map { |z| z.id.split('/').last }
               .reduce
end