2017-05-08 58 views
-1

使用我以前的查詢中的函數(請參閱下面的參考資料),我可以從代理拉取文件並執行必要的任務。但是,這會影響系統上的所有用戶,因爲它會拋出一個異常,指出找不到該文件。無論如何,我可以添加一些邏輯像unless file_exists ....這個紅寶石功能?木偶:如何從代理加載文件 - 第3部分

我的層次結構如下所示。我沒有關注爲什麼它會影響甚至不在「mymodules」中的其他用戶。

 
Root 
    modules 
    mymodules 
     lib 
      facter 
      ruby_function1.rb 
      ruby_function2.rb 
    modules_by_userxx1 
    modules_by_userxx2 
    modules_by_userxx3 
    .... 

參考:
Puppet : How to load file from agent

Puppet : How to load file from agent - Part 2

按照要求由多米尼克,將參考代碼:

# module_name/lib/facter/master_hash.rb 
require 'json' 
Facter.add(:master_hash) do 
    setcode do 
    # return content of foo as a string 
    f = File.read('/path/to/some_file.json') 
    master_hash = JSON.parse(f) 
    master_hash 
    end 
end 

回答

2

我會假設你從談論的自定義事實以前的答案,而不是一個Ruby功能,在這種情況下,添加一個File.exist?條件周志武:

# module_name/lib/facter/master_hash.rb 
require 'json' 
Facter.add(:master_hash) do 
    setcode do 
    if File.exist?('/path/to/some_file.json') 
     # return content of foo as a string 
     f = File.read('/path/to/some_file.json') 
     master_hash = JSON.parse(f) 
     master_hash 
    end 
    end 
end 

詢問問題時,請包括完整的錯誤消息(具有它所提供的文件名/行號)和源代碼。

自定義事實在模塊中發佈,但是全部與代理程序同步,因爲它們用於發現數據。

在節點被分類之前,事實被同步並在代理上運行,因爲它們可以用於做出分類和目錄決定,例如,基於主機名或操作系統。由於事實在分類之前運行,因此還不知道哪些類(可能是模塊)將被應用,因此在環境中的每個節點上運行應該是安全的。