2016-08-19 3 views
2

シェフのlogリソースを使用して次のコードをご覧ください。Ruby/Chef:リソース 'name'を参照して関数に渡す方法はありますか?

log 'Hello there' do 
    level :info 
    notifies :run, "log_to_chat('Hello there')" 
end 

リソースnameを参照する方法があります(この場合は「こんにちは」)私は機能log_to_chatにそれを渡すとき。 log_to_chatのための私の試みを追加

log 'Hello there' do 
    level :info 
    notifies :run, "log_to_chat(#{name})" 
end 

は、私のようなものを想像してみてください。

試み1:

resource_name :log_to_chat 

property :message, kind_of: String, name_property: true 

chat_url = 'https://chat.server/abcdef' 

action :run do 
    execute do 
    command "curl -m 5 -i -X POST -d \"payload={...}\" #{chat_url}" 
    ignore_failure true 
    end 
end 

質問:どのようにnotifiesラインから1つのライナーとして:messageパラメータを渡すには?

notifies :run, "log_to_chat[message]", --pass :message how??-- 

試み2:

module Chat 
    def log_to_chat(message) 
    chat_url = 'https://chat.server/abcdef' 
    action :run do 
     execute "curl" do 
     command "curl -m 5 -i -X POST -d \"payload={...}\" #{chat_url}" 
     ignore_failure true 
     end 
    end 
    end 
end 

編集:あなたはあなたがname変数を参照することができます定義

答えて

1

内のリソースを使用することはできませんので、試み2が動作しませんでした。 documentationから、 "nameはリソースブロックの名前です"と読むことができます。あなたは、リソースlog_to_chat[some message](試行1)に通知したい場合は、

+0

ありがとうございます。それは 'notifies:run、" log_to_chat(#{name}) "'ですか? – vikingsteve

+0

それはあなたのコードベースにもよりますが、 'log_to_chat [#{name}]'がそうである可能性が高いです。 https://docs.chef.io/resource_common.html#notifies – smefju

+0

'log_to_chat'パーツの記述方法を教えてもらえますか?それはモジュールのメソッドかカスタムリソースですか、それともどうですか?これは基本的に単一の 'curl'コマンドです。 – vikingsteve

1

(質問からの抜粋でlogである)あなたの代わりにリソース名の(あなたのケースではHello thereである)ブロックの名前を使用することに注意してくださいlog 'Hello there'の前にアクション:nothingで明示的に宣言しなければなりません。だから、次のようになります。それは有効なコードだ

log_to_chat 'some message' do 
    action :nothing 
end 

log 'Hello there' do 
    level :info 
    notifies :run, "log_to_chat[some message]" 
end 

は、それが最善の解決策ではありません。 100%シェフウェイのソリューションを使用するには、新しいlog resourceプロバイダを実装する必要があります。デフォルトではChef::Provider::ChefLogです。 hereと記載されている 'Old School LWRP'プロバイダを実装する必要があります。あなたの新しいプロバイダでは、標準的なシェフログリソース機能を置き換えたり、カールコールまたはネイティブnet/http(または他のネットワーク宝石)ルビー呼び出し(推奨)で拡張することができます。

+0

ありがとう、ありがとう。 'not {...}'行から '#{name}'をパラメータまたはプロパティとして 'log_to_chat [some message]'にどのように渡すのですか? (この場合、「こんにちは」) – vikingsteve

+0

可能かどうかわかりませんが、両方のリソースの前に変数にそれを抽出します。 –

関連する問題