在ERB模板中排序YAML输出
在Puppet使用的ERB模板中,我试图对散列的YAML输出进行排序,以确保它始终是相同的输出。
这是我到目前为止(在mytest/templates/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
:
class mytest {
notify { 'toto':
message => template('mytest/hash.erb'),
}
}
我似乎无法理解这种类型数据来自何处,以及如何正确地投射参数以使其正常工作......
事实证明,问题的根源是ZAML,YAML替代Puppet
用于性能目的。
通过测试这个erb
模板可以证明没有Puppet
。
我很确定它会起作用。
我正在调查,让他们一起工作。
更新:
ZAML.dump(MyHash[myScope]) # instead of MyHash[myScope].to_yaml
这可能会治愈问题,至少它是我真正相似的。
链接地址: http://www.djcxy.com/p/61425.html上一篇: Sorting a YAML output in an ERB template
下一篇: Data persistence in Java Server Faces with Hibernate/JPA