簡體   English   中英

復制之前檢查Puppet模塊文件源是否存在

[英]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 /)中檢查證書的存在?

您可以編寫一個自定義函數來檢查模塊目錄中的文件,並使用它來啟用或取消FileExec資源的聲明。 使用該函數的清單可能看起來像這樣:

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.

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