2015-03-19 32 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

相關問題