Skip to content

Commit 38a4ee0

Browse files
author
James Pogran
authored
Merge pull request #296 from dylanratcliffe/MODULES-8677-roles-with-same-name
(MODULES-8677) Made resource title unique among many instances
2 parents 31ec022 + 9a7c74b commit 38a4ee0

File tree

6 files changed

+52
-6
lines changed

6 files changed

+52
-6
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
66

77
## [Unreleased]
88

9+
### Fixed
10+
11+
- Cannot manage a role with the same name on two instances or two databases ([MODULES-8677](https://tickets.puppetlabs.com/browse/MODULES-8677)) (Thanks [Dylan Ratcliffe](https://github.com/dylanratcliffe))
12+
913
## [2.3.0] - 2019-01-22
1014

1115
### Added

manifests/role.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
}
108108

109109
if size($members) > 0 or $members_purge == true {
110-
sqlserver_tsql{ "role-${role}-members":
110+
sqlserver_tsql{ "${sqlserver_tsql_title}-members":
111111
command => template('sqlserver/create/role/members.sql.erb'),
112112
onlyif => template('sqlserver/query/role/member_exists.sql.erb'),
113113
instance => $instance,

manifests/role/permissions.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
##
5454
# Parameters required in template are _state, role, _upermissions, database, type, with_grant_option
5555
##
56-
sqlserver_tsql{ "role-permissions-${role}-${_state}${_grant_option}-${instance}":
56+
sqlserver_tsql{ "role-permissions-${role}-${_state}${_grant_option}-${instance}-${database}":
5757
instance => $instance,
5858
command => template('sqlserver/create/role/permissions.sql.erb'),
5959
onlyif => template('sqlserver/query/role/permission_exists.sql.erb'),

spec/acceptance/sqlserver_role_spec.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,47 @@ def ensure_sqlserver_logins_users(db_name)
157157
run_sql_query(host, { :query => query, :server => hostname, :expected_row_count => 6 })
158158
end
159159

160+
it "Create a database-specific role with the same name on two databases", :tier_low => true do
161+
pp = <<-MANIFEST
162+
sqlserver::config{'MSSQLSERVER':
163+
admin_user => 'sa',
164+
admin_pass => 'Pupp3t1@',
165+
}
166+
sqlserver::role{'DatabaseRole_1':
167+
ensure => 'present',
168+
role => '#{@role}',
169+
database => '#{db_name}',
170+
permissions => {'GRANT' => ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CONTROL', 'ALTER']},
171+
type => 'DATABASE',
172+
}
173+
sqlserver::role{'DatabaseRole_2':
174+
ensure => 'present',
175+
role => '#{@role}',
176+
database => 'master',
177+
permissions => {'GRANT' => ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CONTROL', 'ALTER']},
178+
type => 'DATABASE',
179+
}
180+
MANIFEST
181+
require 'pry'; binding.pry;
182+
execute_manifest(pp, opts = {}) do |r|
183+
expect(r.stderr).not_to match(/Error/i)
184+
end
185+
186+
# validate that the database-specific role '#{@role}' is successfully created with specified permissions':
187+
# and that it exists in both the MASTER database and the 'db_name' database.
188+
query = "USE MASTER;
189+
SELECT pr.principal_id, pr.name, pr.type_desc,
190+
pr.authentication_type_desc, pe.state_desc, pe.permission_name, dbpr.name
191+
FROM sys.database_principals AS pr
192+
JOIN sys.database_permissions AS pe
193+
ON pe.grantee_principal_id = pr.principal_id
194+
JOIN #{db_name}.sys.database_principals as dbpr
195+
on pr.name = dbpr.name
196+
WHERE pr.name = '#{@role}';"
197+
198+
run_sql_query(host, { :query => query, :server => hostname, :expected_row_count => 6 })
199+
end
200+
160201
it "Create server role #{@role} with optional members and optional members-purge", :tier_low => true do
161202
pp = <<-MANIFEST
162203
sqlserver::config{'MSSQLSERVER':

spec/defines/role/permissions_spec.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
RSpec.describe 'sqlserver::role::permissions' do
55
include_context 'manifests' do
66
let(:title) { 'myTitle' }
7-
let(:sqlserver_tsql_title) { 'role-permissions-myCustomRole-GRANT-MSSQLSERVER' }
7+
let(:sqlserver_tsql_title) { 'role-permissions-myCustomRole-GRANT-MSSQLSERVER-master' }
88
let(:params) { {
99
:role => 'myCustomRole',
1010
:permissions => %w(INSERT UPDATE DELETE SELECT),
@@ -116,6 +116,7 @@
116116
describe 'customDatabase' do
117117
let(:additional_params) { {:database => 'customDatabase'} }
118118
let(:should_contain_command) { ['USE [customDatabase];'] }
119+
let(:sqlserver_tsql_title) { 'role-permissions-myCustomRole-GRANT-MSSQLSERVER-customDatabase' }
119120
it_behaves_like 'sqlserver_tsql command'
120121
let(:should_contain_onlyif) { ['USE [customDatabase];'] }
121122
it_behaves_like 'sqlserver_tsql onlyif'
@@ -135,7 +136,7 @@
135136
:instance => instance
136137
} }
137138
it {
138-
should contain_sqlserver_tsql("role-permissions-myCustomRole-GRANT-#{instance}").with_instance(instance)
139+
should contain_sqlserver_tsql("role-permissions-myCustomRole-GRANT-#{instance}-master").with_instance(instance)
139140
}
140141
end
141142
end

spec/defines/role_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134
end
135135

136136
context 'members =>' do
137-
let(:sqlserver_tsql_title) { 'role-myCustomRole-members' }
137+
let(:sqlserver_tsql_title) { 'role-MSSQLSERVER-master-myCustomRole-members' }
138138
describe '[test these users]' do
139139
let(:additional_params) { {
140140
:members => %w(test these users),
@@ -156,7 +156,7 @@
156156
end
157157
end
158158
context 'members_purge =>' do
159-
let(:sqlserver_tsql_title) { 'role-myCustomRole-members' }
159+
let(:sqlserver_tsql_title) { 'role-MSSQLSERVER-master-myCustomRole-members' }
160160
context 'true' do
161161
describe 'type => SERVER and members => []' do
162162
let(:additional_params) { {

0 commit comments

Comments
 (0)