将puppet erb模板转换为epp

时间:2017-05-30 19:35:58

标签: templates puppet

我正在尝试将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的参数错误数量

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

有没有人有任何想法?

谢谢!

1 个答案:

答案 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才能访问keyssort个功能。

2)变量名$filter现在与内置的Puppet函数filter()冲突,这在语法上很好,但令人困惑,因此您可以考虑将$filter变量重命名为某些内容为了清楚起见。

另外,如果您不关心按键排序,那么我可以使用您尝试过的工作:

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

另见here我刚回答了类似的问题。

相关问题