Пустые / пустые значения на фактах кукол
Как я могу быстро и легко заявить, что нулевое / пустое значение в порядке для факта в марионетке?
При сборке пользовательского факта я делаю что-то вроде следующего:
/ Кукольный / производство / модули / хостов / Библиотека / facter
Facter.add(:hostslocal) do
setcode do
Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null")
end
end
Это работает отлично, за исключением случаев, когда файл не существует, и в этом случае он будет взорван чем-то вроде следующего при использовании в Puppet.
Detail: Could not find value for 'hostslocal'
Я смог обойти это с чем-то вроде "если файл не существует, напишите строку, которая содержит только комментарий", но это кажется глупым.
2 ответа
Факер имеет много фактов, которые устанавливаются только при определенных обстоятельствах. Перед их использованием вы должны проверить, не определены ли они.
if $::hostslocal != undef {
do_your_thing_here
}
Если вы действительно хотите, чтобы ваш пользовательский факт всегда имел значение, вы можете сделать что-то вроде
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
При написании таких пользовательских фактов вы можете использовать Ruby. Так что просто проверьте, существует ли указанный файл, прежде чем выполнять действие exec. Что-то вроде:
Facter.add (: hostslocal) do setcode do если File.exist? "/Etc/hosts.local" Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null") конец конец конец
Конечно, не проверено, но это должно быть направление, в котором вы хотите идти. Посетите http://docs.puppetlabs.com/guides/custom_facts.html для получения дополнительной информации о пользовательских фактах.