Я пытаюсь написать модуль, в котором он создает файл, если каталог существует, иначе он ничего не должен делать.
class puppetmodule{
exec { 'chk_dir_exists':
command => 'test -d /usr/dir1',
path => ["/usr/bin","/usr/sbin", "/bin"],
} ->
file {'usr/dir1/test.txt':
ensure => 'file',
owner => 'root',
group => 'root',
mode => '0750',
}
}
Ниже приведена ошибка, которую он выдает. Пожалуйста, посоветуйте мне это.
Ошибка: test -d / usr / dir1 вернул 1 вместо одного из [0]
Примерно так будет работать:
$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"],
}
Пояснение:
onlyif => "test -d ${dir}"
означает, что ресурс Exec создается, только если вывод test -d
правда.
require => Exec["chk_${dir}_exist"]
означает, что ресурс File создается, только если ресурс Exec существует.
Если каталог не существует, запуск марионетки вызовет ошибку, указывающую, что он не может создать ресурс File, поскольку ресурс Exec не существует. Это ожидается, и на это можно спокойно не обращать внимания, поскольку остальная часть каталога марионеток все еще применяется.
Если каталог существует, создается и применяется файловый ресурс.
Марионетка о конечном состоянии. Вы можете убедиться, что файл существует в указанном вами состоянии или отсутствует. Если вам нужно сделать ветвление (если), Puppet поддерживает и это. См. Условные выражения в документации - https://docs.puppet.com/puppet/latest/reference/lang_conditional.html
$directory_exists = <insert logic here>
if $directory_exists {
file {'usr/dir1/test.txt':
ensure => 'file',
owner => 'root',
group => 'root',
mode => '0750',
}
}