epp 模板的键值哈希

问题描述 投票:0回答:2

How to port next code from erb template to epp:

<%- if @mime_types -%>

# Custom additional mime types
<%- @mime_types.sort_by {|key,value| key}.each do |key,value| -%>
<%= key %> <%= value %>;
<%- end -%>
<%- end -%>

或者如何在 epp 模板中使用键值散列。 例如下一个代码返回错误“无效的 EPP:‘|’ 处的语法错误”

# mime.types.epp
<%- | Hash[String, String] $nginx::config::mime_types | -%>
<% include stdlib -%>
<% $nginx::config::mime_types.keys.sort.each |$key| { -%>
    <%= $key %> <%= $nginx::config::mime_types[$key] %>
<% } -%>

清单:

# manifests/config.pp
class nginx::config {
  $mimetypes=lookup('nginx::mimetypes')
  file { "${nginx::params::conf_dir}/mime.types":
    ensure  => file,
    content => epp("${module_name}/mime.types.epp"),
  }

hiera:

nginx::mimetypes:
  video/ogg: 'ogv'

木偶版:

#puppet --version
5.0.1

非常感谢。

puppet
2个回答
0
投票

1) 不可能在 epp 模板中使用模型

$classname::subclassname::lookup_variable
进行哈希

2)需要使用

<%- | Hash[String, String] $mime_types | -%>
<% include stdlib -%>
仅在启动 epp 模板时

正确的文件:

# manifests/config.pp
class nginx::config {
  $mimetypes=lookup('nginx::mimetypes')
  file { "${nginx::params::conf_dir}/mime.types":
    ensure  => file,
    content => epp("${module_name}/mime.types.epp", { mimetypes => $mimetypes }),
}

# mime.types.epp
<%- | Hash[String, String] $mimetypes | -%> # 1 line
<% include stdlib -%> # 2 line
# some code...
<% $mimetypes.keys.sort.each |$key| { -%>
    <%= $key %> <%= $mimetypes[$key] %>
<% } -%>

0
投票

对不起,全新的发布,但它不会让我评论接受的答案......

在关于

Invalid EPP: Syntax error at '|'
的评论中回答@beily问题,我通过将
<%- | Hash[String, String] $mimetypes | -%>
移动到.epp的第一行来解决这个问题,如Puppet EPP文档所示 - https://www.puppet.com/文档/puppet/5.5/lang_template_epp.html

希望这对某人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.