簡體   English   中英

將字符串數組從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":}
  }

但是現在,每個用戶名后都包含一個逗號。

您是否有一個可行且更好的解決方案的想法?

事實的輸出是這樣的字符串:[“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM