-define ssl::service($ensure = present, $tlsaport = 443, $notify = []) {
- $link_target = $ensure ? {
- present => link,
- absent => absent,
- default => fail ( "Unknown ensure value: '$ensure'" ),
+define ssl::service($ensure = present, $tlsaport = 443, $notify = [], $key = false) {
+ $tlsaports = any2array($tlsaport)
+
+ if ($ensure == "ifstatic") {
+ $ssl_ensure = has_static_component($name) ? {
+ true => "present",
+ false => "absent"
+ }
+ } else {
+ $ssl_ensure = $ensure
}
file { "/etc/ssl/debian/certs/$name.crt":
- source => "puppet:///modules/ssl/servicecerts/${name}.crt",
- notify => [ Exec['c_rehash /etc/ssl/debian/certs'], $notify ],
+ ensure => $ssl_ensure,
+ source => [ "puppet:///modules/ssl/servicecerts/${name}.crt", "puppet:///modules/ssl/from-letsencrypt/${name}.crt" ],
+ notify => [ Exec['refresh_debian_hashes'], $notify ],
}
file { "/etc/ssl/debian/certs/$name.crt-chain":
- source => [ "puppet:///modules/ssl/chains/${name}.crt", "puppet:///modules/ssl/servicecerts/${name}.crt" ],
- notify => [ Exec['c_rehash /etc/ssl/debian/certs'], $notify ],
- links => follow,
+ ensure => $ssl_ensure,
+ source => [ "puppet:///modules/ssl/chains/${name}.crt", "puppet:///modules/ssl/servicecerts/${name}.crt", "puppet:///modules/ssl/from-letsencrypt/${name}.crt-chain" ],
+ notify => [ $notify ],
+ links => follow,
+ }
+ file { "/etc/ssl/debian/certs/$name.crt-chained":
+ ensure => $ssl_ensure,
+ content => template('ssl/chained.erb'),
+ notify => [ $notify ],
+ }
+ if $key {
+ file { "/etc/ssl/private/$name.key":
+ ensure => $ssl_ensure,
+ mode => '0440',
+ group => 'ssl-cert',
+ source => [ "puppet:///modules/ssl/keys/${name}.crt", "puppet:///modules/ssl/from-letsencrypt/${name}.key" ],
+ notify => [ $notify ],
+ links => follow,
+ }
}
- if $tlsaport > 0 {
- dnsextras::tlsa_record{ "tlsa-${name}-${tlsaport}":
- zone => 'debian.org',
- certfile => "/etc/puppet/modules/ssl/files/servicecerts/${name}.crt",
- port => $tlsaport,
+ if (size($tlsaports) > 0 and $ssl_ensure == "present") {
+ $portlist = join($tlsaports, "-")
+ dnsextras::tlsa_record{ "tlsa-${name}-${portlist}":
+ zone => 'debian.org',
+ certfile => [ "/etc/puppet/modules/ssl/files/servicecerts/${name}.crt", "/etc/puppet/modules/ssl/files/from-letsencrypt/${name}.crt" ],
+ port => $tlsaport,
hostname => "$name",
}
}