Skip to content

Commit 06964e4

Browse files
Datasource Permissions: Use OpenAPI client (#1263)
1 parent a4c8cdd commit 06964e4

File tree

1 file changed

+40
-48
lines changed

1 file changed

+40
-48
lines changed

internal/resources/grafana/resource_data_source_permission.go

Lines changed: 40 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
1519
func 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

8488
func 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

130133
func 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

168167
func 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
198192
deleteLoop:
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

220214
addLoop:
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

Comments
 (0)