傀儡3 |从不同的 yaml 文件读取值

Puppet3 | read values from different yaml file

所以我使用的是 puppet3,我有 X.yaml 和 Y.yaml。 X.yaml 里面有 profiles::resolv_conf::nameservers: [ '1.1.1.1', '8.8.8.8', '2.2.2.2' ]。我想将 [ '1.1.1.1', '8.8.8.8', '2.2.2.2' ] 作为值添加到 Y.yaml:

中的 servers:
 'dns_test':
plugin_type: 'dns_query'
options:
'servers': \['1.1.1.1', '8.8.8.8', "2.2.2.2"\]
'domains': \['google.com'\]
'record_type': 'A'
'timeout': 5
tags:
'input_source': 'dns_query'

通过这样做,我想确保当有人更改 profiles::resolv_conf::nameservers: 中的值时,此 telegraf 插件中的值也会更改。

我尝试了多种解决方案,但最接近的是:

 'dns_test': 
plugin_type: 'dns_query'     
options:       
'servers': "%{hiera('profiles::resolv_conf::nameservers')}"       
'domains': ['google.com']       
'record_type': 'A'       
'timeout': 5     
 tags:       'input_source': 'dns_query' 

但问题是 puppet 在插件 conf 中的值和最终值中添加了额外的“”: "["1.1.1.1", "2.2.2.2", "8.8.8.8"]" 而不是 ["1.1.1.1", "2.2.2.2", "8.8.8.8"]

TL;DR:你不能。

the current docs and the Puppet documentation archive 开始,我确认 %{hiera} 插值函数或其替代版本 %{lookup} 不支持字符串以外的插值。这在当前文档中是这样表达的:

The lookup and hiera interpolation functions look up a key and return the resulting value. The result of the lookup must be a string; any other result causes an error.

(强调)

Hiera 5 的 %{alias} 函数将支持您正在寻找的内容,前提是数据在同一层次结构中的其他地方可用(这也是 %{hiera} 的要求)。但是,由于您卡在 Puppet 3 上,您可能在 Hiera 2 上,而且肯定不晚于 Hiera 3。

“等等!”你可以这样说。 “我得到了一个成功的插值,但数据只是被篡改了”。具体来说,您写道:

problem is that puppet was adding extra " " to the value and final value

因为 %{hiera()} 只插入字符串,所以你得到一个字符串值也就不足为奇了,因为你得到了一个值。我确实觉得 Puppet 没有抛出错误有点令人惊讶,但我不准备在没有演示该行为的最小可重现示例的情况下进一步评论。