Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
3785644
add model serving
PatrickKoss Feb 26, 2025
e4921b6
add right provider config
PatrickKoss Feb 27, 2025
39a66fd
rename model_serving to modelserving
PatrickKoss Feb 27, 2025
b12dab4
add model serving custom endpoint everywhere
PatrickKoss Feb 27, 2025
a53492a
rename file
PatrickKoss Feb 27, 2025
1ecd53c
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 17, 2025
4282256
add default region, docs for model serving
PatrickKoss Mar 17, 2025
7a0bb61
add right order of wait handler
PatrickKoss Mar 18, 2025
6df67d0
rotate after to token
PatrickKoss Mar 18, 2025
5276be4
fixes
PatrickKoss Mar 18, 2025
e53ce45
add initial doc files
PatrickKoss Mar 18, 2025
371fd6e
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 19, 2025
155fe08
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 20, 2025
f2c4594
address code comments
PatrickKoss Mar 20, 2025
0b8ca3f
refactor region description
PatrickKoss Mar 20, 2025
003a818
remove warning for not found resources
PatrickKoss Mar 20, 2025
6b10b86
add service enablement
PatrickKoss Mar 21, 2025
5c742eb
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 24, 2025
01201ed
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 24, 2025
dcd6460
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 25, 2025
73d82ff
address code comments
PatrickKoss Mar 25, 2025
3fb95c9
address code comments
PatrickKoss Mar 25, 2025
6c0eff3
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 27, 2025
1353e1b
fix datasource
PatrickKoss Mar 27, 2025
ca19e0f
fix acc test
PatrickKoss Mar 27, 2025
2d09297
review changes
h3adex Mar 27, 2025
06f7da7
review changes
h3adex Mar 27, 2025
d10f857
review changes
h3adex Mar 27, 2025
2d35713
review changes
h3adex Mar 27, 2025
b42f63c
review changes
h3adex Mar 27, 2025
d4d3c38
Merge branch 'stackitcloud:main' into main
PatrickKoss Mar 27, 2025
c2c152b
review changes
h3adex Mar 27, 2025
c73de13
review changes
h3adex Mar 27, 2025
8f06fb7
review changes
h3adex Mar 27, 2025
1623a0d
review changes
h3adex Mar 27, 2025
8e65c1f
embed markdown description
h3adex Mar 27, 2025
fbea85a
Merge branch 'main' into main
h3adex Mar 28, 2025
68f1c63
go tidy
h3adex Mar 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ require (
golang.org/x/mod v0.23.0
)

require github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
require (
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.1.0 // indirect
)

require (
github.com/ProtonMail/go-crypto v1.1.0-alpha.2 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,8 @@ github.com/stackitcloud/stackit-sdk-go/services/logme v0.21.0 h1:P7bxaVzkZPGMWIt
github.com/stackitcloud/stackit-sdk-go/services/logme v0.21.0/go.mod h1:os4Kp2+jkMUJ2dZtgU9A91N3EJSw3MMh2slxgK1609g=
github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.21.0 h1:ks1i+cfD/YPRss//4aq6uvxbLvUwb5QvcUrOPeboLFY=
github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.21.0/go.mod h1:kGAT87SO5Wkv/CSZevMZcPml3V38G6tnT1Wvdkdmkv4=
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.1.0 h1:hvfR/B3uImnZcJBrV3uylJHKB9VSfz4gBXIYcGEm8Mo=
github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.1.0/go.mod h1:yQTyMSo2QELkt5JXR1W0h/UbA5jQZGraJunwsBSYnRk=
github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v0.18.0 h1:mXVFa5/5uvOibPAUU0HTM7uf7H95IbnYnIzNvR5gB00=
github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v0.18.0/go.mod h1:uuTdgDo4Ju2W0eMfHc3a5n9SXNKJPdxuq15e3AFss6Q=
github.com/stackitcloud/stackit-sdk-go/services/objectstorage v1.1.0 h1:kWfmDQeTMijx0ySPiPfL4EU1TL6lcpkRVrzXenSaX6w=
Expand Down
237 changes: 237 additions & 0 deletions stackit/internal/services/modelserving/model_serving_acc_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
package modelserving_test
Comment thread
rubenhoenle marked this conversation as resolved.
Outdated

import (
"context"
"fmt"
"strings"
"testing"

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/stackitcloud/stackit-sdk-go/core/config"
"github.com/stackitcloud/stackit-sdk-go/services/modelserving"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
)

// Token resource data
var tokenResource = map[string]string{
"project_id": testutil.ProjectId,
"name": testutil.ResourceNameWithDateTime("token"),
"description": "my description",
"description_updated": "my description updated",
"region": testutil.Region,
"ttl_duration": "1h",
}

func inputTokenConfig(name, description string) string {
return fmt.Sprintf(`
%s

resource "stackit_model_serving_token" "token" {
project_id = "%s"
region = "%s"
name = "%s"
description = "%s"
ttl_duration = "%s"
}
`,
testutil.ModelServingProviderConfig(),
tokenResource["project_id"],
tokenResource["region"],
name,
description,
tokenResource["ttl_duration"],
)
}

func TestAccModelServingTokenResource(t *testing.T) {
resource.ParallelTest(t, resource.TestCase{
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
CheckDestroy: testAccCheckModelServingTokenDestroy,
Steps: []resource.TestStep{
// Creation
{
Config: inputTokenConfig(tokenResource["name"], tokenResource["description"]),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"project_id",
tokenResource["project_id"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"region",
tokenResource["region"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"name",
tokenResource["name"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"description",
tokenResource["description"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"ttl_duration",
tokenResource["ttl_duration"],
),
resource.TestCheckResourceAttrSet(
"stackit_model_serving_token.token",
"token_id",
),
resource.TestCheckResourceAttrSet("stackit_model_serving_token.token", "state"),
resource.TestCheckResourceAttrSet(
"stackit_model_serving_token.token",
"validUntil",
),
resource.TestCheckResourceAttrSet(
"stackit_model_serving_token.token",
"content",
),
),
},
// Data Source
{
Config: fmt.Sprintf(`
%s

data "stackit_model_serving_token" "token" {
project_id = stackit_model_serving_token.token.project_id
token_id = stackit_model_serving_token.token.token_id
region = stackit_model_serving_token.token.region
}`,
inputTokenConfig(tokenResource["name"], tokenResource["description"]),
),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "project_id",
"data.stackit_model_serving_token.token", "project_id",
),
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "token_id",
"data.stackit_model_serving_token.token", "token_id",
),
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "region",
"data.stackit_model_serving_token.token", "region",
),
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "name",
"data.stackit_model_serving_token.token", "name",
),
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "description",
"data.stackit_model_serving_token.token", "description",
),
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "state",
"data.stackit_model_serving_token.token", "state",
),
resource.TestCheckResourceAttrPair(
"stackit_model_serving_token.token", "validUntil",
"data.stackit_model_serving_token.token", "validUntil",
),
),
},
// Import
{
ResourceName: "stackit_model_serving_token.token",
ImportStateIdFunc: func(s *terraform.State) (string, error) {
r, ok := s.RootModule().Resources["stackit_model_serving_token.token"]
if !ok {
return "", fmt.Errorf(
"couldn't find resource stackit_model_serving_token.token",
)
}
tokenId, ok := r.Primary.Attributes["token_id"]
if !ok {
return "", fmt.Errorf("couldn't find attribute token_id")
}

return fmt.Sprintf("%s,%s", testutil.ProjectId, tokenId), nil
},
ImportState: true,
ImportStateVerify: true,
},
// Update
{
Config: inputTokenConfig(
tokenResource["name"],
tokenResource["description_updated"],
),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"project_id",
tokenResource["project_id"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"region",
tokenResource["region"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"name",
tokenResource["name"],
),
resource.TestCheckResourceAttr(
"stackit_model_serving_token.token",
"description",
tokenResource["description_updated"],
),
resource.TestCheckResourceAttrSet(
"stackit_model_serving_token.token",
"token_id",
),
resource.TestCheckResourceAttrSet("stackit_model_serving_token.token", "state"),
resource.TestCheckResourceAttrSet(
"stackit_model_serving_token.token",
"validUntil",
),
),
},
// Deletion is done by the framework implicitly
},
})
}

func testAccCheckModelServingTokenDestroy(s *terraform.State) error {
ctx := context.Background()

var client *modelserving.APIClient
var err error
if testutil.ModelServingCustomEndpoint == "" {
client, err = modelserving.NewAPIClient()
} else {
client, err = modelserving.NewAPIClient(
config.WithEndpoint(testutil.ModelServingCustomEndpoint),
)
}
if err != nil {
return fmt.Errorf("creating client: %w", err)
}

for _, rs := range s.RootModule().Resources {
if rs.Type != "stackit_model_serving_token" {
continue
}
// Token terraform ID: "[projectId],[tokenId]"
idParts := strings.Split(rs.Primary.ID, core.Separator)
if len(idParts) != 2 {
return fmt.Errorf("invalid ID: %s", rs.Primary.ID)
}
tokenId := idParts[1]

_, err := client.GetToken(ctx, testutil.Region, testutil.ProjectId, tokenId).Execute()
if err == nil {
return fmt.Errorf("token %s still exists", tokenId)
}
}

return nil
}
Loading