2017-05-30 92 views
2

我試圖將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()') –

回答

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}), 
    } 
} 

內容再培訓局的文件完全一樣的問題給出:

<% @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,我剛纔已經回答了類似的問題。