@@ -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+
1418func ResourceServiceAccountPermission () * schema.Resource {
1519 return & schema.Resource {
1620 Description : `
@@ -83,7 +87,7 @@ func ReadServiceAccountPermissions(ctx context.Context, d *schema.ResourceData,
8387}
8488
8589func 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
103107func 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
115119func 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
133136func 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