2017-10-24 4 views
2

나는 내 데이터 디렉토리에서 다음 YAML 파일을 가지고인형 템플릿 반복하고 YAML 파일

.erb 템플릿은 다음과 같습니다
--- 
type: 
    - config_setting1: 
    foo: bar 
    - config_setting2: 
    foo: bar 

:

conf { 
<% settings = YAML.load_file('/etc/puppetlabs/code/environments/example/data/conf.yaml') -%> 
<% settings['type'].each do |val| -%> 
    <%= val %> 
<% end -%> 
} 

내 에이전트 시스템의 I에 꼭두각시를 실행 이 끝까지 :

conf { 
    {"config_setting1"=>nil, "foo"=>"bar"} 
    {"config_setting2"=>nil, "foo"=>"bar"} 
} 

최종 목표는 다음과 같이 출력을 얻는 것입니다.

conf { 
    config_setting1 { 
    foo: bar 
    } 
    config_setting2 { 
    foo: bar 
    } 
} 

는 내가 어떤 실제로 출력 방법에 물건을 얻기 위해 내 템플릿에 어떻게 청소해야 알아,하지만 난에 더 집중 해요 어떻게 순간에 최종 결과보다. 보시다시피 중첩 된 해시를 탐색하기 위해 설정 끝 부분에 ['type']을 사용하는 것에 익숙합니다. 하드 코딩 한 경우이 구조를 매우 쉽게 만들 수 있지만 반복적으로 사용하는 방법을 이해하고 싶습니다. . 나는 반복을 통해 Puppet Documentation을 따르려고 시도했지만 예제를 그대로 그대로 복사해도 예제가 작동하지 않으므로 상황이 다소 어려워집니다. 내가 가지고있는 것처럼 중첩 된 yaml 파일에서 하나의 데이터 조각을 꺼내려면 어떻게해야합니까? 키 또는 특정 값일까요? 내가 좋아하는 뭔가를 시도 :이의

<% settings['type'].each do |val| -%> 
    <%= settings['val'] %> 
<% end -%> 

여러 변화를하지만 난 내가 원하는 것을 얻을 수있는 권리 구문을 찾을 수 없습니다. 나는 또한 <% settings['type'].each do |index, value| -%>의 라인을 따라 뭔가를 시도했지만, 그 중 내가 사용할 수있는 결과를 얻을 수 없습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 그것을 감사 할 것입니다. 나는 내가 완전히 잘못된 길로 나아가고 있다고 들었습니다. 이 데이터를 얻는 더 좋은 방법이 있다면 나는 모든 귀입니다.

중요하지 않은 또 다른 질문이지만 내 부하 파일에는 절대 경로가 있습니다 ... 친척을 사용할 수있는 방법이 있습니까?

답변

1

놀랍게도 뭔가를 타이핑하는 것이 자신의 질문에 답할 것입니다. 꽤 쉬운 해결책이 있다는 것을 깨달았습니다. 우리가 내 템플릿을 경우

conf { 
<% settings = YAML.load_file('/etc/puppetlabs/code/environments/example/data/conf.yaml') -%> 
<% settings['type'].each do |val| -%> 
    <%= val %> 
<% end -%> 
} 

라인 세에

내가 무엇을 찾고 있어요 얻을 수있어 <% settings.keys.each do |val| -%><% settings['type'].each do |val| -%>를 교체합니다. 그래도 yaml을 통해로드하는 방법과 그렇지 않은 경우 중 하나를 수행하는 더 좋은 방법이 있다면 여전히 관심을 가질 것입니다.

+0

이것은 각 요소의 첫 번째 키에있는'{}'를 놓치지 않는다는 점을 제외하면 작동합니다. 그게 중요합니까? –

+0

개념적으로는 작동하지만 실제 결과를 얻으려면 약간의 정리가 필요했습니다. 그래도 절대 경로 문제를 파악하려고합니다! – Merakel