module Audit53::Route53

Public Class Methods

client(region: 'us-west-1') click to toggle source
# 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:) click to toggle source
# 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:) click to toggle source
# 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:) click to toggle source
# 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:) click to toggle source
# 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:) click to toggle source
# 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