パルカワ2

PerlとRubyとイチャラブ

Chefでファイルに追記する。

やりたい事は、そのhoge.txtの中身がfuga.txtにある場合は、追記しない。なかった場合は追記する。
hoge.txt は別レシピで作られるとする。

bash "add hoge to fuga" do
  not_if %!grep "$(cat hoge.txt)" fuga.txt!

  code <<-EOC
    echo "$(cat hoge.txt)" >> fuga.txt
  EOC
end

追記の仕方ぐぐってみてもシェルスクリプトで頑張れみたいな感じしかなかった。
ドキュメント見たけど書かれてないように見えた。見方が悪いかも。 http://docs.opscode.com/resource_file.html

あとIO.read("hoge.txt") とかで中身もってこれるからそれ使えばいいって書いてるブログがあるけど、シェフを回す前から必ずあるファイルと保証されていないと厳しい。

レシピのコンパイルはレシピを実行するたび、一個一個やっていくのではなく、最初に全部まるっとコンパイルするみたいなので、hoge.txtを作成するレシピを実行する前にIO.read(...)が呼ばれて死ぬ。まっさらな状態で実行すると死ぬが、まっさらでない状態で実行すると死なないとかになる。最悪