newer pg module
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / params.pp
1 # PRIVATE CLASS: do not use directly
2 class postgresql::params inherits postgresql::globals {
3   $version                    = $postgresql::globals::globals_version
4   $postgis_version            = $postgresql::globals::globals_postgis_version
5   $listen_addresses           = undef
6   $port                       = 5432
7   $log_line_prefix            = undef
8   $ip_mask_deny_postgres_user = '0.0.0.0/0'
9   $ip_mask_allow_all_users    = '127.0.0.1/32'
10   $ipv4acls                   = []
11   $ipv6acls                   = []
12   $encoding                   = $postgresql::globals::encoding
13   $locale                     = $postgresql::globals::locale
14   $data_checksums             = $postgresql::globals::data_checksums
15   $timezone                   = $postgresql::globals::timezone
16   $service_ensure             = 'running'
17   $service_enable             = true
18   $service_manage             = true
19   $service_restart_on_change  = true
20   $service_provider           = $postgresql::globals::service_provider
21   $manage_pg_hba_conf         = pick($manage_pg_hba_conf, true)
22   $manage_pg_ident_conf       = pick($manage_pg_ident_conf, true)
23   $manage_recovery_conf       = pick($manage_recovery_conf, false)
24   $package_ensure             = 'present'
25   $module_workdir             = pick($module_workdir,'/tmp')
26
27   # Amazon Linux's OS Family is 'Linux', operating system 'Amazon'.
28   case $::osfamily {
29     'RedHat', 'Linux': {
30       $link_pg_config     = true
31       $user               = pick($user, 'postgres')
32       $group              = pick($group, 'postgres')
33       $needs_initdb       = pick($needs_initdb, true)
34       $version_parts      = split($version, '[.]')
35       $package_version    = "${version_parts[0]}${version_parts[1]}"
36
37       if $version == $postgresql::globals::default_version and $::operatingsystem != 'Amazon' {
38         $client_package_name    = pick($client_package_name, 'postgresql')
39         $server_package_name    = pick($server_package_name, 'postgresql-server')
40         $contrib_package_name   = pick($contrib_package_name,'postgresql-contrib')
41         $devel_package_name     = pick($devel_package_name, 'postgresql-devel')
42         $java_package_name      = pick($java_package_name, 'postgresql-jdbc')
43         $docs_package_name      = pick($docs_package_name, 'postgresql-docs')
44         $plperl_package_name    = pick($plperl_package_name, 'postgresql-plperl')
45         $plpython_package_name  = pick($plpython_package_name, 'postgresql-plpython')
46         $service_name           = pick($service_name, 'postgresql')
47         $bindir                 = pick($bindir, '/usr/bin')
48         $datadir                = $::operatingsystem ? {
49           'Amazon' => pick($datadir, "/var/lib/pgsql${package_version}/data"),
50           default  => pick($datadir, '/var/lib/pgsql/data'),
51         }
52         $confdir                = pick($confdir, $datadir)
53       } else {
54         $client_package_name    = pick($client_package_name, "postgresql${package_version}")
55         $server_package_name    = pick($server_package_name, "postgresql${package_version}-server")
56         $contrib_package_name   = pick($contrib_package_name,"postgresql${package_version}-contrib")
57         $devel_package_name     = pick($devel_package_name, "postgresql${package_version}-devel")
58         $java_package_name      = pick($java_package_name, "postgresql${package_version}-jdbc")
59         $docs_package_name      = pick($docs_package_name, "postgresql${package_version}-docs")
60         $plperl_package_name    = pick($plperl_package_name, "postgresql${package_version}-plperl")
61         $plpython_package_name  = pick($plpython_package_name, "postgresql${package_version}-plpython")
62         $service_name           = $::operatingsystem ? {
63           'Amazon' => pick($service_name, "postgresql${version_parts[0]}${version_parts[1]}"),
64           default  => pick($service_name, "postgresql-${version}"),
65         }
66         $bindir                 = $::operatingsystem ? {
67           'Amazon' => pick($bindir, '/usr/bin'),
68           default  => pick($bindir, "/usr/pgsql-${version}/bin"),
69         }
70         $datadir                = $::operatingsystem ? {
71           'Amazon' => pick($datadir, "/var/lib/pgsql${package_version}/data"),
72           default  => pick($datadir, "/var/lib/pgsql/${version}/data"),
73         }
74         $confdir                = pick($confdir, $datadir)
75       }
76       $psql_path           = pick($psql_path, "${bindir}/psql")
77
78       $service_status      = $service_status
79       $service_reload      = "service ${service_name} reload"
80       $perl_package_name   = pick($perl_package_name, 'perl-DBD-Pg')
81       $python_package_name = pick($python_package_name, 'python-psycopg2')
82
83       if $postgresql::globals::postgis_package_name {
84         $postgis_package_name = $postgresql::globals::postgis_package_name
85       } elsif $::operatingsystemrelease =~ /^5\./ {
86         $postgis_package_name = 'postgis'
87       } elsif $postgis_version and versioncmp($postgis_version, '2') < 0 {
88         $postgis_package_name = "postgis${package_version}"
89       } else {
90         $postgis_package_name = "postgis2_${package_version}"
91       }
92     }
93
94     'Archlinux': {
95       $link_pg_config     = true
96       $needs_initdb       = pick($needs_initdb, true)
97       $user               = pick($user, 'postgres')
98       $group              = pick($group, 'postgres')
99
100       # Archlinux doesn't have a client-package but has a libs package which
101       # pulls in postgresql server
102       $client_package_name    = pick($client_package_name, 'postgresql')
103       $server_package_name    = pick($server_package_name, 'postgresql-libs')
104       $java_package_name      = pick($java_package_name, 'postgresql-jdbc')
105       # Archlinux doesn't have develop packages
106       $devel_package_name     = pick($devel_package_name, 'postgresql-devel')
107       # Archlinux does have postgresql-contrib but it isn't maintained
108       $contrib_package_name   = pick($contrib_package_name,'undef')
109       # Archlinux postgresql package provides plperl
110       $plperl_package_name    = pick($plperl_package_name, 'undef')
111       $plpython_package_name  = pick($plpython_package_name, 'undef')
112       $service_name           = pick($service_name, 'postgresql')
113       $bindir                 = pick($bindir, '/usr/bin')
114       $datadir                = pick($datadir, '/var/lib/postgres/data')
115       $confdir                = pick($confdir, $datadir)
116       $psql_path              = pick($psql_path, "${bindir}/psql")
117
118       $service_status         = $service_status
119       $service_reload         = "systemctl reload ${service_name}"
120       $python_package_name    = pick($python_package_name, 'python-psycopg2')
121       # Archlinux does not have a perl::DBD::Pg package
122       $perl_package_name      = pick($perl_package_name, 'undef')
123     }
124
125     'Debian': {
126       $link_pg_config     = false
127       $user               = pick($user, 'postgres')
128       $group              = pick($group, 'postgres')
129
130       if $postgresql::globals::manage_package_repo == true {
131         $needs_initdb = pick($needs_initdb, true)
132         $service_name = pick($service_name, 'postgresql')
133       } else {
134         $needs_initdb = pick($needs_initdb, false)
135         $service_name = $::operatingsystem ? {
136           'Debian' => pick($service_name, 'postgresql'),
137           'Ubuntu' => $::lsbmajdistrelease ? {
138             /^10/ => pick($service_name, "postgresql-${version}"),
139             default => pick($service_name, 'postgresql'),
140           },
141           default => undef
142         }
143       }
144
145       $client_package_name    = pick($client_package_name, "postgresql-client-${version}")
146       $server_package_name    = pick($server_package_name, "postgresql-${version}")
147       $contrib_package_name   = pick($contrib_package_name, "postgresql-contrib-${version}")
148       if $postgis_version and versioncmp($postgis_version, '2') < 0 {
149         $postgis_package_name = pick($postgis_package_name, "postgresql-${version}-postgis")
150       } else {
151         $postgis_package_name = pick($postgis_package_name, "postgresql-${version}-postgis-${postgis_version}")
152       }
153       $devel_package_name     = pick($devel_package_name, 'libpq-dev')
154       $java_package_name = $::operatingsystem ? {
155         'Debian' => $::operatingsystemrelease ? {
156           /^6/    => pick($java_package_name, 'libpg-java'),
157           default => pick($java_package_name, 'libpostgresql-jdbc-java'),
158         },
159       default  => pick($java_package_name, 'libpostgresql-jdbc-java'),
160       }
161       $perl_package_name      = pick($perl_package_name, 'libdbd-pg-perl')
162       $plperl_package_name    = pick($plperl_package_name, "postgresql-plperl-${version}")
163       $plpython_package_name  = pick($plpython_package_name, "postgresql-plpython-${version}")
164       $python_package_name    = pick($python_package_name, 'python-psycopg2')
165
166       $bindir                 = pick($bindir, "/usr/lib/postgresql/${version}/bin")
167       $datadir                = pick($datadir, "/var/lib/postgresql/${version}/main")
168       $confdir                = pick($confdir, "/etc/postgresql/${version}/main")
169       if $::operatingsystem == 'Debian' and versioncmp($::operatingsystemrelease, '8.0') >= 0 {
170         # Jessie uses systemd
171         $service_status = pick($service_status, "/usr/sbin/service ${service_name}@*-main status")
172       } elsif $::operatingsystem == 'Ubuntu' and versioncmp($::operatingsystemrelease, '15.04') >= 0 {
173         # Ubuntu releases since vivid use systemd
174         $service_status = pick($service_status, "/usr/sbin/service ${service_name} status")
175       } else {
176         $service_status = pick($service_status, "/etc/init.d/${service_name} status | /bin/egrep -q 'Running clusters: .+|online'")
177       }
178       $service_reload         = "service ${service_name} reload"
179       $psql_path              = pick($psql_path, '/usr/bin/psql')
180     }
181
182     'Gentoo': {
183       $user                = pick($user, 'postgres')
184       $group               = pick($group, 'postgres')
185
186       $client_package_name  = pick($client_package_name, 'UNSET')
187       $server_package_name  = pick($server_package_name, 'postgresql')
188       $contrib_package_name = pick_default($contrib_package_name, undef)
189       $devel_package_name   = pick_default($devel_package_name, undef)
190       $java_package_name    = pick($java_package_name, 'jdbc-postgresql')
191       $perl_package_name    = pick($perl_package_name, 'DBD-Pg')
192       $plperl_package_name  = undef
193       $python_package_name  = pick($python_package_name, 'psycopg')
194
195       $service_name         = pick($service_name, "postgresql-${version}")
196       $bindir               = pick($bindir, "/usr/lib/postgresql-${version}/bin")
197       $datadir              = pick($datadir, "/var/lib/postgresql/${version}_data")
198       $confdir              = pick($confdir, "/etc/postgresql-${version}")
199       $service_status       = pick($service_status, "systemctl status ${service_name}")
200       $service_reload       = "systemctl reload ${service_name}"
201       $psql_path            = pick($psql_path, "${bindir}/psql")
202
203       $needs_initdb         = pick($needs_initdb, true)
204     }
205
206     'FreeBSD': {
207       case $version {
208         '96': {
209           $user                 = pick($user, 'postgres')
210           $group                = pick($group, 'postgres')
211           $datadir              = pick($datadir, "/var/db/postgres/data${version}")
212         }
213         default: {
214           $user                 = pick($user, 'pgsql')
215           $group                = pick($group, 'pgsql')
216           $datadir              = pick($datadir, '/usr/local/pgsql/data')
217         }
218       }
219
220       $link_pg_config       = true
221       $client_package_name  = pick($client_package_name, "databases/postgresql${version}-client")
222       $server_package_name  = pick($server_package_name, "databases/postgresql${version}-server")
223       $contrib_package_name = pick($contrib_package_name, "databases/postgresql${version}-contrib")
224       $devel_package_name   = pick($devel_package_name, 'databases/postgresql-libpqxx3')
225       $java_package_name    = pick($java_package_name, 'databases/postgresql-jdbc')
226       $perl_package_name    = pick($plperl_package_name, 'databases/p5-DBD-Pg')
227       $plperl_package_name  = pick($plperl_package_name, "databases/postgresql${version}-plperl")
228       $python_package_name  = pick($python_package_name, 'databases/py-psycopg2')
229
230       $service_name         = pick($service_name, 'postgresql')
231       $bindir               = pick($bindir, '/usr/local/bin')
232       $confdir              = pick($confdir, $datadir)
233       $service_status       = pick($service_status, "/usr/local/etc/rc.d/${service_name} onestatus")
234       $service_reload       = "service ${service_name} reload"
235       $psql_path            = pick($psql_path, "${bindir}/psql")
236
237       $needs_initdb         = pick($needs_initdb, true)
238     }
239
240     'OpenBSD': {
241       $user                = pick($user, '_postgresql')
242       $group               = pick($group, '_postgresql')
243
244       $client_package_name  = pick($client_package_name, 'postgresql-client')
245       $server_package_name  = pick($server_package_name, 'postgresql-server')
246       $contrib_package_name = pick($contrib_package_name, 'postgresql-contrib')
247       $devel_package_name   = pick($devel_package_name, 'postgresql-client')
248       $java_package_name    = pick($java_package_name, 'postgresql-jdbc')
249       $perl_package_name    = pick($perl_package_name, 'databases/p5-DBD-Pg')
250       $plperl_package_name  = undef
251       $python_package_name  = pick($python_package_name, 'py-psycopg2')
252
253       $service_name         = pick($service_name, 'postgresql')
254       $bindir               = pick($bindir, '/usr/local/bin')
255       $datadir              = pick($datadir, '/var/postgresql/data')
256       $confdir              = pick($confdir, $datadir)
257       $service_status       = pick($service_status, "/etc/rc.d/${service_name} check")
258       $service_reload       = "/etc/rc.d/${service_name} reload"
259       $psql_path            = pick($psql_path, "${bindir}/psql")
260
261       $needs_initdb         = pick($needs_initdb, true)
262     }
263
264     'Suse': {
265       $link_pg_config       = true
266       $user                 = pick($user, 'postgres')
267       $group                = pick($group, 'postgres')
268
269       $client_package_name  = pick($client_package_name, "postgresql${version}")
270       $server_package_name  = pick($server_package_name, "postgresql${version}-server")
271       $contrib_package_name = pick($contrib_package_name, "postgresql${version}-contrib")
272       $devel_package_name   = pick($devel_package_name, "postgresql${version}-devel")
273       $java_package_name    = pick($java_package_name, "postgresql${version}-jdbc")
274       $perl_package_name    = pick($plperl_package_name, 'perl-DBD-Pg')
275       $plperl_package_name  = pick($plperl_package_name, "postgresql${version}-plperl")
276       $python_package_name  = pick($python_package_name, 'python-psycopg2')
277
278       $service_name         = pick($service_name, 'postgresql')
279       $bindir               = pick($bindir, "/usr/lib/postgresql${version}/bin")
280       $datadir              = pick($datadir, '/var/lib/pgsql/data')
281       $confdir              = pick($confdir, $datadir)
282       if $::operatingsystem == 'SLES' and versioncmp($::operatingsystemrelease, '11.4') <= 0 {
283         $service_status     = pick($service_status, "/etc/init.d/${service_name} status")
284         $service_reload     = "/etc/init.d/${service_name} reload"
285       } else {
286         $service_status     = pick($service_status, "systemctl status ${service_name}")
287         $service_reload     = "systemctl reload ${service_name}"
288       }
289       $psql_path            = pick($psql_path, "${bindir}/psql")
290
291       $needs_initdb         = pick($needs_initdb, true)
292     }
293
294     default: {
295       $link_pg_config       = true
296       $psql_path            = pick($psql_path, "${bindir}/psql")
297
298       # Since we can't determine defaults on our own, we rely on users setting
299       # parameters with the postgresql::globals class. Here we are checking
300       # that the mandatory minimum is set for the module to operate.
301       $err_prefix = "Module ${module_name} does not provide defaults for osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}; please specify a value for ${module_name}::globals::"
302       if ($needs_initdb == undef) { fail("${err_prefix}needs_initdb") }
303       if ($service_name == undef) { fail("${err_prefix}service_name") }
304       if ($client_package_name == undef) { fail("${err_prefix}client_package_name") }
305       if ($server_package_name == undef) { fail("${err_prefix}server_package_name") }
306       if ($bindir == undef) { fail("${err_prefix}bindir") }
307       if ($datadir == undef) { fail("${err_prefix}datadir") }
308       if ($confdir == undef) { fail("${err_prefix}confdir") }
309     }
310   }
311
312   $validcon_script_path = pick($validcon_script_path, '/usr/local/bin/validate_postgresql_connection.sh')
313   $initdb_path          = pick($initdb_path, "${bindir}/initdb")
314   $pg_hba_conf_path     = pick($pg_hba_conf_path, "${confdir}/pg_hba.conf")
315   $pg_hba_conf_defaults = pick($pg_hba_conf_defaults, true)
316   $pg_ident_conf_path   = pick($pg_ident_conf_path, "${confdir}/pg_ident.conf")
317   $postgresql_conf_path = pick($postgresql_conf_path, "${confdir}/postgresql.conf")
318   $recovery_conf_path   = pick($recovery_conf_path, "${datadir}/recovery.conf")
319   $default_database     = pick($default_database, 'postgres')
320 }