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