有没有更好的方法来处理双引号 hiera 到 yaml
Is there a better way of handling double quotes hiera to yaml
我正在使用 hiera 使 environment/host 特定配置远离代码。为了生成配置文件 - 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\"" ]
有没有更好的方法解决这个问题?
您想要实现的是字符串数组 in 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"
您的 join
方法是正确的,但您的值缺少引号。
最简洁的方法是确保您的 YAML 在数据中包含实际引号(在您当前的表示法中,YAML 会将引号视为语法糖)。
如果这让您反感(我可能会落后),您可以在处理过程中使用 regsubst
函数进一步操作数据。
$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '""')
$discovery_unicast_hosts_joined = join($quoted, ",")
我正在使用 hiera 使 environment/host 特定配置远离代码。为了生成配置文件 - 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\"" ]
有没有更好的方法解决这个问题?
您想要实现的是字符串数组 in 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"
您的 join
方法是正确的,但您的值缺少引号。
最简洁的方法是确保您的 YAML 在数据中包含实际引号(在您当前的表示法中,YAML 会将引号视为语法糖)。
如果这让您反感(我可能会落后),您可以在处理过程中使用 regsubst
函数进一步操作数据。
$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '""')
$discovery_unicast_hosts_joined = join($quoted, ",")