Skip to content

Commit

Permalink
server::db: Make port/user/group configureable (#1494)
Browse files Browse the repository at this point in the history
Co-authored-by: Simon Hönscheid <simon@hoenscheid-itconsulting.com>
  • Loading branch information
bastelfreak and SimonHoenscheid committed Aug 31, 2023
1 parent 6cc35d0 commit 1dadd63
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 16 deletions.
31 changes: 29 additions & 2 deletions REFERENCE.md
Expand Up @@ -44,7 +44,7 @@
* [`postgresql::server::config_entry`](#postgresql--server--config_entry): Manage a postgresql.conf entry.
* [`postgresql::server::database`](#postgresql--server--database): Define for creating a database.
* [`postgresql::server::database_grant`](#postgresql--server--database_grant): Manage a database grant.
* [`postgresql::server::db`](#postgresql--server--db): Define for conveniently creating a role, database and assigning the correctpermissions.
* [`postgresql::server::db`](#postgresql--server--db): Define for conveniently creating a role, database and assigning the correct permissions.
* [`postgresql::server::default_privileges`](#postgresql--server--default_privileges): Manage a database defaults privileges. Only works with PostgreSQL version 9.6 and above.
* [`postgresql::server::extension`](#postgresql--server--extension): Activate an extension on a postgresql database.
* [`postgresql::server::grant`](#postgresql--server--grant): Define for granting permissions to roles.
Expand Down Expand Up @@ -1770,7 +1770,7 @@ Default value: `undef`

### <a name="postgresql--server--db"></a>`postgresql::server::db`

Define for conveniently creating a role, database and assigning the correctpermissions.
Define for conveniently creating a role, database and assigning the correct permissions.

#### Parameters

Expand All @@ -1787,6 +1787,9 @@ The following parameters are available in the `postgresql::server::db` defined t
* [`template`](#-postgresql--server--db--template)
* [`istemplate`](#-postgresql--server--db--istemplate)
* [`owner`](#-postgresql--server--db--owner)
* [`port`](#-postgresql--server--db--port)
* [`psql_user`](#-postgresql--server--db--psql_user)
* [`psql_group`](#-postgresql--server--db--psql_group)

##### <a name="-postgresql--server--db--user"></a>`user`

Expand Down Expand Up @@ -1874,6 +1877,30 @@ Sets a user as the owner of the database.

Default value: `undef`

##### <a name="-postgresql--server--db--port"></a>`port`

Data type: `Optional[Stdlib::Port]`

Specifies the port where the PostgreSQL server is listening on.

Default value: `undef`

##### <a name="-postgresql--server--db--psql_user"></a>`psql_user`

Data type: `String[1]`

Overrides the default PostgreSQL super user and owner of PostgreSQL related files in the file system.

Default value: `$postgresql::server::user`

##### <a name="-postgresql--server--db--psql_group"></a>`psql_group`

Data type: `String[1]`

Overrides the default PostgreSQL user group to be used for related files in the file system.

Default value: `$postgresql::server::group`

### <a name="postgresql--server--default_privileges"></a>`postgresql::server::default_privileges`

Manage a database defaults privileges. Only works with PostgreSQL version 9.6 and above.
Expand Down
25 changes: 20 additions & 5 deletions manifests/server/db.pp
@@ -1,4 +1,4 @@
# @summary Define for conveniently creating a role, database and assigning the correctpermissions.
# @summary Define for conveniently creating a role, database and assigning the correct permissions.
#
# @param user User to assign access to the database upon creation (will be created if not defined elsewhere). Mandatory.
# @param password Sets the password for the created user (if a user is created).
Expand All @@ -11,6 +11,9 @@
# @param template Specifies the name of the template database from which to build this database. Defaults value: template0.
# @param istemplate Specifies that the database is a template, if set to true.
# @param owner Sets a user as the owner of the database.
# @param port Specifies the port where the PostgreSQL server is listening on.
# @param psql_user Overrides the default PostgreSQL super user and owner of PostgreSQL related files in the file system.
# @param psql_group Overrides the default PostgreSQL user group to be used for related files in the file system.
define postgresql::server::db (
String[1] $user,
Optional[Variant[String, Sensitive[String]]] $password = undef,
Expand All @@ -22,7 +25,10 @@
Optional[String[1]] $tablespace = undef,
String[1] $template = 'template0',
Boolean $istemplate = false,
Optional[String[1]] $owner = undef
Optional[String[1]] $owner = undef,
Optional[Stdlib::Port] $port = undef,
String[1] $psql_user = $postgresql::server::user,
String[1] $psql_group = $postgresql::server::group,
) {
if ! defined(Postgresql::Server::Database[$dbname]) {
postgresql::server::database { $dbname:
Expand All @@ -33,21 +39,30 @@
locale => $locale,
istemplate => $istemplate,
owner => $owner,
port => $port,
user => $psql_user,
group => $psql_group,
}
}

if ! defined(Postgresql::Server::Role[$user]) {
postgresql::server::role { $user:
password_hash => $password,
port => $port,
psql_user => $psql_user,
psql_group => $psql_group,
before => Postgresql::Server::Database[$dbname],
}
}

if ! defined(Postgresql::Server::Database_grant["GRANT ${user} - ${grant} - ${dbname}"]) {
postgresql::server::database_grant { "GRANT ${user} - ${grant} - ${dbname}":
privilege => $grant,
db => $dbname,
role => $user,
privilege => $grant,
db => $dbname,
role => $user,
port => $port,
psql_user => $psql_user,
psql_group => $psql_group,
} -> Postgresql_conn_validator<| db_name == $dbname |>
}

Expand Down
31 changes: 22 additions & 9 deletions spec/defines/server/db_spec.rb
Expand Up @@ -6,7 +6,24 @@
include_examples 'Debian 11'

let :title do
'test'
'testdb'
end
let :pre_condition do
"class {'postgresql::server':}"
end

context 'with minimal params' do
let :params do
{
user: 'foo'
}
end

it { is_expected.to compile.with_all_deps }
it { is_expected.to contain_postgresql__server__db('testdb').without_port.with_user('foo').with_psql_user('postgres').with_psql_group('postgres') }
it { is_expected.to contain_postgresql__server__database('testdb').without_owner.with_user('postgres').with_group('postgres') }
it { is_expected.to contain_postgresql__server__role('foo').that_comes_before('Postgresql::Server::Database[testdb]').without_port.with_psql_user('postgres').with_psql_group('postgres') }
it { is_expected.to contain_postgresql__server__database_grant('GRANT foo - ALL - testdb').without_port.with_psql_user('postgres').with_psql_group('postgres') }
end

context 'without dbname param' do
Expand All @@ -18,14 +35,10 @@
}
end

let :pre_condition do
"class {'postgresql::server':}"
end

it { is_expected.to contain_postgresql__server__db('test') }
it { is_expected.to contain_postgresql__server__database('test').with_owner('tester') }
it { is_expected.to contain_postgresql__server__role('test').that_comes_before('Postgresql::Server::Database[test]') }
it { is_expected.to contain_postgresql__server__database_grant('GRANT test - ALL - test') }
it { is_expected.to contain_postgresql__server__db('testdb') }
it { is_expected.to contain_postgresql__server__database('testdb').with_owner('tester') }
it { is_expected.to contain_postgresql__server__role('test').that_comes_before('Postgresql::Server::Database[testdb]') }
it { is_expected.to contain_postgresql__server__database_grant('GRANT test - ALL - testdb') }
end

context 'dbname' do
Expand Down

0 comments on commit 1dadd63

Please sign in to comment.