diff --git a/REFERENCE.md b/REFERENCE.md index 83eb112af8..509bb46137 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -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. @@ -1770,7 +1770,7 @@ Default value: `undef` ### `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 @@ -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) ##### `user` @@ -1874,6 +1877,30 @@ Sets a user as the owner of the database. Default value: `undef` +##### `port` + +Data type: `Optional[Stdlib::Port]` + +Specifies the port where the PostgreSQL server is listening on. + +Default value: `undef` + +##### `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` + +##### `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` + ### `postgresql::server::default_privileges` Manage a database defaults privileges. Only works with PostgreSQL version 9.6 and above. diff --git a/manifests/server/db.pp b/manifests/server/db.pp index 9cd7ad4afe..01cc61b665 100644 --- a/manifests/server/db.pp +++ b/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). @@ -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, @@ -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: @@ -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 |> } diff --git a/spec/defines/server/db_spec.rb b/spec/defines/server/db_spec.rb index 0051b678c9..cfd4f80d71 100644 --- a/spec/defines/server/db_spec.rb +++ b/spec/defines/server/db_spec.rb @@ -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 @@ -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