我在 puppet 中有以下类和定义:
$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,
}
}
}
Run Code Online (Sandbox Code Playgroud)
我稍后(在一个节点中)使用这个 openssl::cert 定义将证书传递给 apache vhost 配置:
openssl::cert { "rri":
ensure=>present
}
apache2::site-config { "default":
ip => "*",
order => "000",
docroot => '/home/support/public_html',
cert => Openssl::Cert["rri"]
}
Run Code Online (Sandbox Code Playgroud)
在 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"],
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题 - 如何从位于 $template 的 .erb 文件中的 cert 变量中引用$certfile
/ $keyfile
?
我也很想知道我是否也以错误的方式处理这个问题 - 这是我第一次尝试使用 puppet 进行任何设置,并且只是尝试玩我能做的事情。
更新 - 现在半工作 基于 freiheit 的回答 - 我对我的 apache2::site-config 做了一些更改
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"],
}
Run Code Online (Sandbox Code Playgroud)
然后在.erb
SSLCertificateFile <%= certfile %>
SSLCertificateKeyFile <%= keyfile %>
Run Code Online (Sandbox Code Playgroud)
这似乎工作得相当好 - 我只是希望如果我在某个时候更改证书命名约定,我将能够从对 Openssl::Cert 资源的引用访问实际文件名。仍然很想知道是否有办法做到这一点。
$template.erb 中类似这样的内容:
<VirtualHost <%= ip %>:443>
Document Root <%= docroot %>
SSLCertificateFile <%= cert %>
# ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
也就是说,puppet 中的任何变量都可以作为隐藏在 .erb 文件中的 ruby 位中的局部变量。
不知道为什么你有“$template”而不是命名的 .erb 文件(没有看到 $template 在任何地方设置,但愿意假设它隐藏在某个地方)
这似乎是错误的:cert => Openssl::Cert["rri"]
。我期待更多类似的东西:
openssl::cert { "rri": }
Run Code Online (Sandbox Code Playgroud)
然后 .erb 会更像:
<VirtualHost <%= ip %>:443>
Document Root <%= docroot %>
SSLCertificateFile <%= certDirectory %>/<%= name %>
# ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15981 次 |
最近记录: |