2014-03-27 1 views
3

일부 환경 변수를 설정하고 특정 명령을 호출하는 execute 리소스를 생성하려고합니다. 하지만이 execute 리소스는 일종의 "방법"일뿐입니다. 즉 나중에 재사용 할 수있는 기능을 정의해야합니다. 다른 조리법에서이 execute을 트리거 할 수 있기를 원하며 현재 내가 뭔가 잘못하고 있다고 느낄지라도 ruby_block을 사용하고 있습니다.주방장은 자원 밖의 자원에 어떻게 알리십니까?

이 내 재사용 가능한 기능입니다 (내 요리 책은 commands라고합니다) :

# default.rb 

execute 'Run command' do 
    Chef::Log.info("Running command: #{node['task']}") 

    command node['task'] 
    cwd deploy[:current_path] 
    environment (node[:task] || {}) 
    action :nothing 
    not_if node[:task].nil? 
end 

그리고 이것은 그것을 사용하는 특정 작업 중 하나입니다 : 나는 또한 할 수 있도록하려는

# rake_db_migrate.rb 

include_recipe 'commands' 

node.set[:task] = 'rake db:migrate' 

ruby_block 'Trigger command' do 
    block {} 
    notifies :run, 'execute[Run command]', :immediately  
end 

을 노드에서 속성을 설정하여 위와 동일하지만 쓰기가없는 임의의 작업으로 실행하십시오. node['task'] :

# run.rb 

include_recipe 'commands' 

ruby_block 'Trigger command' do 
    block {} 
    notifies :run, 'execute[Run command]', :immediately  
end 

본질적으로 default.rb에 재사용 가능한 기능을 정의한 다음 run.rbrake_db_migrate.rb과 같은 다른 조리법에서이 기능을 사용할 수 있습니까? 그렇지 않은가요? http://docs.chef.io/definitions.html

는 재사용 가능한 비트를 정의하고 매개 변수로 '작업'을 사용 : 당신은 아마 정의를 사용하려면이 경우

+0

[정의] (http://docs.opscode.com/essentials_cookbook_definitions.html) 또는 [libraries] (http://docs.opscode.com/essentials_cookbook_libraries.html)를 사용하여 재사용 가능한 기능. – StephenKing

+1

정의 또는 LWRP로 마무리하십시오. – sethvargo

+0

끝에 정의를 사용했습니다. 어느 쪽이든 대답을 게시하고 싶다면 올바른 것으로 표시 할 것입니다. – lms

답변