我有以下hiera数据文件(yml)。
假设我有一个木偶节点,它有一个网络服务器'已分配的角色及其主机名为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'
答案 0 :(得分:4)
不,不完全是。
Hiera优先级查找(例如由hiera()
函数执行)查找与密钥关联的完整值,从提供一个最高优先级层次结构级别获取整个值。在您描述的情况下,该值将是一个只有一个键的哈希,'username'。
另一方面,如果要从数据层次结构的多个级别组合哈希值,那么您正在寻找hash-merge查找。 Hiera支持这一点,但您需要使用正确的查找功能:
$config = hiera_hash('config::xyz_category', {})
请特别注意hiera()
和hiera_hash()
(以及hiera_array()
)之间的差异主要是关于查找策略,而不是返回值的类型。普通hiera()
函数可以根据需要返回标量,散列和数组。