我正在尝试使用以下结构设置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"
部分的代码。
谢谢!
答案 0 :(得分: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
答案 1 :(得分:0)
您可以使用多重要求
file{'path/foo':}
file{'path/bar':}
file{'~/foobar':
require => [ File['path/foo'], File['path/bar'] ]
}
或者您可以使用订购箭头
- > (订购箭头;连字符和大于号) - 在右侧资源之前的左侧应用资源。
file{'path/foo':} ->
file{'path/bar':} ->
file{'~/foobar':}
以下是有关Puppet中relationships and ordering的更多信息