Qual é a maneira mais 'elegante' de instalar pacotes com o Chef?

Qual é a maneira mais 'elegante' de instalar pacotes com o Chef?

Tenho 3 maneiras diferentes de instalar o referido pacote e prefiro mais a opção 1, mas queria ver se havia um motivo para usar a opção 2 ou 3 ou alguma outra opção. (Meu objetivo com esta pergunta é obter feedback sobre diferentes maneiras de fazer isso; e não instalar em tempo de compilação, se possível... neste caso)

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

Responder1

Normalmente não suporto muitas distros em minhas próprias receitas, mas ao ler outras receitas (como do Opscode), geralmente aprecio abordagens semelhantes à segunda, acima, a principal diferença é que eu tenderia a invocar explicitamente o recurso diretamente , em vez de compilar uma matriz.

case node[:platform]
when "centos","redhat","fedora"
  package 'net-snmp'
else
  package 'snmpd'
end

No entanto, há vários prós e contras para cada caso, dependendo exatamente do que você está tentando expressar.

informação relacionada