
recipes
私はの開発方法を学び始めていますchef
。Ganglia Monitor
いくつかのサーバー (またはnodes
ganglia 文献) に をインストールする必要があります。 そのため、プラットフォームが であるかどうかubuntu
、centOS
および他の多くのものを確認して、正しいパッケージをインストールしています。
問題は、2 つの異なる.config
ファイルがあることです。実際には、この.config
ファイルには、互いに異なるパラメーターが 1 つまたは 2 つしかありません。適切なファイルをコピーできるように、どちらに属する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