def self.backup_spaces(ips = self.ip_addresses)
ips = [ips] unless ips.is_a?(Array)
spaces = []
ips.each do |ip|
begin
ip = IPAddr.new(ip.to_s) unless ip.is_a?(IPAddr)
rescue ArgumentError => err
end
if !ip.is_a?(IPAddr)
warn "'#{ip}' is not an IP Address." if $VERBOSE
next
end
if !self.is_bytemark_ip?(ip)
warn "IP #{ip} is not in the Bytemark ranges." if $VERBOSE
next
end
lookup = ip.reverse.gsub(/(ip6|in-addr).arpa\Z/,"backup-reverse.bytemark.co.uk")
warn "Doing lookup of #{lookup} for #{ip}..." if $VERBOSE
begin
Resolv::DNS.open do |dns|
res = dns.getresources(lookup, Resolv::DNS::Resource::IN::TXT)
warn "DNS returned #{res.length} results." if $VERBOSE
spaces += res.collect{|rr| rr.strings}.flatten
end
rescue Resolv::ResolvTimeout, Resolv::ResolvError => err
warn "Look up of #{lookup} failed -- #{err.to_s}"
end
end
spaces.uniq
end