我在傀儡中有以下类和定义:
$certDirectory = "/var/lib/ssl/certs" class openssl { package { "openssl": ensure => latest } file { "openssl": path => "/var/lib/ssl", ensure => directory, mode => 0644 } file { "openssl-certs": path => "/var/lib/ssl/certs", ensure => directory, mode => 0644 } define cert($ensure = present) { $certfile = "${certDirectory}/${name}.cert" $keyfile = "${certDirectory}/${name}.key" $pemfile = "${certDirectory}/${name}.pem" file { "${name}.cert": path => $certfile, source => "puppet:///openssl/${name}.cert", mode => 0640, ensure => $ensure, } file { "${name}.key": path => $keyfile, source => "puppet:///openssl/${name}.key", mode => 0640, ensure => $ensure, } } }
我以后(在一个节点)使用这个openssl :: cert定义传递一个证书到apache vhostconfiguration:
openssl::cert { "rri": ensure=>present } apache2::site-config { "default": ip => "*", order => "000", docroot => '/home/support/public_html', cert => Openssl::Cert["rri"] }
并在apache2 :: site-config里面定义:
file { "site-config-$name": path => "/etc/apache2/sites-available/$name", owner => root, group => root, mode => 0644, content => template($template), notify => Exec["reload-apache2"], }
我遇到的问题 – 如何引用位于$ template的.erb文件中的certvariables的$certfile / $keyfile ?
我也很想知道我是否也正在接近这个错误的方式 – 我第一次试图用木偶来设置任何东西,只是试着玩我能做的事情。
更新 – 现在半工作基于freiheit的答案 – 我做了一些更改我的apache2 ::站点configuration
define site-config ( $ensure = 'present', $template = 'apache2/vhost.erb', $docroot, $ip='*', $order='000', $logs = "", $cert = false) { if $cert { File["site-config-$name"] { require=>Openssl::Cert[$cert] } $certfile = "${openssl::certDirectory}/${cert}.cert" $keyfile = "${openssl::certDirectory}/${cert}.key" } file { "site-config-$name": path => "/etc/apache2/sites-available/$name", owner => root, group => root, mode => 0644, content => template($template), notify => Exec["reload-apache2"], }
然后在.erb中
SSLCertificateFile <%= certfile %> SSLCertificateKeyFile <%= keyfile %>
这似乎工作得很好 – 我只是希望在我改变证书命名约定的时候,我可以从Openssl :: Cert资源的引用中访问实际的文件名。 仍然好奇,知道是否有办法做到这一点。
在$ template.erb中是这样的:
<VirtualHost <%= ip %>:443> Document Root <%= docroot %> SSLCertificateFile <%= cert %> # ... </VirtualHost>
也就是说,puppet中的任何variables都可以作为隐藏在.erb文件中ruby位的局部variables。
不知道为什么你有“$模板”,而不是一个命名的.erb文件(没有看到$模板设置任何地方,但愿意假设它隐藏在某个地方)
这似乎是错误的: cert => Openssl::Cert["rri"] 。 我希望更像是:
openssl::cert { "rri": }
然后这个.erb更像是:
<VirtualHost <%= ip %>:443> Document Root <%= docroot %> SSLCertificateFile <%= certDirectory %>/<%= name %> # ... </VirtualHost>