2016-09-08 2 views
0

루비 블록에서 변수를 가져 오려고하지만 요리사가이 블록 외부에서 변수를 인식하지 못합니다. 루비 블록에서 변수를 검색하려면 어떻게해야합니까? 미리 감사드립니다.요리사 - 루비 블록에서 변수 가져 오기

ruby_block 'fetch_path' do                    
    block do                       
     current_path = `sudo cat /var/chef/cache/revision`       
     new_path = current_path.to_s.split(',').last.split('"').drop(1).first  
     Chef::Log.info("### Your Current Directory: '#{new_path}' ###")   
    end                        
end                         

Chef::Log.info("### Your Current Directory: '#{new_path}' ###") 

블록 내에서 값을 얻을 수 있지만 블록 중 - 아니요.

답변

0

여기에는 두 가지가 있습니다.

첫 번째로 Chef::Log.info은 컴파일 단계에서 실행됩니다. 이때 ruby_block은 수렴되지 않았습니다. here about it을 참조하십시오. 로그에 1)과 2)를 붙이면 첫 번째 마녀가 실행됩니다.

둘째, 범위 지정 문제가 있습니다. 블록에 변수를 정의하면이 블록 내에서만 사용할 수 있습니다.

주방장은 node.run_state['variable']을 모든 요리법에서 사용할 수있는 전역 변수로 사용할 수 있습니다. 유스 케이스를 사용하지 않으면 이것을 보여줄 수 없습니다.

사이드 노트 : 명령을 실행하려면 backticks `` 구조를 사용하지 말고, 레시피 DSL에서 shell_out을 사용하는 것이 좋습니다.