希拉如何运作?

How hiera works?

我有以下 hiera 数据文件 (yml)。

假设我有一个 puppet 节点,它分配了 'webserver' 角色,它的主机名是 abcd.com

现在在 - hiera/data/domain/abcd.com 文件下,我有这个

config::xyz_category::name: 'bbbb'

我有以下数据 - hiera/data/role/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'

不,不完全是。

Hiera 优先级查找,例如由 hiera() 函数执行,查找与键关联的 complete 值,从最高优先级中获​​取整个值提供一个的层次结构级别。在您描述的情况下,该值将是一个只有一个键的散列,'username'。

另一方面,如果您想 assemble 来自数据层次结构多个级别的散列值,那么您正在寻找 hash-merge 查找。 Hiera 支持,但您需要使用正确的查找功能:

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

请特别注意 hiera()hiera_hash()(以及 hiera_array())之间的区别主要在于 查找策略,而不是关于return 值的类型。普通 hiera() 函数可以 return 标量、散列和数组,视情况而定。