2015-03-19 34 views
1

我使用hiera保持远离代码的环境/主机特定配置。为了生成配置文件 - YAML我碰到以下情况:有没有更好的方法来处理yaml的双引号hiera

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

行情是有,但缺少昏迷。一个简单的和讨厌stolution将是hieara逃生“我试图避免,因为它打破了一致性和容易出错。

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

有没有办法解决这个更好的办法?

回答

1

join的做法是正确的,但你的价值观缺乏引号。

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

如果这对你不利(我可能会后退),那么你可以在处理过程中使用regsubst函数进一步处理数据。

$quoted = regsubst($elasticsearch::discovery_unicast_hosts, '(.*)', '"\1"') 
$discovery_unicast_hosts_joined = join($quoted, ",") 
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" 
+1

它只是一个替代表示法http://yaml.org/spec/1.0/#type-seq和它作为一个数组。我尝试了两种表示法。因此双引号的问题仍然没有解决 – jaksky 2015-03-19 11:23:52

相关问题