scripts/compare_hostname_output.rb

require "socket" unless defined?(Socket)
require "ipaddr" unless defined?(IPAddr)

def resolve_fqdn

    hostname = %x{hostname}.chomp
    addrinfo = Socket.getaddrinfo(hostname, nil).first
    iaddr = IPAddr.new(addrinfo[3])
    Socket.gethostbyaddr(iaddr.hton)[0]
rescue
    nil
end

def canonicalize_hostname(hostname)
    Addrinfo.getaddrinfo(hostname, nil, nil, nil, nil, Socket::AI_CANONNAME).first.canonname
end

def canonicalize_hostname_with_retries(hostname)
    retries = 3
    begin
        canonicalize_hostname(hostname)
    rescue
        retries -= 1
        retry if retries > 0
        nil
    end
end

def resolve_fqdn_without_deprecated_call(hostname)
    Addrinfo.ip(hostname).getnameinfo&.[](0)
end

puts "old code: #{resolve_fqdn}"
puts "new code: #{canonicalize_hostname_with_retries(%x{hostname}.chomp)}"
puts "proposed code: #{resolve_fqdn_without_deprecated_call(%x{hostname}.chomp)}"