哪种方式是使用 Chef 安装软件包最“优雅”的方式?

Sco*_*ens 4 linux configuration-management 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
Run Code Online (Sandbox Code Playgroud)

第二。

packages = case node[:platform]
  when "centos","redhat","fedora"
    %w{net-snmp}
  else
    %w{snmpd}
  end

packages.each do |pkg|
  package pkg
end
Run Code Online (Sandbox Code Playgroud)

第三。

package "snmpd" do
  action :install
  only_if do platform?("ubuntu", "debian") end
end
Run Code Online (Sandbox Code Playgroud)

小智 6

我通常不支持我自己的食谱中的太多发行版,但是在阅读其他食谱时(例如从 Opscode),我通常欣赏类似于上面的第二个方法,主要区别在于我倾向于直接显式调用资源,而不是编译一个数组。

case node[:platform]
when "centos","redhat","fedora"
  package 'net-snmp'
else
  package 'snmpd'
end
Run Code Online (Sandbox Code Playgroud)

但是,每种情况都有许多优点和缺点,具体取决于您要表达的内容。