将木偶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个参数错误”

我试着围绕{}移动并将它们更改为(),但没有运气。

有没有人有任何想法?

谢谢!

+0

你可能不得不选择与ERB版本稍有不同的东西,但如果没有[mcve],很难给你一个自信的建议。你有点过分了“最小”部分,代价是“完整”和“可验证”。至少,我希望看到'$ filter'变量的值的示例定义以及相应的期望模板输出。 –

+0

'select()'不是内置函数,它来自哪里?你能否显示源代码,以便我们了解它的功能? (https://docs.puppet.com/puppet/4.10/lang_iteration.html#list-of-iteration-functions,也许你想'filter()') –

由于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才能访问keyssort函数。

2)变量名$filter现在擦出内置木偶功能filter(),这在语法上是好的,但令人困惑的,所以你会考虑$filter变量重命名为清晰别的东西。

另外,如果你不关心排序键的话,我可以让你尝试使用工作:

<% | Hash $filter | -%> 
<% $filter.filter |$k| {$k[0] != 'filtertype'}.each |$k, $v| { -%> 
<%= $k %>: '<%= $v %>' 
<% } -%> 

又见here,我刚才已经回答了类似的问题。