有没有更好的方法来处理从hiera到yaml的双引号



我正在使用一个层次结构来使特定于环境/主机的配置远离代码。为了生成配置文件-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" 

相关内容

  • 没有找到相关文章

最新更新