2016-06-10 57 views
2

我有以下hiera數據文件(yml)。hiera如何工作?

  • hiera /數據/域/ abcd.com
  • hiera /數據/角色/ webserver.yml

可以說我有具有分配 '網絡服務器' 的作用和它的主機名傀儡節點是abcd.com

現在下 - hiera /數據/域/ abcd.com文件,我有這個

config::xyz_category::name: 'bbbb' 

和我有在以下的數據 - hiera /數據/角色/ webserver.yml

config::xyz_category: 
    username: 'aaaa' 

我hiera數據查找順序如下圖所示(hiera.yml)

:backends: yaml 
:logger: console 
:merge_behavior: deeper 
:yaml: 
    :datadir: /etc/puppet/branches/hiera/data 
:hierarchy: 
    - fqdn/%{::fqdn} 
    - role/%{::rolename} 
    - domain/%{::domain} 
    - defaults 

所以我的問題是可以說我有一個爲這個'webserver'角色編寫的模塊。

在這個模塊裏面,我可以像下面那樣調用hiera數據嗎?

$config = hiera('config::xyz_category', {}) 

使

$config['name'] should return 'bbbb' 
$config['username'] should return 'aaaa' 
+0

您是否試圖做到這一點? – TylerH

+0

這是一個相當不錯的層次結構和角色設置,你一路走來。很多偶然的Puppet開發者似乎對最佳實踐感到困惑,但這很好。 –

回答

3

不,不完全是。

的Hiera優先查找,比如由hiera()功能執行,看上去與關鍵字相關的完整值,以從最高優先級的層級,提供一個整體價值。在你描述的情況下,這個值將是一個只有一個關鍵字「用戶名」的散列。另一方面,如果您想從數據層次結構的多個級別組合一個散列值,那麼您正在查找hash-merge查找。 Hiera支持,但你需要使用正確的查找功能:特別

$config = hiera_hash('config::xyz_category', {}) 

注意hiera()hiera_hash()(和hiera_array())之間的差別主要是關於查找策略,不是返回類型值。根據需要,普通的hiera()函數可以返回標量,哈希和數組。

+0

他也可以將'config :: xyz_category'改成帶有'name'和'username'鍵的散列。所有這些讓我想起了我如何等待Puppet Data Provider進入生產階段。 –