我知道人们正在看这个并说它复杂,你真的需要这样做吗?答案是肯定的。数据需要额外的间接级别来有效地建模整个数据集。选项是对它进行硬编码,使用许多键/值设置(疯狂),使用内置函数来提供此功能(似乎不具备此功能)或通过两个单独的查找来实现此功能(可行,但在puppet模块中编写代码进行数据查找是错误的。)
我正在开发一个项目,其中使用Hiera根据一些关键事实生成大量设置的能力非常重要。
所以,想象一下hiera数据文件:
value_options:
opt1: "data1"
opt2: "data2"
value_template: "value_options.%{value_arg}"
简单的案例:
options_test1: "%{hiera('value_options.opt1')}"
将options_test1设置为" data1"正如预期的那样
options_test2: "%{value_arg}"
将options_test2设置为value_arg事实的值。
options_test3: "%{hiera(value_template)}"
将options_test3设置为值' value_options.opt1'当value_arg设置为' opt1'
时这一切都很好。
问题出现在最终(也是有用)的地方,你想使用生成的hiera字符串来引用数据值,如下所示:
options_test4: "%{hiera(hiera(value_template))}"
我似乎无法让它发挥作用。
这总是由事实控制的简单情况是将其转换为数据配置文件中的图层。
:hierarchy:
- "options\\%{::arg}"
并实施:
value_options: "data..."
在文件options\opt1.yaml
和options\opt2.yaml
然而,这使得无法做到这一点:
description: "we have %{value_options.opt1} and %{value_options.opt2} as settings"
有没有人解决过这个问题?