99
1010 "github.com/grafana/grafana-com-public-clients/go/gcom"
1111 goapi "github.com/grafana/grafana-openapi-client-go/client"
12- "github.com/grafana/grafana-openapi-client-go/client/service_accounts"
13- "github.com/grafana/grafana-openapi-client-go/models"
1412 "github.com/grafana/terraform-provider-grafana/v2/internal/common"
1513 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1614 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -42,7 +40,6 @@ Required access policy scopes:
4240
4341 CreateContext : withClient [schema.CreateContextFunc ](createStackServiceAccount ),
4442 ReadContext : withClient [schema.ReadContextFunc ](readStackServiceAccount ),
45- UpdateContext : withClient [schema.UpdateContextFunc ](updateStackServiceAccount ),
4643 DeleteContext : withClient [schema.DeleteContextFunc ](deleteStackServiceAccount ),
4744 Importer : & schema.ResourceImporter {
4845 StateContext : schema .ImportStatePassthroughContext ,
@@ -56,21 +53,22 @@ Required access policy scopes:
5653 "name" : {
5754 Type : schema .TypeString ,
5855 Required : true ,
59- ForceNew : true ,
6056 Description : "The name of the service account." ,
57+ ForceNew : true ,
6158 },
6259 "role" : {
6360 Type : schema .TypeString ,
6461 Optional : true ,
6562 ValidateFunc : validation .StringInSlice ([]string {"Viewer" , "Editor" , "Admin" }, false ),
6663 Description : "The basic role of the service account in the organization." ,
64+ ForceNew : true , // The grafana API does not support updating the service account
6765 },
6866 "is_disabled" : {
6967 Type : schema .TypeBool ,
7068 Optional : true ,
7169 Default : false ,
72- ForceNew : true ,
7370 Description : "The disabled status for the service account." ,
71+ ForceNew : true , // The grafana API does not support updating the service account
7472 },
7573 },
7674 }
@@ -84,25 +82,21 @@ Required access policy scopes:
8482
8583func createStackServiceAccount (ctx context.Context , d * schema.ResourceData , cloudClient * gcom.APIClient ) diag.Diagnostics {
8684 stackSlug := d .Get ("stack_slug" ).(string )
87- client , cleanup , err := CreateTemporaryStackGrafanaClient (ctx , cloudClient , stackSlug , "terraform-temp-" )
88- if err != nil {
89- return diag .FromErr (err )
90- }
91- defer cleanup ()
92-
93- req := service_accounts .NewCreateServiceAccountParams ().WithBody (& models.CreateServiceAccountForm {
85+ req := gcom.PostInstanceServiceAccountsRequest {
9486 Name : d .Get ("name" ).(string ),
9587 Role : d .Get ("role" ).(string ),
96- IsDisabled : d .Get ("is_disabled" ).(bool ),
97- })
98- resp , err := client .ServiceAccounts .CreateServiceAccount (req )
88+ IsDisabled : common .Ref (d .Get ("is_disabled" ).(bool )),
89+ }
90+ resp , _ , err := cloudClient .InstancesAPI .PostInstanceServiceAccounts (ctx , stackSlug ).
91+ PostInstanceServiceAccountsRequest (req ).
92+ XRequestId (ClientRequestID ()).
93+ Execute ()
9994 if err != nil {
10095 return diag .FromErr (err )
10196 }
102- sa := resp .Payload
10397
104- d .SetId (resourceStackServiceAccountID .Make (stackSlug , sa . ID ))
105- return readStackServiceAccountWithClient ( client , d , sa . ID )
98+ d .SetId (resourceStackServiceAccountID .Make (stackSlug , resp . Id ))
99+ return readStackServiceAccount ( ctx , d , cloudClient )
106100}
107101
108102func readStackServiceAccount (ctx context.Context , d * schema.ResourceData , cloudClient * gcom.APIClient ) diag.Diagnostics {
@@ -122,69 +116,22 @@ func readStackServiceAccount(ctx context.Context, d *schema.ResourceData, cloudC
122116 stackSlug , serviceAccountID = split [0 ].(string ), split [1 ].(int64 )
123117 }
124118
125- client , cleanup , err := CreateTemporaryStackGrafanaClient (ctx , cloudClient , stackSlug , "terraform-temp-" )
126- if err != nil {
127- return diag .FromErr (err )
128- }
129- defer cleanup ()
130-
131- d .Set ("stack_slug" , stackSlug )
132- d .SetId (resourceStackServiceAccountID .Make (stackSlug , serviceAccountID ))
133-
134- return readStackServiceAccountWithClient (client , d , serviceAccountID )
135- }
136-
137- func readStackServiceAccountWithClient (client * goapi.GrafanaHTTPAPI , d * schema.ResourceData , serviceAccountID int64 ) diag.Diagnostics {
138- resp , err := client .ServiceAccounts .RetrieveServiceAccount (serviceAccountID )
139- if err != nil {
140- return diag .FromErr (err )
141- }
142- sa := resp .Payload
143-
144- err = d .Set ("name" , sa .Name )
145- if err != nil {
146- return diag .FromErr (err )
147- }
148- err = d .Set ("role" , sa .Role )
149- if err != nil {
150- return diag .FromErr (err )
151- }
152- err = d .Set ("is_disabled" , sa .IsDisabled )
153- if err != nil {
154- return diag .FromErr (err )
155- }
156-
157- return nil
158- }
159-
160- func updateStackServiceAccount (ctx context.Context , d * schema.ResourceData , cloudClient * gcom.APIClient ) diag.Diagnostics {
161- split , err := resourceStackServiceAccountID .Split (d .Id ())
162- if err != nil {
163- return diag .FromErr (err )
119+ resp , httpResp , err := cloudClient .InstancesAPI .GetInstanceServiceAccount (ctx , stackSlug , strconv .FormatInt (serviceAccountID , 10 )).Execute ()
120+ if httpResp != nil && httpResp .StatusCode == 404 {
121+ d .SetId ("" )
122+ return nil
164123 }
165- stackSlug , serviceAccountID := split [0 ].(string ), split [1 ].(int64 )
166-
167- client , cleanup , err := CreateTemporaryStackGrafanaClient (ctx , cloudClient , stackSlug , "terraform-temp-" )
168124 if err != nil {
169125 return diag .FromErr (err )
170126 }
171- defer cleanup ()
172-
173- updateRequest := service_accounts .NewUpdateServiceAccountParams ().
174- WithBody (& models.UpdateServiceAccountForm {
175- Name : d .Get ("name" ).(string ),
176- Role : d .Get ("role" ).(string ),
177- IsDisabled : d .Get ("is_disabled" ).(bool ),
178- }).
179- WithServiceAccountID (serviceAccountID )
180127
181- if _ , err := client .ServiceAccounts .UpdateServiceAccount (updateRequest ); err != nil {
182- return diag .FromErr (err )
183- }
184128 d .Set ("stack_slug" , stackSlug )
129+ d .Set ("name" , resp .Name )
130+ d .Set ("role" , resp .Role )
131+ d .Set ("is_disabled" , resp .IsDisabled )
185132 d .SetId (resourceStackServiceAccountID .Make (stackSlug , serviceAccountID ))
186133
187- return readStackServiceAccountWithClient ( client , d , serviceAccountID )
134+ return nil
188135}
189136
190137func deleteStackServiceAccount (ctx context.Context , d * schema.ResourceData , cloudClient * gcom.APIClient ) diag.Diagnostics {
@@ -194,13 +141,9 @@ func deleteStackServiceAccount(ctx context.Context, d *schema.ResourceData, clou
194141 }
195142 stackSlug , serviceAccountID := split [0 ].(string ), split [1 ].(int64 )
196143
197- client , cleanup , err := CreateTemporaryStackGrafanaClient (ctx , cloudClient , stackSlug , "terraform-temp-" )
198- if err != nil {
199- return diag .FromErr (err )
200- }
201- defer cleanup ()
202-
203- _ , err = client .ServiceAccounts .DeleteServiceAccount (serviceAccountID )
144+ _ , err = cloudClient .InstancesAPI .DeleteInstanceServiceAccount (ctx , stackSlug , strconv .FormatInt (serviceAccountID , 10 )).
145+ XRequestId (ClientRequestID ()).
146+ Execute ()
204147 return diag .FromErr (err )
205148}
206149
0 commit comments