深遠な理由があって、why-run の時も execute リソースのコマンドを実行したい。
Convergence フェーズで実行したいので shell_out! ではダメ。
コード
ちょっとしたトリックではできなさそうだったので、自分で書いてみた。
- https://github.com/sonots/chef-resource-whyrun_safe_execute/blob/master/resources/whyrun_safe_execute.rb
- https://github.com/sonots/chef-resource-whyrun_safe_execute/blob/master/providers/whyrun_safe_execute.rb
whyrun_safe_ruby_block リソース を参考にしている。
おためし実行
これで、こんなレシピを書いて
recipes/test.rb
whyrun_safe_execute "foo" do
command "ls /tmp"
end
$ chef-solo -c solo.rb -o {cookbook}::test -l info
$ chef-solo -c solo.rb -o {cookbook}::test --why-run -l info
として実行すると why-run 時にも ls /tmp されることが確認できるはず。
さらに if Chef::Config[:why_run]
とかすると why-run 時にだけ実行する謎リソースとかも実現できる。
recipes/test.rb
if Chef::Config[:why_run]
whyrun_safe_execute "foo" do
command "ls /tmp"
end
end
おわりに
cookbook レポジトリとして作ってあるので、Berkshelf かなにかで cookbook として取り込めばご利用いただける https://github.com/sonots/chef-resource-whyrun_safe_execute