首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将puppet erb模板转换为epp

将puppet erb模板转换为epp
EN

Stack Overflow用户
提问于 2017-05-31 03:35:58
回答 1查看 2K关注 0票数 2

我正在尝试将erb模板转换为epp (新的公司政策),目前还没有很多关于epp的文档。

以下是我在erb中的内容:

代码语言:javascript
复制
    <% filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
    <%= key %>: '<%= element %>'
    <% end -%>

它工作得很好!然而,我必须找到epp的等价物。我可以让"each“部分工作,但select方法对我不起作用。

我被难住了!

我试过这样的方法:

代码语言:javascript
复制
    <% $filter.select { |$x| $x != 'filtertype'}.each |$key, $element| { -%>
    <%= $key %>: '<%= $element %>'  
    <% } -%>

这尤其是$x的'|‘上的错误。

我也试过了:

代码语言:javascript
复制
    <% $filter.select  |$x| {$x != 'filtertype'}.each |$key, $element| { -%>
    <%= $key %>: '<%= $element %>'  
    <% } -%>

但这给了我类似于"Error given a Method call,select():错误的参数数量为1比3“之类的信息。

我尝试移动{}并将其更改为(),但没有成功。

有谁有什么想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-08-01 16:23:43

正如Dominic Cleal在评论中提到的,select()不是一个傀儡函数,但是filter()是Ruby中的select的等价物。

因此:

给定一个类:

代码语言:javascript
复制
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文件的内容与问题中给出的完全相同:

代码语言:javascript
复制
<% @filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
<%= key %>: '<%= element %>'
<% end -%>

等效EPP文件的内容:

代码语言:javascript
复制
<% | Hash $filter | -%>
<% include stdlib -%>
<% $filter.keys.sort.filter |$k| {$k != 'filtertype'}.each |$k| { -%>
<%= $k %>: '<%= $filter[$k] %>'
<% } -%>

注意事项:

1)访问keyssort函数需要include stdlib

2)变量名$filter现在与内置的Puppet函数filter()冲突,该函数在语法上没有问题,但令人困惑,因此为清楚起见,您可以考虑将$filter变量重命名为其他名称。

此外,如果您不关心键的排序,那么我可以使用以下命令使您尝试的内容工作:

代码语言:javascript
复制
<% | Hash $filter | -%>
<% $filter.filter |$k| {$k[0] != 'filtertype'}.each |$k, $v| { -%>
<%= $k %>: '<%= $v %>'
<% } -%>

另请参阅here,我刚才回答了一个类似的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44270544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档