如何优化厨师食谱代码

时间:2017-06-15 01:31:03

标签: chef chef-recipe recipe

以下代码基本上做的是:

  1. 检查以确保存在naemonstats-2-graphite.pl脚本 系统

  2. 检查以确保系统上已安装collectd软件包

  3. 如果1和2检出确定,请检查是否已收集了条目 存在于root的crontab中,如果存在,则检查它是否被注释 出

  4. 这做了一些事情:

    • 确保每当收集时都不会向cron添加大量条目 cron job被注释掉了
    • 确保收集cron作业时 被注释掉了,它将它添加回cron Uncommented
    • 确保当cron中的collectd cron作业完全不存在时,它 添加它,当然前提是上面的1和2检查确定。

    我需要避免调用系统实用程序(如果可能)并基本上优化此代码。缩短。

    我的Chef Client,版本= 12.19.36

    
    CollectdCronCheck = system 'crontab -l | egrep "^#*/1.*naemonstats-2-graphite.pl.nc.-U./var/run/collectd-unixsock"'
    if !CollectdCronCheck.nil?
        Chef::Log.info("########   I see that the cron entry for naemonstats collectd is commented out in root crontab - im fixing it now...   #########")
        cron "naemonstats-2-graphite" do
           minute '/1'
           command "#{node['naemon']['plugin_dir']}/server/scripts/cron/naemonstats-2-graphite.pl | nc -U /var/run/collectd-unixsock >& /dev/null"
        end
    else
        cron "naemonstats-2-graphite" do
           minute '*/1'
           command "#{node['naemon']['plugin_dir']}/server/scripts/cron/naemonstats-2-graphite.pl | nc -U /var/run/collectd-unixsock >& /dev/null"
           only_if { File.exist?("#{node['naemon']['plugin_dir']}/server/scripts/cron/naemonstats-2-graphite.pl") && "rpm -qa | grep 'collectd'" }
           not_if "crontab -l | egrep '^*/1.*naemonstats-2-graphite.pl.nc.-U.*/var/run/collectd-unixsock'"
        end
    end
    

1 个答案:

答案 0 :(得分:0)

你为什么要自己做这么多检查? cron资源本身已经是幂等的。我们通常建议使用cron_d食谱中的cron资源而不是核心资源,但除非他们另有说法,否则要么相信Chef资源是幂等的。

相关问题