class Route53Aliaser::Aliaser
Attributes
config[R]
Public Class Methods
new(config = Configuration.new)
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 5 def initialize(config = Configuration.new) @config = config end
Public Instance Methods
call()
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 13 def call unless stale? # NOOP if we haven't expired config.logger.info "Route53Aliaser: NOOP because cache is fresh" return end target_ips = get_ips(config.target_record, config.target_key) source_ips = get_ips(config.source_record, config.source_key) if target_ips == source_ips config.logger.info "Route53Aliaser: No Route 53 Update required (Target IPs match the Source IPs)" else config.logger.info "Route53Aliaser: IPs for #{config.target_record} #{target_ips} differ from #{config.source_record} #{source_ips}; will attempt to update" rt53 = Route53Updater.new(config) rt53.update_target(config.target_record, config.source_record, source_ips, config.zone_id) end end
stale?()
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 9 def stale? config.cache.fetch(config.source_key).nil? end
Private Instance Methods
cache_results(key, zone, ips, ttl)
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 64 def cache_results(key, zone, ips, ttl) unless ips.empty? config.cache.write(key, ips.join(','), expires_in: ttl.seconds, race_condition_ttl: 10 ) config.logger.debug "Route53Aliaser: Caching #{key}: #{ips} for #{ttl} seconds (ttl)" else config.logger.error "Route53Aliaser: NOT Caching #{key} because no IPs were found." end end
get_ips(zone, key)
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 33 def get_ips(zone, key) ips = retrieve_ips_from_cache(key) if ips.empty? ips, ttl = get_ips_and_ttl_from_dns(zone) cache_results(key, zone, ips, ttl) end ips end
get_ips_and_ttl_from_dns(zone)
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 51 def get_ips_and_ttl_from_dns(zone) ips, ttl = [], 0 resources = Resolv::DNS.new.getresources(zone, Resolv::DNS::Resource::IN::A) if resources && resources.size > 0 ips = resources.collect{|res| res.address.to_s}.sort ttl = resources.first.ttl end return ips, ttl rescue ResolvError => e config.logger.error e return ips, ttl end
retrieve_ips_from_cache(key)
click to toggle source
# File lib/route53_aliaser/aliaser.rb, line 42 def retrieve_ips_from_cache(key) cached_value = config.cache.fetch(key) if cached_value cached_value.split(',') else [] end end