将木偶erb模板转换为epp
问题描述:
我试图将erb模板转换为epp(新公司策略),并且epp上还没有很多文档。
这是我在ERB:将木偶erb模板转换为epp
<% filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
<%= key %>: '<%= element %>'
<% end -%>
它的伟大工程!但是我必须找到epp的等价物。我可以让“每个”部分工作,但选择方法不适合我。
我很难过!
我想是这样的:
<% $filter.select { |$x| $x != 'filtertype'}.each |$key, $element| { -%>
<%= $key %>: '<%= $element %>'
<% } -%>
这在特定的错误 '|'为$ x。
我也试过:
<% $filter.select |$x| {$x != 'filtertype'}.each |$key, $element| { -%>
<%= $key %>: '<%= $element %>'
<% } -%>
但是,让我像“错误,而评估方法调用,选择():序号为3给出1个参数错误”
我试着围绕{}移动并将它们更改为(),但没有运气。
有没有人有任何想法?
谢谢!
答
由于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}),
}
}
内容再培训局的文件完全一样的问题给出:
<% @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
现在擦出内置木偶功能filter()
,这在语法上是好的,但令人困惑的,所以你会考虑$filter
变量重命名为清晰别的东西。
另外,如果你不关心排序键的话,我可以让你尝试使用工作:
<% | Hash $filter | -%>
<% $filter.filter |$k| {$k[0] != 'filtertype'}.each |$k, $v| { -%>
<%= $k %>: '<%= $v %>'
<% } -%>
又见here,我刚才已经回答了类似的问题。
你可能不得不选择与ERB版本稍有不同的东西,但如果没有[mcve],很难给你一个自信的建议。你有点过分了“最小”部分,代价是“完整”和“可验证”。至少,我希望看到'$ filter'变量的值的示例定义以及相应的期望模板输出。 –
'select()'不是内置函数,它来自哪里?你能否显示源代码,以便我们了解它的功能? (https://docs.puppet.com/puppet/4.10/lang_iteration.html#list-of-iteration-functions,也许你想'filter()') –