[英]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":}
}
但是现在,每个用户名后都包含一个逗号。
您是否有一个可行且更好的解决方案的想法?
事实的输出是这样的字符串:[“ user1”,“ user2”,“ user3”]
不,不是。 您在事实的setcode
块中显示的Ruby代码将评估为一个数组。 该表达式提供了事实的价值。 它是一个数组。
它是可能的,但是,从木偶Facter收到后该数组转换为字符串。 木偶3默认情况下会执行此操作,但是它具有布尔型stringify_facts
配置设置,可以防止该行为。 人偶4保留了该设置,但弃用了该设置,并将其默认值反转为false
。 人偶5删除了该设置,并且从不对事实值进行字符串化。
因此,如果您正在使用(过时的)Puppet 3,则可以通过设置
stringify_facts = false
在master和所有代理上的puppet.conf
文件的[main]
部分中。 您可以在Puppet 4上执行相同的操作,但也可以只确保未明确设置stringify_facts
设置。
假设您将其作为Factor.add
的输出:
output = '["user1", "user2", "user3"]'
您可以借助JSON
将其转换为Array
:
require 'json'
JSON.parse output
=> ["user1", "user2", "user3"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.