Sha256: 97ac6e0a9a6c9d59e37b1dd078013b74793c2b6e72d4fef812bec3e96d338827
Contents?: true
Size: 1.64 KB
Versions: 3
Compression:
Stored size: 1.64 KB
Contents
require 'aws-sdk' require 'contracts' module Audit53 module Route53 include Contracts Contract Maybe[({ region: String })] => Aws::Route53::Client def self.client(region: 'us-west-1') @client ||= Aws::Route53::Client.new region: region end Contract ({ domain: String }) => String 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 Contract ({ zone_id: String }) => ArrayOf[Aws::Route53::Types::ResourceRecordSet] 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 Contract ({ zone_id: String, type: String }) => Hash 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 Contract ({ zone_id: String }) => Hash 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 Contract ({ zone_id: String }) => Hash def self.ips(zone_id:) records_subset(zone_id: zone_id, type: 'A"').merge cname_ips(zone_id: zone_id) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
audit53-0.8.10 | lib/audit53/route53.rb |
audit53-0.8.9 | lib/audit53/route53.rb |
audit53-0.8.0 | lib/audit53/route53.rb |