Skip to content

Commit 6cc35d0

Browse files
Merge pull request #1493 from bastelfreak/database_grant
server::database_grant: Always set default user/group and expose port as parameter
2 parents 93386b4 + 56fa971 commit 6cc35d0

File tree

3 files changed

+280
-13
lines changed

3 files changed

+280
-13
lines changed

REFERENCE.md

+244-2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
* [`postgresql::server::db`](#postgresql--server--db): Define for conveniently creating a role, database and assigning the correctpermissions.
4848
* [`postgresql::server::default_privileges`](#postgresql--server--default_privileges): Manage a database defaults privileges. Only works with PostgreSQL version 9.6 and above.
4949
* [`postgresql::server::extension`](#postgresql--server--extension): Activate an extension on a postgresql database.
50+
* [`postgresql::server::grant`](#postgresql--server--grant): Define for granting permissions to roles.
5051
* [`postgresql::server::grant_role`](#postgresql--server--grant_role): Define for granting membership to a role.
5152
* [`postgresql::server::instance::config`](#postgresql--server--instance--config): Manages the config for a postgresql::server instance
5253
* [`postgresql::server::instance::initdb`](#postgresql--server--instance--initdb): Manages initdb feature for a postgresql::server instance
@@ -1565,6 +1566,11 @@ The following parameters are available in the `postgresql::server::database` def
15651566
* [`locale`](#-postgresql--server--database--locale)
15661567
* [`istemplate`](#-postgresql--server--database--istemplate)
15671568
* [`connect_settings`](#-postgresql--server--database--connect_settings)
1569+
* [`psql_path`](#-postgresql--server--database--psql_path)
1570+
* [`default_db`](#-postgresql--server--database--default_db)
1571+
* [`user`](#-postgresql--server--database--user)
1572+
* [`group`](#-postgresql--server--database--group)
1573+
* [`port`](#-postgresql--server--database--port)
15681574

15691575
##### <a name="-postgresql--server--database--comment"></a>`comment`
15701576

@@ -1638,6 +1644,46 @@ Specifies a hash of environment variables used when connecting to a remote serve
16381644

16391645
Default value: `$postgresql::server::default_connect_settings`
16401646

1647+
##### <a name="-postgresql--server--database--psql_path"></a>`psql_path`
1648+
1649+
Data type: `Stdlib::Absolutepath`
1650+
1651+
Specifies the path to the psql command.
1652+
1653+
Default value: `$postgresql::server::psql_path`
1654+
1655+
##### <a name="-postgresql--server--database--default_db"></a>`default_db`
1656+
1657+
Data type: `String[1]`
1658+
1659+
Specifies the name of the default database to connect with. On most systems this is 'postgres'.
1660+
1661+
Default value: `$postgresql::server::default_database`
1662+
1663+
##### <a name="-postgresql--server--database--user"></a>`user`
1664+
1665+
Data type: `String[1]`
1666+
1667+
Overrides the default PostgreSQL super user and owner of PostgreSQL related files in the file system.
1668+
1669+
Default value: `$postgresql::server::user`
1670+
1671+
##### <a name="-postgresql--server--database--group"></a>`group`
1672+
1673+
Data type: `String[1]`
1674+
1675+
Overrides the default postgres user group to be used for related files in the file system.
1676+
1677+
Default value: `$postgresql::server::group`
1678+
1679+
##### <a name="-postgresql--server--database--port"></a>`port`
1680+
1681+
Data type: `Stdlib::Port`
1682+
1683+
Specifies the port for the PostgreSQL server to listen on.
1684+
1685+
Default value: `$postgresql::server::port`
1686+
16411687
### <a name="postgresql--server--database_grant"></a>`postgresql::server::database_grant`
16421688

16431689
Manage a database grant.
@@ -1652,7 +1698,9 @@ The following parameters are available in the `postgresql::server::database_gran
16521698
* [`ensure`](#-postgresql--server--database_grant--ensure)
16531699
* [`psql_db`](#-postgresql--server--database_grant--psql_db)
16541700
* [`psql_user`](#-postgresql--server--database_grant--psql_user)
1701+
* [`psql_group`](#-postgresql--server--database_grant--psql_group)
16551702
* [`connect_settings`](#-postgresql--server--database_grant--connect_settings)
1703+
* [`port`](#-postgresql--server--database_grant--port)
16561704

16571705
##### <a name="-postgresql--server--database_grant--privilege"></a>`privilege`
16581706

@@ -1690,11 +1738,19 @@ Default value: `undef`
16901738

16911739
##### <a name="-postgresql--server--database_grant--psql_user"></a>`psql_user`
16921740

1693-
Data type: `Optional[String[1]]`
1741+
Data type: `String[1]`
16941742

16951743
Specifies the OS user for running psql. Default value: The default user for the module, usually 'postgres'.
16961744

1697-
Default value: `undef`
1745+
Default value: `$postgresql::server::user`
1746+
1747+
##### <a name="-postgresql--server--database_grant--psql_group"></a>`psql_group`
1748+
1749+
Data type: `String[1]`
1750+
1751+
Overrides the default postgres user group to be used for related files in the file system.
1752+
1753+
Default value: `$postgresql::server::group`
16981754

16991755
##### <a name="-postgresql--server--database_grant--connect_settings"></a>`connect_settings`
17001756

@@ -1704,6 +1760,14 @@ Specifies a hash of environment variables used when connecting to a remote serve
17041760

17051761
Default value: `undef`
17061762

1763+
##### <a name="-postgresql--server--database_grant--port"></a>`port`
1764+
1765+
Data type: `Optional[Stdlib::Port]`
1766+
1767+
Port to use when connecting.
1768+
1769+
Default value: `undef`
1770+
17071771
### <a name="postgresql--server--db"></a>`postgresql::server::db`
17081772

17091773
Define for conveniently creating a role, database and assigning the correctpermissions.
@@ -1957,6 +2021,9 @@ The following parameters are available in the `postgresql::server::extension` de
19572021
* [`port`](#-postgresql--server--extension--port)
19582022
* [`connect_settings`](#-postgresql--server--extension--connect_settings)
19592023
* [`database_resource_name`](#-postgresql--server--extension--database_resource_name)
2024+
* [`psql_path`](#-postgresql--server--extension--psql_path)
2025+
* [`user`](#-postgresql--server--extension--user)
2026+
* [`group`](#-postgresql--server--extension--group)
19602027

19612028
##### <a name="-postgresql--server--extension--database"></a>`database`
19622029

@@ -2044,6 +2111,181 @@ Specifies the resource name of the DB being managed. Defaults to the parameter $
20442111

20452112
Default value: `$database`
20462113

2114+
##### <a name="-postgresql--server--extension--psql_path"></a>`psql_path`
2115+
2116+
Data type: `Stdlib::Absolutepath`
2117+
2118+
Specifies the path to the psql command.
2119+
2120+
Default value: `postgresql::default('psql_path')`
2121+
2122+
##### <a name="-postgresql--server--extension--user"></a>`user`
2123+
2124+
Data type: `String[1]`
2125+
2126+
Overrides the default PostgreSQL super user and owner of PostgreSQL related files in the file system.
2127+
2128+
Default value: `postgresql::default('user')`
2129+
2130+
##### <a name="-postgresql--server--extension--group"></a>`group`
2131+
2132+
Data type: `String[1]`
2133+
2134+
Overrides the default postgres user group to be used for related files in the file system.
2135+
2136+
Default value: `postgresql::default('group')`
2137+
2138+
### <a name="postgresql--server--grant"></a>`postgresql::server::grant`
2139+
2140+
Define for granting permissions to roles.
2141+
2142+
#### Parameters
2143+
2144+
The following parameters are available in the `postgresql::server::grant` defined type:
2145+
2146+
* [`role`](#-postgresql--server--grant--role)
2147+
* [`db`](#-postgresql--server--grant--db)
2148+
* [`privilege`](#-postgresql--server--grant--privilege)
2149+
* [`object_type`](#-postgresql--server--grant--object_type)
2150+
* [`object_name`](#-postgresql--server--grant--object_name)
2151+
* [`object_arguments`](#-postgresql--server--grant--object_arguments)
2152+
* [`psql_db`](#-postgresql--server--grant--psql_db)
2153+
* [`psql_user`](#-postgresql--server--grant--psql_user)
2154+
* [`port`](#-postgresql--server--grant--port)
2155+
* [`onlyif_exists`](#-postgresql--server--grant--onlyif_exists)
2156+
* [`connect_settings`](#-postgresql--server--grant--connect_settings)
2157+
* [`ensure`](#-postgresql--server--grant--ensure)
2158+
* [`group`](#-postgresql--server--grant--group)
2159+
* [`psql_path`](#-postgresql--server--grant--psql_path)
2160+
2161+
##### <a name="-postgresql--server--grant--role"></a>`role`
2162+
2163+
Data type: `String`
2164+
2165+
Specifies the role or user whom you are granting access to.
2166+
2167+
##### <a name="-postgresql--server--grant--db"></a>`db`
2168+
2169+
Data type: `String`
2170+
2171+
Specifies the database to which you are granting access.
2172+
2173+
##### <a name="-postgresql--server--grant--privilege"></a>`privilege`
2174+
2175+
Data type: `String`
2176+
2177+
Specifies the privilege to grant. Valid options: 'ALL', 'ALL PRIVILEGES' or 'object_type' dependent string.
2178+
2179+
Default value: `''`
2180+
2181+
##### <a name="-postgresql--server--grant--object_type"></a>`object_type`
2182+
2183+
Data type:
2184+
2185+
```puppet
2186+
Pattern[#/(?i:^COLUMN$)/,
2187+
/(?i:^ALL SEQUENCES IN SCHEMA$)/,
2188+
/(?i:^ALL TABLES IN SCHEMA$)/,
2189+
/(?i:^DATABASE$)/,
2190+
#/(?i:^FOREIGN DATA WRAPPER$)/,
2191+
#/(?i:^FOREIGN SERVER$)/,
2192+
/(?i:^FUNCTION$)/,
2193+
/(?i:^LANGUAGE$)/,
2194+
#/(?i:^PROCEDURAL LANGUAGE$)/,
2195+
/(?i:^TABLE$)/,
2196+
#/(?i:^TABLESPACE$)/,
2197+
/(?i:^SCHEMA$)/,
2198+
/(?i:^SEQUENCE$)/
2199+
#/(?i:^VIEW$)/
2200+
]
2201+
```
2202+
2203+
Specifies the type of object to which you are granting privileges.
2204+
Valid options: 'DATABASE', 'SCHEMA', 'SEQUENCE', 'ALL SEQUENCES IN SCHEMA', 'TABLE' or 'ALL TABLES IN SCHEMA'.
2205+
2206+
Default value: `'database'`
2207+
2208+
##### <a name="-postgresql--server--grant--object_name"></a>`object_name`
2209+
2210+
Data type: `Optional[Variant[Array[String,2,2],String[1]]]`
2211+
2212+
Specifies name of object_type to which to grant access, can be either a string or a two element array.
2213+
String: 'object_name' Array: ['schema_name', 'object_name']
2214+
2215+
Default value: `undef`
2216+
2217+
##### <a name="-postgresql--server--grant--object_arguments"></a>`object_arguments`
2218+
2219+
Data type: `Array[String[1],0]`
2220+
2221+
Specifies any arguments to be passed alongisde the access grant.
2222+
2223+
Default value: `[]`
2224+
2225+
##### <a name="-postgresql--server--grant--psql_db"></a>`psql_db`
2226+
2227+
Data type: `String`
2228+
2229+
Specifies the database to execute the grant against. This should not ordinarily be changed from the default
2230+
2231+
Default value: `$postgresql::server::default_database`
2232+
2233+
##### <a name="-postgresql--server--grant--psql_user"></a>`psql_user`
2234+
2235+
Data type: `String`
2236+
2237+
Sets the OS user to run psql.
2238+
2239+
Default value: `$postgresql::server::user`
2240+
2241+
##### <a name="-postgresql--server--grant--port"></a>`port`
2242+
2243+
Data type: `Optional[Stdlib::Port]`
2244+
2245+
Port to use when connecting.
2246+
2247+
Default value: `undef`
2248+
2249+
##### <a name="-postgresql--server--grant--onlyif_exists"></a>`onlyif_exists`
2250+
2251+
Data type: `Boolean`
2252+
2253+
Create grant only if doesn't exist
2254+
2255+
Default value: `false`
2256+
2257+
##### <a name="-postgresql--server--grant--connect_settings"></a>`connect_settings`
2258+
2259+
Data type: `Hash`
2260+
2261+
Specifies a hash of environment variables used when connecting to a remote server.
2262+
2263+
Default value: `$postgresql::server::default_connect_settings`
2264+
2265+
##### <a name="-postgresql--server--grant--ensure"></a>`ensure`
2266+
2267+
Data type: `Enum['present', 'absent']`
2268+
2269+
Specifies whether to grant or revoke the privilege. Default is to grant the privilege. Valid values: 'present', 'absent'.
2270+
2271+
Default value: `'present'`
2272+
2273+
##### <a name="-postgresql--server--grant--group"></a>`group`
2274+
2275+
Data type: `String`
2276+
2277+
Sets the OS group to run psql
2278+
2279+
Default value: `$postgresql::server::group`
2280+
2281+
##### <a name="-postgresql--server--grant--psql_path"></a>`psql_path`
2282+
2283+
Data type: `Stdlib::Absolutepath`
2284+
2285+
Sets the path to psql command
2286+
2287+
Default value: `$postgresql::server::psql_path`
2288+
20472289
### <a name="postgresql--server--grant_role"></a>`postgresql::server::grant_role`
20482290

20492291
Define for granting membership to a role.

manifests/server/database_grant.pp

+7-1
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@
66
# @param ensure Specifies whether to grant or revoke the privilege. Revoke or 'absent' works only in PostgreSQL version 9.1.24 or later.
77
# @param psql_db Defines the database to execute the grant against. This should not ordinarily be changed from the default
88
# @param psql_user Specifies the OS user for running psql. Default value: The default user for the module, usually 'postgres'.
9+
# @param psql_group Overrides the default postgres user group to be used for related files in the file system.
910
# @param connect_settings Specifies a hash of environment variables used when connecting to a remote server.
11+
# @param port Port to use when connecting.
1012
define postgresql::server::database_grant (
1113
Enum['ALL', 'CREATE', 'CONNECT', 'TEMPORARY', 'TEMP', 'all', 'create', 'connect', 'temporary', 'temp'] $privilege,
1214
String[1] $db,
1315
String[1] $role,
1416
Optional[Enum['present', 'absent']] $ensure = undef,
1517
Optional[String[1]] $psql_db = undef,
16-
Optional[String[1]] $psql_user = undef,
18+
String[1] $psql_user = $postgresql::server::user,
1719
Optional[Hash] $connect_settings = undef,
20+
String[1] $psql_group = $postgresql::server::group,
21+
Optional[Stdlib::Port] $port = undef,
1822
) {
1923
postgresql::server::grant { "database:${name}":
2024
ensure => $ensure,
@@ -25,6 +29,8 @@
2529
object_name => $db,
2630
psql_db => $psql_db,
2731
psql_user => $psql_user,
32+
group => $psql_group,
33+
port => $port,
2834
connect_settings => $connect_settings,
2935
}
3036
}

spec/defines/server/database_grant_spec.rb

+29-10
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,37 @@
99
'test'
1010
end
1111

12-
let :params do
13-
{
14-
privilege: 'ALL',
15-
db: 'test',
16-
role: 'test'
17-
}
18-
end
19-
2012
let :pre_condition do
2113
"class {'postgresql::server':}"
2214
end
2315

24-
it { is_expected.to contain_postgresql__server__database_grant('test') }
25-
it { is_expected.to contain_postgresql__server__grant('database:test') }
16+
context 'with minimal settings' do
17+
let :params do
18+
{
19+
privilege: 'ALL',
20+
db: 'test',
21+
role: 'test'
22+
}
23+
end
24+
25+
it { is_expected.to compile.with_all_deps }
26+
it { is_expected.to contain_postgresql__server__database_grant('test') }
27+
it { is_expected.to contain_postgresql__server__grant('database:test').with_psql_user('postgres').without_port.with_group('postgres') }
28+
end
29+
30+
context 'with different user/group/port' do
31+
let :params do
32+
{
33+
privilege: 'ALL',
34+
db: 'test',
35+
role: 'test',
36+
psql_user: 'foo',
37+
psql_group: 'bar',
38+
port: 1337
39+
}
40+
end
41+
42+
it { is_expected.to compile.with_all_deps }
43+
it { is_expected.to contain_postgresql__server__grant('database:test').with_psql_user('foo').with_port(1337).with_group('bar') }
44+
end
2645
end

0 commit comments

Comments
 (0)