我正在使用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\"" ]
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
您的join
方法是正确的,但您的值缺少报价。
最干净的方法是确保您的YAML包含数据中的实际引号(在您当前的符号中,YAML会将引号视为语法糖)。
如果这对您不利(我可能会落后),您可以使用regsubst
功能在处理过程中进一步处理数据。
$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '"\1"')
$discovery_unicast_hosts_joined = join($quoted, ",")
答案 1 :(得分:0)
您希望实现的目标是hiera
中的字符串数组。
此:
elasticsearch::discovery_unicast_hosts: [ "HOSP-BD-02", "HOSP-BD-03", "HOSP-BD-04" ]
不是在yaml
中定义数组的正确方法。
请查看以下有关hiera lookup types的文章。
您需要的是:
elasticsearch::discovery_unicast_hosts:
- "HOSP-BD-02"
- "HOSP-BD-03"
- "HOSP-BD-04"