哪一種方式是使用 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

然而,每種情況都有許多優點和缺點,這取決於你到底想表達什麼。

相關內容