我正在使用Puppet将证书从Puppet Server传输到Windows节点。 Puppet Server有一个文件夹,从我的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',
}
答案 0 :(得分:0)
在尝试复制之前,如何检查模块文件目录(puppet:/// modules / modulename /)中的证书存在?
您可以编写一个custom function来检查模块目录中的文件,并使用它来启用或禁止File
和Exec
资源的声明。使用该函数的清单可能如下所示:
if module_file_exists("${hostname}.pfx") {
file { "D:\$hostname.pfx":
# ...
}
-->
exec { 'Import certificate':
# ...
}
}
或者做同样事情的快速而肮脏的方法是通过ERB模板中的Ruby scriptlet代码实现它,您可以通过inline_template()
(或template()
)运行。
或者更为深奥的解决问题的方法是编写一个自定义Hiera后端,它提供有关本地(到目录编译器)文件系统的信息,并通过hiera()
函数访问它。
但是,您是否考虑过不做任何条件限制,而只是在证书文件不可用的情况下让资源的应用程序失败?如果您确实关心是否安装了证书,那么资源应用程序故障会为您提供重要信息。我认为你做关心,因为如果你不这样做,那么只要不打扰证书就更容易了。