Wie kopiere ich mit CHEF die entsprechende Konfigurationsdatei in ein Rezept?

Wie kopiere ich mit CHEF die entsprechende Konfigurationsdatei in ein Rezept?

Ich fange an zu lernen, wie man recipessich entwickelt. Ich muss es auf einigen Servern (oder in der Ganglia-Literatur) chefinstallieren . Deshalb überprüfe ich, ob die Plattform ist , und viele andere, um das richtige Paket zu installieren.Ganglia MonitornodesubuntucentOS

Das Problem ist, dass ich zwei verschiedene Dateien habe .config. Tatsächlich gibt es in dieser .configDatei nur ein oder zwei Parameter, die sich voneinander unterscheiden. Ich brauche Hilfe, um herauszufinden, wohin datacenterdie Datei servergehört, damit ich die richtige .configDatei kopieren kann. Bisher konnte ich das folgende Skript entwickeln, aber ich habe einige Zweifel, die in den Kommentaren im Code stehen.

#
# 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

Irgendwelche Vorschläge, wie ich diesen Code besser entwickeln kann?

Antwort1

Sie können Variablen im sourceAttribute für cookbook_fileRessourcen verwenden, um Code-Duplikation zu vermeiden.

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

verwandte Informationen