Chefで物理サーバーの場合のみ適用するレシピを作る

物理サーバーと仮想サーバーを両方扱っている場合、
物理サーバーにのみインストールしたいパッケージや起動したいデーモンが出てきます。

例えばmcelogというメモリにエラーがあった時にログ出力してくれるデーモンがあるのですが、
物理サーバー(ハイパーバイザーなど)にのみインストールされていればいいので、
これを自動判断して

  • 物理サーバーならインストール
  • 仮想サーバーならインストールしない

というChefのレシピを作成してみました。

レシピ
package 'mcelog' do
  action :install
  not_if { node['dmi']['system']['product_name'] == 'KVM' }
end

service 'mcelogd' do
  action [:enable, :start]
  not_if { node['dmi']['system']['product_name'] == 'KVM' }
end

※この例では仮想サーバーはKVMを利用している前提です。


ohai変数からproduct_nameを取得しています。
これでproduct_nameがKVM以外の場合はパッケージインストールとデーモン起動が行われます。
物理サーバーの場合、KVMではなく機種名が表示されます。
なので物理サーバーにはこのレシピが適用されるようになります。