Valores nulos / vazios em fatos fantoches

1

Como posso afirmar, de maneira rápida e fácil, que um valor nulo / em branco está correto em um fato dentro do fantoche?

Ao montar um fato personalizado, estou fazendo algo como o seguinte:

/ fantoche / produção / módulos / hosts / lib / facter

Facter.add(:hostslocal) do
  setcode do
    Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null")
  end
end

Isso funciona perfeitamente, exceto se o arquivo não existir e, nesse caso, ele explodirá com algo semelhante ao seguinte quando usado no Puppet.

Detail: Could not find value for 'hostslocal'

Eu consegui contorná-lo com algo parecido com 'se o arquivo não existe escrever uma linha que contém apenas um comentário', mas isso parece kludgy.

    
por Tim Brigham 22.11.2013 / 21:47

2 respostas

1

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
    
por 24.11.2013 / 01:29
1

Você tem o poder de Ruby à sua disposição ao escrever esses fatos personalizados. Portanto, apenas verifique se o arquivo em questão existe mesmo antes de executar a ação exec. 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")
    end
  end
end

Não testado, claro, mas essa deve ser a direção em que você quer ir. Dê uma olhada no link para obter mais detalhes sobre fatos personalizados.

    
por 22.11.2013 / 22:05

Tags