Skip to content

Commit 61a486c

Browse files
authored
chore(modelserving): switch to new SDK structure (#1377)
* chore(modelserving): migrate to new sdk * chore(modelserving): fix linter issues * chore(modelserving): removed unnecessary check; revert code regression to pointer util; use std lib instead of utils if possible * chore(modelserving): go mod tidy
1 parent 0d7331b commit 61a486c

File tree

7 files changed

+76
-109
lines changed

7 files changed

+76
-109
lines changed

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ require (
2525
github.com/stackitcloud/stackit-sdk-go/services/logme v0.27.1
2626
github.com/stackitcloud/stackit-sdk-go/services/logs v0.7.1
2727
github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.28.1
28-
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.8.1
28+
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.9.0
2929
github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.7.2
3030
github.com/stackitcloud/stackit-sdk-go/services/objectstorage v1.7.0
3131
github.com/stackitcloud/stackit-sdk-go/services/observability v0.17.0
@@ -35,8 +35,6 @@ require (
3535
github.com/stackitcloud/stackit-sdk-go/services/redis v0.28.1
3636
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.20.0
3737
github.com/stackitcloud/stackit-sdk-go/services/scf v0.7.0
38-
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.14.3
39-
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0
4038
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.17.0
4139
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0
4240
github.com/stackitcloud/stackit-sdk-go/services/serverupdate v1.5.0

go.sum

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -680,8 +680,6 @@ github.com/stackitcloud/stackit-sdk-go/services/certificates v1.4.1 h1:RBY/mNR4H
680680
github.com/stackitcloud/stackit-sdk-go/services/certificates v1.4.1/go.mod h1:3R/RwYdBc1s6WZNhToWs0rBDropbNRM7okOAdjY3rpU=
681681
github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.1 h1:VfszhFq/Snsd0LnflS8PbM0d9cG98hOFpamfjlcTnDQ=
682682
github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.1/go.mod h1:gBv6YkB3Xf3c0ZXg2GwtWY8zExwGPF/Ag114XiiERxg=
683-
github.com/stackitcloud/stackit-sdk-go/services/edge v0.8.0 h1:lsOTEvItzrUerCzUodyyOy6pZ4QiSzwID7U20ZvZvHw=
684-
github.com/stackitcloud/stackit-sdk-go/services/edge v0.8.0/go.mod h1:CfqSEGCW0b5JlijCwtUT1kfjThmQ5jXX47TWrdD5rTU=
685683
github.com/stackitcloud/stackit-sdk-go/services/edge v0.8.1 h1:G21hx6vztR1Np+K+MXsK1td/CKbKHdLK89zvtH6OoKk=
686684
github.com/stackitcloud/stackit-sdk-go/services/edge v0.8.1/go.mod h1:qHuMB/qt7w1u5Xk3qzP3pJFXjTqPrtpM2bMhKpIvM3I=
687685
github.com/stackitcloud/stackit-sdk-go/services/git v0.11.0 h1:siKBCYl7BwR5S25Y4SwUAX6eFTXSCkQ+8JIQEqyKIXo=
@@ -698,8 +696,8 @@ github.com/stackitcloud/stackit-sdk-go/services/logs v0.7.1 h1:cuQA5dO8WSM0LBHR2
698696
github.com/stackitcloud/stackit-sdk-go/services/logs v0.7.1/go.mod h1:di3QDHwOlpa99dXRuGLcuyDCi0A+zlMtgzYi2okQMr8=
699697
github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.28.1 h1:ZcDYk4kjqZsw0zf4V4E3qIBemn1w2sS2xmq513tUlHA=
700698
github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.28.1/go.mod h1:+vb1QGTPB1ot/se+MAkFUOxFAl7McSCJdjphtGWlzXc=
701-
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.8.1 h1:qBPfWK6Xpi7eYFAZCOR4H2wkJqZMRadfAbBdJ4Qrktk=
702-
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.8.1/go.mod h1:b8L6f68HZce01y+eZ1o7KTRAkgpWhggpvakAEwnxnCs=
699+
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.9.0 h1:Qz671iCW3zux/6pAoWVbERYxhr4hDcezfeI004S8yV8=
700+
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.9.0/go.mod h1:8ly4eauFfbSEBosTnOEONguQWh2THuRyC9HExb4bSSY=
703701
github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.7.2 h1:ymhDgp6+RXBvmi9nugaVCi3MN0q2pC62SD+Nh5nTB84=
704702
github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.7.2/go.mod h1:gm7KzHv788MZ2BPimrlRk3ueV8EBN4JACg/MtotGC70=
705703
github.com/stackitcloud/stackit-sdk-go/services/objectstorage v1.7.0 h1:UxnbsKm6PQV8Gudw/EhySaEh9q1xSaTG8mzJz1EvhnE=
@@ -708,8 +706,6 @@ github.com/stackitcloud/stackit-sdk-go/services/observability v0.17.0 h1:LGwCvvS
708706
github.com/stackitcloud/stackit-sdk-go/services/observability v0.17.0/go.mod h1:9KdrXC5JS30Ay3mR0adb3vNdhca+qxiy/cPF5P4wehQ=
709707
github.com/stackitcloud/stackit-sdk-go/services/opensearch v0.26.1 h1:AO5Np67/w0AUdhb6yk+CTXMzMkGdQPudmI8ryWp94fQ=
710708
github.com/stackitcloud/stackit-sdk-go/services/opensearch v0.26.1/go.mod h1:Reo2Nk3yiA686quUMrk0eKwzpzaAZ7KwmzHzScNdG8Q=
711-
github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.3.5 h1:H67e3KnHQx954yI8fuQmxXwRf/myqAdLg2KvxImp00g=
712-
github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.3.5/go.mod h1:xmAWk9eom8wznvLuLfm0F4xyeiBX8LaggXsKFmos+dw=
713709
github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.6.2 h1:5Op07pEs6dcJxfi2UjT1645k1uMf1xMbY8/D3A797aA=
714710
github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.6.2/go.mod h1:AqFWa9kddt2Wqe8k1Kw5FB1mlHG30K1FGsJx8dw/r1c=
715711
github.com/stackitcloud/stackit-sdk-go/services/rabbitmq v0.29.0 h1:I8NF8Q5nRj7/7qDI8Qm4oI0KCNQcOjE6kqyBdWcUoxk=
@@ -722,8 +718,6 @@ github.com/stackitcloud/stackit-sdk-go/services/scf v0.7.0 h1:ip9BODkeeDXB5Y2i5p
722718
github.com/stackitcloud/stackit-sdk-go/services/scf v0.7.0/go.mod h1:JuJbNkydnm1OFGiRweiLyOUqR6prSOveJC14b1oG+Ok=
723719
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.17.0 h1:6gDKTxdPzabtJ4cPzNgCgsT2+z8v80DSCx476HqzaXk=
724720
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.17.0/go.mod h1:vSWUMTsMbtniEo1I+eCsjCOTODR4iproNAeqG3vr/4I=
725-
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.3.8 h1:LLyANBzE8sQa0/49tQBqq4sVLhNgwdqCeQm76srJHWw=
726-
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.3.8/go.mod h1:/bmg57XZu+bGczzcoumrukiGMPGzI2mOyTT4BVIQUBs=
727721
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0 h1:OGAaEbuoxTZnsWbtFmhkvdvCCV/RpYuE3ALQXmRyOOc=
728722
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0/go.mod h1:h2fhcXRiSFP9yJXY8eb37e+2PhMW11g1GB8LL/EQ1aU=
729723
github.com/stackitcloud/stackit-sdk-go/services/serverupdate v1.5.0 h1:4MYNb3VQjVnVPfJ9xhDbSQgoSkxQZJ0tsv9N7O43/RI=

stackit/internal/services/modelserving/modelserving_acc_test.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ package modelserving_test
33
import (
44
"context"
55
"fmt"
6+
"slices"
67
"strings"
78
"testing"
89

910
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1011
"github.com/hashicorp/terraform-plugin-testing/terraform"
11-
"github.com/stackitcloud/stackit-sdk-go/core/utils"
12-
"github.com/stackitcloud/stackit-sdk-go/services/modelserving"
13-
"github.com/stackitcloud/stackit-sdk-go/services/modelserving/wait"
12+
modelserving "github.com/stackitcloud/stackit-sdk-go/services/modelserving/v1api"
13+
"github.com/stackitcloud/stackit-sdk-go/services/modelserving/v1api/wait"
1414

1515
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1616
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
@@ -118,29 +118,26 @@ func testAccCheckModelServingTokenDestroy(s *terraform.State) error {
118118
return nil
119119
}
120120

121-
tokensResp, err := client.ListTokens(ctx, testutil.Region, testutil.ProjectId).Execute()
121+
tokensResp, err := client.DefaultAPI.ListTokens(ctx, testutil.Region, testutil.ProjectId).Execute()
122122
if err != nil {
123123
return fmt.Errorf("getting tokensResp: %w", err)
124124
}
125125

126-
if tokensResp.Tokens == nil || (tokensResp.Tokens != nil && len(*tokensResp.Tokens) == 0) {
126+
if len(tokensResp.Tokens) == 0 {
127127
fmt.Print("No tokens found for project \n")
128128
return nil
129129
}
130130

131-
items := *tokensResp.Tokens
131+
items := tokensResp.Tokens
132132
for i := range items {
133-
if items[i].Name == nil {
134-
continue
135-
}
136-
if utils.Contains(tokensToDestroy, *items[i].Name) {
137-
_, err := client.DeleteToken(ctx, testutil.Region, testutil.ProjectId, *items[i].Id).Execute()
133+
if slices.Contains(tokensToDestroy, items[i].Name) {
134+
_, err := client.DefaultAPI.DeleteToken(ctx, testutil.Region, testutil.ProjectId, items[i].Id).Execute()
138135
if err != nil {
139-
return fmt.Errorf("destroying token %s during CheckDestroy: %w", *items[i].Name, err)
136+
return fmt.Errorf("destroying token %s during CheckDestroy: %w", items[i].Name, err)
140137
}
141-
_, err = wait.DeleteModelServingWaitHandler(ctx, client, testutil.Region, testutil.ProjectId, *items[i].Id).WaitWithContext(ctx)
138+
_, err = wait.DeleteModelServingWaitHandler(ctx, client.DefaultAPI, testutil.Region, testutil.ProjectId, items[i].Id).WaitWithContext(ctx)
142139
if err != nil {
143-
return fmt.Errorf("destroying token %s during CheckDestroy: waiting for deletion %w", *items[i].Name, err)
140+
return fmt.Errorf("destroying token %s during CheckDestroy: waiting for deletion %w", items[i].Name, err)
144141
}
145142
}
146143
}

stackit/internal/services/modelserving/token/resource.go

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import (
2121
"github.com/hashicorp/terraform-plugin-framework/types"
2222
"github.com/hashicorp/terraform-plugin-log/tflog"
2323
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
24-
"github.com/stackitcloud/stackit-sdk-go/services/modelserving"
25-
"github.com/stackitcloud/stackit-sdk-go/services/modelserving/wait"
24+
modelserving "github.com/stackitcloud/stackit-sdk-go/services/modelserving/v1api"
25+
"github.com/stackitcloud/stackit-sdk-go/services/modelserving/v1api/wait"
2626
"github.com/stackitcloud/stackit-sdk-go/services/serviceenablement"
2727
serviceEnablementWait "github.com/stackitcloud/stackit-sdk-go/services/serviceenablement/wait"
2828

@@ -288,7 +288,7 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest,
288288
}
289289

290290
// Create new AI model serving auth token
291-
createTokenResp, err := r.client.CreateToken(ctx, region, projectId).
291+
createTokenResp, err := r.client.DefaultAPI.CreateToken(ctx, region, projectId).
292292
CreateTokenPayload(*payload).
293293
Execute()
294294
if err != nil {
@@ -303,12 +303,12 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest,
303303

304304
ctx = core.LogResponse(ctx)
305305

306-
if createTokenResp.Token.Id == nil {
306+
if createTokenResp.Token.Id == "" {
307307
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating token", "Got empty token id")
308308
return
309309
}
310310

311-
tokenId := *createTokenResp.Token.Id
311+
tokenId := createTokenResp.Token.Id
312312
// Write id attributes to state before polling via the wait handler - just in case anything goes wrong during the wait handler
313313
ctx = utils.SetAndLogStateFields(ctx, &resp.Diagnostics, &resp.State, map[string]any{
314314
"project_id": projectId,
@@ -319,7 +319,7 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest,
319319
return
320320
}
321321

322-
waitResp, err := wait.CreateModelServingWaitHandler(ctx, r.client, region, projectId, tokenId).WaitWithContext(ctx)
322+
waitResp, err := wait.CreateModelServingWaitHandler(ctx, r.client.DefaultAPI, region, projectId, tokenId).WaitWithContext(ctx)
323323
if err != nil {
324324
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating AI model serving auth token", fmt.Sprintf("Waiting for token to be active: %v", err))
325325
return
@@ -361,7 +361,7 @@ func (r *tokenResource) Read(ctx context.Context, req resource.ReadRequest, resp
361361
ctx = tflog.SetField(ctx, "token_id", tokenId)
362362
ctx = tflog.SetField(ctx, "region", region)
363363

364-
getTokenResp, err := r.client.GetToken(ctx, region, projectId, tokenId).
364+
getTokenResp, err := r.client.DefaultAPI.GetToken(ctx, region, projectId, tokenId).
365365
Execute()
366366
if err != nil {
367367
var oapiErr *oapierror.GenericOpenAPIError
@@ -379,8 +379,7 @@ func (r *tokenResource) Read(ctx context.Context, req resource.ReadRequest, resp
379379

380380
ctx = core.LogResponse(ctx)
381381

382-
if getTokenResp != nil && getTokenResp.Token.State != nil &&
383-
*getTokenResp.Token.State == inactiveState {
382+
if getTokenResp != nil && getTokenResp.Token.State == inactiveState {
384383
resp.State.RemoveResource(ctx)
385384
core.LogAndAddWarning(ctx, &resp.Diagnostics, "Error reading AI model serving auth token", "AI model serving auth token has expired")
386385
return
@@ -440,7 +439,7 @@ func (r *tokenResource) Update(ctx context.Context, req resource.UpdateRequest,
440439
}
441440

442441
// Update AI model serving auth token
443-
updateTokenResp, err := r.client.PartialUpdateToken(ctx, region, projectId, tokenId).PartialUpdateTokenPayload(*payload).Execute()
442+
updateTokenResp, err := r.client.DefaultAPI.PartialUpdateToken(ctx, region, projectId, tokenId).PartialUpdateTokenPayload(*payload).Execute()
444443
if err != nil {
445444
var oapiErr *oapierror.GenericOpenAPIError
446445
if errors.As(err, &oapiErr) {
@@ -468,14 +467,13 @@ func (r *tokenResource) Update(ctx context.Context, req resource.UpdateRequest,
468467

469468
ctx = core.LogResponse(ctx)
470469

471-
if updateTokenResp != nil && updateTokenResp.Token.State != nil &&
472-
*updateTokenResp.Token.State == inactiveState {
470+
if updateTokenResp != nil && updateTokenResp.Token.State == inactiveState {
473471
resp.State.RemoveResource(ctx)
474472
core.LogAndAddWarning(ctx, &resp.Diagnostics, "Error updating AI model serving auth token", "AI model serving auth token has expired")
475473
return
476474
}
477475

478-
waitResp, err := wait.UpdateModelServingWaitHandler(ctx, r.client, region, projectId, tokenId).WaitWithContext(ctx)
476+
waitResp, err := wait.UpdateModelServingWaitHandler(ctx, r.client.DefaultAPI, region, projectId, tokenId).WaitWithContext(ctx)
479477
if err != nil {
480478
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating AI model serving auth token", fmt.Sprintf("Waiting for token to be updated: %v", err))
481479
return
@@ -520,7 +518,7 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest,
520518
ctx = tflog.SetField(ctx, "region", region)
521519

522520
// Delete existing AI model serving auth token. We will ignore the state 'deleting' for now.
523-
_, err := r.client.DeleteToken(ctx, region, projectId, tokenId).Execute()
521+
_, err := r.client.DefaultAPI.DeleteToken(ctx, region, projectId, tokenId).Execute()
524522
if err != nil {
525523
var oapiErr *oapierror.GenericOpenAPIError
526524
if errors.As(err, &oapiErr) {
@@ -536,7 +534,7 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest,
536534

537535
ctx = core.LogResponse(ctx)
538536

539-
_, err = wait.DeleteModelServingWaitHandler(ctx, r.client, region, projectId, tokenId).
537+
_, err = wait.DeleteModelServingWaitHandler(ctx, r.client.DefaultAPI, region, projectId, tokenId).
540538
WaitWithContext(ctx)
541539
if err != nil {
542540
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting AI model serving auth token", fmt.Sprintf("Waiting for token to be deleted: %v", err))
@@ -547,7 +545,7 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest,
547545
}
548546

549547
func mapCreateResponse(tokenCreateResp *modelserving.CreateTokenResponse, waitResp *modelserving.GetTokenResponse, model *Model, region string) error {
550-
if tokenCreateResp == nil || tokenCreateResp.Token == nil {
548+
if tokenCreateResp == nil {
551549
return fmt.Errorf("response input is nil")
552550
}
553551
if model == nil {
@@ -556,25 +554,25 @@ func mapCreateResponse(tokenCreateResp *modelserving.CreateTokenResponse, waitRe
556554

557555
token := tokenCreateResp.Token
558556

559-
if token.Id == nil {
557+
if token.Id == "" {
560558
return fmt.Errorf("token id not present")
561559
}
562560

563561
validUntil := types.StringNull()
564-
if token.ValidUntil != nil {
562+
if !token.ValidUntil.IsZero() {
565563
validUntil = types.StringValue(token.ValidUntil.Format(time.RFC3339))
566564
}
567565

568-
if waitResp == nil || waitResp.Token == nil || waitResp.Token.State == nil {
566+
if waitResp == nil {
569567
return fmt.Errorf("response input is nil")
570568
}
571569

572-
model.Id = utils.BuildInternalTerraformId(model.ProjectId.ValueString(), region, *tokenCreateResp.Token.Id)
573-
model.TokenId = types.StringPointerValue(token.Id)
574-
model.Name = types.StringPointerValue(token.Name)
575-
model.State = types.StringValue(string(waitResp.Token.GetState()))
570+
model.Id = utils.BuildInternalTerraformId(model.ProjectId.ValueString(), region, tokenCreateResp.Token.Id)
571+
model.TokenId = types.StringValue(token.Id)
572+
model.Name = types.StringValue(token.Name)
573+
model.State = types.StringValue(waitResp.Token.State)
576574
model.ValidUntil = validUntil
577-
model.Token = types.StringPointerValue(token.Content)
575+
model.Token = types.StringValue(token.Content)
578576
model.Description = types.StringPointerValue(token.Description)
579577

580578
return nil
@@ -585,24 +583,15 @@ func mapGetResponse(tokenGetResp *modelserving.GetTokenResponse, model *Model) e
585583
return fmt.Errorf("response input is nil")
586584
}
587585

588-
if tokenGetResp.Token == nil {
589-
return fmt.Errorf("response input is nil")
590-
}
591586
if model == nil {
592587
return fmt.Errorf("model input is nil")
593588
}
594589

595-
// theoretically, should never happen, but still catch null pointers
596-
validUntil := types.StringNull()
597-
if tokenGetResp.Token.ValidUntil != nil {
598-
validUntil = types.StringValue(tokenGetResp.Token.ValidUntil.Format(time.RFC3339))
599-
}
600-
601590
model.Id = utils.BuildInternalTerraformId(model.ProjectId.ValueString(), model.Region.ValueString(), model.TokenId.ValueString())
602-
model.TokenId = types.StringPointerValue(tokenGetResp.Token.Id)
603-
model.Name = types.StringPointerValue(tokenGetResp.Token.Name)
604-
model.State = types.StringValue(string(tokenGetResp.Token.GetState()))
605-
model.ValidUntil = validUntil
591+
model.TokenId = types.StringValue(tokenGetResp.Token.Id)
592+
model.Name = types.StringValue(tokenGetResp.Token.Name)
593+
model.State = types.StringValue(tokenGetResp.Token.State)
594+
model.ValidUntil = types.StringValue(tokenGetResp.Token.ValidUntil.Format(time.RFC3339))
606595
model.Description = types.StringPointerValue(tokenGetResp.Token.Description)
607596

608597
return nil
@@ -614,7 +603,7 @@ func toCreatePayload(model *Model) (*modelserving.CreateTokenPayload, error) {
614603
}
615604

616605
return &modelserving.CreateTokenPayload{
617-
Name: conversion.StringValueToPointer(model.Name),
606+
Name: model.Name.ValueString(),
618607
Description: conversion.StringValueToPointer(model.Description),
619608
TtlDuration: conversion.StringValueToPointer(model.TTLDuration),
620609
}, nil

0 commit comments

Comments
 (0)