2016-07-06 2 views
0

사용자 지정 리소스가 있습니다 (요리 책의/resources 폴더에 dsc_class.rb라는 파일에 있음). 기본적으로 DSC 클래스 리소스를 설치하거나 전체 DSC 엔진을 사용하지 않고도 DSC 클래스 리소스를 쉽게 호출 할 수 있습니다.요리사 사용자 지정 리소스 가드

resource_name :dsc_class 

default_action :create 

property :file_name, kind_of: String, required: true, name_property: true 

action :create do 
    powershell_script file_name do 
    cwd ::File.dirname(file_name) 
    code <<-EOH 
    gc "#{file_name}" -Raw | iex 
    $o = New-Object #{file_name.split('/').last.split('.').first} 
    $o.Set() 
    EOH 
    not_if <<-EOH 
    gc "#{file_name}" -Raw | iex 
    $o = New-Object #{file_name.split('/').last.split('.').first} 
    o.Test() 
    EOH 
    end 
end 

잘 작동 -하지만 자원 가드 실행하지 않는 PowerShell 스크립트, 나는 요리사 클라이언트 실행에 대한 로그/출력에서 ​​"업데이트 X 리소스"를 얻을 때 조치는 항상 이벤트를 "실행".

내 맞춤 리소스에서 어떻게 적절하게 보호 할 수 있습니까?

업데이트 : 조리법은 항상 외부 수준 not_if 또는 only_if 조항에 의존 무엇이든하고 명령/스크립트/실행,

dsc_class "/install/dsc/MyDscResource.ps1" 
+0

레시피 코드가 무엇입니까? 경비원은 다른 리소스와 마찬가지로 custom_resource에 적용해야합니다. – Tensibai

+0

정말 답을 얻기 위해 [load_current_resource]를 구현하고 [여기] (https://docs.chef.io/custom_resources.html#converge)와 같이 'converge_if_changed'를 사용해야합니다. - 변경됨) PowerShell 리소스에서 가드를 제거하십시오. 대답에서 문서를 인용하면 비생산적인 것으로 들립니다. – Tensibai

+0

그럴 경우 powershell_script 리소스없이 powershell 스크립트 블록을 호출하려면 어떻게해야합니까? – Jeff

답변

1

powershell_script 다른 모든 execute 스타일의 자원처럼이 포함되어 있습니다. 이 경우 레시피 코드에 리소스 인스턴스 dsc_class에 넣으십시오.

+0

그 자원에 대해 'not_if'가드가 필요하지 않습니까? 그것들을 실행하지 않기 때문에 guard 명령이 true를 반환 할 때 업데이트로 표시하지 않습니다 (문자열 일 때 0). 나는 그것을 거기에서 얻지 않는다. – Tensibai

+0

맞아요.하지만 여전히 x 리소스가 수렴한다고 말합니다. 왜 그런가? – Jeff

+0

레서피를 컴파일 할 때 모든 리소스가 컬렉션에 추가됩니다. 경비원은 조치가 실행되는 것을 방지하지만 총계 계산의 목적을 위해 계속 남아 있습니다. – coderanger

관련 문제