require 'resolv' def ensure_period(s) if s[-1] == '.' s else "#{s}." end end Facter.add(:dns_zone_serial) do confine do Facter::Util::Resolution.which('named-checkconf') end setcode do dns = Resolv::DNS.new(nameserver: ['localhost']) zones = `named-checkconf -l` .split("\n") .map { |line| line.split(' ') } .filter { |zone| zone.last == 'master' } zone_map = {} zones.map do |zone| z = ensure_period(zone[0]) zone_map[z] = dns.getresource(z, Resolv::DNS::Resource::IN::SOA).serial end zone_map end end