2014-04-30 6 views
0

files_copy_to_guest을 어떻게 Ruby 해시로 변환 할 수 있습니까?YAML에서 속성을 해시로 변환

.kitchen.yml

'my_cookbook': 
     'files_copy_to_guest': 
     - 
      'home/kevin/bin/script.sh'  : '/vagrant/unix_scripts/script.sh' 
      'home/kevin/script2.sh'  : '/vagrant/unix_scripts/script2.sh' 

요리 책/my_cookbook/속성/default.rb

default['kevin']['files_copy_to_guest']  = [] 

요리 책/my_cookbook/조리법/default.rb

files = node['kevin']['files_copy_to_guest'] # how to read attribute as Hash? 

if files.nil? | files.empty? then 
    Chef::Log.warn("node['kevin']['files_copy_to_guest'] is nil or empty!") 
end 

files.each do |_, value|     
    value.each do |vm_dest, host_src| 
     file vm_dest do 
      owner user 
      group user 
      mode 0755 
      content ::File.open(host_src).read # <<< error on 'value' 
     end 
    end 
end 

내가 시도 :

files = YAML.load(node['kevin']['files_copy_to_guest'],

하지만, 작동하지 않았다. 나 또한 readfiles.to_hash도 작동하지 않습니다.

+0

그러면 'value'는 nil입니다. 거기서 일해라. – user2864740

+0

그러나 내 'YAML'에서는 '해시'입니다. Ruby에서'{ 'files_copy_to_guest'=> { 'A'=> 'B', 'C'=> 'D'}}'(이해할 수 있음) –

+0

초 동안 YAML을 무시합니다. 오류에서 시작하여 뒤로 이동하십시오. 그런 다음 질문이 나오는데,'파일'은 실제로 * 무엇입니까? – user2864740

답변

2
'my_cookbook': 
    'files_copy_to_guest': 
    - 
    'home/kevin/bin/script.sh'  : '/vagrant/unix_scripts/script.sh' 
    'home/kevin/script2.sh'  : '/vagrant/unix_scripts/script2.sh' 

문제는 YAML과 (과) 같이 보입니다. 당신이 일을해야 - 도랑 경우

{ 
    'my_cookbook' => { 
    'files_copy_to_guest' => [ 
     { 
     'home/kevin/bin/script.sh' => '/vagrant/unix_scripts/script.sh', 
     'home/kevin/script2.sh' => '/vagrant/unix_scripts/script2.sh' 
     } 
    ] 
    } 
} 

내 생각 : 당신은 너무 당신의 객체가이처럼 보이는 나오고, 배열의 시작을 나타내고 - 라인. 다음과 같은 도구를 사용하여 YAML의 출력을 테스트 할 수 있습니다. http://yaml-online-parser.appspot.com/

+0

'-'을 버리면 고칠 수있다. '-'를 사용하면 배열의 해시를 사용할 수 있습니다 (명시한대로). 그것 없이는, 나는 단지 해시를 가졌다. +1 yaml 온라인 링크 –

관련 문제