class Proxy::Dns::Route53::Record

Attributes

aws_access_key[R]
aws_secret_key[R]

Public Class Methods

new(aws_access_key, aws_secret_key, ttl = nil) click to toggle source
Calls superclass method
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 13
def initialize(aws_access_key, aws_secret_key, ttl = nil)
  @aws_access_key = aws_access_key
  @aws_secret_key = aws_secret_key
  super(nil, ttl)
end

Public Instance Methods

create_a_record(fqdn, ip) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 19
def create_a_record(fqdn, ip)
  case a_record_conflicts(fqdn, ip) #returns -1, 0, 1
  when 1 then
    raise(Proxy::Dns::Collision, "#{fqdn} is already used by #{ip}")
  when 0 then
    return nil
  else
    zone = get_zone(fqdn)
    new_record = Route53::DNSRecord.new(fqdn, 'A', ttl, [ip], zone)
    resp = new_record.create
    raise "AWS Response Error: #{resp}" if resp.error?
    true
  end
end
create_aaaa_record(fqdn, ip) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 34
def create_aaaa_record(fqdn, ip)
  case aaaa_record_conflicts(fqdn, ip) #returns -1, 0, 1
  when 1 then
    raise(Proxy::Dns::Collision, "#{fqdn} is already used by #{ip}")
  when 0 then
    return nil
  else
    zone = get_zone(fqdn)
    new_record = Route53::DNSRecord.new(fqdn, 'AAAA', ttl, [ip], zone)
    resp = new_record.create
    raise "AWS Response Error: #{resp}" if resp.error?
    true
  end
end
create_ptr_record(fqdn, ptr) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 49
def create_ptr_record(fqdn, ptr)
  case ptr_record_conflicts(fqdn, ptr_to_ip(ptr)) #returns -1, 0, 1
  when 1 then
    raise(Proxy::Dns::Collision, "#{ptr} is already in use")
  when 0 then
    return nil
  else
    zone = get_zone(ptr)
    new_record = Route53::DNSRecord.new(ptr, 'PTR', ttl, [fqdn], zone)
    resp = new_record.create
    raise "AWS Response Error: #{resp}" if resp.error?
    true
  end
end
remove_a_record(fqdn) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 64
def remove_a_record(fqdn)
  zone = get_zone(fqdn)
  recordset = zone.get_records
  recordset.each do |rec|
    if rec.name == fqdn + '.' && rec.type == 'A'
      resp = rec.delete
      raise "AWS Response Error: #{resp}" if resp.error?
      return true
    end
  end
  raise Proxy::Dns::NotFound, "Could not find forward record #{fqdn}"
end
remove_aaaa_record(fqdn) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 77
def remove_aaaa_record(fqdn)
  zone = get_zone(fqdn)
  recordset = zone.get_records
  recordset.each do |rec|
    if rec.name == fqdn + '.' && rec.type == 'AAAA'
      resp = rec.delete
      raise "AWS Response Error: #{resp}" if resp.error?
      return true
    end
  end
  raise Proxy::Dns::NotFound, "Could not find forward record #{fqdn}"
end
remove_ptr_record(ip) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 90
def remove_ptr_record(ip)
  zone = get_zone(ip)
  recordset = zone.get_records
  recordset.each do |rec|
    if rec.name == ip + '.'
      resp = rec.delete
      raise "AWS Response Error: #{resp}" if resp.error?
      return true
    end
  end
  raise Proxy::Dns::NotFound, "Could not find reverse record #{ip}"
end

Private Instance Methods

conn() click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 105
def conn
  @conn ||= Route53::Connection.new(aws_access_key, aws_secret_key)
end
get_zone(name) click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 113
def get_zone(name)
  zones = conn.get_zones
  name_arr = name.split('.')
  (1 ... name_arr.size).each do |i|
    search_domain = name_arr.last(name_arr.size - i).join('.') + "."
    zone_select = zones.select { |z| z.name == search_domain }
    return zone_select.first if zone_select.any?
  end
end
resolver() click to toggle source
# File lib/smart_proxy_dns_route53/dns_route53_main.rb, line 109
def resolver
  @resolver ||= Resolv::DNS.new
end