哪种方式是使用 Chef 安装包最‘优雅’的方式?

哪种方式是使用 Chef 安装包最‘优雅’的方式?

我有 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

然而,每种情况都有其优点和缺点,具体取决于您到底想要表达什么。

相关内容