¿Cuál es la forma más "elegante" de instalar paquetes con Chef?

¿Cuál es la forma más "elegante" de instalar paquetes con Chef?

Tengo 3 formas diferentes de instalar dicho paquete y prefiero la opción n.° 1, pero quería ver si había alguna razón para usar la opción n.° 2 o 3 o alguna otra opción. (Mi objetivo con esta pregunta es obtener comentarios sobre diferentes formas de hacer esto; y no instalar en tiempo de compilación si es posible... en este caso)

1er.

p = package "snmp" do
  package_name value_for_platform(
    [ "centos", "redhat", "suse" ] => { "default" => "net-snmp" },
    "default" => "snmpd"
  )
  action :install
end

2do.

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

packages.each do |pkg|
  package pkg
end

3er.

package "snmpd" do
  action :install
  only_if do platform?("ubuntu", "debian") end
end

Respuesta1

Por lo general, no admito demasiadas distribuciones en mis propias recetas, pero cuando leo otras recetas (como las de Opscode), generalmente aprecio enfoques similares a la segunda, arriba, la principal diferencia es que tendería a invocar explícitamente el recurso directamente. , en lugar de compilar una matriz.

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

Sin embargo, existen una serie de pros y contras para cada caso, dependiendo de lo que estés tratando de expresar exactamente.

información relacionada