是否有更好的方法处理双引号hiera到yaml

是否有更好的方法处理双引号hiera到yaml,yaml,puppet,hiera,Yaml,Puppet,Hiera,我使用hiera来避免特定于环境/主机的配置与代码冲突。为了生成配置文件,yaml I遇到了以下情况: Hieara配置文件: elasticsearch::discovery_unicast_hosts: [ "HOSP-BD-02", "HOSP-BD-03", "HOSP-BD-04" ] 在“生成yaml配置”中显示: discovery.zen.ping.unicast.hosts: [HOSP-BD-02,HOSP-BD-03,HOSP-BD-04] 问题是数组中的每一项都缺少双

我使用hiera来避免特定于环境/主机的配置与代码冲突。为了生成配置文件,yaml I遇到了以下情况:

Hieara配置文件:

elasticsearch::discovery_unicast_hosts: [ "HOSP-BD-02", "HOSP-BD-03", "HOSP-BD-04" ]
在“生成yaml配置”中显示:

discovery.zen.ping.unicast.hosts: [HOSP-BD-02,HOSP-BD-03,HOSP-BD-04]
问题是数组中的每一项都缺少双引号。在插入erb模板之前,我对数组进行了以下处理:

 $discovery_unicast_hosts_joined = join($elasticsearch::discovery_unicast_hosts, ",")
如果我直接插入数组

 ["HOSP-BD-02""HOSP-BD-03""HOSP-BD-04"]
有引用,但缺少comas。一个简单而讨厌的问题是“在hieara中逃跑”,这是我试图避免的,因为它破坏了一致性,并且容易出错

elasticsearch::discovery_unicast_hosts: [ "\"HOSP-BD-02\"", "\"HOSP-BD-03\"", "\"HOSP-BD-04\"" ]

有更好的方法解决这个问题吗?

您想要实现的是
hiera
中的字符串数组

这:

不是在
yaml
中定义数组的正确方法。 查看以下关于hiera的文章

您需要的是:

elasticsearch::discovery_unicast_hosts: 
    - "HOSP-BD-02"
    - "HOSP-BD-03"
    - "HOSP-BD-04" 

您的
join
方法是正确的,但您的值缺少引号

最干净的方法是确保你的YAML包含数据中的实际引文(在当前的符号中,YAML将考虑引号为句法糖)。 如果您对此不满意(我可能会落后),您可以在处理过程中使用

regsubst
函数进一步操作数据

$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '"\1"')
$discovery_unicast_hosts_joined = join($quoted, ",")

它只是一种可选的表示法,可以作为数组使用。我尝试了两种表示法。所以双引号的问题仍然没有解决
$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '"\1"')
$discovery_unicast_hosts_joined = join($quoted, ",")