2013-02-18 7 views
8

私はシェフのドキュメントやGoogleでこれに対する答えを見つけようとしていましたが、何も考え出すことができませんでした。私はルビーの人ではありません(まだ)ので、これに対する答えは「私はシェフのために十分なルビー」という問題に近づいているかもしれません。ここで私がしたいことがあります:deployリソースのbefore_migrate属性で、私は現在のレシピでリソースを実行します。私が現在やっていることは、ブロック自体にリソースを埋め込むことですが、それを実行するにはより良い方法が必要であることがわかります。ルビーブロック内のシェフリソースへのアクセス

before_migrate do 

    template "#{app_root}/#{applet_name}/local_settings.py" do 
     source "local_settings.py.erb" 
     owner app_config['user'] 
     group app_config['group'] 
     variables(
      :database_name => app_config['postgresql']['database_name'], 
      :user => app_config['postgresql']['user'], 
      :password => app_config['postgresql']['password'] 
     ) 
     action :create 
    end 
end 

私は何を目指してると、だから私は、そのテンプレートのコードを再利用することができます

before_migrate do 
    "template #{app_root}/#{applet_name}/local_settings.py".execute 
end 

のようなものです。ありがとう!

答えて

2

#chef IRCチャンネルの素晴らしい人たちのおかげで、私は自分の問題を解決しました。通知リソースが:createアクションを実行するためのtemplateリソースを通知します

Chef::Resource::Notification.new("template[#{app_root}/#{applet_name}/local_settings.py", :create)

を使用して、直接アクセスする必要があります。

2

あなたは* before_migrate *ような何かをして、その後、何のアクションで「デプロイ」リソースの外でリソースを指定し、可能性:あなたが必要とするとき

before_migrate do 

     ruby_block "notify_template" do 
      block do 
       true 
      end 
      action :create 
      notifies :create, "template[#{app_root}/#{applet_name}/local_settings.py]", :immediately 
     end 

    end 

そのように、あなたはそれを通知することができますそれ。

関連する問題