Назад | Перейти на главную страницу

Как сделать, чтобы файл / каталог существовал условно в Puppet?

Я пытаюсь написать в марионетке функцию, которая будет 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, если файл / путь не существует, и строку, если она существует.

https://puppet.com/docs/puppet/5.5/function.html#findfile