diff --git a/manifests/server/dbgroup.pp b/manifests/server/dbgroup.pp index b043ca8072..5db2696915 100644 --- a/manifests/server/dbgroup.pp +++ b/manifests/server/dbgroup.pp @@ -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, @@ -44,8 +52,8 @@ require => Class['Postgresql::Server'], } - postgresql_psql {"${title}: UPDATE pg_group SET grolist = ARRAY${groupmembers} WHERE groname = '${groupname}'": - command => "UPDATE pg_group SET grolist = ARRAY${groupmembers} WHERE groname = '${groupname}'", - unless => "SELECT 1 FROM pg_group WHERE groname = '${groupname}' AND grolist = ARRAY${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}'", } } \ No newline at end of file diff --git a/spec/unit/defines/server/dbgroup_spec.rb b/spec/unit/defines/server/dbgroup_spec.rb index 8d30921225..2ae879628c 100644 --- a/spec/unit/defines/server/dbgroup_spec.rb +++ b/spec/unit/defines/server/dbgroup_spec.rb @@ -33,11 +33,10 @@ 'port' => "5432", }) end - it 'should have update pg_group for test group with groupmembers as []' do - is_expected.to contain_postgresql_psql("test: UPDATE pg_group SET grolist = ARRAY[] WHERE groname = 'test'").with({ - 'command' => "UPDATE pg_group SET grolist = ARRAY[] WHERE groname = 'test'", - 'environment' => [], - 'unless' => "SELECT 1 FROM pg_group WHERE groname = 'test' AND grolist = ARRAY[]", + it 'should have update pg_group for test group with groupmembers as {}' do + is_expected.to contain_postgresql_psql("test: UPDATE pg_group SET grolist = '{}' WHERE groname = 'test'").with({ + 'command' => "UPDATE pg_group SET grolist = '{}' WHERE groname = 'test'", + 'unless' => "SELECT 1 FROM pg_group WHERE groname = 'test' AND grolist = '{}'", 'port' => "5432", }) end @@ -65,10 +64,9 @@ }) end it 'should have update pg_group for test group with provided groupmembers' do - is_expected.to contain_postgresql_psql("test: UPDATE pg_group SET grolist = ARRAY[testuser1, testuser2] WHERE groname = 'test'").with({ - 'command' => "UPDATE pg_group SET grolist = ARRAY[testuser1, testuser2] WHERE groname = 'test'", - 'environment' => [], - 'unless' => "SELECT 1 FROM pg_group WHERE groname = 'test' AND grolist = ARRAY[testuser1, testuser2]", + is_expected.to contain_postgresql_psql("test: UPDATE pg_group SET grolist = '{\"testuser1\", \"testuser2\"}' WHERE groname = 'test'").with({ + 'command' => "UPDATE pg_group SET grolist = '{\"testuser1\", \"testuser2\"}' WHERE groname = 'test'", + 'unless' => "SELECT 1 FROM pg_group WHERE groname = 'test' AND grolist = '{\"testuser1\", \"testuser2\"}'", 'port' => "5432", }) end diff --git a/spec/unit/defines/server/role_spec.rb b/spec/unit/defines/server/role_spec.rb index 7df6a7264a..8b02660949 100644 --- a/spec/unit/defines/server/role_spec.rb +++ b/spec/unit/defines/server/role_spec.rb @@ -255,7 +255,6 @@ it 'should have an alter statement to set PASSWORD DISABLE' do is_expected.to contain_postgresql_psql('test: ALTER USER "test" PASSWORD DISABLE').with({ 'command' => "ALTER USER \"test\" PASSWORD DISABLE", - 'environment' => [], 'port' => "5432", }) end