我想使用 Puppet 在默认密钥库中部署证书
我有两个文件root.crt
,intermediateca.crt
由 puppet 管理
$alias=[rootca, intermediateca]
$filecert= ["/var/lib/certs/rootca", "/var/lib/certs/intermediateca.crt"]
'/var/lib/certs/root.crt':
source => "puppet:///modules/${module_name}/sonarqube/${::env}/var/lib/certs/root.crt",
mode => '0644',
notify => Exec['install_cert'];
'/var/lib/certs/intermediateca.crt':
source => "puppet:///modules/${module_name}/sonarqube/${::env}/var/lib/certs/intermediateca.crt",
mode => '0644',
notify => Exec['install_cert'];
现在,对于每个文件,我想运行一个 exec 命令,该命令应将别名数组和 crt 文件作为 exec 命令资源中的参数。我试过了,但没有用
exec {
'install_cert':
path => "/usr/bin",
command => "keytool -importcert -keystore ${keystore} -storepass ${storepass} -noprompt -trustcacerts",
provider => linux,
subscribe => File['/var/lib/certs/'],
refreshonly => true;
}
我不确定上面的代码是否正确。有人能帮忙吗?
答案1
粘贴的代码并不是真正有效的 Puppet 代码,很难猜出它应该做什么。正如评论中所建议的,“正确”的解决方案是使用java-ks 模块。 就像是:
java_ks { 'puppetca:truststore':
ensure => latest,
certificate => '"/var/lib/certs/intermediateca.crt',
target => '/var/lib/certs/rootca',
password => 'puppet',
trustcacerts => true,
}
如果您想手动执行此类命令,您可以使用以下命令each
来定义exec
资源:
$alias = ['rootca', 'intermediateca']
$alias.each |String $cert| {
exec {"some_command_${cert}":
command = "/bin/some/binary --arg ${cert}"
}
}
文件资源中的通知无法传递参数,它将仅执行在中定义的命令exec
资源。
file {'/var/lib/certs/root.crt':
source => "...",
notify => Exec['some_command_rootca'],
}