ようへいの日々精進XP

よかろうもん

recipe の書き方復習

はじめに

  • 業務でも cookbook を書く機会が減ってしまった
  • 目指せ、脱初心者

not_if と only_if の使い方

execute リソースでよく使う not_ifonly_if について復習してみる。

not_if 従来

execute "create file hoge" do
  command "touch /tmp/hoge"
  not_if (ls /tmp/hoge)
end

一応、これでも動く。

not_if こう書いた方がカッコイイと思う(自分比)

execute "create file hoge" do
  command "touch /tmp/hoge"
  not_if {File.exists?("/tmp/hoge")}
end

上記のように書いた方がなんとなくカッコイイ。

only_if

only_if はあまり使ったことはないけど、以下のような感じかな。

template "/tmp/hoge" do
  mode 00644
  source "hoge.erb"
  only_if "test -f /tmp/ahoaho"
end

/tmp/ahoaho が存在していたら template リソースを使って /tmp/hoge を作成する。

そして not_if と only_if を整理

condition 意味
not_if 否定(〜が〜でなければ)
only_if 肯定(〜が〜であれば)

nothing からの notifies

パッケージをインストール後、設定ファイルを設置したい場合....

package "httpd" do
  action :install
end

template "/etc/httpd/conf.d/common.conf" do
  source "httpd_common.conf.erb"
  mode 00644
  owner "root"
  group "root"
end

個人的には悪くはないと思うけど、上記のように書くと毎回実行されてしまうので nothingnotifies を使う。

template "/etc/httpd/conf.d/common.conf" do
  source "httpd_common.conf.erb"
  mode 00644
  owner "root"
  group "root"
  action :nothing
end

package "httpd" do
  action :install
  notifies :create, resources( :template => "/etc/httpd/conf.d/common.conf" )
end

参考

続く...