From 79f25e8b3310ddf0cbaab6122f7cf9b6e50b21f5 Mon Sep 17 00:00:00 2001 From: "Marcel S. Henselin" Date: Tue, 10 Feb 2026 18:04:54 +0100 Subject: [PATCH 1/2] chore: add protocol v6.0 chore: add action --- .github/actions/setup-cache-go/action.yaml | 20 +++++++++++++++----- cmd/cmd/publish/provider.go | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/actions/setup-cache-go/action.yaml b/.github/actions/setup-cache-go/action.yaml index 8837ca59..81f0d17d 100644 --- a/.github/actions/setup-cache-go/action.yaml +++ b/.github/actions/setup-cache-go/action.yaml @@ -1,30 +1,39 @@ -# SPDX-License-Identifier: MIT -name: 'Forgejo Actions to setup Go and cache dependencies' -author: 'Forgejo authors' +name: 'Setup Go and cache dependencies' +author: 'Forgejo authors, Marcel S. Henselin' description: | Wrap the setup-go with improved dependency caching. + inputs: username: description: 'User for which to manage the dependency cache' default: root + go-version: + description: "go version to install" + default: '1.25' + required: true + runs: using: "composite" steps: - name: "Install zstd for faster caching" + shell: bash run: | apt-get update -qq apt-get -q install -qq -y zstd - name: "Set up Go using setup-go" - uses: https://data.forgejo.org/actions/setup-go@v6 + uses: https://code.forgejo.org/actions/setup-go@v6 id: go-version with: - go-version-file: "go.mod" + go-version: ${{ inputs.go-version }} + check-latest: true # Always check for the latest patch release + # go-version-file: "go.mod" # do not cache dependencies, we do this manually cache: false - name: "Get go environment information" + shell: bash id: go-environment run: | chmod 755 $HOME # ensure ${RUN_AS_USER} has permission when go is located in $HOME @@ -36,6 +45,7 @@ runs: GO_VERSION: ${{ steps.go-version.outputs.go-version }} - name: "Create cache folders with correct permissions (for non-root users)" + shell: bash if: inputs.username != 'root' # when the cache is restored, only the permissions of the last part are restored # so assuming that /home/user exists and we are restoring /home/user/go/pkg/mod, diff --git a/cmd/cmd/publish/provider.go b/cmd/cmd/publish/provider.go index 92a77b9a..d581fbe3 100644 --- a/cmd/cmd/publish/provider.go +++ b/cmd/cmd/publish/provider.go @@ -143,7 +143,7 @@ func (p *Provider) createVersionsFile() error { // Build the versions file... version := Version{ Version: p.Version, - Protocols: []string{"5.1"}, + Protocols: []string{"5.1", "6.0"}, Platforms: nil, } for _, sum := range shasums { -- 2.49.1 From 0188461ee9530377b14140b21cf2a18477bba603 Mon Sep 17 00:00:00 2001 From: "Marcel S. Henselin" Date: Wed, 11 Feb 2026 10:01:10 +0100 Subject: [PATCH 2/2] chore: add protocol v6.0 chore: add action --- .github/workflows/ci.yaml | 11 + .../sqlserverflex_acc_test.go | 1068 ++++++----------- 2 files changed, 375 insertions(+), 704 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ac9771a6..693eec61 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -146,6 +146,17 @@ jobs: - name: Test run: make test + - name: Check coverage threshold + shell: bash + run: | + make coverage + COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//') + echo "Coverage: $COVERAGE%" + if (( $(echo "$COVERAGE < 80" | bc -l) )); then + echo "Coverage is below 80%" + # exit 1 + fi + - name: Archive code coverage results uses: actions/upload-artifact@v4 with: diff --git a/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go b/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go index 56001b87..5138deee 100644 --- a/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go +++ b/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go @@ -18,8 +18,8 @@ import ( "github.com/stackitcloud/stackit-sdk-go/core/utils" "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex" "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex/wait" + "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/internal/testutils" "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/core" - "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/testutil" ) var ( @@ -30,35 +30,20 @@ var ( ) var testConfigVarsMin = config.Variables{ - "project_id": config.StringVariable(testutil.ProjectId), - "name": config.StringVariable( - fmt.Sprintf( - "tf-acc-%s", - acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum), - ), - ), + "project_id": config.StringVariable(testutils.ProjectId), + "name": config.StringVariable(fmt.Sprintf("tf-acc-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum))), "flavor_cpu": config.IntegerVariable(4), "flavor_ram": config.IntegerVariable(16), "flavor_description": config.StringVariable("SQLServer-Flex-4.16-Standard-EU01"), "replicas": config.IntegerVariable(1), "flavor_id": config.StringVariable("4.16-Single"), - "username": config.StringVariable( - fmt.Sprintf( - "tf-acc-user-%s", - acctest.RandStringFromCharSet(7, acctest.CharSetAlpha), - ), - ), - "role": config.StringVariable("##STACKIT_LoginManager##"), + "username": config.StringVariable(fmt.Sprintf("tf-acc-user-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlpha))), + "role": config.StringVariable("##STACKIT_LoginManager##"), } var testConfigVarsMax = config.Variables{ - "project_id": config.StringVariable(testutil.ProjectId), - "name": config.StringVariable( - fmt.Sprintf( - "tf-acc-%s", - acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum), - ), - ), + "project_id": config.StringVariable(testutils.ProjectId), + "name": config.StringVariable(fmt.Sprintf("tf-acc-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum))), "acl1": config.StringVariable("192.168.0.0/16"), "flavor_cpu": config.IntegerVariable(4), "flavor_ram": config.IntegerVariable(16), @@ -70,19 +55,14 @@ var testConfigVarsMax = config.Variables{ "options_retention_days": config.IntegerVariable(64), "flavor_id": config.StringVariable("4.16-Single"), "backup_schedule": config.StringVariable("00 6 * * *"), - "username": config.StringVariable( - fmt.Sprintf( - "tf-acc-user-%s", - acctest.RandStringFromCharSet(7, acctest.CharSetAlpha), - ), - ), - "role": config.StringVariable("##STACKIT_LoginManager##"), - "region": config.StringVariable(testutil.Region), + "username": config.StringVariable(fmt.Sprintf("tf-acc-user-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlpha))), + "role": config.StringVariable("##STACKIT_LoginManager##"), + "region": config.StringVariable(testutils.Region), } func configVarsMinUpdated() config.Variables { temp := maps.Clone(testConfigVarsMax) - temp["name"] = config.StringVariable(testutil.ConvertConfigVariable(temp["name"]) + "changed") + temp["name"] = config.StringVariable(testutils.ConvertConfigVariable(temp["name"]) + "changed") return temp } @@ -93,685 +73,375 @@ func configVarsMaxUpdated() config.Variables { } func TestAccSQLServerFlexMinResource(t *testing.T) { - resource.Test( - t, resource.TestCase{ - ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, - CheckDestroy: testAccChecksqlserverflexDestroy, - Steps: []resource.TestStep{ - // Creation - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, - ConfigVariables: testConfigVarsMin, - Check: resource.ComposeAggregateTestCheckFunc( - // Instance - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMin["project_id"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(testConfigVarsMin["name"]), - ), - resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.description", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_description"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "replicas", - testutil.ConvertConfigVariable(testConfigVarsMin["replicas"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_ram"]), - ), - // User - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "project_id", - "stackit_sqlserverflex_instance.instance", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "instance_id", - "stackit_sqlserverflex_instance.instance", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + resource.Test(t, resource.TestCase{ + ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories, + CheckDestroy: testAccChecksqlserverflexDestroy, + Steps: []resource.TestStep{ + // Creation + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, + ConfigVariables: testConfigVarsMin, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.description", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_description"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "replicas", testutils.ConvertConfigVariable(testConfigVarsMin["replicas"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_cpu"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_ram"])), + // User + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "project_id", + "stackit_sqlserverflex_instance.instance", "project_id", ), - }, - // Update - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, - ConfigVariables: testConfigVarsMin, - Check: resource.ComposeAggregateTestCheckFunc( - // Instance - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMin["project_id"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(testConfigVarsMin["name"]), - ), - resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.description", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_description"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_ram"]), - ), - // User - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "project_id", - "stackit_sqlserverflex_instance.instance", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "instance_id", - "stackit_sqlserverflex_instance.instance", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "instance_id", + "stackit_sqlserverflex_instance.instance", "instance_id", ), - }, - // data source - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, - ConfigVariables: testConfigVarsMin, - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMin["project_id"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(testConfigVarsMin["name"]), - ), - resource.TestCheckResourceAttrPair( - "data.stackit_sqlserverflex_instance.instance", "project_id", - "stackit_sqlserverflex_instance.instance", "project_id", - ), - resource.TestCheckResourceAttrPair( - "data.stackit_sqlserverflex_instance.instance", "instance_id", - "stackit_sqlserverflex_instance.instance", "instance_id", - ), - resource.TestCheckResourceAttrPair( - "data.stackit_sqlserverflex_user.user", "instance_id", - "stackit_sqlserverflex_user.user", "instance_id", - ), - - resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.id", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_id"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.description", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_description"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(testConfigVarsMin["flavor_ram"]), - ), - - // User data - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_user.user", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMin["project_id"]), - ), - resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "user_id"), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_user.user", - "username", - testutil.ConvertConfigVariable(testConfigVarsMin["username"]), - ), - resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "roles.#", "1"), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_user.user", - "roles.0", - testutil.ConvertConfigVariable(testConfigVarsMax["role"]), - ), - ), - }, - // Import - { - ConfigVariables: testConfigVarsMin, - ResourceName: "stackit_sqlserverflex_instance.instance", - ImportStateIdFunc: func(s *terraform.State) (string, error) { - r, ok := s.RootModule().Resources["stackit_sqlserverflex_instance.instance"] - if !ok { - return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_instance.instance") - } - instanceId, ok := r.Primary.Attributes["instance_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute instance_id") - } - - return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, testutil.Region, instanceId), nil - }, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"backup_schedule"}, - ImportStateCheck: func(s []*terraform.InstanceState) error { - if len(s) != 1 { - return fmt.Errorf("expected 1 state, got %d", len(s)) - } - return nil - }, - }, - { - ResourceName: "stackit_sqlserverflex_user.user", - ConfigVariables: testConfigVarsMin, - ImportStateIdFunc: func(s *terraform.State) (string, error) { - r, ok := s.RootModule().Resources["stackit_sqlserverflex_user.user"] - if !ok { - return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_user.user") - } - instanceId, ok := r.Primary.Attributes["instance_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute instance_id") - } - userId, ok := r.Primary.Attributes["user_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute user_id") - } - - return fmt.Sprintf("%s,%s,%s,%s", testutil.ProjectId, testutil.Region, instanceId, userId), nil - }, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"password"}, - }, - // Update - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, - ConfigVariables: configVarsMinUpdated(), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(configVarsMinUpdated()["project_id"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(configVarsMinUpdated()["name"]), - ), - resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), - resource.TestCheckResourceAttrSet( - "stackit_sqlserverflex_instance.instance", - "flavor.description", - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(configVarsMinUpdated()["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(configVarsMinUpdated()["flavor_ram"]), - ), - ), - }, - // Deletion is done by the framework implicitly + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + ), }, + // Update + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, + ConfigVariables: testConfigVarsMin, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.description", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_description"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_cpu"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_ram"])), + // User + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "project_id", + "stackit_sqlserverflex_instance.instance", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "instance_id", + "stackit_sqlserverflex_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + ), + }, + // data source + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, + ConfigVariables: testConfigVarsMin, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttrPair( + "data.stackit_sqlserverflex_instance.instance", "project_id", + "stackit_sqlserverflex_instance.instance", "project_id", + ), + resource.TestCheckResourceAttrPair( + "data.stackit_sqlserverflex_instance.instance", "instance_id", + "stackit_sqlserverflex_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttrPair( + "data.stackit_sqlserverflex_user.user", "instance_id", + "stackit_sqlserverflex_user.user", "instance_id", + ), + + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.id", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_id"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.description", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_description"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_cpu"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(testConfigVarsMin["flavor_ram"])), + + // User data + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "project_id", testutils.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "user_id"), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "username", testutils.ConvertConfigVariable(testConfigVarsMin["username"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "roles.#", "1"), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "roles.0", testutils.ConvertConfigVariable(testConfigVarsMax["role"])), + ), + }, + // Import + { + ConfigVariables: testConfigVarsMin, + ResourceName: "stackit_sqlserverflex_instance.instance", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_sqlserverflex_instance.instance"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_instance.instance") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + + return fmt.Sprintf("%s,%s,%s", testutils.ProjectId, testutils.Region, instanceId), nil + }, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"backup_schedule"}, + ImportStateCheck: func(s []*terraform.InstanceState) error { + if len(s) != 1 { + return fmt.Errorf("expected 1 state, got %d", len(s)) + } + return nil + }, + }, + { + ResourceName: "stackit_sqlserverflex_user.user", + ConfigVariables: testConfigVarsMin, + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_sqlserverflex_user.user"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_user.user") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + userId, ok := r.Primary.Attributes["user_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute user_id") + } + + return fmt.Sprintf("%s,%s,%s,%s", testutils.ProjectId, testutils.Region, instanceId, userId), nil + }, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"password"}, + }, + // Update + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMinConfig, + ConfigVariables: configVarsMinUpdated(), + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(configVarsMinUpdated()["project_id"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(configVarsMinUpdated()["name"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.description"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(configVarsMinUpdated()["flavor_cpu"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(configVarsMinUpdated()["flavor_ram"])), + ), + }, + // Deletion is done by the framework implicitly }, - ) + }) } func TestAccSQLServerFlexMaxResource(t *testing.T) { - resource.Test( - t, resource.TestCase{ - ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, - CheckDestroy: testAccChecksqlserverflexDestroy, - Steps: []resource.TestStep{ - // Creation - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, - ConfigVariables: testConfigVarsMax, - Check: resource.ComposeAggregateTestCheckFunc( - // Instance - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMax["project_id"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(testConfigVarsMax["name"]), - ), - resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "acl.0", - testutil.ConvertConfigVariable(testConfigVarsMax["acl1"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.description", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_description"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "replicas", - testutil.ConvertConfigVariable(testConfigVarsMax["replicas"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_ram"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "storage.class", - testutil.ConvertConfigVariable(testConfigVarsMax["storage_class"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "storage.size", - testutil.ConvertConfigVariable(testConfigVarsMax["storage_size"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "version", - testutil.ConvertConfigVariable(testConfigVarsMax["server_version"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "options.retention_days", - testutil.ConvertConfigVariable(testConfigVarsMax["options_retention_days"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "backup_schedule", - testutil.ConvertConfigVariable(testConfigVarsMax["backup_schedule"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "region", - testutil.Region, - ), - // User - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "project_id", - "stackit_sqlserverflex_instance.instance", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "instance_id", - "stackit_sqlserverflex_instance.instance", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + resource.Test(t, resource.TestCase{ + ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories, + CheckDestroy: testAccChecksqlserverflexDestroy, + Steps: []resource.TestStep{ + // Creation + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.0", testutils.ConvertConfigVariable(testConfigVarsMax["acl1"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.description", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_description"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "replicas", testutils.ConvertConfigVariable(testConfigVarsMax["replicas"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_cpu"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_ram"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "storage.class", testutils.ConvertConfigVariable(testConfigVarsMax["storage_class"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "storage.size", testutils.ConvertConfigVariable(testConfigVarsMax["storage_size"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "version", testutils.ConvertConfigVariable(testConfigVarsMax["server_version"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "options.retention_days", testutils.ConvertConfigVariable(testConfigVarsMax["options_retention_days"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "backup_schedule", testutils.ConvertConfigVariable(testConfigVarsMax["backup_schedule"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "region", testutils.Region), + // User + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "project_id", + "stackit_sqlserverflex_instance.instance", "project_id", ), - }, - // Update - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, - ConfigVariables: testConfigVarsMax, - Check: resource.ComposeAggregateTestCheckFunc( - // Instance - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMax["project_id"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(testConfigVarsMax["name"]), - ), - resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "acl.0", - testutil.ConvertConfigVariable(testConfigVarsMax["acl1"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.description", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_description"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "replicas", - testutil.ConvertConfigVariable(testConfigVarsMax["replicas"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_ram"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "storage.class", - testutil.ConvertConfigVariable(testConfigVarsMax["storage_class"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "storage.size", - testutil.ConvertConfigVariable(testConfigVarsMax["storage_size"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "version", - testutil.ConvertConfigVariable(testConfigVarsMax["server_version"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "options.retention_days", - testutil.ConvertConfigVariable(testConfigVarsMax["options_retention_days"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "backup_schedule", - testutil.ConvertConfigVariable(testConfigVarsMax["backup_schedule"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "region", - testutil.Region, - ), - // User - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "project_id", - "stackit_sqlserverflex_instance.instance", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_sqlserverflex_user.user", "instance_id", - "stackit_sqlserverflex_instance.instance", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "instance_id", + "stackit_sqlserverflex_instance.instance", "instance_id", ), - }, - // data source - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, - ConfigVariables: testConfigVarsMax, - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMax["project_id"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(testConfigVarsMax["name"]), - ), - resource.TestCheckResourceAttrPair( - "data.stackit_sqlserverflex_instance.instance", "project_id", - "stackit_sqlserverflex_instance.instance", "project_id", - ), - resource.TestCheckResourceAttrPair( - "data.stackit_sqlserverflex_instance.instance", "instance_id", - "stackit_sqlserverflex_instance.instance", "instance_id", - ), - resource.TestCheckResourceAttrPair( - "data.stackit_sqlserverflex_user.user", "instance_id", - "stackit_sqlserverflex_user.user", "instance_id", - ), - - resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "acl.0", - testutil.ConvertConfigVariable(testConfigVarsMax["acl1"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.id", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_id"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.description", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_description"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(testConfigVarsMax["flavor_ram"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "replicas", - testutil.ConvertConfigVariable(testConfigVarsMax["replicas"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "options.retention_days", - testutil.ConvertConfigVariable(testConfigVarsMax["options_retention_days"]), - ), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_instance.instance", - "backup_schedule", - testutil.ConvertConfigVariable(testConfigVarsMax["backup_schedule"]), - ), - - // User data - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_user.user", - "project_id", - testutil.ConvertConfigVariable(testConfigVarsMax["project_id"]), - ), - resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "user_id"), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_user.user", - "username", - testutil.ConvertConfigVariable(testConfigVarsMax["username"]), - ), - resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "roles.#", "1"), - resource.TestCheckResourceAttr( - "data.stackit_sqlserverflex_user.user", - "roles.0", - testutil.ConvertConfigVariable(testConfigVarsMax["role"]), - ), - resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "host"), - resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "port"), - ), - }, - // Import - { - ConfigVariables: testConfigVarsMax, - ResourceName: "stackit_sqlserverflex_instance.instance", - ImportStateIdFunc: func(s *terraform.State) (string, error) { - r, ok := s.RootModule().Resources["stackit_sqlserverflex_instance.instance"] - if !ok { - return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_instance.instance") - } - instanceId, ok := r.Primary.Attributes["instance_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute instance_id") - } - - return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, testutil.Region, instanceId), nil - }, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"backup_schedule"}, - ImportStateCheck: func(s []*terraform.InstanceState) error { - if len(s) != 1 { - return fmt.Errorf("expected 1 state, got %d", len(s)) - } - if s[0].Attributes["backup_schedule"] != testutil.ConvertConfigVariable(testConfigVarsMax["backup_schedule"]) { - return fmt.Errorf( - "expected backup_schedule %s, got %s", - testConfigVarsMax["backup_schedule"], - s[0].Attributes["backup_schedule"], - ) - } - return nil - }, - }, - { - ResourceName: "stackit_sqlserverflex_user.user", - ConfigVariables: testConfigVarsMax, - ImportStateIdFunc: func(s *terraform.State) (string, error) { - r, ok := s.RootModule().Resources["stackit_sqlserverflex_user.user"] - if !ok { - return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_user.user") - } - instanceId, ok := r.Primary.Attributes["instance_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute instance_id") - } - userId, ok := r.Primary.Attributes["user_id"] - if !ok { - return "", fmt.Errorf("couldn't find attribute user_id") - } - - return fmt.Sprintf("%s,%s,%s,%s", testutil.ProjectId, testutil.Region, instanceId, userId), nil - }, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"password"}, - }, - // Update - { - Config: testutil.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, - ConfigVariables: configVarsMaxUpdated(), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "project_id", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["project_id"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "name", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["name"]), - ), - resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "acl.0", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["acl1"]), - ), - resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), - resource.TestCheckResourceAttrSet( - "stackit_sqlserverflex_instance.instance", - "flavor.description", - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.cpu", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["flavor_cpu"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "flavor.ram", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["flavor_ram"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "replicas", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["replicas"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "storage.class", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["storage_class"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "storage.size", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["storage_size"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "version", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["server_version"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "options.retention_days", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["options_retention_days"]), - ), - resource.TestCheckResourceAttr( - "stackit_sqlserverflex_instance.instance", - "backup_schedule", - testutil.ConvertConfigVariable(configVarsMaxUpdated()["backup_schedule"]), - ), - ), - }, - // Deletion is done by the framework implicitly + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + ), }, + // Update + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.0", testutils.ConvertConfigVariable(testConfigVarsMax["acl1"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.description", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_description"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "replicas", testutils.ConvertConfigVariable(testConfigVarsMax["replicas"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_cpu"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_ram"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "storage.class", testutils.ConvertConfigVariable(testConfigVarsMax["storage_class"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "storage.size", testutils.ConvertConfigVariable(testConfigVarsMax["storage_size"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "version", testutils.ConvertConfigVariable(testConfigVarsMax["server_version"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "options.retention_days", testutils.ConvertConfigVariable(testConfigVarsMax["options_retention_days"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "backup_schedule", testutils.ConvertConfigVariable(testConfigVarsMax["backup_schedule"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "region", testutils.Region), + // User + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "project_id", + "stackit_sqlserverflex_instance.instance", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_sqlserverflex_user.user", "instance_id", + "stackit_sqlserverflex_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "user_id"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_user.user", "password"), + ), + }, + // data source + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttrPair( + "data.stackit_sqlserverflex_instance.instance", "project_id", + "stackit_sqlserverflex_instance.instance", "project_id", + ), + resource.TestCheckResourceAttrPair( + "data.stackit_sqlserverflex_instance.instance", "instance_id", + "stackit_sqlserverflex_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttrPair( + "data.stackit_sqlserverflex_user.user", "instance_id", + "stackit_sqlserverflex_user.user", "instance_id", + ), + + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "acl.0", testutils.ConvertConfigVariable(testConfigVarsMax["acl1"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.id", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_id"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.description", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_description"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_cpu"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(testConfigVarsMax["flavor_ram"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "replicas", testutils.ConvertConfigVariable(testConfigVarsMax["replicas"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "options.retention_days", testutils.ConvertConfigVariable(testConfigVarsMax["options_retention_days"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_instance.instance", "backup_schedule", testutils.ConvertConfigVariable(testConfigVarsMax["backup_schedule"])), + + // User data + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "project_id", testutils.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "user_id"), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "username", testutils.ConvertConfigVariable(testConfigVarsMax["username"])), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "roles.#", "1"), + resource.TestCheckResourceAttr("data.stackit_sqlserverflex_user.user", "roles.0", testutils.ConvertConfigVariable(testConfigVarsMax["role"])), + resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "host"), + resource.TestCheckResourceAttrSet("data.stackit_sqlserverflex_user.user", "port"), + ), + }, + // Import + { + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_sqlserverflex_instance.instance", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_sqlserverflex_instance.instance"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_instance.instance") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + + return fmt.Sprintf("%s,%s,%s", testutils.ProjectId, testutils.Region, instanceId), nil + }, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"backup_schedule"}, + ImportStateCheck: func(s []*terraform.InstanceState) error { + if len(s) != 1 { + return fmt.Errorf("expected 1 state, got %d", len(s)) + } + if s[0].Attributes["backup_schedule"] != testutils.ConvertConfigVariable(testConfigVarsMax["backup_schedule"]) { + return fmt.Errorf("expected backup_schedule %s, got %s", testConfigVarsMax["backup_schedule"], s[0].Attributes["backup_schedule"]) + } + return nil + }, + }, + { + ResourceName: "stackit_sqlserverflex_user.user", + ConfigVariables: testConfigVarsMax, + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_sqlserverflex_user.user"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_sqlserverflex_user.user") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + userId, ok := r.Primary.Attributes["user_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute user_id") + } + + return fmt.Sprintf("%s,%s,%s,%s", testutils.ProjectId, testutils.Region, instanceId, userId), nil + }, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"password"}, + }, + // Update + { + Config: testutils.SQLServerFlexProviderConfig("") + "\n" + resourceMaxConfig, + ConfigVariables: configVarsMaxUpdated(), + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "project_id", testutils.ConvertConfigVariable(configVarsMaxUpdated()["project_id"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "name", testutils.ConvertConfigVariable(configVarsMaxUpdated()["name"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.#", "1"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "acl.0", testutils.ConvertConfigVariable(configVarsMaxUpdated()["acl1"])), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.id"), + resource.TestCheckResourceAttrSet("stackit_sqlserverflex_instance.instance", "flavor.description"), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.cpu", testutils.ConvertConfigVariable(configVarsMaxUpdated()["flavor_cpu"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "flavor.ram", testutils.ConvertConfigVariable(configVarsMaxUpdated()["flavor_ram"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "replicas", testutils.ConvertConfigVariable(configVarsMaxUpdated()["replicas"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "storage.class", testutils.ConvertConfigVariable(configVarsMaxUpdated()["storage_class"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "storage.size", testutils.ConvertConfigVariable(configVarsMaxUpdated()["storage_size"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "version", testutils.ConvertConfigVariable(configVarsMaxUpdated()["server_version"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "options.retention_days", testutils.ConvertConfigVariable(configVarsMaxUpdated()["options_retention_days"])), + resource.TestCheckResourceAttr("stackit_sqlserverflex_instance.instance", "backup_schedule", testutils.ConvertConfigVariable(configVarsMaxUpdated()["backup_schedule"])), + ), + }, + // Deletion is done by the framework implicitly }, - ) + }) } func testAccChecksqlserverflexDestroy(s *terraform.State) error { ctx := context.Background() var client *sqlserverflex.APIClient var err error - if testutil.SQLServerFlexCustomEndpoint == "" { + if testutils.SQLServerFlexCustomEndpoint == "" { client, err = sqlserverflex.NewAPIClient() } else { client, err = sqlserverflex.NewAPIClient( - coreconfig.WithEndpoint(testutil.SQLServerFlexCustomEndpoint), + coreconfig.WithEndpoint(testutils.SQLServerFlexCustomEndpoint), ) } if err != nil { @@ -788,7 +458,7 @@ func testAccChecksqlserverflexDestroy(s *terraform.State) error { instancesToDestroy = append(instancesToDestroy, instanceId) } - instancesResp, err := client.ListInstances(ctx, testutil.ProjectId, testutil.Region).Execute() + instancesResp, err := client.ListInstances(ctx, testutils.ProjectId, testutils.Region).Execute() if err != nil { return fmt.Errorf("getting instancesResp: %w", err) } @@ -799,23 +469,13 @@ func testAccChecksqlserverflexDestroy(s *terraform.State) error { continue } if utils.Contains(instancesToDestroy, *items[i].Id) { - err := client.DeleteInstanceExecute(ctx, testutil.ProjectId, *items[i].Id, testutil.Region) + err := client.DeleteInstanceExecute(ctx, testutils.ProjectId, *items[i].Id, testutils.Region) if err != nil { return fmt.Errorf("destroying instance %s during CheckDestroy: %w", *items[i].Id, err) } - _, err = wait.DeleteInstanceWaitHandler( - ctx, - client, - testutil.ProjectId, - *items[i].Id, - testutil.Region, - ).WaitWithContext(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, client, testutils.ProjectId, *items[i].Id, testutils.Region).WaitWithContext(ctx) if err != nil { - return fmt.Errorf( - "destroying instance %s during CheckDestroy: waiting for deletion %w", - *items[i].Id, - err, - ) + return fmt.Errorf("destroying instance %s during CheckDestroy: waiting for deletion %w", *items[i].Id, err) } } } -- 2.49.1