Algo parecido com isso funcionará:
$dir = "/usr/dir1"
exec { "chk_${dir}_exist":
command => "true",
path => ["/usr/bin","/usr/sbin", "/bin"],
onlyif => "test -d ${dir}"
}
file {"${dir}/test.txt":
ensure => file,
owner => 'root',
group => 'root',
mode => '0750',
require => Exec["chk_${dir}_exist"],
}
Explicação:
onlyif => "test -d ${dir}"
significa que o recurso Exec só é criado se a saída de test -d
for verdadeira.
require => Exec["chk_${dir}_exist"]
significa que o recurso Arquivo é criado apenas se o recurso Exec existir.
Se o diretório não existir, a execução do fantoche gerará um erro indicando que ele não pode criar o recurso Arquivo porque o recurso Exec não existe. Isso é esperado e pode ser ignorado com segurança, pois o restante do catálogo de fantoches ainda é aplicado.
Se o diretório existir, o recurso Arquivo será criado e aplicado.