2013-12-17 5 views
2

일부 Windows 기능을 활성화하고 WindowsRebootHandler을 사용하여 컴퓨터를 재부팅하기위한 요리 책을 만들었습니다. 아래 코드에서 볼 수 있듯이 ruby_block을 사용하여 후속 실행에서 동일한 작업을 수행하지 않습니다.knife 명령을 사용하여 노드 속성을 삭제할 수 없습니다.

windows_batch 'Enable_MS_Feature' do 
    code <<-EOH 
    #My script 
    EOH 
    notifies :create, "ruby_block[WindowsFeature_Install]", :immediately 
    notifies :request, 'windows_reboot[60]' 
    not_if { node.attribute?("WindowsFeature_Installed") } 
end 

ruby_block "WindowsFeature_Install" do 
    block do 
    node.set['WindowsFeature_Installed'] = true 
    node.save 
    end 
    action :nothing 
end 

테스트 목적으로이 작업을 다시 수행하려면 WindowsFeature_Installed 속성을 삭제해야합니다. 그래서 아래 명령을 사용했습니다.

knife exec -E "nodes.transform(:all) {|n| n.delete('WindowsFeature_Installed');n.save() }" 

위의 명령은 노드 속성을 삭제하지 않습니다. knife 명령을 사용하여 동일한 속성을 검색하면 모든 노드가 나열됩니다.

knife search node "WindowsFeature_Installed:true" 

더 디버깅하려면 명령의 자세한 출력을 활성화하고 chef-server의 모든 HTTP 응답이 OK였습니다.

또한 chef-server 로그에서 오류 세부 사항을 확인하려고했습니다. 그러나 Chef-Server 패키지와 관련된 많은 프로세스 로그가 존재하기 때문에 문제를 확인할 수 없었습니다.

따라서이 속성을 제거하여 래서 피 작업을 다시 수행하려면 어떻게합니까? 또는 요리사 - 서버 로그, 노드 속성 삭제 세부 정보가 기록됩니까? 모든 포인터가 도움이 될 것입니다.

+1

n.delete ('WindowsFeature_Installed') 대신'n.set [ 'WindowsFeature_Installed'] = nil'을 사용해보십시오. –

+0

@Draco 답장을 보내 주셔서 감사합니다. 나는 이미'n.set'을 시도해 왔고 레서피 액션을 다시 수행 할 수있었습니다. 'knife exec -E "nodes.transform (: all) {| n | n.set [ 'WindowsFeature_Installed'] = false; n.save}"'. 그러나, 왜'n.delete'가 실패하고 있는지 궁금합니다. – vareda

답변

3

비슷한 문제가있었습니다. 노드에서 속성을 삭제할 수 없지만 을 수정하면이 수정되었습니다. 이 문제를 해결하는 데 도움이되는 것은 특성이 내 조리법 중 하나에서 생성 된 수준을 확인하는 것입니다.

예를 들어 속성 ​​"network_interfaces"를 삭제하려면 현재 메모 구성을 확인하십시오. 내 경우

{ 
    "name": "<node_name>", 
    "chef_environment": "_default", 
    "run_list": [ 
    ... 
    ], 
    "normal": { 
    "tags": [ 
    ], 
    "network_interfaces": { 
     "order": [ 
     "vpn_vpn" 
     ] 
    }, 
    }, 
    "default": { 
    ... 
    }, 
    ... 

을 나는 모든 노드에서 network_interfaces -attribute을 삭제하고 싶었 :

knife node show -l -F json <node_name> 

당신은 당신의 노드-설정에서 유사한 출력을 얻을합니다. 그래서 실행 :

knife exec -E 'nodes.transform(:all) { |n| n.normal_attrs.delete("network_interfaces"); n.save() }' 

대신 :

다른 속성의 우선 순위 수준에 대한
knife exec -E 'nodes.transform(:all) { |n| n.delete("network_interfaces"); n.save() }' 

더는 여기에서 찾을 수 있습니다 : https://coderwall.com/p/rfm4lg

노드에 대한 쿼리에 대한 좋은 기사가 칼로 속성 : http://www.programmersparadox.com/2013/02/05/viewing-chef-node-attributes-with-knife/