希拉如何运作?
How hiera works?
我有以下 hiera 数据文件 (yml)。
- hiera/data/domain/abcd.com
- hiera/data/role/webserver.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 标量、散列和数组,视情况而定。
我有以下 hiera 数据文件 (yml)。
- hiera/data/domain/abcd.com
- hiera/data/role/webserver.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 标量、散列和数组,视情况而定。