I released Itamae v1.10.0! Support only_if and not_if inside a definehttps://t.co/H6ERvsjCFY
— sue445 (@sue445) 2018年11月12日
リリースノート
https://github.com/itamae-kitchen/itamae/blob/master/CHANGELOG.md#v1100
今回の差分は1つだけですが、個人的には目玉機能だと思ってます。
Support only_if and not_if inside a define
v1.9.xまで
みんな大好き define
*1 ですが、define
の呼び出しの中では only_if
や not_if
が使えなくて define
の実行自体をスキップするには下記のように外部から無理やり条件を渡すしかありませんでした
define :install_and_enable_package, version: nil, only_if: nil do v = params[:version] only_if_condition = params[:only_if] package params[:name] do version v if v action :install only_if only_if_condition end service params[:name] do action :enable only_if only_if_condition end end install_and_enable_package "nginx" do only_if "ls /tmp/install_eginx" end
v1.10.0以降
define
の呼び出しの中で only_if
や not_if
を使えるようにしたので、今までのようなハックは不要になり下記のように他のリソース同様シュッと書けるようになります。
define :install_and_enable_package, version: nil do v = params[:version] package params[:name] do version v if v action :install end service params[:name] do action :enable end end install_and_enable_package "nginx" do only_if "ls /tmp/install_eginx" end
既存のレシピやプラグインの中でdefineを多用している場合はv1.10.0に上げることでリファクタリングできるようになると思われます。
*1:要出典