我是一個傀儡初學者 - 如此忍受我:) 我試圖寫一個模塊,執行以下操作:木偶:複製文件只有在包需要安裝最新的
- 檢查軟件包是否安裝了最新版本的軟件倉庫
- 如果需要安裝軟件包,那麼配置文件將從puppet源位置複製到客戶端。然後將安裝該軟件包
- 一旦文件被複制並安裝軟件包,運行腳本將使用客戶端上的配置文件來應用必要的設置。
- 一旦這一切完成後,刪除客戶端
我已經想出以下複製的文件:
class somepackage(
$package_files_base = "/var/tmp",
$package_setup = "/var/tmp/package-setup.sh",
$ndc_file = "/var/tmp/somefile.ndc",
$osd_file = "/var/tmp/somefile.osd",
$nds_file = "/var/tmp/somefile.nds",
$configini_file = "/var/tmp/somefile.ini",
$required_files = ["$package_setup", "$ndc_file", "$osd_file", $nds_file", "$configini_file"])
{
package { 'some package':
ensure => 'latest',
notify => Exec['Package Setup'],
}
file { 'Package Setup Files':
path => $package_files_base,
ensure => directory,
replace => false,
recurse => true,
source => "puppet:///modules/somepackage/${::domain}",
mode => '0755',
}
exec { 'Package Setup':
command => "$package_setup",
logoutput => true,
timeout => 1800,
require => [ File['Package Setup Files']],
refreshonly => true,
notify => Exec['Remove config files'],
}
exec { 'Remove config files':
path => ['/usr/bin','/usr/sbin','/bin','/sbin'],
command => "rm \"${package_setup}\" \"${ndc_file}\" \"${osd_file}\" \"${nds_file}\" \"${configini_file}\"",
refreshonly => true,
}
}
雖然這實現了大多數的什麼,我想做的事情,我注意到在重新運行傀儡時,應用這些文件雖然被刪除,但正在被複制。
我可以理解爲什麼會發生這種情況,但我不知道如何對它進行編碼,以便只有在程序包得到更新/安裝(例如,程序包未安裝或舊版本)時纔會複製文件。否則,每當木偶每隔30分鐘(默認設置)在客戶端上運行時,文件就會被一遍又一遍地複製,我假設...我試圖使用replace => false
來防止這種情況,但這只是意味着文件在從/var/tmp
之後這是該類的第一次運行,因爲它僅阻止後續運行的類重新複製文件(從我的測試中)。這確實可以防止多餘的重複性複製 - 但是我只想讓這些文件在第一時間消失!
這可能嗎? !頭好痛:(提前
感謝我們正在EL7.3運行木偶版本3.8.6
編輯:要清楚,這是我掙扎了一下:資源file { 'Package Setup Files':
這種狀態越來越文件複製即使包不更新/安裝。如何防止這種情況的發生?
從我所瞭解的情況來看,只有在軟件包不是最新的版本時才需要執行「軟件包設置文件」?那是你唯一面臨的問題? –
不,執行得很好 - 「文件{'程序包設置文件''位是無論如何都會一直執行的文件。如果軟件包已更新/安裝,我只想限制這一點。 –
我注意到$ package_files_base沒有在任何地方定義。錯字? –