如何安排木偶自定义事实每X小时执行一次?

时间:2016-01-05 16:42:08

标签: ruby puppet schedule facter

我有一个自定义木偶事实(用ruby编写),它执行一个简单的bash脚本。该脚本检查文件系统中的所有文件以获得全局可读的权限,并相应地返回结果。如果脚本输出不为null,则puppet事实检查脚本的输出并返回“fail”。

问题是脚本是资源密集型的,我不希望它每30分钟执行一次(客户端'puppet.conf:runinternval = 1800)。

我尝试过使用“schedule”资源,但由于puppet的工作方式,它只会影响我用来评估事实输出的类。无论其他什么原因,都会在每个木偶运行中评估Puppet事实。 (从而使它们可用于资源)

我还尝试将执行bash脚本的代码从事实中移出到puppet类中,但看起来你无法评估bash脚本的输出(使用“exec”类型)并将其存储在变量(再次,因为木偶的运作方式)。

我现在简化为尝试使用Ruby语言应用某种调度机制,并在事实中实现它。我在PStore上读过一些内容,现在这似乎是个好方向。

有没有人知道我怎么能让ruby脚本只在晚上执行?我不能使用crontab,因为代码将由puppet运行。

木偶类的代码段:

update

来自傀儡事实的代码片段:

node

1 个答案:

答案 0 :(得分:1)

您的自定义事实可以将其结果记录在系统中的某个文件中。在评估时,它可以将该文件的时间戳与当前系统时间进行比较,并根据需要读回该值或对其进行新计算。这也允许您推迟更新(例如,通过touch文件)或手动请求重新评估(通过删除文件)。

然而,考虑将昂贵的评估与事实收集分开是否有意义。即使Facter只是偶尔需要从头开始重新评估这个事实,因此Facter - 以及Puppet - 将花费很长时间来执行这些运行。您可以考虑使用计划作业以您喜欢的任何时间间隔执行评估,并使自定义事实始终依赖于最新评估的缓存结果。