因此假设在一个非常具体的 hiera YAML 文件中我定义了一个变量,例如“env_name”。
环境名称:“dev-unstable”
现在,在更通用的 hiera 文件中,我想将该变量插入字符串。
服务器名称:“服务-%{环境名称}。%{::域}”
我的测试似乎表明,在一般情况下,层次结构中其他地方的层次变量不可用于插值。不幸的是,这是真的吗?
答案1
您可以在 Hiera 中使用 Hiera 查找功能。文档在此处:https://docs.puppetlabs.com/hiera/1/variables.html#using-lookup-functions
对于你的情况,你可以使用:
server_name: "service-%{hiera('env_name')}.%{::domain}"
env_name
这是一个优先级查找,将从找到该键的最高(最具体)层次结构级别获取该键的值。
这需要 Hiera 1.3 或更高版本。
答案2
对于 Puppet 5+ 中使用的 Hiera 5,请使用以下语法:
server_name: "service-%{lookup('env_name')}.%{::domain}"
...%{lookup('env_name')}
从其他 hiera 键获取数据的部分在哪里env_name
。
(来源)
答案3
请参阅 Greg Dubicki 的回答。
引用“hiera、hiera_array、hiera_hash 和 hiera_include 函数都已弃用。lookup 函数完全替代了所有这些函数。”
有关详细信息,请参阅:
https://puppet.com/docs/puppet/5.5/hiera_migrate.html#updated_classic_hiera_function_calls