我有一个自定义木偶事实(用 ruby 编写),它执行一个简单的 bash 脚本。该脚本检查文件系统中的所有文件是否具有世界可读权限并相应地返回结果。puppet fact 检查脚本的输出,如果脚本输出不为空,则返回“失败”。
问题是脚本是资源密集型的,我不希望它每 30 分钟执行一次(客户端的 puppet.conf:runinternval=1800)。
我尝试过使用“schedule”资源,但由于 puppet 的工作方式,它只会影响我用来评估事实输出的类。在每次 puppet 运行时都会评估 Puppet 事实,而不管其他任何事情。(从而使它们可用于资源)
我还尝试将执行 bash 脚本的代码从事实中移出并移到 puppet 类中,但您似乎无法评估 bash 脚本的输出(使用“exec”类型)并将其存储在变量中(再次,因为 puppet 的工作方式)。
我现在只能尝试使用 Ruby 语言应用某种调度机制,并在实际中实现它。我在 PStore 上阅读了一些内容,现在这似乎是一个不错的方向。
有谁知道我怎样才能让 ruby 脚本只在夜间执行?我不能使用 crontab,因为代码将由 puppet 运行。
puppet 类的代码片段:
if $::myfact == 'fail' {
notify { "warning blah blah...":
loglevel => err,
schedule => 'night',
}
}
傀儡事实的代码片段:
require 'facter'
Facter.add(:myfact) do
setcode do
if File.exists? '/usr/local/puppet/scripts/myscript.sh'
result = Facter::Util::Resolution.exec("/usr/local/puppet/scripts/myscript.sh")
if result != ''
puts "Result of myfact is: \n #{result}"
'fail'
end
end
end
结尾