如何在 epp 中打印带引号的数组?

问题描述

给定层次列表(示例值):

simplekey:
  hosts:
    - 'host1:8080'
    - 'host2:8080'
  [...]

使用 ERB 模板时,此代码

<% @simplekey.sort.each do |key,value| -%>
  <%= key %>: <%= value %>,<% end -%>

结果

  hosts: ["host1:8080","host2:8080"],

代码迁移到EPP时,类似的代码

<% $simplekey.each |$key,$value| { -%>
  <%= $key %>: <%= $value %>,<% } -%>

导致(注意缺少的引号):

  hosts: [host1:8080,host2:8080],

有什么办法可以用引号打印主机数组吗?

人偶版本:6.23.0

解决方法

获得所需结果的最快路径(可能只考虑到 EPP 对类型推断的限制)是将字符显式添加到 Hiera:

simplekey:
  hosts:
  - '"host1:8080"'
  - '"host2:8080"'

但是,人们通常认为 ERB 比 EPP 更强大,因此除非您有令人信服的迁移理由,否则您可能希望继续使用它。此外,这可能会导致对您的数据进行其他查找时出现其他问题。

,

超级简单 - 只需将引号放在 EPP 中:

<% $simplekey.each |$key,$value| { -%>
  "<%= $key %>": <%= $value %>,<% } -%>