Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

server::db: Make port/user/group configureable #1494

Merged
merged 2 commits into from Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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