Uma maneira simples de conseguir isso seria implantar um fato personalizado. Se você estiver usando o módulo puppet-stdlib
, você pode escrever fatos personalizados no idioma de sua escolha, soltando um script executável em /etc/facter/facts.d
(veja este artigo para detalhes). Por exemplo, se você criou um script /etc/facter/facts.d/apc_ini_path
com o seguinte conteúdo (e certificou-se de que era executável):
#!/bin/sh
if [ -d /etc/php5/mods-available ]; then
echo "apc_ini_path=/etc/php5/mods-available"
else
echo "apc_ini_path=/etc/php5/conf.d/"
fi
Então você teria disponível um fato "apc_ini_path", e você poderia fazer isso:
file { "$apc_ini_path/apc.ini":
source => "puppet:///modules/uc/php/apc.ini",
require => Package["php-apc"]
}
É claro que, se você se sentir confortável com Ruby, também pode soltar um fato do Ruby em YOURMODULE/lib/facter/yourfact.rb
usando os exemplos apresentados no mesmo artigo . Eles fornecem um exemplo de fato do Ruby que é bem trivial:
# hardware_platform.rb
Facter.add("hardware_platform") do
setcode do
Facter::Util::Resolution.exec('/bin/uname -i')
end
end
Deve ser bastante fácil substituir isso por uma verificação de existência de diretório.