使用因子传递数组

use*_*168 1 puppet facter

假设我有一个值数组

["node1.example.org", "node2.example.org"]
Run Code Online (Sandbox Code Playgroud)

我想使用 facter 传递它,并在 puppet 中使用它:

host {
  $nodes:
     ...
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Fel*_*ank 5

Facter 1.x 不能将结构化数据作为事实值传递。所有事实都将被强制转换为 String 格式。这对于数组来说尤其不幸,因为它们的元素将在没有连接标记的情况下连接起来。

建议让您的事实返回一个 [逗号] 分隔列表,例如Array result,不要返回,而是执行

result * ","
Run Code Online (Sandbox Code Playgroud)

在您的清单中,将其转回数组

$nodes_array = split($nodes, ',')
host { $nodes_array: }
Run Code Online (Sandbox Code Playgroud)

请参阅Puppet 函数参考和 Ruby 的Array 方法

Facter 2 确实支持 Boolean、Hash 和 Array 事实,但这可能尚不可用。