6367e359ea
When the psql command runs from a directory it does not have permission to access, it outputs an error. This error trips up the unless SQL command, causing the other SQL commands to run even if not needed. Rather than ignore stderr (which might hide something else), or use an arbitrary directory like /tmp, this code sets the cwd to the data directory, which will exist and be owned by the postgres user. If someone uses the postgres_psql type and customises the psql_user parameter, they should also set an appropriate cwd.
42 lines
1.7 KiB
Puppet
42 lines
1.7 KiB
Puppet
# puppet-postgresql
|
|
# For all details and documentation:
|
|
# http://github.com/inkling/puppet-postgresql
|
|
#
|
|
# Copyright 2012- Inkling Systems, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
define postgresql::role(
|
|
$password_hash,
|
|
$createdb = false,
|
|
$createrole = false,
|
|
$db = 'postgres',
|
|
$login = false,
|
|
$superuser = false,
|
|
$username = $title
|
|
) {
|
|
include postgresql::params
|
|
|
|
$login_sql = $login ? { true => 'LOGIN' , default => 'NOLOGIN' }
|
|
$createrole_sql = $createrole ? { true => 'CREATEROLE', default => 'NOCREATEROLE' }
|
|
$createdb_sql = $createdb ? { true => 'CREATEDB' , default => 'NOCREATEDB' }
|
|
$superuser_sql = $superuser ? { true => 'SUPERUSER' , default => 'NOSUPERUSER' }
|
|
|
|
# TODO: FIXME: Will not correct the superuser / createdb / createrole / login status of a role that already exists
|
|
postgresql_psql {"CREATE ROLE ${username} ENCRYPTED PASSWORD '${password_hash}' $login_sql $createrole_sql $createdb_sql $superuser_sql":
|
|
db => $db,
|
|
psql_user => 'postgres',
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='$username'",
|
|
cwd => $postgresql::params::datadir,
|
|
}
|
|
}
|