2017-05-08 6 views
-1

私の以前のクエリ(下記参照)の関数を使用して、エージェントからファイルを取り出して必要な作業を実行することができました。しかし、これは、ファイルが見つからないことを示す例外がスローされるため、システム上のすべてのユーザーに影響を与えます。とにかく、このruby関数にunless file_exists ....のようなロジックを追加できますか?パペット:エージェントからファイルをロードする方法 - パート3

私の階層は以下の通りです。私はそれが "mymodules"でさえもいない他のユーザーに影響を与える理由には従いません。参照コードの追加
Puppet : How to load file from agent

Puppet : How to load file from agent - Part 2

ドミニクによって要求されたとして、::

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

リファレンス

# 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? condi :

# 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 

質問するときは完全なエラーメッセージ(提供されているファイル名/行番号)とソースコードを含めてください。

カスタムファクトはモジュール内で出荷されますが、です。は、データを検出するために使用されるため、エージェントに同期されます。

事実は、ノードが分類される前にエージェント上で同期されて実行されます。分類やカタログの決定に使用することができるためです。ホスト名またはOSに基づいています。事実は分類の前に実行されるため、どのクラス(およびおそらくはモジュール)が適用されるのかまだ分からないため、環境内のすべてのノードで安全に実行する必要があります。

関連する問題