我有 3 种不同的方法来安装所述软件包,我最喜欢选项 1,但我想看看是否有理由使用选项 2 或 3 或任何其他选项?(我提出这个问题的目的是获得有关执行此操作的不同方法的反馈;并且如果可能的话不要在编译时安装...在这种情况下)
第一。
p = package "snmp" do
package_name value_for_platform(
[ "centos", "redhat", "suse" ] => { "default" => "net-snmp" },
"default" => "snmpd"
)
action :install
end
第二。
packages = case node[:platform]
when "centos","redhat","fedora"
%w{net-snmp}
else
%w{snmpd}
end
packages.each do |pkg|
package pkg
end
第三。
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
然而,每种情况都有其优点和缺点,具体取决于您到底想要表达什么。