从 Facter 获取字符串数组到 Puppet
Get array of strings from Facter into Puppet
在我正在处理的模块中,我需要检查计算机上是否存在特定用户。
这个想法是创建一个包含所有用户数组的自定义事实。
在模块中,它应该遍历数组并检查特定用户是否是数组的一部分。
我的自定义资料:
Facter.add("users") do
setcode do
IO.readlines("/etc/passwd").collect do |line|
line.split(":").first
end
end
end
事实的输出是这样的字符串:
["user1"、"user2"、"user3"]
因为它只是一个字符串而不是数组,所以我无法在我的人偶模块中遍历它。
然后我尝试了
shell_split($::users).each |String $user| {
notify { "$user":}
}
但是现在,每个用户的用户名后都包含一个逗号。
您有更好的工作解决方案的想法吗?
假设,您将此作为 Factor.add
的输出:
output = '["user1", "user2", "user3"]'
您可以在 JSON
的帮助下将其转换为 Array
:
require 'json'
JSON.parse output
=> ["user1", "user2", "user3"]
The output of the fact is a String like this: ["user1", "user2", "user3"]
不,不是。您在事实的 setcode
块中提供的 Ruby 代码求值为一个数组。该表达式提供了事实的价值。它是一个数组。
但是,Puppet 可以在从 Facter 接收到该数组后将其转换 为字符串。 Puppet 3 默认执行此操作,但有一个布尔值 stringify_facts
配置设置可以防止该行为。 Puppet 4 保留了该设置但弃用了它并反转了它的默认值(到 false
)。 Puppet 5 删除了设置,并且从不将事实值字符串化。
因此,如果您使用的是(过时的)Puppet 3,那么您可以通过设置
来避免事实字符串化
stringify_facts = false
在 puppet.conf
主文件和所有代理文件的 [main]
部分。您可以在 Puppet 4 上执行相同的操作,但您也可以确保根本没有明确设置 stringify_facts
设置。
在我正在处理的模块中,我需要检查计算机上是否存在特定用户。 这个想法是创建一个包含所有用户数组的自定义事实。 在模块中,它应该遍历数组并检查特定用户是否是数组的一部分。
我的自定义资料:
Facter.add("users") do
setcode do
IO.readlines("/etc/passwd").collect do |line|
line.split(":").first
end
end
end
事实的输出是这样的字符串: ["user1"、"user2"、"user3"]
因为它只是一个字符串而不是数组,所以我无法在我的人偶模块中遍历它。
然后我尝试了
shell_split($::users).each |String $user| {
notify { "$user":}
}
但是现在,每个用户的用户名后都包含一个逗号。
您有更好的工作解决方案的想法吗?
假设,您将此作为 Factor.add
的输出:
output = '["user1", "user2", "user3"]'
您可以在 JSON
的帮助下将其转换为 Array
:
require 'json'
JSON.parse output
=> ["user1", "user2", "user3"]
The output of the fact is a String like this: ["user1", "user2", "user3"]
不,不是。您在事实的 setcode
块中提供的 Ruby 代码求值为一个数组。该表达式提供了事实的价值。它是一个数组。
但是,Puppet 可以在从 Facter 接收到该数组后将其转换 为字符串。 Puppet 3 默认执行此操作,但有一个布尔值 stringify_facts
配置设置可以防止该行为。 Puppet 4 保留了该设置但弃用了它并反转了它的默认值(到 false
)。 Puppet 5 删除了设置,并且从不将事实值字符串化。
因此,如果您使用的是(过时的)Puppet 3,那么您可以通过设置
来避免事实字符串化stringify_facts = false
在 puppet.conf
主文件和所有代理文件的 [main]
部分。您可以在 Puppet 4 上执行相同的操作,但您也可以确保根本没有明确设置 stringify_facts
设置。