2013-07-12 1 views
0

Ruby 및 Chef를 처음 사용하며 ACL이 활성화 된 루트 파일 시스템을 다시 마운트하는 요리 책을 쓰려고합니다. Ohai는 모든 마운트 된 파일 시스템으로 node['filesystem']을 채 웁니다. node['filesystem'] 아래의 모든 항목을 구체적으로 찾으려면 어떻게합니까? node['filesystem'][:item]['mount'] == '/'? 난 그냥 당신이 원하는 무슨 생각을 실현 한해시 해시 : 특정 하위 키를 사용하여 해시를 반환합니다.

filtered_nodes = node['filesystem'].select do |key, value| 
    key == :item && value['mount'] == '/' 
end 
+0

노드 [ 'filesystem'] [: item] [ 'mount']'는 단일 해시 요소이거나 슬래시가 아닙니다. '[: item] [ 'mount']'가'/'인 모든 파일 시스템을 찾고 있습니까? – Borodin

답변

1

당신은 Hash#select 방법을 사용할 수 있습니다. :item은 해시 키가 아니지만 열거 할 키의 자리 표시 자입니다.

이 할 것입니다 당신

selection = node['filesystem'].keys.find_all do |item| 
    node['filesystem'][item]['mount'] == '/' 
end 

귀하의 질문은 불분명하지만 node는 파일 시스템의 해시 될 수있다 생각합니다.

/과 동일한 [: item] [ 'mount'] 요소가있는 node의 모든 키를 선택합니다.

selection = node.keys.find_all do |key| 
    val = node[key] 
    val.key? :item and val[:item]['mount'] == '/' 
end 
+0

node [ 'filesystem'] [: item] [ 'mount']'가 하나의 해시 요소 일 때'select' 루프에는 약간의 포인트가 있습니다. – Borodin

0
root_filesystems = node['filesystem'].select do |k, v| 
    node['filesystem'][k]['mount'] == '/' 
end