
上記のパッケージをインストールするには 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 など) を読むときは、上記の 2 番目と同様のアプローチを高く評価します。主な違いは、配列をコンパイルするのではなく、リソースを直接明示的に呼び出す傾向があることです。
case node[:platform]
when "centos","redhat","fedora"
package 'net-snmp'
else
package 'snmpd'
end
ただし、具体的に何を表現しようとしているかによって、それぞれのケースには長所と短所がいくつかあります。