2013-06-25

[Chef]recipe内の処理の実行順序について

通常recipeの実行は
1.compiling
2.converging
と進みcompiling時にresource外のrubyスクリプトが実行され、converging時にresourceのactionが実行される
これだとresourceでファイルを作成し、そのファイルに対してrubyスクリプトで何か処理を加えるみたいな場合にrubyスクリプト実行時にはまだファイルは生成されておらずエラーになってしまう
そこでhttp://docs.opscode.com/resource_common_compile.htmlによれば
r=file "/tmp/hoge" do
    action :nothing
end
r.run_action(:create)
puts File.exists?("/tmp/hoge")
みたいな感じにするとcompile時にresourceのactionを実行できるようだ

次のようなrecipeを作成して実行してみた
ruby_block "run 3rd" do
        block do
                puts "run 3rd"
        end
        action :create
end

r=ruby_block "run 2nd" do
        block do
                puts "run 2nd"
        end
        action :nothing
end

puts "run 1st"
r.run_action(:create)

実行結果はこのような感じ
# chef-client
Starting Chef Client, version 11.4.2
[2013-06-25T17:25:32+09:00] WARN: unable to detect ip6address
resolving cookbooks for run list: ["test"]
Synchronizing Cookbooks:
  - test
Compiling Cookbooks...
run 1st
Recipe: test::default
  * ruby_block[run 2nd] action createrun 2nd

    - execute the ruby block run 2nd

Converging 2 resources
  * ruby_block[run 3rd] action createrun 3rd

    - execute the ruby block run 3rd

  * ruby_block[run 2nd] action nothing (up to date)
Chef Client finished, 2 resources updated

0 件のコメント:

コメントを投稿