簡體   English   中英

如何安排人偶自定義事實每X小時執行一次?

[英]How to schedule puppet custom facts to execute every X hours?

我有一個自定義的木偶事實(用紅寶石編寫),它執行一個簡單的bash腳本。 該腳本檢查文件系統中的所有文件是否具有世界可讀的權限,並相應地返回結果。 木偶事實檢查腳本的輸出,如果腳本輸出不為空,則返回“失敗”。

問題在於該腳本占用大量資源,我不希望每30分鍾執行一次(客戶端的puppet.conf:runinternval = 1800)。

我嘗試使用“計划”資源,但是由於人偶的工作方式,它只會影響我用來評估事實輸出的類。 每次其他人偶運行時都會評估人偶事實,無論其他情況如何。 (因此使它們可用於資源)

我還嘗試將執行bash腳本的代碼從事實移到puppet類中,但是看來您無法評估bash腳本的輸出(使用“ exec”類型)並將其存儲在變量中(再次) ,因為木偶的工作方式)。

現在,我被簡化為嘗試使用Ruby語言應用某種調度機制,並實現它。 我已經在PStore上閱讀了一些,現在看來這是一個很好的方向。

有誰知道我怎樣才能讓紅寶石腳本只在晚上執行? 我不能使用crontab,因為代碼將由puppet運行。

木偶類的代碼片段:

if $::myfact == 'fail' {
  notify { "warning blah blah...":
    loglevel => err,
    schedule => 'night',
   }
} 

人偶事實的代碼片段:

 require 'facter'
 Facter.add(:myfact) do
   setcode do
     if File.exists? '/usr/local/puppet/scripts/myscript.sh'
       result = Facter::Util::Resolution.exec("/usr/local/puppet/scripts/myscript.sh")
       if result != ''
         puts "Result of myfact is: \n #{result}"
       'fail'
     end
   end
 end

結束

您的自定義事實可以將其結果記錄在系統中某個文件中。 評估后,它可以將該文件上的時間戳與當前系統時間進行比較,並根據需要讀回該值或重新進行計算。 這還允許您推遲更新(例如,通過touch文件)或手動請求重新評估(通過刪除文件)。

但是,請考慮將昂貴的評估與事實收集脫鈎是否有意義。 即使Facter僅偶爾需要從頭開始重新評估事實,Facter以及Puppet仍然需要很長時間才能執行這些運行。 您可以考慮使用調度的作業以您希望的任何時間間隔執行評估,並使自定義事實始終依賴於最新評估中的緩存結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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