Задание Puppet cron гарантирует, что файлы существуют

Я пытаюсь настроить работу Puppet cron со следующей структурой:

file { '/usr/local/sbin/file.py':
  mode    => '0755',
  source  => 'puppet:///modules/file.py',
  require => File['/usr/local/sbin']
}

cron { "cronjob":
  require => "ALL_THE_FILES_ABOVE"
  command => "...command_to_run_script..."
  minute => '*/1'
}

Все вышеперечисленное находится в одном файле run_script.pp. Мне интересно, как я могу закодировать часть require => "ALL_THE_FILES_ABOVE".

Спасибо!


person Kevin Lin    schedule 22.11.2017    source источник


Ответы (2)


Основываясь на информации, предоставленной в вашем вопросе, я собираюсь сделать предположение, что содержимое run_script.pp состоит из множества ресурсов file и перечисленных ресурсов cron. Вы заявляете, что хотите, чтобы ресурс cron требовал всех ресурсов file в этом классе. Исходя из этого, вот чистое и эффективное решение.

Есть несколько сложных/продвинутых способов получить четкое и эффективное решение, но самый простой для понимания — использовать ресурс по умолчанию: https://puppet.com/docs/puppet/5.3/lang_defaults.html

Благодаря этому мы можем установить пары атрибут/значение по умолчанию для всех file ресурсов, содержащихся в этой области. Это упростит использование метапараметра before в ресурсах file: https://puppet.com/docs/puppet/5.3/metaparameter.html#before

Это упрощает решение однострочника в вашем классе:
File { before => Cron['cronjob'] }

Обратите внимание, что в этом методе будет предостережение: если вы объявляете, требуете или содержите класс в этом манифесте, то это значение по умолчанию может быть расширено до этой «области действия» и вызвать циклическую зависимость. В этом случае следует использовать атрибут ресурса по умолчанию для каждого выражения: https://puppet.com/docs/puppet/5.3/lang_resources_advanced.html#per-expression-default-attributes

person Matt Schuchard    schedule 22.11.2017

Вы можете использовать несколько require

file{'path/foo':}
file{'path/bar':}
file{'~/foobar':
  require => [ File['path/foo'], File['path/bar'] ]
}

или вы можете использовать стрелку заказа

-> (стрелка упорядочения; дефис и знак «больше») — применяет ресурс слева перед ресурсом справа.

 file{'path/foo':} ->
   file{'path/bar':} ->
   file{'~/foobar':}

Подробнее об отношениях и порядке в Марионетка

person Stranger B.    schedule 22.11.2017