Skip to content

Commit a4c8cdd

Browse files
Service Account Permissions: Use OpenAPI client (#1266)
1 parent 3e7505c commit a4c8cdd

File tree

3 files changed

+26
-28
lines changed

3 files changed

+26
-28
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/go-openapi/strfmt v0.22.0
1111
github.com/grafana/amixr-api-go-client v0.0.11
1212
github.com/grafana/grafana-api-golang-client v0.27.0
13-
github.com/grafana/grafana-openapi-client-go v0.0.0-20240105132447-894a6dd40af1
13+
github.com/grafana/grafana-openapi-client-go v0.0.0-20240105144536-712758f0eb87
1414
github.com/grafana/machine-learning-go-client v0.5.0
1515
github.com/grafana/synthetic-monitoring-agent v0.19.3
1616
github.com/grafana/synthetic-monitoring-api-go-client v0.7.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ github.com/grafana/amixr-api-go-client v0.0.11 h1:jlE+5t0tRuCtjbpM81j70Dr2J4eCyS
102102
github.com/grafana/amixr-api-go-client v0.0.11/go.mod h1:N6x26XUrM5zGtK5zL5vNJnAn2JFMxLFPPLTw/6pDkFE=
103103
github.com/grafana/grafana-api-golang-client v0.27.0 h1:zIwMXcbCB4n588i3O2N6HfNcQogCNTd/vPkEXTr7zX8=
104104
github.com/grafana/grafana-api-golang-client v0.27.0/go.mod h1:uNLZEmgKtTjHBtCQMwNn3qsx2mpMb8zU+7T4Xv3NR9Y=
105-
github.com/grafana/grafana-openapi-client-go v0.0.0-20240105132447-894a6dd40af1 h1:nS+jAikZFZzBbP7cgdkA6E6Ov+wpDvbK8+xETumVVos=
106-
github.com/grafana/grafana-openapi-client-go v0.0.0-20240105132447-894a6dd40af1/go.mod h1:af7rlJw/VtbvAfI5VWzYO4p/pT58FXrN6XqZBnkwBxo=
105+
github.com/grafana/grafana-openapi-client-go v0.0.0-20240105144536-712758f0eb87 h1:93w21Amc624QLEyZpcLZJaL/ojkhTizI0tlH/OkZgaQ=
106+
github.com/grafana/grafana-openapi-client-go v0.0.0-20240105144536-712758f0eb87/go.mod h1:af7rlJw/VtbvAfI5VWzYO4p/pT58FXrN6XqZBnkwBxo=
107107
github.com/grafana/machine-learning-go-client v0.5.0 h1:Q1K+MPSy8vfMm2jsk3WQ7O77cGr2fM5hxwtPSoPc5NU=
108108
github.com/grafana/machine-learning-go-client v0.5.0/go.mod h1:QFfZz8NkqVF8++skjkKQXJEZfpCYd8S0yTWJUpsLLTA=
109109
github.com/grafana/synthetic-monitoring-agent v0.19.3 h1:BQ9Tk50YxtGDlwfrgaodTNuW8diSWTvQxFgC3n1jP1E=

internal/resources/grafana/resource_service_account_permission.go

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ import (
44
"context"
55
"strconv"
66

7-
gapi "github.com/grafana/grafana-api-golang-client"
7+
goapi "github.com/grafana/grafana-openapi-client-go/client"
8+
"github.com/grafana/grafana-openapi-client-go/client/access_control"
9+
"github.com/grafana/grafana-openapi-client-go/models"
810
"github.com/grafana/terraform-provider-grafana/internal/common"
911
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1012
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1113
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1214
)
1315

16+
const serviceAccountsPermissionsType = "serviceaccounts"
17+
1418
func ResourceServiceAccountPermission() *schema.Resource {
1519
return &schema.Resource{
1620
Description: `
@@ -83,7 +87,7 @@ func ReadServiceAccountPermissions(ctx context.Context, d *schema.ResourceData,
8387
}
8488

8589
func CreateServiceAccountPermissions(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
86-
client, orgID := DeprecatedClientFromNewOrgResource(meta, d)
90+
client, orgID := OAPIClientFromNewOrgResource(meta, d)
8791
_, idStr := SplitOrgResourceID(d.Get("service_account_id").(string))
8892
d.SetId(MakeOrgResourceID(orgID, idStr))
8993

@@ -101,7 +105,7 @@ func CreateServiceAccountPermissions(ctx context.Context, d *schema.ResourceData
101105
}
102106

103107
func UpdateServiceAccountPermissions(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
104-
client, _, idStr := DeprecatedClientFromExistingOrgResource(meta, d.Id())
108+
client, _, idStr := OAPIClientFromExistingOrgResource(meta, d.Id())
105109

106110
old, new := d.GetChange("permissions")
107111
err := updateServiceAccountPermissions(client, idStr, old, new)
@@ -113,37 +117,32 @@ func UpdateServiceAccountPermissions(ctx context.Context, d *schema.ResourceData
113117
}
114118

115119
func DeleteServiceAccountPermissions(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
116-
oAPIClient, _, _ := OAPIClientFromExistingOrgResource(meta, d.Id())
120+
client, _, idStr := OAPIClientFromExistingOrgResource(meta, d.Id())
117121

118122
_, serviceAccountID := SplitOrgResourceID(d.Get("service_account_id").(string))
119123
id, err := strconv.ParseInt(serviceAccountID, 10, 64)
120124
if err != nil {
121125
return diag.FromErr(err)
122126
}
123127

124-
_, err = oAPIClient.ServiceAccounts.RetrieveServiceAccount(id)
128+
_, err = client.ServiceAccounts.RetrieveServiceAccount(id)
125129
if diags, shouldReturn := common.CheckReadError("service account permissions", d, err); shouldReturn {
126130
return diags
127131
}
128132

129-
client, _, idStr := DeprecatedClientFromExistingOrgResource(meta, d.Id())
130133
return diag.FromErr(updateServiceAccountPermissions(client, idStr, d.Get("permissions"), nil))
131134
}
132135

133136
func getServiceAccountPermissions(ctx context.Context, d *schema.ResourceData, meta interface{}) (interface{}, diag.Diagnostics) {
134-
client, _, idStr := DeprecatedClientFromExistingOrgResource(meta, d.Id())
135-
id, err := strconv.ParseInt(idStr, 10, 64)
136-
if err != nil {
137-
return nil, diag.FromErr(err)
138-
}
137+
client, _, idStr := OAPIClientFromExistingOrgResource(meta, d.Id())
139138

140-
saPermissions, err := client.ListServiceAccountResourcePermissions(id)
139+
resp, err := client.AccessControl.GetResourcePermissions(idStr, serviceAccountsPermissionsType)
141140
if err, shouldReturn := common.CheckReadError("service account permissions", d, err); shouldReturn {
142141
return nil, err
143142
}
144143

145144
saPerms := make([]interface{}, 0)
146-
for _, p := range saPermissions {
145+
for _, p := range resp.Payload {
147146
// Only managed service account permissions can be provisioned through this resource.
148147
if !p.IsManaged {
149148
continue
@@ -159,12 +158,7 @@ func getServiceAccountPermissions(ctx context.Context, d *schema.ResourceData, m
159158
return saPerms, nil
160159
}
161160

162-
func updateServiceAccountPermissions(client *gapi.Client, idStr string, from, to interface{}) error {
163-
id, err := strconv.ParseInt(idStr, 10, 64)
164-
if err != nil {
165-
return err
166-
}
167-
161+
func updateServiceAccountPermissions(client *goapi.GrafanaHTTPAPI, idStr string, from, to interface{}) error {
168162
oldTeamPerms := make(map[int64]string, 0)
169163
oldUserPerms := make(map[int64]string, 0)
170164
for _, p := range listOrSet(from) {
@@ -181,12 +175,12 @@ func updateServiceAccountPermissions(client *gapi.Client, idStr string, from, to
181175
}
182176
}
183177

184-
var permissionList []gapi.SetResourcePermissionItem
178+
var permissionList []*models.SetResourcePermissionCommand
185179

186180
// Iterate over permissions from the configuration (the desired permission setup)
187181
for _, p := range listOrSet(to) {
188182
permission := p.(map[string]interface{})
189-
permissionItem := gapi.SetResourcePermissionItem{}
183+
permissionItem := models.SetResourcePermissionCommand{}
190184
_, teamIDStr := SplitOrgResourceID(permission["team_id"].(string))
191185
teamID, _ := strconv.ParseInt(teamIDStr, 10, 64)
192186
_, userIDStr := SplitOrgResourceID(permission["user_id"].(string))
@@ -212,24 +206,28 @@ func updateServiceAccountPermissions(client *gapi.Client, idStr string, from, to
212206
permissionItem.UserID = userID
213207
}
214208
permissionItem.Permission = permission["permission"].(string)
215-
permissionList = append(permissionList, permissionItem)
209+
permissionList = append(permissionList, &permissionItem)
216210
}
217211

218212
// Remove the permissions that are in the state but not in the config
219213
for teamID := range oldTeamPerms {
220-
permissionList = append(permissionList, gapi.SetResourcePermissionItem{
214+
permissionList = append(permissionList, &models.SetResourcePermissionCommand{
221215
TeamID: teamID,
222216
Permission: "",
223217
})
224218
}
225219
for userID := range oldUserPerms {
226-
permissionList = append(permissionList, gapi.SetResourcePermissionItem{
220+
permissionList = append(permissionList, &models.SetResourcePermissionCommand{
227221
UserID: userID,
228222
Permission: "",
229223
})
230224
}
231225

232-
_, err = client.SetServiceAccountResourcePermissions(id, gapi.SetResourcePermissionsBody{Permissions: permissionList})
226+
params := access_control.NewSetResourcePermissionsParams().
227+
WithResource(serviceAccountsPermissionsType).
228+
WithResourceID(idStr).
229+
WithBody(&models.SetPermissionsCommand{Permissions: permissionList})
230+
_, err := client.AccessControl.SetResourcePermissions(params)
233231
return err
234232
}
235233

0 commit comments

Comments
 (0)