Page MenuHomeSoftware Heritage

No OneTemporary

diff --git a/manifests/server/extension.pp b/manifests/server/extension.pp
index 86f2f9d..634b5c2 100644
--- a/manifests/server/extension.pp
+++ b/manifests/server/extension.pp
@@ -1,85 +1,85 @@
# Activate an extension on a postgresql database
define postgresql::server::extension (
$database,
$extension = $name,
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_comp = '='
+ $unless_mod = ''
$package_require = []
$package_before = Postgresql_psql["Add ${extension} extension to ${database}"]
}
'absent': {
$command = "DROP EXTENSION \"${extension}\""
- $unless_comp = '!='
+ $unless_mod = 'NOT '
$package_require = Postgresql_psql["Add ${extension} extension to ${database}"]
$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 {"Add ${extension} extension to ${database}":
psql_user => $user,
psql_group => $group,
psql_path => $psql_path,
connect_settings => $connect_settings,
db => $database,
command => $command,
- unless => "SELECT t.count FROM (SELECT count(extname) FROM pg_extension WHERE extname = '${extension}') as t WHERE t.count ${unless_comp} 1",
+ unless => "SELECT 1 WHERE ${unless_mod}EXISTS (SELECT 1 FROM pg_extension WHERE extname = '${extension}')",
}
if $package_name {
$_package_ensure = $package_ensure ? {
undef => $ensure,
default => $package_ensure,
}
ensure_packages($package_name, {
ensure => $_package_ensure,
tag => '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,
}
}
}
diff --git a/spec/unit/defines/server/extension_spec.rb b/spec/unit/defines/server/extension_spec.rb
index 6ce5de6..6652496 100644
--- a/spec/unit/defines/server/extension_spec.rb
+++ b/spec/unit/defines/server/extension_spec.rb
@@ -1,160 +1,156 @@
require 'spec_helper'
describe 'postgresql::server::extension', :type => :define do
let :pre_condition do
"class { 'postgresql::server': }
postgresql::server::database { 'template_postgis':
template => 'template1',
}"
end
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:operatingsystemrelease => '6.0',
:kernel => 'Linux',
:concat_basedir => tmpfilename('postgis'),
:id => 'root',
:path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
}
end
let (:title) { 'postgis' }
let (:params) { {
:database => 'template_postgis',
} }
context "with mandatory arguments only" do
it {
is_expected.to contain_postgresql_psql('Add postgis extension to template_postgis').with({
:db => 'template_postgis',
:command => 'CREATE EXTENSION "postgis"',
- :unless => "SELECT t.count FROM (SELECT count(extname) FROM pg_extension WHERE extname = 'postgis') as t WHERE t.count = 1",
}).that_requires('Postgresql::Server::Database[template_postgis]')
}
end
context "when setting package name" do
let (:params) { super().merge({
:package_name => 'postgis',
}) }
it {
is_expected.to contain_package('postgis').with({
:ensure => 'present',
:name => 'postgis',
}).that_comes_before('Postgresql_psql[Add postgis extension to template_postgis]')
}
end
context "when ensuring absence" do
let (:params) { super().merge({
:ensure => 'absent',
:package_name => 'postgis',
}) }
it {
is_expected.to contain_postgresql_psql('Add postgis extension to template_postgis').with({
:db => 'template_postgis',
:command => 'DROP EXTENSION "postgis"',
- :unless => "SELECT t.count FROM (SELECT count(extname) FROM pg_extension WHERE extname = 'postgis') as t WHERE t.count != 1",
}).that_requires('Postgresql::Server::Database[template_postgis]')
}
it {
is_expected.to contain_package('postgis').with({
:ensure => 'absent',
:name => 'postgis',
})
}
context "when keeping package installed" do
let (:params) { super().merge({
:package_ensure => 'present',
}) }
it {
is_expected.to contain_postgresql_psql('Add postgis extension to template_postgis').with({
:db => 'template_postgis',
:command => 'DROP EXTENSION "postgis"',
- :unless => "SELECT t.count FROM (SELECT count(extname) FROM pg_extension WHERE extname = 'postgis') as t WHERE t.count != 1",
}).that_requires('Postgresql::Server::Database[template_postgis]')
}
it {
is_expected.to contain_package('postgis').with({
:ensure => 'present',
:name => 'postgis',
}).that_requires('Postgresql_psql[Add postgis extension to template_postgis]')
}
end
end
context "when extension version is specified" do
let (:params) { super().merge({
:ensure => 'absent',
:package_name => 'postgis',
:version => '99.99.99',
}) }
it {
is_expected.to contain_postgresql_psql('template_postgis: ALTER EXTENSION "postgis" UPDATE TO \'99.99.99\'').with({
:db => 'template_postgis',
:unless => "SELECT 1 FROM pg_extension WHERE extname='postgis' AND extversion='99.99.99'",
}).that_requires('Postgresql::Server::Database[template_postgis]')
}
end
context "when extension version is latest" do
let (:params) { super().merge({
:ensure => 'absent',
:package_name => 'postgis',
:version => 'latest',
}) }
it {
is_expected.to contain_postgresql_psql('template_postgis: ALTER EXTENSION "postgis" UPDATE').with({
:db => 'template_postgis',
:unless => "SELECT 1 FROM pg_available_extensions WHERE name = 'postgis' AND default_version = installed_version",
}).that_requires('Postgresql::Server::Database[template_postgis]')
}
end
end
describe 'postgresql::server::extension', :type => :define do
let :pre_condition do
"class { 'postgresql::server': }
postgresql::server::database { 'template_postgis2':
template => 'template1',
}"
end
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:operatingsystemrelease => '6.0',
:kernel => 'Linux',
:concat_basedir => tmpfilename('postgis'),
:id => 'root',
:path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
}
end
let (:title) { 'postgis_db2' }
let (:params) { {
:database => 'template_postgis2',
:extension => 'postgis',
} }
context "with mandatory arguments only" do
it {
is_expected.to contain_postgresql_psql('Add postgis extension to template_postgis2').with({
:db => 'template_postgis2',
:command => 'CREATE EXTENSION "postgis"',
- :unless => "SELECT t.count FROM (SELECT count(extname) FROM pg_extension WHERE extname = 'postgis') as t WHERE t.count = 1",
}).that_requires('Postgresql::Server::Database[template_postgis2]')
}
end
end

File Metadata

Mime Type
text/x-diff
Expires
Mon, Aug 18, 8:34 PM (21 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3215238

Event Timeline