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

Puppet "require" игнорирует, если "exec" завершается успешно

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 только гарантирует, что файл существует, и создаст пустой файл, если это не так.