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