2013-02-28 4 views
1

Puppet에서 사용하는 ERB 템플릿에서 해시의 YAML 출력을 정렬하여 항상 동일한 출력인지 확인하려고합니다. 'ERB 템플릿에서 YAML 출력 정렬

class mytest { 
    notify { 'toto': 
    message => template('mytest/hash.erb'), 
    } 
} 

내가 할 수있는 :

<%= 
    class MyHash < Hash 
    def to_yaml(opts = {}) 
     YAML::quick_emit(self, opts) do |out| 
     out.map(taguri, to_yaml_style) do |map| 
      keys.sort.each do |k| 
      v = self[k] 
      map.add(k, v) 
      end 
     end 
     end 
    end 
    end 
    myScope = scope.to_hash.reject{|k,v| k.to_s =~ /(uptime|timestamp|free)/} 
    MyHash[myScope].to_yaml 
-%> 

산출되는 :

$ puppet apply -e 'include mytest' --modulepath . 
Failed to parse template mytest/hash.erb: 
    Filepath: /usr/lib/ruby/1.8/yaml.rb 
    Line: 391 
    Detail: wrong argument type String (expected Data) 
at /home/rpinson/bas/puppet/mytest/manifests/init.pp:3 on node foo.example.com 

mytest/manifests/init.pp의 내용입니다 여기

내가 ( mytest/templates/hash.erb에서) 지금까지 무엇을 가지고 이 형식 데이터가 어디서 비롯되는지, 매개 변수를 어떻게 형 변환하는지 이해하는 것 같습니다. 이 작업을 위해 y를 사용하십시오 ...

+0

적어도/home/rpinson/bas/puppet/mytest/manifests/init.pp 파일을 보여 주시겠습니까? BTW,'quick_emit'는'Psych'에서 (http://apidock.com/ruby/Psych/quick_emit/class) [더 이상 사용되지 않는 것으로 보인다]. 'Psych'을'YAML' 구현으로 사용합니까? – mudasobwa

+0

'init.pp '를 질문에 추가합니다. 나는 YAML 구현이 진실을 말하기 위해 사용되었는지 전혀 모른다. –

+0

OK, 문제는 확실히'myScope '입니다. 템플릿의 마지막 줄에'MyHash [myScope] .to_yaml' 대신'myScope'을 넣고 출력을 보여줄 것입니까? – mudasobwa

답변

0

문제의 원인은 ZAML이고 성능 목적으로 Puppet 인 YAML 대체품입니다.

없이이 erb- 템플릿을 테스트하여 증명할 수 있습니다.

나는 그것이 작동 할 것이라고 확신한다.

나는 함께 작업 할 수 있도록 조사 중입니다.

UPDATE :이 적어도 내 하나 정말 비슷한 않습니다, 문제를 치유 할 수

ZAML.dump(MyHash[myScope]) # instead of MyHash[myScope].to_yaml 

.