Skip to content

Commit a0602d1

Browse files
authored
Merge pull request #392 from h0tw1r3/fix-database-port
Fix custom database port support
2 parents 6971ed7 + 0111887 commit a0602d1

File tree

10 files changed

+79
-19
lines changed

10 files changed

+79
-19
lines changed

manifests/database/default_read_grant.pp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
String $schema,
77
String $database_username,
88
String $database_read_only_username,
9+
Optional[Stdlib::Port] $database_port = undef,
910
) {
1011
postgresql_psql { "grant default select permission for ${database_read_only_username}":
1112
db => $database_name,
13+
port => $database_port,
1214
command => "ALTER DEFAULT PRIVILEGES
1315
FOR USER \"${database_username}\"
1416
IN SCHEMA \"${schema}\"
@@ -26,6 +28,7 @@
2628

2729
postgresql_psql { "grant default usage permission for ${database_read_only_username}":
2830
db => $database_name,
31+
port => $database_port,
2932
command => "ALTER DEFAULT PRIVILEGES
3033
FOR USER \"${database_username}\"
3134
IN SCHEMA \"${schema}\"
@@ -43,6 +46,7 @@
4346

4447
postgresql_psql { "grant default execute permission for ${database_read_only_username}":
4548
db => $database_name,
49+
port => $database_port,
4650
command => "ALTER DEFAULT PRIVILEGES
4751
FOR USER \"${database_username}\"
4852
IN SCHEMA \"${schema}\"

manifests/database/postgresql.pp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@
8484
$read_database_password = $puppetdb::params::read_database_password,
8585
$read_database_host = $puppetdb::params::read_database_host
8686
) inherits puppetdb::params {
87+
$port = scanf($database_port, '%i')[0]
88+
8789
if $manage_server {
8890
class { 'postgresql::globals':
8991
manage_package_repo => $manage_package_repo,
@@ -93,7 +95,7 @@
9395
class { 'postgresql::server':
9496
ip_mask_allow_all_users => '0.0.0.0/0',
9597
listen_addresses => $listen_addresses,
96-
port => scanf($database_port, '%i')[0],
98+
port => $port,
9799
}
98100

99101
# We need to create the ssl connection for the read user, when
@@ -129,6 +131,7 @@
129131
postgresql::server::extension { 'pg_trgm':
130132
database => $database_name,
131133
require => Postgresql::Server::Db[$database_name],
134+
port => $port,
132135
}
133136
}
134137
}
@@ -139,10 +142,12 @@
139142
user => $database_username,
140143
password => $database_password,
141144
grant => 'all',
145+
port => $port,
142146
}
143147

144148
-> postgresql_psql { 'revoke all access on public schema':
145149
db => $database_name,
150+
port => $port,
146151
command => 'REVOKE CREATE ON SCHEMA public FROM public',
147152
unless => "SELECT * FROM
148153
(SELECT has_schema_privilege('public', 'public', 'create') can_create) privs
@@ -151,6 +156,7 @@
151156

152157
-> postgresql_psql { "grant all permissions to ${database_username}":
153158
db => $database_name,
159+
port => $port,
154160
command => "GRANT CREATE ON SCHEMA public TO \"${database_username}\"",
155161
unless => "SELECT * FROM
156162
(SELECT has_schema_privilege('${database_username}', 'public', 'create') can_create) privs
@@ -162,10 +168,12 @@
162168
database_name => $database_name,
163169
password_hash => postgresql::postgresql_password($read_database_username, $read_database_password),
164170
database_owner => $database_username,
171+
database_port => $port,
165172
}
166173

167174
-> postgresql_psql { "grant ${read_database_username} role to ${database_username}":
168175
db => $database_name,
176+
port => $port,
169177
command => "GRANT \"${read_database_username}\" TO \"${database_username}\"",
170178
unless => "SELECT oid, rolname FROM pg_roles WHERE
171179
pg_has_role( '${database_username}', oid, 'member') and rolname = '${read_database_username}'";

manifests/database/read_grant.pp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
String $database_name,
66
String $schema,
77
String $database_read_only_username,
8+
Optional[Stdlib::Port] $database_port = undef,
89
) {
910
postgresql_psql { "grant select permission for ${database_read_only_username}":
1011
db => $database_name,
12+
port => $database_port,
1113
command => "GRANT SELECT
1214
ON ALL TABLES IN SCHEMA \"${schema}\"
1315
TO \"${database_read_only_username}\"",
@@ -22,6 +24,7 @@
2224

2325
postgresql_psql { "grant usage permission for ${database_read_only_username}":
2426
db => $database_name,
27+
port => $database_port,
2528
command => "GRANT USAGE
2629
ON ALL SEQUENCES IN SCHEMA \"${schema}\"
2730
TO \"${database_read_only_username}\"",
@@ -36,6 +39,7 @@
3639

3740
postgresql_psql { "grant execution permission for ${database_read_only_username}":
3841
db => $database_name,
42+
port => $database_port,
3943
command => "GRANT EXECUTE
4044
ON ALL FUNCTIONS IN SCHEMA \"${schema}\"
4145
TO \"${database_read_only_username}\"",

manifests/database/read_only_user.pp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,34 @@
2020
String $database_name,
2121
String $database_owner,
2222
Variant[String, Boolean] $password_hash = false,
23+
Optional[Stdlib::Port] $database_port = undef,
2324
) {
2425
postgresql::server::role { $read_database_username:
2526
password_hash => $password_hash,
27+
port => $database_port,
2628
}
2729

2830
-> postgresql::server::database_grant { "${database_name} grant connection permission to ${read_database_username}":
2931
privilege => 'CONNECT',
3032
db => $database_name,
3133
role => $read_database_username,
34+
port => $database_port,
3235
}
3336

3437
-> puppetdb::database::default_read_grant {
3538
"${database_name} grant read permission on new objects from ${database_owner} to ${read_database_username}":
3639
database_username => $database_owner,
3740
database_read_only_username => $read_database_username,
3841
database_name => $database_name,
42+
database_port => $database_port,
3943
schema => 'public',
4044
}
4145

4246
-> puppetdb::database::read_grant {
4347
"${database_name} grant read-only permission on existing objects to ${read_database_username}":
4448
database_read_only_username => $read_database_username,
4549
database_name => $database_name,
50+
database_port => $database_port,
4651
schema => 'public',
4752
}
4853
}

spec/acceptance/standalone_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,23 @@
105105
it { is_expected.to be_running }
106106
end
107107
end
108+
109+
describe 'supports changing database port', :change do
110+
let(:puppetdb_params) do
111+
<<~EOS
112+
database_port => '5433',
113+
read_database_port => '5433',
114+
EOS
115+
end
116+
117+
it_behaves_like 'puppetdb'
118+
119+
describe port(5433), :status do
120+
it { is_expected.to be_listening }
121+
end
122+
123+
describe service('puppetdb') do
124+
it { is_expected.to be_running }
125+
end
126+
end
108127
end

spec/defines/database/default_read_grant_spec.rb

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
require 'spec_helper'
44

55
describe 'puppetdb::database::default_read_grant' do
6+
defaults = {
7+
database_name: 'puppetdb',
8+
schema: 'public',
9+
database_username: 'puppetdb',
10+
database_read_only_username: 'puppetdb-read',
11+
}
612
valid = {
7-
'standard': {
8-
database_name: 'puppetdb',
9-
schema: 'public',
10-
database_username: 'puppetdb',
11-
database_read_only_username: 'puppetdb-read',
12-
}
13+
'standard': defaults,
14+
'standard with port': defaults.merge({ database_port: 5433 }),
1315
}
1416

1517
invalid = {
@@ -18,7 +20,8 @@
1820
schema: 'public',
1921
database_username: 'puppetdb',
2022
database_read_only_username: 'puppetdb-read',
21-
}
23+
},
24+
'invalid data type': defaults.merge({ database_port: '5433' }),
2225
}
2326

2427
let(:facts) { on_supported_os.take(1).first[1] }

spec/defines/database/read_grant_spec.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22

33
require 'spec_helper'
44

5+
defaults = {
6+
database_read_only_username: 'puppetdb-read',
7+
database_name: 'puppetdb',
8+
schema: 'public',
9+
}
10+
511
valid = {
6-
'grant read on new objects from blah to blah': {
7-
database_read_only_username: 'puppetdb-read',
8-
database_name: 'puppetdb',
9-
schema: 'public',
10-
},
12+
'grant read on new objects from blah to blah': defaults,
13+
'grant read on new objects from blah to blah with port': defaults.merge({ database_port: 5433 }),
1114
}
1215

1316
invalid = {
1417
'no params': {},
18+
'invalid data type': defaults.merge({ database_port: '5433' }),
1519
}
1620

1721
describe 'puppetdb::database::read_grant' do

spec/defines/database/read_only_user_spec.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,25 @@
22

33
require 'spec_helper'
44

5+
defaults = {
6+
read_database_username: 'puppetdb-read',
7+
database_name: 'puppetdb',
8+
database_owner: 'puppetdb',
9+
}
10+
511
valid = {
6-
'puppetdb-read': {
7-
read_database_username: 'puppetdb-read',
8-
database_name: 'puppetdb',
9-
password_hash: 'blah',
10-
database_owner: 'puppetdb',
11-
},
12+
'puppetdb-read': defaults.merge({ password_hash: 'blash' }),
1213
'spectest': {
1314
read_database_username: 'spectest-read',
1415
database_name: 'spectest',
1516
database_owner: 'spectest',
1617
},
18+
'with port': defaults.merge({ database_port: 5433 }),
1719
}
1820

1921
invalid = {
2022
'no params': {},
23+
'invalid data type': defaults.merge({ database_port: '5433' }),
2124
}
2225

2326
describe 'puppetdb::database::read_only_user', type: :define do

spec/support/acceptance/shared/puppetdb.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,8 @@ class { 'puppetdb':
4545
it 'applies idempotently' do
4646
idempotent_apply(pp, debug: ENV.key?('DEBUG'))
4747
end
48+
49+
it 'agent can puppetdb_query' do
50+
apply_manifest("$envs = puppetdb_query('environments[name]{}')", expect_failures: false, debug: ENV.key?('DEBUG'))
51+
end
4852
end

spec/unit/classes/database/postgresql_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
database_password: 'puppetdb',
5252
read_database_username: 'puppetdb-read',
5353
read_database_password: 'puppetdb-read',
54+
database_port: '5432',
5455
}
5556
end
5657

@@ -60,6 +61,7 @@
6061
user: params[:database_username],
6162
password: params[:database_password],
6263
grant: 'all',
64+
port: params[:database_port].to_i,
6365
)
6466
}
6567

@@ -68,6 +70,7 @@
6870
.that_requires("Postgresql::Server::Db[#{params[:database_name]}]")
6971
.with(
7072
db: params[:database_name],
73+
port: params[:database_port].to_i,
7174
command: 'REVOKE CREATE ON SCHEMA public FROM public',
7275
unless: "SELECT * FROM
7376
(SELECT has_schema_privilege('public', 'public', 'create') can_create) privs
@@ -81,6 +84,7 @@
8184
.that_comes_before("Puppetdb::Database::Read_only_user[#{params[:read_database_username]}]")
8285
.with(
8386
db: params[:database_name],
87+
port: params[:database_port].to_i,
8488
command: "GRANT CREATE ON SCHEMA public TO \"#{params[:database_username]}\"",
8589
unless: "SELECT * FROM
8690
(SELECT has_schema_privilege('#{params[:database_username]}', 'public', 'create') can_create) privs
@@ -96,6 +100,7 @@
96100
database_name: params[:database_name],
97101
password_hash: %r{^(md5|SCRAM)}, # TODO: mock properly
98102
database_owner: params[:database_username],
103+
database_port: params[:database_port].to_i,
99104
}
100105
end
101106
end
@@ -105,6 +110,7 @@
105110
.that_requires("Puppetdb::Database::Read_only_user[#{params[:read_database_username]}]")
106111
.with(
107112
db: params[:database_name],
113+
port: params[:database_port].to_i,
108114
command: "GRANT \"#{params[:read_database_username]}\" TO \"#{params[:database_username]}\"",
109115
unless: "SELECT oid, rolname FROM pg_roles WHERE
110116
pg_has_role( '#{params[:database_username]}', oid, 'member') and rolname = '#{params[:read_database_username]}'",

0 commit comments

Comments
 (0)