class DNSUpdater::Updaters::Updater

Base class of any DNS updater

Public Class Methods

getHostPort(config) click to toggle source

Get configured host and port for updater @param config [Config]

# File lib/dnsupdater/updaters/updater.rb, line 27
def self.getHostPort(config)
    raise Error, 'Unsupported!'
end
new(config) click to toggle source
# File lib/dnsupdater/updaters/updater.rb, line 15
def initialize(config)
    @Config = config
end

Public Instance Methods

update(params) click to toggle source

Update DNS using given params @param params [Hash] target params

# File lib/dnsupdater/updaters/updater.rb, line 21
def update(params)
    raise Error, 'Child class must implement this!'
end

Protected Instance Methods

getIPs(namesOrIPs) click to toggle source
# File lib/dnsupdater/updaters/updater.rb, line 33
def getIPs(namesOrIPs)
    ipAddrs = {}

    namesOrIPs.to_a.each do |nameOrIP|
        if nameOrIP.is_a?(IPAddr)
            setIPAddr(nameOrIP, ipAddrs)
        elsif nameOrIP == 'client'
            resolveClient.each do |ip|
                setIPAddr(ip, ipAddrs)
            end
        else
            begin
                setIPAddr(nameOrIP, ipAddrs)
            rescue IPAddr::InvalidAddressError
                setIPsFromDNS(nameOrIP, ipAddrs)
            end
        end
    end

    ipAddrs.values
end
resolveClient() click to toggle source
# File lib/dnsupdater/updaters/updater.rb, line 68
def resolveClient
    ipAddrs = Socket.ip_address_list.select do |addr|
        !addr.ipv4_loopback? && !addr.ipv6_loopback?
    end
    ipAddrs.map do |addr|
        addr.ip_address.split('%').first
    end
end
setIPAddr(addr, ipAddrs) click to toggle source
# File lib/dnsupdater/updaters/updater.rb, line 63
def setIPAddr(addr, ipAddrs)
    addr = IPAddr.new(addr.to_s) unless addr.is_a?(IPAddr)
    ipAddrs[addr.to_s] = addr
end
setIPsFromDNS(nameOrIP, ipAddrs) click to toggle source
# File lib/dnsupdater/updaters/updater.rb, line 55
def setIPsFromDNS(nameOrIP, ipAddrs)
    Resolv::DNS.open do |dns|
        dns.each_address(nameOrIP) do |addr|
            setIPAddr(addr, ipAddrs)
        end
    end
end