exec { "check_presence":
command => "/bin/true",
onlyif => '/usr/bin/test -e /path',
}
file {"/home/user/test.txt":
ensure => file,
require => Exec["check_presence"]
}
Я не могу понять, что не так с моим сценарием. Я использую puppet apply test.pp для запуска этого скрипта. Но независимо от того, существует / путь или нет, файл test.txt был создан.
Я использовал марионетку 3.4.3. Любая помощь приветствуется.
Связанный ответ: https://serverfault.com/a/516919/428218
Единственный способ сделать это (т.е. управлять целевым файлом только в том случае, если какое-либо другое условие истинно или ложно) - создать собственный факт для этого условия / теста, а затем использовать его, чтобы либо обернуть ресурс в условный блок, либо использовать его. влиять на свойство / параметр ресурса. Например:
if $::mycustomfact {
file { '/home/user/test.txt':
ensure => file,
...
}
}
Или:
file { '/home/user/test.txt':
ensure => $::mycustomfact ? {
true => file,
default => absent,
},
...
}
Вам не нужно проверять, существует ли уже файл, прежде чем управлять им с помощью Puppet, если он уже существует, Puppet установит настроенное состояние. Если его не существует, Puppet создаст его с вашим настроенным состоянием.
Если вы не укажете content / owner / group / mode, Puppet только гарантирует, что файл существует, и создаст пустой файл, если это не так.