Я пытаюсь написать в марионетке функцию, которая будет fail
если переданный путь к каталогу не существует.
if File["/some/path"]
всегда возвращает истину, и if defined(File["/some/path"])
возвращает true только в том случае, если ресурс определен в марионетке, независимо от того, существует ли он на самом деле.
Есть ли способ сделать это простым if
заявление?
Спасибо
Обходной путь: используйте onlyif в "тесте" exec и потребуйте его в своем действии, которое вы хотите выполнить:
exec {"check_presence":
command => '/bin/true',
onlyif => '/usr/bin/test -e /path/must/be/available',
}
whatever {"foo...":
.....
require => Exec["check_presence"],
}
Мне тоже было трудно понять, как запретить запуск модуля, если каталога нет. Это то, что я обнаружил, сработало для меня.
exec { 'module_name':
command => "command to run with variables", # Double quotes for Variable interpolation
path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
onlyif => 'test -d /mydirectory',
}
Добавление пути - вот что действительно помогло мне. По какой-то причине, даже если я добавил путь к тестовой команде, такой как /bin/test
похоже, это не сработало.
Надеюсь, это поможет другим, у кого может быть такая же проблема.
Вы также можете использовать для этого встроенную функцию find_file () ... она возвращает undef, если файл / путь не существует, и строку, если она существует.