
Estou começando a aprender como desenvolver recipes
para chef
. Preciso instalar Ganglia Monitor
em alguns servidores (ou nodes
na literatura dos gânglios). Então é por isso que estou verificando se a plataforma é ubuntu
, centOS
e muitas outras para instalar o pacote correto.
O problema é que tenho dois .config
arquivos diferentes; na verdade, há apenas um ou dois parâmetros neste .config
arquivo que diferem um do outro. Preciso de ajuda para detectar a qual pertence datacenter
o arquivo server
para poder copiar o .config
arquivo corretamente. Até o momento consegui desenvolver esse script abaixo, mas tenho algumas dúvidas, que estão em comentários no código.
#
# 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
Alguma sugestão de como desenvolver esse código de uma maneira melhor?
Responder1
Você pode usar variáveis no source
atributo do cookbook_file
recurso para evitar duplicação de código.
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