Null / blank values on puppet facts
Facter has lots of facts that only set under certain circumstances. Before using them you should check if they are undefined.
if $::hostslocal != undef {
do_your_thing_here
}
If you really want your custom fact to always have a value, you can do something like
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
You have the power of Ruby at your disposal when writing such custom facts. So just check if the file in question even exists before doing the exec action. Something like:
Facter.add(:hostslocal) do setcode do if File.exist? "/etc/hosts.local" Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null") end end end
Untested of course, but that should be the direction in which you want to go. Have a look at the official documentation for further details about custom facts.