class Proxy::Dns::Infoblox::Record

Attributes

connection[R]
dns_view[R]

Public Class Methods

new(host, connection, ttl, dns_view) click to toggle source
Calls superclass method
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 5
def initialize(host, connection, ttl, dns_view)
  @connection = connection
  @dns_view = dns_view
  super(host, ttl)
end

Public Instance Methods

do_create(name, value, type) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 11
def do_create(name, value, type)
  method = "ib_create_#{type.downcase}_record".to_sym
  raise(Proxy::Dns::Error, "Creation of #{type} records not implemented") unless respond_to?(method, true)

  send(method, name, value)
end
do_remove(name, type) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 18
def do_remove(name, type)
  method = "ib_remove_#{type.downcase}_record".to_sym
  raise(Proxy::Dns::Error, "Deletion of #{type} records not implemented") unless respond_to?(method, true)

  send(method, name)
end
record_conflicts_ip(fqdn, type, address) click to toggle source

-1 = no conflict and create the record

0 = already exists and do nothing
1 = conflict and error out
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 28
def record_conflicts_ip(fqdn, type, address)
  if type == Resolv::DNS::Resource::IN::PTR
    ip = IPAddr.new(ptr_to_ip(address))
    method = "ib_find_#{type.name.split('::').last.downcase}#{ip.ipv4? ? 4 : 6}_record".to_sym
  else
    method = "ib_find_#{type.name.split('::').last.downcase}_record".to_sym
  end
  raise(Proxy::Dns::Error, "Finding of #{type} records not implemented") unless respond_to?(method, true)

  return -1 if send(method, fqdn).empty?
  return 0 if send(method, fqdn, address).any?

  1
end
record_conflicts_name(fqdn, type, content) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 43
def record_conflicts_name(fqdn, type, content)
  if type == Resolv::DNS::Resource::IN::PTR
    record_conflicts_ip(content, type, fqdn)
  else
    record_conflicts_ip(fqdn, type, content)
  end
end

Private Instance Methods

ib_clear_dns_cache(record) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 174
def ib_clear_dns_cache(record)
  # Created in WAPI version 2.6
  return if Gem::Version.new(Infoblox.wapi_version) < Gem::Version.new('2.6')

  MemberDns.all(connection).each do |member|
    member.clear_dns_cache(view: record.view, domain: record.name)
  end
rescue StandardError => e
  # Failing to clear the DNS cache should never be an error
  logger.warn("Exception #{e} was raised when clearing DNS cache")
end
ib_create(clazz, params) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 158
def ib_create(clazz, params)
  clazz.new({ connection: connection, view: dns_view }.merge(params)).post
end
ib_create_a_record(fqdn, address) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 113
def ib_create_a_record(fqdn, address)
  ib_create(Infoblox::Arecord, :name => fqdn, :ipv4addr => address)
end
ib_create_aaaa_record(fqdn, address) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 121
def ib_create_aaaa_record(fqdn, address)
  ib_create(Infoblox::AAAArecord, :name => fqdn, :ipv6addr => address)
end
ib_create_cname_record(fqdn, target) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 129
def ib_create_cname_record(fqdn, target)
  ib_create(Infoblox::Cname, :name => fqdn, :canonical => target)
end
ib_create_ptr_record(ptr, fqdn) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 137
def ib_create_ptr_record(ptr, fqdn)
  ip = IPAddr.new(ptr_to_ip(ptr))

  params = {
    :ptrdname => fqdn,
    :name => ptr
  }
  params["ipv#{ip.ipv4? ? 4 : 6}addr".to_sym] = ip.to_s

  ib_create(Infoblox::Ptr, params)
end
ib_delete(clazz, params) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 162
def ib_delete(clazz, params)
  records = clazz.find(connection, params.merge(view: dns_view))
  raise Proxy::Dns::NotFound, "Cannot find #{clazz.class.name} entry for #{params}" if records.empty?

  records.each do |record|
    record.delete
    ib_clear_dns_cache(record)
  end

  true
end
ib_find_a_record(fqdn, address = nil) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 53
def ib_find_a_record(fqdn, address = nil)
  params = {
    :_max_results => 1,
    :view => dns_view,
    :name => fqdn
  }
  params[:ipv4addr] = address if address
  Infoblox::Arecord.find(connection, params)
end
ib_find_aaaa_record(fqdn, address = nil) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 63
def ib_find_aaaa_record(fqdn, address = nil)
  params = {
    :_max_results => 1,
    :view => dns_view,
    :name => fqdn
  }
  params[:ipv6addr] = address if address
  Infoblox::AAAArecord.find(connection, params)
end
ib_find_cname_record(fqdn, address = nil) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 103
def ib_find_cname_record(fqdn, address = nil)
  params = {
    :_max_results => 1,
    :view => dns_view,
    :name => fqdn
  }
  params[:canonical] = address if address
  Infoblox::Cname.find(connection, params)
end
ib_find_ptr4_record(fqdn, ptr = nil) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 73
def ib_find_ptr4_record(fqdn, ptr = nil)
  params = {
    :_max_results => 1,
    :view => dns_view,
    :ptrdname => fqdn,
    :'name~' => 'in-addr\.arpa$'
  }
  if ptr
    ip = IPAddr.new(ptr_to_ip(ptr))
    params[:ipv4addr] = ip.to_s
    params[:name] = ptr
  end
  Infoblox::Ptr.find(connection, params)
end
ib_find_ptr6_record(fqdn, ptr = nil) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 88
def ib_find_ptr6_record(fqdn, ptr = nil)
  params = {
    :_max_results => 1,
    :view => dns_view,
    :ptrdname => fqdn,
    :'name~' => 'ip6\.arpa$'
  }
  if ptr
    ip = IPAddr.new(ptr_to_ip(ptr))
    params[:ipv6addr] = ip.to_s
    params[:name] = ptr
  end
  Infoblox::Ptr.find(connection, params)
end
ib_remove_a_record(fqdn) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 117
def ib_remove_a_record(fqdn)
  ib_delete(Infoblox::Arecord, :name => fqdn)
end
ib_remove_aaaa_record(fqdn) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 125
def ib_remove_aaaa_record(fqdn)
  ib_delete(Infoblox::AAAArecord, :name => fqdn)
end
ib_remove_cname_record(fqdn) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 133
def ib_remove_cname_record(fqdn)
  ib_delete(Infoblox::Cname, :name => fqdn)
end
ib_remove_ptr_record(ptr) click to toggle source
# File lib/smart_proxy_dns_infoblox/dns_infoblox_main.rb, line 149
def ib_remove_ptr_record(ptr)
  ip = IPAddr.new(ptr_to_ip(ptr))

  params = {}
  params["ipv#{ip.ipv4? ? 4 : 6}addr".to_sym] = ip.to_s

  ib_delete(Infoblox::Ptr, params)
end