我正在使用一个层次结构来使特定于环境/主机的配置远离代码。为了生成配置文件-yaml,我遇到了以下场景:
Hierara配置文件:
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"" ]
有更好的方法来解决这个问题吗?
您的join
方法是正确的,但您的值缺少引号。
最干净的方法是确保您的YAML在数据中包含实际的引号(在您当前的表示法中,YAML会将引号视为语法糖)。
如果您对此感到厌恶(我可能会支持),您可以使用regsubst
函数在处理过程中进一步操作数据。
$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '"1"')
$discovery_unicast_hosts_joined = join($quoted, ",")
您想要实现的是hiera
中的字符串数组。
此:
elasticsearch::discovery_unicast_hosts: [ "HOSP-BD-02", "HOSP-BD-03", "HOSP-BD-04" ]
不是在CCD_ 4中定义数组的正确方式。查看以下关于层次结构查找类型的文章。
你需要的是这样的东西:
elasticsearch::discovery_unicast_hosts:
- "HOSP-BD-02"
- "HOSP-BD-03"
- "HOSP-BD-04"