Я начинаю учиться развиваться recipes
к chef
. Мне нужно установить Ganglia Monitor
на некоторых серверах (или nodes
в литературе по ганглиям). Вот почему я проверяю, является ли платформа ubuntu
, centOS
и многие другие, чтобы установить правильный пакет.
Проблема в том, что у меня два разных .config
файлы, на самом деле в этом .config
файл, который бы отличался один от другого. Мне нужна помощь, как определить, в каком 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
Есть ли предложения о том, как лучше разработать этот код?
Вы можете использовать переменные в 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