Chef-solo基于node.name

时间:2016-07-25 18:09:57

标签: ruby chef chef-recipe

目前我需要根据安装clamac的配方的主机名安装交错的crons。我有一个很好的例子,但是我的最终产品需要处理几百个不同的主机名,主要是升序号码。服务器示例:myserver-db [1-12],anotherserver-acc [1-9]。

cron 'clam-scan-weekly Staggered 1' do
        only_if {node.name == 'myserver-db1' || 'myserver-db3'  }
        minute 30
        hour 22
        weekday 1
        command '/usr/bin/clamscan --exclude-dir="/dev/|/proc/|/run/|/sys/" -l clamscan.log -r /'
        user    'root'
end

cron 'clam-scan-weekly Staggered 2' do
        only_if {node.name == 'myserver-db2' || 'myserver-db4'  }
        minute 30
        hour 22
        weekday 1
        command '/usr/bin/clamscan --exclude-dir="/dev/|/proc/|/run/|/sys/" -l clamscan.log -r /'
        user    'root'
end

最终目标是根据主机名创建四个交错的cron作业中的三个。我查看了ruby_blocks,它可能是可行的但是必须有一个更简单的方法。我希望通用游戏可以工作,但它没有......谢谢你的任何帮助!

1 个答案:

答案 0 :(得分:0)

所以潜在的问题是x == 'a' || 'b'就是你所写的,但x == 'a' || x == 'b'就是你的意思,那些是非常不同的。

要解决这个问题,不要使用大量的复制粘贴:

cron 'whatever' do
  # Other properties here.
  minute node.name.hash % 60
end