我如何评价一个class级,而不是每个玩偶?

我想有一种方法,只在特定的时间每天评估一次特定的课程。 现在我从cron运行我的木偶代理,但是我想把它改成运行一个守护进程,或者更频繁地运行。 增加频率的障碍是有一类需要4分钟左右的时间处理,而且不需要经常发生。 我试图find一些方法来从cron每天只评估一次特定的类。

有没有一个简单的方法来设置一个环境variables( FOO=bar;puppet agent .. ),或者添加一个命令行选项( puppet agent .. --foo bar )到crontab中,这将成为我可以使用的一个事实在我的清单中是否包含课程?

 class foobar { if 'bar' == $::foo { # do the slow stuff } } 

一个时间表听起来像它会提供你在找什么。 首先创build一个时间表资源,用于指定事件在某个特定时间段内的运行时间和次数。

 schedule { "slow": range => "1 - 5", period => daily, repeat => 1, } 

上面的例子只会在上午1点和上午5点的时间内进行评估或运行,最多只能运行一次。 您可以删除range参数,它将在一天中的任何时间运行,但是只能再次运行一次。

在资源上,然后指定schedule 元参数以将它们链接到上述计划:

 exec { "example": command => "/usr/bin/foo", unless => "/usr/bin/bar", schedule => "slow", } 

当您使用--debug运行Puppet时,如果已经评估了给定的次数或者范围不适用,您将看到以下内容:

 debug: /Stage[main]//Exec[example]: Not scheduled 

如果您有一些资源,则可以使用您所限制的类中的资源缺省值来影响相同types的所有资源:

 Exec { schedule => "slow", } 

您需要为每个资源types执行此操作 – Exec,File,Augeas等

一些关于改进的笔记:

  • 我不知道如何将它应用到课堂上的所有types的资源
  • schedule元参数应用到类似乎不工作,可能是值得提出一个错误

我相信你可以通过环境声明来实现这一点。 您可以在命令行上调用它:

 puppet agent --environment latetbus 

您可以使用它在puppet.conf文件中指定不同的清单:

 [latebus] manifest = $confdir/latetbus/site.pp 

甚至可以用这种方式做不同的模块。

还有一种方法可以添加自定义事实 。 这利用插件来完成工作。 你创build一个自定义的ruby文件来检查一些东西:

 # run_latebus.rb facter.add("latebus_exec") do setcode do %x{if [ -e /tmp/run_latebus ] ; then echo "true" ; else echo "false" ; fi}.chomp end end 

在启动puppet agent之前,木偶代理调用脚本会touch /etc/run_latebuspuppet agent将在木偶运行中由Facter评估。

.rb文件放置在自定义模块中,特别是在模块本身的lib/facter目录中。