
У меня есть 3 разных способа установки указанного пакета, и мне больше всего нравится вариант №1, но я хотел бы узнать, есть ли смысл использовать вариант №2 или 3 или какие-либо другие варианты? (Моя цель этого вопроса — получить отзывы о разных способах сделать это; и не устанавливать во время компиляции, если это возможно... в данном случае)
1-й.
p = package "snmp" do
package_name value_for_platform(
[ "centos", "redhat", "suse" ] => { "default" => "net-snmp" },
"default" => "snmpd"
)
action :install
end
2-й.
packages = case node[:platform]
when "centos","redhat","fedora"
%w{net-snmp}
else
%w{snmpd}
end
packages.each do |pkg|
package pkg
end
3-й.
package "snmpd" do
action :install
only_if do platform?("ubuntu", "debian") end
end
решение1
Обычно я не поддерживаю слишком много дистрибутивов в своих рецептах, но при чтении других рецептов (например, из Opscode) я обычно ценю подходы, похожие на ваш второй, приведенный выше, главное отличие в том, что я склонен явно вызывать ресурс напрямую, а не компилировать массив.
case node[:platform]
when "centos","redhat","fedora"
package 'net-snmp'
else
package 'snmpd'
end
Однако в каждом случае есть свои плюсы и минусы, в зависимости от того, что именно вы пытаетесь выразить.