我开始学习如何开发recipes的chef 。 我需要在某些服务器(或神经节文献中的nodes中安装Ganglia Monitor 。 所以这就是为什么我要检查平台是ubuntu , centOS和其他许多人来安装正确的软件包。
问题是我有两个不同的.config文件,实际上在这个.config文件中只有一个或两个参数会有所不同。 我需要帮助如何检测server属于哪个datacenter ,以便我可以正确复制.config文件。 到目前为止,我能够在下面开发这个脚本,但是我有一些dobut,这些代码在注释中。
# # 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
我如何以更好的方式开发这个代码的任何build议?
您可以使用cookbook_file资源的source属性中的variables来避免代码重复。
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