2013-08-27 22:43:47 +02:00
|
|
|
# Define for creating a database role. See README.md for more information
|
|
|
|
define postgresql::server::role(
|
2013-08-01 04:18:46 +02:00
|
|
|
$password_hash = false,
|
|
|
|
$createdb = false,
|
|
|
|
$createrole = false,
|
2013-08-27 22:43:47 +02:00
|
|
|
$db = $postgresql::server::user,
|
|
|
|
$login = true,
|
2013-08-01 04:18:46 +02:00
|
|
|
$superuser = false,
|
|
|
|
$replication = false,
|
|
|
|
$connection_limit = '-1',
|
|
|
|
$username = $title
|
2012-06-09 07:30:27 +02:00
|
|
|
) {
|
2013-08-27 22:43:47 +02:00
|
|
|
$psql_user = $postgresql::server::user
|
|
|
|
$psql_group = $postgresql::server::group
|
|
|
|
$psql_path = $postgresql::server::psql_path
|
|
|
|
$version = $postgresql::server::version
|
2012-04-20 00:37:18 +02:00
|
|
|
|
2013-08-27 22:43:47 +02:00
|
|
|
$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' }
|
|
|
|
$replication_sql = $replication ? { true => 'REPLICATION', default => '' }
|
2013-03-16 18:32:27 +01:00
|
|
|
if ($password_hash != false) {
|
|
|
|
$password_sql = "ENCRYPTED PASSWORD '${password_hash}'"
|
|
|
|
} else {
|
2013-08-24 21:07:24 +02:00
|
|
|
$password_sql = ''
|
2013-03-16 18:32:27 +01:00
|
|
|
}
|
2012-04-20 00:37:18 +02:00
|
|
|
|
2013-06-28 15:19:50 +02:00
|
|
|
Postgresql_psql {
|
|
|
|
db => $db,
|
2013-08-27 22:43:47 +02:00
|
|
|
psql_user => $psql_user,
|
|
|
|
psql_group => $psql_group,
|
|
|
|
psql_path => $psql_path,
|
|
|
|
require => [ Postgresql_psql["CREATE ROLE \"${username}\" ${password_sql} ${login_sql} ${createrole_sql} ${createdb_sql} ${superuser_sql} ${replication_sql} CONNECTION LIMIT ${connection_limit}"], Class['postgresql::server'] ],
|
2013-06-28 15:19:50 +02:00
|
|
|
}
|
|
|
|
|
2013-03-16 18:32:27 +01:00
|
|
|
postgresql_psql {"CREATE ROLE \"${username}\" ${password_sql} ${login_sql} ${createrole_sql} ${createdb_sql} ${superuser_sql} ${replication_sql} CONNECTION LIMIT ${connection_limit}":
|
2013-06-28 15:19:50 +02:00
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}'",
|
2013-08-27 22:43:47 +02:00
|
|
|
require => Class['Postgresql::Server'],
|
2013-06-28 15:19:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" ${superuser_sql}":
|
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}' and rolsuper=${superuser}",
|
|
|
|
}
|
|
|
|
|
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" ${createdb_sql}":
|
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}' and rolcreatedb=${createdb}",
|
|
|
|
}
|
|
|
|
|
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" ${createrole_sql}":
|
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}' and rolcreaterole=${createrole}",
|
|
|
|
}
|
|
|
|
|
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" ${login_sql}":
|
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}' and rolcanlogin=${login}",
|
|
|
|
}
|
|
|
|
|
2013-08-27 22:43:47 +02:00
|
|
|
if(versioncmp($version, '9.1') >= 0) {
|
2013-06-28 15:19:50 +02:00
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" ${replication_sql}":
|
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}' and rolreplication=${replication}",
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" CONNECTION LIMIT ${connection_limit}":
|
|
|
|
unless => "SELECT rolname FROM pg_roles WHERE rolname='${username}' and rolconnlimit=${connection_limit}",
|
|
|
|
}
|
|
|
|
|
|
|
|
if $password_hash {
|
2013-08-01 04:18:46 +02:00
|
|
|
if($password_hash =~ /^md5.+/) {
|
|
|
|
$pwd_hash_sql = $password_hash
|
|
|
|
} else {
|
|
|
|
$pwd_md5 = md5("${password_hash}${username}")
|
|
|
|
$pwd_hash_sql = "md5${pwd_md5}"
|
|
|
|
}
|
2013-06-28 15:19:50 +02:00
|
|
|
postgresql_psql {"ALTER ROLE \"${username}\" ${password_sql}":
|
2013-08-01 04:18:46 +02:00
|
|
|
unless => "SELECT usename FROM pg_shadow WHERE usename='${username}' and passwd='${pwd_hash_sql}'",
|
2013-06-28 15:19:50 +02:00
|
|
|
}
|
2012-04-20 00:37:18 +02:00
|
|
|
}
|
|
|
|
}
|