[英]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.