17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'manifests/server/extension.pp', line 17
define postgresql::server::extension (
$database,
$extension = $name,
Optional[String[1]] $schema = undef,
Optional[String[1]] $version = undef,
String[1] $ensure = 'present',
$package_name = undef,
$package_ensure = undef,
$connect_settings = $postgresql::server::default_connect_settings,
) {
$user = $postgresql::server::user
$group = $postgresql::server::group
$psql_path = $postgresql::server::psql_path
case $ensure {
'present': {
$command = "CREATE EXTENSION \"${extension}\""
$unless_mod = ''
$package_require = []
$package_before = Postgresql_psql["${database}: ${command}"]
}
'absent': {
$command = "DROP EXTENSION \"${extension}\""
$unless_mod = 'NOT '
$package_require = Postgresql_psql["${database}: ${command}"]
$package_before = []
}
default: {
fail("Unknown value for ensure '${ensure}'.")
}
}
if( $database != 'postgres' ) {
# The database postgres cannot managed by this module, so it is exempt from this dependency
Postgresql_psql {
require => Postgresql::Server::Database[$database],
}
}
postgresql_psql { "${database}: ${command}":
psql_user => $user,
psql_group => $group,
psql_path => $psql_path,
connect_settings => $connect_settings,
db => $database,
command => $command,
unless => "SELECT 1 WHERE ${unless_mod}EXISTS (SELECT 1 FROM pg_extension WHERE extname = '${extension}')",
}
if $ensure == 'present' and $schema {
$set_schema_command = "ALTER EXTENSION \"${extension}\" SET SCHEMA \"${schema}\""
postgresql_psql { "${database}: ${set_schema_command}":
command => $set_schema_command,
unless => @("END")
SELECT 1
WHERE EXISTS (
SELECT 1
FROM pg_extension e
JOIN pg_namespace n ON e.extnamespace = n.oid
WHERE e.extname = '${extension}' AND
n.nspname = '${schema}'
)
|-END
,
psql_user => $user,
psql_group => $group,
psql_path => $psql_path,
connect_settings => $connect_settings,
db => $database,
require => Postgresql_psql["${database}: ${command}"],
}
Postgresql::Server::Schema <| db == $database and schema == $schema |> -> Postgresql_psql["${database}: ${set_schema_command}"]
}
if $package_name {
$_package_ensure = $package_ensure ? {
undef => $ensure,
default => $package_ensure,
}
ensure_packages($package_name, {
ensure => $_package_ensure,
tag => 'puppetlabs-postgresql',
require => $package_require,
before => $package_before,
})
}
if $version {
if $version == 'latest' {
$alter_extension_sql = "ALTER EXTENSION \"${extension}\" UPDATE"
$update_unless = "SELECT 1 FROM pg_available_extensions WHERE name = '${extension}' AND default_version = installed_version"
} else {
$alter_extension_sql = "ALTER EXTENSION \"${extension}\" UPDATE TO '${version}'"
$update_unless = "SELECT 1 FROM pg_extension WHERE extname='${extension}' AND extversion='${version}'"
}
postgresql_psql { "${database}: ${alter_extension_sql}":
db => $database,
psql_user => $user,
psql_group => $group,
psql_path => $psql_path,
connect_settings => $connect_settings,
command => $alter_extension_sql,
unless => $update_unless,
}
}
}
|