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

둘째.

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

그러나 정확히 무엇을 표현하려고 하는지에 따라 각 경우에 여러 가지 장단점이 있습니다.

관련 정보