Какой способ установки пакетов с помощью Chef является наиболее «элегантным»?

Какой способ установки пакетов с помощью Chef является наиболее «элегантным»?

У меня есть 3 разных способа установки указанного пакета, и мне больше всего нравится вариант №1, но я хотел бы узнать, есть ли смысл использовать вариант №2 или 3 или какие-либо другие варианты? (Моя цель этого вопроса — получить отзывы о разных способах сделать это; и не устанавливать во время компиляции, если это возможно... в данном случае)

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

решение1

Обычно я не поддерживаю слишком много дистрибутивов в своих рецептах, но при чтении других рецептов (например, из Opscode) я обычно ценю подходы, похожие на ваш второй, приведенный выше, главное отличие в том, что я склонен явно вызывать ресурс напрямую, а не компилировать массив.

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

Однако в каждом случае есть свои плюсы и минусы, в зависимости от того, что именно вы пытаетесь выразить.

Связанный контент