O Facter tem muitos fatos que só são definidos em determinadas circunstâncias. Antes de usá-los, você deve verificar se eles estão indefinidos.
if $::hostslocal != undef {
do_your_thing_here
}
Se você realmente quer que seu fato personalizado sempre tenha um valor, você pode fazer algo como
Facter.add(:hostslocal) do
setcode do
if File.exist? "/etc/hosts.local"
Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null")
else
"unknown"
end
end
end