Назад | Перейти на главную страницу

Какой способ установки пакетов с 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

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

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

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