我正在尝试将erb模板转换为epp(新的公司政策),而且还没有关于epp的大量文档。
这是我在erb中所拥有的:
<% filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
<%= key %>: '<%= element %>'
<% end -%>
效果很好!但是我必须找到epp的等价物。我可以得到&#34;每个&#34;部分工作,但选择方法不适合我。
我很难过!
我尝试过类似的事情:
<% $filter.select { |$x| $x != 'filtertype'}.each |$key, $element| { -%>
<%= $key %>: '<%= $element %>'
<% } -%>
这尤其是&#39; |&#39;对于$ x。
我也尝试过:
<% $filter.select |$x| {$x != 'filtertype'}.each |$key, $element| { -%>
<%= $key %>: '<%= $element %>'
<% } -%>
但是这给了我类似于&#34;在评估一个方法调用时出错,select():给出1为3&#34的参数错误数量
我尝试过移动{}并将它们更改为(),但没有运气。
有没有人有任何想法?
谢谢!
答案 0 :(得分:0)
正如Dominic Cleal在评论中提到的那样,select()
不是Puppet函数,但是filter()
是和Ruby中的select
等价的。
因此:
给出一个课程:
class foo () {
# Some test data.
$filter = {
'filtertype' => 'foo',
'apples' => 1,
'bananas' => 2,
}
# How to declare the ERB template for comparison:
file { '/foo':
ensure => file,
content => template('foo/mytemplate.erb'),
}
# How to declare the EPP template for comparison:
file { '/bar':
ensure => file,
content => epp('foo/mytemplate.epp', {'filter' => $filter}),
}
}
ERB文件的内容与问题中给出的内容完全相同:
<% @filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
<%= key %>: '<%= element %>'
<% end -%>
等效EPP文件的内容:
<% | Hash $filter | -%>
<% include stdlib -%>
<% $filter.keys.sort.filter |$k| {$k != 'filtertype'}.each |$k| { -%>
<%= $k %>: '<%= $filter[$k] %>'
<% } -%>
注意事项:
1)您需要include stdlib
才能访问keys
和sort
个功能。
2)变量名$filter
现在与内置的Puppet函数filter()
冲突,这在语法上很好,但令人困惑,因此您可以考虑将$filter
变量重命名为某些内容为了清楚起见。
另外,如果您不关心按键排序,那么我可以使用您尝试过的工作:
<% | Hash $filter | -%>
<% $filter.filter |$k| {$k[0] != 'filtertype'}.each |$k, $v| { -%>
<%= $k %>: '<%= $v %>'
<% } -%>
另见here我刚回答了类似的问题。