Пустые / пустые значения на фактах кукол

Как я могу быстро и легко заявить, что нулевое / пустое значение в порядке для факта в марионетке?

При сборке пользовательского факта я делаю что-то вроде следующего:

/ Кукольный / производство / модули / хостов / Библиотека / 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 для получения дополнительной информации о пользовательских фактах.

Другие вопросы по тегам