2016-08-19 2 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 라인에서 하나의 라이너로 :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 

편집 : 당신이 정의

답변

1

당신은 name 변수를 참조 할 수있는 리소스를 사용할 수 없기 때문에 시도 2가 작동하지 않았다. documentation에서 "name은 리소스 블록의 이름입니다."를 읽을 수 있습니다. 대신 (질문의 코드에서 log입니다) 자원 이름의 (귀하의 경우 Hello there입니다) 블록의 이름을 사용할 것을 명심

+0

감사합니다. 그러면 다음과 같이됩니다 :'알림 : 실행 ', 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_to_chat[some message] (시도 1)에 통지 할 경우를 :nothing 전에 log 'Hello there' 앞에 명시 적으로 선언해야합니다. 따라서 다음과 같이 표시되어야합니다.

log_to_chat 'some message' do 
    action :nothing 
end 

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

올바른 코드 인 경우 가장 좋은 해결책은 아닙니다. 100 % chef way 솔루션을 사용하려면 새로운 log resource 공급자를 구현해야하며, 기본값은 Chef::Provider::ChefLog입니다. here을 언급 한 'Old School LWRP'제공 업체를 구현해야합니다. 새 공급자에서 표준 요리사 로그 자원 기능을 대체하거나 컬 (curl) 호출 또는 네이티브 net/http (또는 다른 네트워크 젬) 루비 호출 (선호)을 통해 확장 할 수 있습니다.

+0

감사합니다. 'notep ...'줄에서'# {name}'을 매개 변수 나 속성으로'log_to_chat [some message]'에 어떻게 전달합니까? (이 경우, 'Hello there') – vikingsteve

+0

가능한지 확실하지 않지만 두 리소스보다 먼저 변수에 추출합니다. –

관련 문제