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,
}
}
}
私は後で(ノード内で)このopenssl :: cert defineを使用して、Apache vhost構成に証明書を渡します。
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ファイルのcert変数から$certfile
/$keyfile
を参照するにはどうすればよいですか?
私もこれに間違った方法でアプローチしているかどうかを知りたいと思います-人形を使って何かをセットアップしようとするのは初めてで、自分にできることをいじってみました。
更新済み-準作業中フライハイトの回答に基づく-私は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"],
}
次に、.erb
SSLCertificateFile <%= certfile %>
SSLCertificateKeyFile <%= keyfile %>
これはかなりうまく機能しているようです-ある時点で証明書の命名規則を変更した場合に、Openssl :: Certリソースへの参照から実際のファイル名にアクセスできるようになることを望んでいました。それを行う方法があるかどうかを知りたいのですが。
$ template.erbのこのようなもの:
<VirtualHost <%= ip %>:443>
Document Root <%= docroot %>
SSLCertificateFile <%= cert %>
# ...
</VirtualHost>
つまり、puppetのすべての変数は、.erbファイルに隠されているRubyビットのローカル変数として使用できます。
名前付き.erbファイルの代わりに「$ template」がある理由がわかりません($ templateがどこにも設定されていませんが、どこかに隠れていると想定します)
そして、これは間違っているようです:cert => Openssl::Cert["rri"]
。私はもっともっと何かを期待します:
openssl::cert { "rri": }
そして、.erbは次のようになります。
<VirtualHost <%= ip %>:443>
Document Root <%= docroot %>
SSLCertificateFile <%= certDirectory %>/<%= name %>
# ...
</VirtualHost>