Linux

如何使用 CHEF 在配方中複製適當的配置文件?

  • April 16, 2013

我開始學習如何recipes發展chef。我需要安裝Ganglia Monitor在一些伺服器(或nodes神經節文獻)中。所以這就是為什麼我要檢查平台是否是ubuntucentOS以及許多其他人要安裝正確的軟體包。

問題是我有兩個不同的.config文件,實際上這個.config文件中只有一兩個參數會有所不同。我需要幫助如何檢測屬於哪個文件datacenterserver以便我可以複製正確的.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

關於如何以更好的方式開發此程式碼的任何建議?

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

引用自:https://serverfault.com/questions/499858