我开始学习如何开发recipes
。chef
我需要安装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