2016-06-17 3 views
0

에 registry_key 라이브러리 모듈과 방법을 이용하여 I 오류요리사 NoMethodError 레시피

NoMethodError 
------------- 
undefined method `registry_key' for HashOperations:Module 

을 받는다.

module HashOperations 
    # Tried: require 'chef/mixin/shell_out' 
    # Tried: include Chef::Mixin::ShellOut 

    def self.create_reg_keys(item_hash) 
    item_hash.each do |item_name, item_props| 
     # (...) construct the item_keys array 
     registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\#{item_name}" do 
     recursive true 
     values item_keys 
     action :create 
     end 
    end 
    end 

    def self.generate_reg_keys_for_item_key(...) 
    # some hash operations here 
    create_reg_keys(item_hash) 
    end 

end unless defined?(HashOperations) 

class Chef::Resource 
    # Tried: Chef::Resource.send(:include, HashOperations) 
    # Tried: include HashOperations 
    extend HashOperations 
end 

여기 조리법/default.rb됩니다 :

Chef::Resource.send(:include, HashOperations) 

ruby_block "test" do 
    block do 
    # Tried: Chef::Recipe.send(:include, HashOperations) 
    items_keys.each do |item_key| 
     HashOperations.generate_reg_keys_for_item_key(..., item_key) 
    end 
    end 
end 

내가 주를 추측

라이브러리/hash_operations.rb의 코드의 짧은 버전입니다 문제는 요리사 리소스 인 registry_key을 모듈 내부의 메소드 내부에서 사용하려고 시도하는 것입니다. 모듈은 다시 레시피에서 호출됩니다.

나는 모듈을 사용하지 않는 경우 나 작업 버전을 가지고,하지만 난 ChefSpec와 코드를 테스트하려면 여러 기사가 (이 같은 : Stubbing library class methods in ChefSpec) 지적 I는 모듈이 필요

위에서 언급 한 링크가 정의되지 않은 한 end를 사용하는 이유가 무엇입니까? (HashOperations) 모듈 내부.

필자는 include 문을 사용해 보았습니다. 주석 또는 제안 된 첫 번째 줄에 여러 개의 StackOverflow 게시물이 제안되어 행운이 없습니다. 한 게시물은 LWRP의 사용법에 대해 논의하고 있었지만 코드가이 제조법과 엄격하게 관련되어 있으며 다른 요리 책에는 사용되지 않았기 때문에 여기서는 그렇지 않다고 생각합니다.

메모 : 나는 자체를 사용하고 있습니다.을 볼 수 있도록하려면 에 대한 오류 메시지가 표시됩니다. generate_reg_keys_for_item_key을 사용할 수 없습니다.

그래서 StackOverflow에서 제안한 것들을 포함하여 이것에 대한 해결책을 찾기 위해 많은 시간을 보냈습니다. 질문 :이 오류를 해결하는 가장 좋은 방법은 무엇이며 간단한 해결책이 있습니까? ChefSpec (나는 LWRP를 완전히 제외하지는 않습니다)로 테스트해야하며, registry_key을 수렴 작업에 표시하려면 어떻게해야합니까?

답변

0

도우미 자체가 DSL 확장자로 설정되지 않은 경우 헬퍼의 레서피 DSL을 사용할 수 없습니다. 방법을 확인하려면 https://coderanger.net/chef-tips/#3을 확인하십시오.

+0

답변 해 주셔서 감사합니다. 귀하의 링크를 확인하고 ** 요리법 **의 ** 요리법 **의 ** **에 HashOperations **를 추가하고 조리법의 맨 위에 추가 했는데도 ** registry_key **에 대한 오류가 계속 나타납니다. ** HashOperations : Hodule **. 이것에 대해 다른 제안이 있습니까? – tibileo