如何使用 CHEF 在配方中复制适当的配置文件?

如何使用 CHEF 在配方中复制适当的配置文件?

我开始学习如何开发recipeschef我需要安装Ganglia Monitor到一些服务器中(或nodes在 ganglia 文献中)。这就是为什么我要检查平台是否ubuntu以及centOS许多其他平台是否安装正确的软件包。

问题是我有两个不同的.config文件,实际上这个文件中只有一个或两个参数.config彼此不同。我需要帮助如何检测datacenter它们属于哪个文件server,以便我可以复制正确的.config文件。到目前为止,我能够开发下面的这个脚本,但我有一些问题,它们在代码的注释中。

#
# Cookbook Name:: ganglia
# Recipe:: default
#
# Copyright 2013, Valter Henrique.com
#
# All rights reserved - Do Not Redistribute
#
# Installing Ganglia Monitor

case node[:platform]
  when "ubuntu", "debian"
    package "ganglia-monitor"
  when "redhat", "centos", "fedora"
    package "ganglia-gmond"
  end
  user "ganglia"
end

# Setting different .config files
case ipaddress
# DataCenter #1
# how put more options in the when condition ? A when for /^200.222./ or /^200.223./ ?
    when /^200.222./ 
        # putting config file
        cookbook_file "/etc/ganglia/gmond.conf" do
            owner "root"
            group "root"
            mode "0644"
            source "dc1/gmond.conf"
            notifies(:restart, "service[gmond]")
        end
    #DataCenter #2
    when /^216.235./
        cookbook_file "/etc/ganglia/gmond.conf" do
            owner "root"
            group "root"
            mode "0644"
            source "dc2/gmond.conf"
            notifies(:restart, "service[gmond]")
        end
  end

关于如何更好地开发此代码,有什么建议吗?

答案1

source您可以在资源属性中使用变量cookbook_file来避免代码重复。

dc = case ipaddress
     when /^200\.222\./
       'dc1'
     when /^216\.235\./
       'dc2'
     end

cookbook_file "/etc/ganglia/gmond.conf" do
   owner "root"
   group "root"
   mode "0644"
   source "#{dc}/gmond.conf"
   notifies(:restart, "service[gmond]")
end

相关内容