CHEF を使用してレシピ内の適切な設定ファイルをコピーするにはどうすればよいですか?

CHEF を使用してレシピ内の適切な設定ファイルをコピーするにはどうすればよいですか?

recipes私はの開発方法を学び始めていますchefGanglia Monitorいくつかのサーバー (またはnodesganglia 文献) に をインストールする必要があります。 そのため、プラットフォームが であるかどうかubuntucentOSおよび他の多くのものを確認して、正しいパッケージをインストールしています。

問題は、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

関連情報