@@ -8,10 +8,14 @@ import (
88 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
99 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1010
11- gapi "github.com/grafana/grafana-api-golang-client"
11+ goapi "github.com/grafana/grafana-openapi-client-go/client"
12+ "github.com/grafana/grafana-openapi-client-go/client/access_control"
13+ "github.com/grafana/grafana-openapi-client-go/models"
1214 "github.com/grafana/terraform-provider-grafana/internal/common"
1315)
1416
17+ const datasourcesPermissionsType = "datasources"
18+
1519func ResourceDatasourcePermission () * schema.Resource {
1620 return & schema.Resource {
1721
@@ -82,25 +86,24 @@ Manages the entire set of permissions for a datasource. Permissions that aren't
8286}
8387
8488func UpdateDatasourcePermissions (ctx context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
85- client , orgID := DeprecatedClientFromNewOrgResource (meta , d )
89+ client , orgID := OAPIClientFromNewOrgResource (meta , d )
8690
8791 var list []interface {}
8892 if v , ok := d .GetOk ("permissions" ); ok {
8993 list = v .(* schema.Set ).List ()
9094 }
9195
92- _ , datasourceIDStr := SplitOrgResourceID (d .Get ("datasource_id" ).(string ))
93- datasourceID , _ := strconv .ParseInt (datasourceIDStr , 10 , 64 )
94-
95- dataSource , err := client .DataSource (datasourceID )
96+ _ , datasourceID := SplitOrgResourceID (d .Get ("datasource_id" ).(string ))
97+ resp , err := client .Datasources .GetDataSourceByID (datasourceID )
9698 if err != nil {
9799 return diag .FromErr (err )
98100 }
101+ datasource := resp .Payload
99102
100- var configuredPermissions []gapi. SetResourcePermissionItem
103+ var configuredPermissions []* models. SetResourcePermissionCommand
101104 for _ , permission := range list {
102105 permission := permission .(map [string ]interface {})
103- var permissionItem gapi. SetResourcePermissionItem
106+ var permissionItem models. SetResourcePermissionCommand
104107 _ , teamIDStr := SplitOrgResourceID (permission ["team_id" ].(string ))
105108 teamID , _ := strconv .ParseInt (teamIDStr , 10 , 64 )
106109 if teamID > 0 {
@@ -112,13 +115,13 @@ func UpdateDatasourcePermissions(ctx context.Context, d *schema.ResourceData, me
112115 permissionItem .UserID = userID
113116 }
114117 if permission ["built_in_role" ].(string ) != "" {
115- permissionItem .BuiltinRole = permission ["built_in_role" ].(string )
118+ permissionItem .BuiltInRole = permission ["built_in_role" ].(string )
116119 }
117120 permissionItem .Permission = permission ["permission" ].(string )
118- configuredPermissions = append (configuredPermissions , permissionItem )
121+ configuredPermissions = append (configuredPermissions , & permissionItem )
119122 }
120123
121- if err := updateDatasourcePermissions (client , dataSource .UID , configuredPermissions ); err != nil {
124+ if err := updateDatasourcePermissions (client , datasource .UID , configuredPermissions ); err != nil {
122125 return diag .FromErr (err )
123126 }
124127
@@ -128,25 +131,21 @@ func UpdateDatasourcePermissions(ctx context.Context, d *schema.ResourceData, me
128131}
129132
130133func ReadDatasourcePermissions (ctx context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
131- client , _ , idStr := DeprecatedClientFromExistingOrgResource (meta , d .Id ())
134+ client , _ , id := OAPIClientFromExistingOrgResource (meta , d .Id ())
132135
133- id , err := strconv .ParseInt (idStr , 10 , 64 )
134- if err != nil {
135- return diag .FromErr (err )
136- }
137-
138- dataSource , err := client .DataSource (id )
136+ resp , err := client .Datasources .GetDataSourceByID (id )
139137 if diag , shouldReturn := common .CheckReadError ("data source permissions" , d , err ); shouldReturn {
140138 return diag
141139 }
140+ datasource := resp .Payload
142141
143- response , err := client .ListDatasourceResourcePermissions ( dataSource .UID )
142+ listResp , err := client .AccessControl . GetResourcePermissions ( datasource .UID , datasourcesPermissionsType )
144143 if err , shouldReturn := common .CheckReadError ("datasource permissions" , d , err ); shouldReturn {
145144 return err
146145 }
147146
148147 var permissionItems []interface {}
149- for _ , permission := range response {
148+ for _ , permission := range listResp . Payload {
150149 // Only managed permissions can be provisioned through this resource, so we disregard the permissions obtained through custom and fixed roles here
151150 if ! permission .IsManaged {
152151 continue
@@ -166,37 +165,32 @@ func ReadDatasourcePermissions(ctx context.Context, d *schema.ResourceData, meta
166165}
167166
168167func DeleteDatasourcePermissions (ctx context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
169- client , _ , idStr := DeprecatedClientFromExistingOrgResource (meta , d .Id ())
168+ client , _ , id := OAPIClientFromExistingOrgResource (meta , d .Id ())
170169
171- id , err := strconv .ParseInt (idStr , 10 , 64 )
172- if err != nil {
173- return diag .FromErr (err )
174- }
175-
176- dataSource , err := client .DataSource (id )
170+ resp , err := client .Datasources .GetDataSourceByID (id )
177171 if diags , shouldReturn := common .CheckReadError ("data source permissions" , d , err ); shouldReturn {
178172 return diags
179173 }
174+ datasource := resp .Payload
180175
181- err = updateDatasourcePermissions (client , dataSource .UID , []gapi. SetResourcePermissionItem {})
176+ err = updateDatasourcePermissions (client , datasource .UID , []* models. SetResourcePermissionCommand {})
182177 diags , _ := common .CheckReadError ("datasource permissions" , d , err )
183178 return diags
184179}
185180
186- func updateDatasourcePermissions (client * gapi. Client , uid string , permissions []gapi. SetResourcePermissionItem ) error {
187- areEqual := func (a * gapi. ResourcePermission , b gapi. SetResourcePermissionItem ) bool {
188- return a .Permission == b .Permission && a .TeamID == b .TeamID && a .UserID == b .UserID && a .BuiltInRole == b .BuiltinRole
181+ func updateDatasourcePermissions (client * goapi. GrafanaHTTPAPI , uid string , permissions []* models. SetResourcePermissionCommand ) error {
182+ areEqual := func (a * models. ResourcePermissionDTO , b * models. SetResourcePermissionCommand ) bool {
183+ return a .Permission == b .Permission && a .TeamID == b .TeamID && a .UserID == b .UserID && a .BuiltInRole == b .BuiltInRole
189184 }
190185
191- response , err := client .ListDatasourceResourcePermissions (uid )
186+ listResp , err := client .AccessControl . GetResourcePermissions (uid , datasourcesPermissionsType )
192187 if err != nil {
193188 return err
194189 }
195190
196- var permissionList []gapi.SetResourcePermissionItem
197-
191+ var permissionList []* models.SetResourcePermissionCommand
198192deleteLoop:
199- for _ , current := range response {
193+ for _ , current := range listResp . Payload {
200194 // Only managed permissions can be provisioned through this resource, so we disregard the permissions obtained through custom and fixed roles here
201195 if ! current .IsManaged {
202196 continue
@@ -207,35 +201,33 @@ deleteLoop:
207201 }
208202 }
209203
210- permToRemove := gapi. SetResourcePermissionItem {
204+ permToRemove := models. SetResourcePermissionCommand {
211205 TeamID : current .TeamID ,
212206 UserID : current .UserID ,
213- BuiltinRole : current .BuiltInRole ,
207+ BuiltInRole : current .BuiltInRole ,
214208 Permission : "" ,
215209 }
216210
217- permissionList = append (permissionList , permToRemove )
211+ permissionList = append (permissionList , & permToRemove )
218212 }
219213
220214addLoop:
221215 for _ , new := range permissions {
222- for _ , current := range response {
216+ for _ , current := range listResp . Payload {
223217 if areEqual (current , new ) {
224218 continue addLoop
225219 }
226220 }
227221
228- permToAdd := gapi.SetResourcePermissionItem {
229- TeamID : new .TeamID ,
230- UserID : new .UserID ,
231- BuiltinRole : new .BuiltinRole ,
232- Permission : new .Permission ,
233- }
234-
235- permissionList = append (permissionList , permToAdd )
222+ permissionList = append (permissionList , new )
236223 }
237224
238- _ , err = client .SetDatasourceResourcePermissions (uid , gapi.SetResourcePermissionsBody {Permissions : permissionList })
225+ body := models.SetPermissionsCommand {Permissions : permissionList }
226+ params := access_control .NewSetResourcePermissionsParams ().
227+ WithResource (datasourcesPermissionsType ).
228+ WithResourceID (uid ).
229+ WithBody (& body )
230+ _ , err = client .AccessControl .SetResourcePermissions (params )
239231
240232 return err
241233}
0 commit comments