and use template after setting var
[mirror/dsa-puppet.git] / modules / ssl / manifests / init.pp
1 class ssl {
2         package { 'openssl':
3                 ensure   => installed,
4         }
5         package { 'ssl-cert':
6                 ensure   => installed,
7         }
8         package { 'ca-certificates':
9                 ensure   => installed,
10         }
11
12         if has_role('insecure_ssl') {
13                 $extra_ssl_certs_flags = ' --default'
14                 $ssl_certs_config = 'puppet:///modules/ssl/ca-certificates-global.conf'
15         } else {
16                 $extra_ssl_certs_flags = ''
17                 $ssl_certs_config = 'puppet:///modules/ssl/ca-certificates.conf'
18         }
19
20         file { '/etc/ssl/README':
21                 mode   => '0444',
22                 source => 'puppet:///modules/ssl/README',
23         }
24         file { '/etc/ca-certificates.conf':
25                 source => $ssl_certs_config,
26                 notify  => Exec['refresh_normal_hashes'],
27         }
28         file { '/etc/ca-certificates-debian.conf':
29                 mode    => '0444',
30                 source => 'puppet:///modules/ssl/ca-certificates.conf',
31                 notify  => Exec['refresh_ca_debian_hashes'],
32         }
33         file { '/etc/ca-certificates-global.conf':
34                 source => 'puppet:///modules/ssl/ca-certificates-global.conf',
35                 notify  => Exec['refresh_ca_global_hashes'],
36         }
37
38         file { '/etc/ssl/certs/ssl-cert-snakeoil.pem':
39                 ensure => absent,
40                 notify => Exec['refresh_normal_hashes'],
41         }
42         file { '/etc/ssl/private/ssl-cert-snakeoil.key':
43                 ensure => absent,
44         }
45
46         file { '/etc/ssl/servicecerts':
47                 ensure   => absent,
48         }
49
50         file { '/usr/local/share/ca-certificates/debian.org':
51                 ensure   => absent,
52                 purge    => true,
53                 recurse  => true,
54                 force    => true,
55                 notify   => [ Exec['refresh_normal_hashes'], Exec['refresh_ca_global_hashes'] ],
56         }
57         file { '/etc/ssl/certs/README':
58                 ensure => absent,
59         }
60         file { '/etc/ssl/ca-debian':
61                 ensure => directory,
62                 mode   => '0755',
63         }
64         file { '/etc/ssl/ca-debian/README':
65                 ensure => absent,
66         }
67         file { '/etc/ssl/ca-global':
68                 ensure => directory,
69                 mode   => '0755',
70         }
71         file { '/etc/ssl/ca-global/README':
72                 ensure => absent,
73         }
74         file { '/etc/ssl/debian':
75                 ensure   => directory,
76                 source   => 'puppet:///files/empty/',
77                 mode     => '0644', # this works; otherwise all files are +x
78                 purge    => true,
79                 recurse  => true,
80                 force    => true,
81         }
82         file { '/etc/ssl/debian/certs':
83                 ensure  => directory,
84                 mode    => '0755',
85         }
86         file { '/etc/ssl/debian/crls':
87                 ensure  => directory,
88                 mode    => '0755',
89         }
90         file { '/etc/ssl/debian/certs/thishost.crt':
91                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/" + @fqdn + ".client.crt") %>'),
92                 notify  => Exec['refresh_debian_hashes'],
93         }
94         file { '/etc/ssl/debian/certs/ca.crt':
95                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/ca.crt") %>'),
96                 notify  => Exec['refresh_debian_hashes'],
97         }
98         file { '/etc/ssl/debian/crls/ca.crl':
99                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/ca.crl") %>'),
100         }
101         file { '/etc/ssl/debian/certs/thishost-server.crt':
102                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_certs_dir"]) + "/" + @fqdn + ".crt") %>'),
103                 notify  => Exec['refresh_debian_hashes'],
104         }
105
106         file { '/etc/ssl/debian/keys/thishost.key':
107                 ensure => absent,
108         }
109         file { '/etc/ssl/debian/keys/thishost-server.key':
110                 ensure => absent,
111         }
112         file { '/etc/ssl/debian/keys':
113                 ensure => absent,
114                 force    => true,
115         }
116         file { '/etc/ssl/private/thishost.key':
117                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_clientcerts_dir"]) + "/" + @fqdn + ".key") %>'),
118                 mode    => '0440',
119                 group   => ssl-cert,
120                 require => Package['ssl-cert'],
121         }
122         file { '/etc/ssl/private/thishost-server.key':
123                 content => inline_template('<%= File.read(scope().call_function("hiera", ["paths.auto_certs_dir"]) + "/" + @fqdn + ".key") %>'),
124                 mode    => '0440',
125                 group   => ssl-cert,
126                 require => Package['ssl-cert'],
127         }
128
129         $updatecacertsdsa = '/usr/local/sbin/update-ca-certificates-dsa'
130         if (versioncmp($::lsbmajdistrelease, '9') >= 0) {
131                 file { $updatecacertsdsa:
132                         ensure => absent,
133                 }
134                 $updatecacerts = '/usr/sbin/update-ca-certificates'
135         } else {
136                 file { $updatecacertsdsa:
137                         mode   => '0555',
138                         source => 'puppet:///modules/ssl/update-ca-certificates-dsa',
139                 }
140                 $updatecacerts = $updatecacertsdsa
141         }
142
143         file { '/etc/apt/apt.conf.d/local-ssl-ca-global':
144                 mode   => '0444',
145                 content => template('ssl/local-ssl-ca-global.erb'),
146         }
147
148
149         exec { 'refresh_debian_hashes':
150                 command     => 'c_rehash /etc/ssl/debian/certs',
151                 refreshonly => true,
152                 require     => Package['openssl'],
153         }
154
155         exec { 'refresh_normal_hashes':
156                 # NOTE 1: always use update-ca-certificates to manage hashes in
157                 #         /etc/ssl/certs otherwise /etc/ssl/ca-certificates.crt will
158                 #         get a hash overriding the hash that would have been generated
159                 #         for another certificate ... which is problem, comrade
160                 # NOTE 2: always ask update-ca-certificates to freshen (-f) the links
161                 command     => "/usr/sbin/update-ca-certificates --fresh${extra_ssl_certs_flags}",
162                 refreshonly => true,
163                 require     => Package['ca-certificates'],
164         }
165         exec { 'refresh_ca_debian_hashes':
166                 command     => "${updatecacerts} --fresh --certsconf /etc/ca-certificates-debian.conf --localcertsdir /dev/null --etccertsdir /etc/ssl/ca-debian --hooksdir /dev/null",
167                 refreshonly => true,
168                 require     => [
169                         Package['ca-certificates'],
170                         File['/etc/ssl/ca-debian'],
171                         File['/etc/ca-certificates-debian.conf'],
172                         File[$updatecacertsdsa],
173                 ]
174         }
175         exec { 'refresh_ca_global_hashes':
176                 command     => "${updatecacerts} --fresh --default --certsconf /etc/ca-certificates-global.conf --etccertsdir /etc/ssl/ca-global --hooksdir /dev/null",
177                 refreshonly => true,
178                 require     => [
179                         Package['ca-certificates'],
180                         File['/etc/ssl/ca-global'],
181                         File['/etc/ca-certificates-global.conf'],
182                         File[$updatecacertsdsa],
183                 ]
184         }
185
186 }