Puppet cron作业 - 确保文件存在

时间:2017-11-22 07:03:45

标签: cron puppet puppet-enterprise

我正在尝试使用以下结构设置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"部分的代码。

谢谢!

2 个答案:

答案 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的更多信息