我有一个自定义木偶事实(用ruby编写),它执行一个简单的bash脚本。该脚本检查文件系统中的所有文件以获得全局可读的权限,并相应地返回结果。如果脚本输出不为null,则puppet事实检查脚本的输出并返回“fail”。
问题是脚本是资源密集型的,我不希望它每30分钟执行一次(客户端'puppet.conf:runinternval = 1800)。
我尝试过使用“schedule”资源,但由于puppet的工作方式,它只会影响我用来评估事实输出的类。无论其他什么原因,都会在每个木偶运行中评估Puppet事实。 (从而使它们可用于资源)
我还尝试将执行bash脚本的代码从事实中移出到puppet类中,但看起来你无法评估bash脚本的输出(使用“exec”类型)并将其存储在变量(再次,因为木偶的运作方式)。
我现在简化为尝试使用Ruby语言应用某种调度机制,并在事实中实现它。我在PStore上读过一些内容,现在这似乎是个好方向。
有没有人知道我怎么能让ruby脚本只在晚上执行?我不能使用crontab,因为代码将由puppet运行。
木偶类的代码段:
update
来自傀儡事实的代码片段:
node
端
答案 0 :(得分:1)
您的自定义事实可以将其结果记录在系统中的某个文件中。在评估时,它可以将该文件的时间戳与当前系统时间进行比较,并根据需要读回该值或对其进行新计算。这也允许您推迟更新(例如,通过touch
文件)或手动请求重新评估(通过删除文件)。
然而,考虑将昂贵的评估与事实收集分开是否有意义。即使Facter只是偶尔需要从头开始重新评估这个事实,因此Facter - 以及Puppet - 将花费很长时间来执行这些运行。您可以考虑使用计划作业以您喜欢的任何时间间隔执行评估,并使自定义事实始终依赖于最新评估的缓存结果。