[英]Check Puppet module files source exists before copy
我正在使用Puppet進行證書從Puppet Server到Windows節點的傳輸。 Puppet服務器有一個文件夾,將從我的CA(另一台服務器)復制新證書。 因此,有時Puppet可能找不到節點的證書(該證書沒有從CA傳輸到源目錄),這就是為什么我需要對源文件夾中的證書是否存在進行額外檢查。 該代碼必須檢查主機名,找到合適的證書並將其傳輸到節點。 在嘗試復制證書之前,如何使其在模塊文件目錄(puppet:/// modules / modulename /)中檢查證書的存在?
file { "D:\$hostname.pfx":
ensure => present,
source => all,
exec { 'Import certificate':
command => "if((Get-ChildItem -Path Cert:\LocalMachine\My\ | ? {$_.Issuer -like "*CN=example*"}).HasPrivateKey | select-string -pattern "True") -or ()\
{\$pwd = ConvertTo-SecureString -String "Password" -Force –AsPlainText; Import-PfxCertificate –FilePath ${cert_path}\$hostname.pfx cert:\localMachine\my -Password \$pwd}",
path => $::path,
onlyif => "Test-Path ${cert_path}\${hostname}.pfx",
provider => 'powershell',
}
在嘗試復制證書之前,如何使其在模塊文件目錄(puppet:/// modules / modulename /)中檢查證書的存在?
您可以編寫一個自定義函數來檢查模塊目錄中的文件,並使用它來啟用或取消File
和Exec
資源的聲明。 使用該函數的清單可能看起來像這樣:
if module_file_exists("${hostname}.pfx") {
file { "D:\$hostname.pfx":
# ...
}
-->
exec { 'Import certificate':
# ...
}
}
或者,一種快速而又骯臟的方法是通過ERB模板中的Ruby scriptlet代碼來實現該代碼,您可以通過inline_template()
(或template()
)運行該template()
。
解決該問題的一種更深奧的方法是編寫一個自定義的Hiera后端,該后端提供有關本地(向目錄編譯器)文件系統的信息,並通過hiera()
函數對其進行訪問。
但是 ,您是否考慮過不附加任何條件,而只是在證書文件不可用的情況下讓資源應用程序失敗? 如果實際上您在乎是否已安裝證書,那么資源應用程序故障會為您提供重要信息。 我假設您確實在乎,因為如果您不這樣做 ,那么根本不用去擔心證書就容易多了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.