require 'resolv' 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| zone_map["#{zone[0]}."] = dns.getresource(zone[0], Resolv::DNS::Resource::IN::SOA).serial end zone_map end end