1

我正在使用 hiera 使环境/主机特定配置远离代码。为了生成配置文件 - yaml,我遇到了以下场景:

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"]

引号在那里,但缺少昏迷。一个简单而讨厌的方法是逃避“在hieara中我试图避免的事情,因为它破坏了一致性并且容易出错。

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

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

4

2 回答 2

2

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

最简洁的方法是确保您的 YAML 在数据中包含实际引号(在您当前的符号中,YAML 会将引号视为语法糖)。

如果这对您不利(我可能会落后),您可以在处理过程中使用该regsubst函数进一步操作数据。

$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '"\1"')
$discovery_unicast_hosts_joined = join($quoted, ",")
于 2015-03-19T12:38:55.113 回答
0

您想要实现hiera.

这个:

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

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

你需要的是这样的:

elasticsearch::discovery_unicast_hosts: 
    - "HOSP-BD-02"
    - "HOSP-BD-03"
    - "HOSP-BD-04" 
于 2015-03-19T10:38:15.517 回答