Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Replace puppet array syntax with psql array syntax, thus allowing a p…
…uppet array to be passed as input. This makes the following assumptions:

1. A valid puppet array is passed in as input (input is trusted, not supplied by an external party)
2. Users do not contain special characters (such as commas or double quotes)
3. Array syntax from puppet is consistent with its runbook, in re, no square brackets, items appear in the array without surrounding quotes
  • Loading branch information
y-trobinso committed Jul 31, 2017
commit 150eea7bc4d0fcf890a1db80e262c57d161ee6d9
16 changes: 12 additions & 4 deletions manifests/server/dbgroup.pp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
define postgresql::server::dbgroup(
$db = $postgresql::server::default_database,
$port = undef,
$groupmembers = '{}',
$groupmembers = [],
$groupname = $title,
$dialect = $postgresql::server::dialect,
$connect_settings = undef,
Expand All @@ -23,6 +23,14 @@
$port_override = $postgresql::server::port
}

#
# Group members, converted to a string acceptable by psql
# [user1, user2] to {"user1", "user2"}
#
$groupmembers_braces = regsubst("${groupmembers}", '^\[(.*)\]$', '{"\1"}')
$groupmembers_strip_empty_array = regsubst("${groupmembers_braces}", '^{""}$', '{}')
$groupmembers_psql = regsubst("${groupmembers_strip_empty_array}", ', ', '", "', 'G')

Postgresql_psql {
db => $db,
port => $port_override,
Expand All @@ -44,8 +52,8 @@
require => Class['Postgresql::Server'],
}

postgresql_psql {"${title}: UPDATE pg_group SET grolist = '${groupmembers}' WHERE groname = '${groupname}'":
command => "UPDATE pg_group SET grolist = '${groupmembers}' WHERE groname = '${groupname}'",
unless => "SELECT 1 FROM pg_group WHERE groname = '${groupname}' AND grolist = '${groupmembers}'",
postgresql_psql {"${title}: UPDATE pg_group SET grolist = '${groupmembers_psql}' WHERE groname = '${groupname}'":
command => "UPDATE pg_group SET grolist = '${groupmembers_psql}' WHERE groname = '${groupname}'",
unless => "SELECT 1 FROM pg_group WHERE groname = '${groupname}' AND grolist = '${groupmembers_psql}'",
}
}
2 changes: 1 addition & 1 deletion spec/unit/defines/server/dbgroup_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@

let :params do
{
:groupmembers => "{\"testuser1\", \"testuser2\"}",
:groupmembers => ['testuser1', 'testuser2'],
}
end

Expand Down