diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index e6245e52..8a277b91 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -119,6 +119,12 @@ jobs: --gpgPubKeyFile=public_key.pem \ --version=${VERSION} + - name: Prepare documentation nav file + run: | + go run generator/main.go \ + docs \ + --outFile nav.md + - name: Publish provider to S3 run: | set -e @@ -138,3 +144,4 @@ jobs: ssh -o StrictHostKeyChecking=no ubuntu@${{ vars.DOCS_SERVER_IP }} 'rm -rf /srv/www/docs' echo "${{ github.ref_name }}" >docs/_version.txt scp -o StrictHostKeyChecking=no -r docs ubuntu@${{ vars.DOCS_SERVER_IP }}:/srv/www/ + scp -o StrictHostKeyChecking=no nav.md ubuntu@${{ vars.DOCS_SERVER_IP }}:/srv/www/ diff --git a/generator/cmd/build/build.go b/generator/cmd/build/build.go index f8585bad..38f07daa 100644 --- a/generator/cmd/build/build.go +++ b/generator/cmd/build/build.go @@ -8,10 +8,11 @@ import ( "go/token" "log/slog" "os" - "os/exec" "path" "regexp" "strings" + + "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/generator/cmd/tools" ) type Builder struct { @@ -276,20 +277,14 @@ func handleLine(line string) (string, error) { } func (b *Builder) determineRoot() error { - cmd := exec.Command("git", "rev-parse", "--show-toplevel") - out, err := cmd.Output() + root, err := tools.GetGitRoot() if err != nil { return err } - lines := strings.Split(string(out), "\n") - if lines[0] == "" { - return fmt.Errorf("unable to determine root directory from git") - } - b.rootDir = lines[0] + b.rootDir = root if b.Verbose { slog.Info(" ... using root", "dir", b.rootDir) } - return nil } diff --git a/generator/cmd/docCmd.go b/generator/cmd/docCmd.go new file mode 100644 index 00000000..77b1dc23 --- /dev/null +++ b/generator/cmd/docCmd.go @@ -0,0 +1,247 @@ +package cmd + +import ( + "fmt" + "log/slog" + "os" + "path" + "regexp" + "sort" + "strings" + "text/template" + + "github.com/spf13/cobra" + "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/generator/cmd/tools" +) + +var outFile string + +var docsCmd = &cobra.Command{ + Use: "docs", + Short: "handle documentation", + Long: `...`, + RunE: func(_ *cobra.Command, _ []string) error { + // filePathStr := "stackit/internal/services/postgresflexalpha/database/datasources_gen/database_data_source_gen.go" + // + // src, err := os.ReadFile(filePathStr) + // if err != nil { + // return err + //} + // + // i := interp.New( + // interp.Options{ + // GoPath: "/home/henselinm/.asdf/installs/golang/1.25.6/packages", + // BuildTags: nil, + // Stdin: nil, + // Stdout: nil, + // Stderr: nil, + // Args: nil, + // Env: nil, + // SourcecodeFilesystem: nil, + // Unrestricted: false, + // }, + //) + // err = i.Use(i.Symbols("github.com/hashicorp/terraform-plugin-framework-validators")) + // if err != nil { + // return err + //} + // err = i.Use(stdlib.Symbols) + // if err != nil { + // return err + //} + // _, err = i.Eval(string(src)) + // if err != nil { + // return err + //} + // + // v, err := i.Eval("DatabaseDataSourceSchema") + // if err != nil { + // return err + //} + // + // bar := v.Interface().(func(string) string) + // + // r := bar("Kung") + // println(r) + // + // evalPath, err := i.EvalPath(filePathStr) + // if err != nil { + // return err + //} + // + // fmt.Printf("%+v\n", evalPath) + + // _, err = i.Eval(`import "fmt"`) + // if err != nil { + // return err + //} + // _, err = i.Eval(`func Hallo() { fmt.Println("Hi!") }`) + // if err != nil { + // return err + //} + + // v = i.Symbols("Hallo") + + // fmt.Println(v) + return workDocs() + }, +} + +type NavDocs struct { + PageTitle string + Description string + NavigationTitle string + ProviderTitle string + IndexFound bool + Services []Service +} + +type Service struct { + ServiceTitle string + DataSources []ResItem + Resources []ResItem +} + +type ResItem struct { + ItemName string + ItemLink string +} + +func workDocs() error { + slog.Info("creating docs navigation") + root, err := tools.GetGitRoot() + if err != nil { + slog.Error("ERROR", "err", err) + return err + } + + nav := NavDocs{ + PageTitle: "STACKIT terraform provider PRIVATE-PREVIEW", + Description: "", + NavigationTitle: "Navigation", + ProviderTitle: "Provider", + IndexFound: false, + } + startPath := path.Join(root, "docs") + + docs, err := os.ReadDir(startPath) + if err != nil { + return err + } + + services := make(map[string]Service) + dataSources := make(map[string][]ResItem) + resources := make(map[string][]ResItem) + + for _, entry := range docs { + if !entry.IsDir() { + if entry.Name() == "index.md" { + slog.Debug(" found provider index file") + nav.IndexFound = true + continue + } + slog.Debug(" found am ignored file", "fileName", entry.Name()) + continue + } + + if entry.Name() != "data-sources" && entry.Name() != "resources" { + slog.Error("unable to handle entry, skipping", "entry", entry.Name()) + continue + } + + elements, err := os.ReadDir(path.Join(startPath, entry.Name())) + if err != nil { + return err + } + for _, res := range elements { + if res.IsDir() { + slog.Warn("found unexpected directory", "dir", res.Name()) + continue + } + + re := regexp.MustCompile(`([a-z]+)_([a-z]+).md`) + matches := re.FindAllStringSubmatch(res.Name(), -1) + if matches == nil { + slog.Error("unable to identify resource", "item", res.Name()) + continue + } + services[matches[0][1]] = Service{ + ServiceTitle: matches[0][1], + } + switch entry.Name() { + case "data-sources": + dataSources[matches[0][1]] = append(dataSources[matches[0][1]], ResItem{ + ItemName: matches[0][2], + ItemLink: fmt.Sprintf("docs/%s/%s", entry.Name(), matches[0][0]), + }) + case "resources": + resources[matches[0][1]] = append(resources[matches[0][1]], ResItem{ + ItemName: matches[0][2], + ItemLink: fmt.Sprintf("docs/%s/%s", entry.Name(), matches[0][0]), + }) + default: + return fmt.Errorf("this should never have happened") + } + } + + } + + keys := make([]string, 0, len(services)) + for k := range services { + keys = append(keys, k) + } + sort.Strings(keys) + + for _, name := range keys { + item := services[name] + item.DataSources = dataSources[name] + item.Resources = resources[name] + nav.Services = append(nav.Services, item) + } + + fn := template.FuncMap{ + "ucfirst": ucfirst, + } + + tmpl, err := template. + New("nav.md.gompl"). + Funcs(fn). + ParseFiles(path.Join(root, "generator", "cmd", "docs", "templates", "nav.md.gompl")) + if err != nil { + return err + } + + var f *os.File + f, err = os.Create(outFile) + if err != nil { + return err + } + + err = tmpl.Execute(f, nav) + if err != nil { + return err + } + + err = f.Close() + if err != nil { + return err + } + + slog.Info("finished") + return nil +} + +func NewDocsCmd() *cobra.Command { + return docsCmd +} + +func ucfirst(s string) string { + if s == "" { + return "" + } + return strings.ToUpper(s[:1]) + s[1:] +} + +func init() { // nolint: gochecknoinits + docsCmd.Flags().StringVarP(&outFile, "outFile", "o", "nav.md", "nav.md") +} diff --git a/generator/cmd/docs/templates/nav.md.gompl b/generator/cmd/docs/templates/nav.md.gompl new file mode 100644 index 00000000..3800b171 --- /dev/null +++ b/generator/cmd/docs/templates/nav.md.gompl @@ -0,0 +1,27 @@ +--- +page_title: {{ .PageTitle }} +description: {{ .Description }} +--- +## {{ .NavigationTitle }} +### {{ .ProviderTitle }} +{{ if .IndexFound }} +[Provider](/docs/docs/index.md) +{{ end }} +{{- range $index, $service := .Services }} +### {{ $service.ServiceTitle }} +
+ +#### data sources + +{{- range $service.DataSources }} +- [{{ .ItemName }}]({{ .ItemLink }}) +{{- end }} + +#### resources + +{{- range $service.Resources }} +- [{{ .ItemName }}]({{ .ItemLink }}) +{{- end }} +
+ +{{ end }} diff --git a/generator/cmd/rootCmd.go b/generator/cmd/rootCmd.go index 924d8794..8f764b57 100644 --- a/generator/cmd/rootCmd.go +++ b/generator/cmd/rootCmd.go @@ -6,7 +6,7 @@ import ( func NewRootCmd() *cobra.Command { return &cobra.Command{ - Use: "build-tools", + Use: "generator", Short: "...", Long: "...", SilenceErrors: true, // Error is beautified in a custom way before being printed diff --git a/generator/cmd/tools/tools.go b/generator/cmd/tools/tools.go new file mode 100644 index 00000000..334e95ee --- /dev/null +++ b/generator/cmd/tools/tools.go @@ -0,0 +1,20 @@ +package tools + +import ( + "fmt" + "os/exec" + "strings" +) + +func GetGitRoot() (string, error) { + cmd := exec.Command("git", "rev-parse", "--show-toplevel") + out, err := cmd.Output() + if err != nil { + return "", err + } + lines := strings.Split(string(out), "\n") + if lines[0] == "" { + return "", fmt.Errorf("unable to determine root directory from git") + } + return lines[0], nil +} diff --git a/generator/main.go b/generator/main.go index 44e11c23..464e57a0 100644 --- a/generator/main.go +++ b/generator/main.go @@ -31,6 +31,7 @@ func main() { cmd.NewPublishCmd(), cmd.NewGetFieldsCmd(), cmd.NewExamplesCmd(), + cmd.NewDocsCmd(), ) err := rootCmd.Execute() diff --git a/golang-ci.yaml.bak b/golang-ci.yaml.bak new file mode 100644 index 00000000..11f74066 --- /dev/null +++ b/golang-ci.yaml.bak @@ -0,0 +1,97 @@ + +version: "2" +run: + concurrency: 4 +output: + formats: + text: + print-linter-name: true + print-issued-lines: true + colors: true + path: stdout +linters: + enable: + - bodyclose + - depguard + - errorlint + - forcetypeassert + - gochecknoinits + - gocritic + - gosec + - misspell + - nakedret + - revive + - sqlclosecheck + - wastedassign + disable: + - noctx + - unparam + settings: + depguard: + rules: + main: + list-mode: lax + allow: + - tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview + - github.com/hashicorp/terraform-plugin-framework + - github.com/hashicorp/terraform-plugin-log + - github.com/stackitcloud/stackit-sdk-go + deny: + - pkg: github.com/stretchr/testify + desc: Do not use a testing framework + gocritic: + disabled-checks: + - wrapperFunc + - typeDefFirst + - ifElseChain + - dupImport + - hugeParam + enabled-tags: + - performance + - style + - experimental + gosec: + excludes: + - G104 + - G102 + - G304 + - G307 + misspell: + locale: US + nakedret: + max-func-lines: 0 + revive: + severity: error + rules: + - name: errorf + - name: context-as-argument + - name: error-return + - name: increment-decrement + - name: indent-error-flow + - name: superfluous-else + - name: unused-parameter + - name: unreachable-code + - name: atomic + - name: empty-lines + - name: early-return + exclusions: + paths: + - stackit-sdk-generator/ + - generated/ + - pkg_gen/ + generated: lax + warn-unused: true + # Excluding configuration per-path, per-linter, per-text and per-source. + rules: + # Exclude some linters from running on tests files. + - path: _test\.go + linters: + - gochecknoinits +formatters: + enable: + - gofmt + - goimports + settings: + goimports: + local-prefixes: + - tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview \ No newline at end of file diff --git a/sample/.gitignore b/sample/.gitignore new file mode 100644 index 00000000..47c8ccc7 --- /dev/null +++ b/sample/.gitignore @@ -0,0 +1,7 @@ +*.json +*.bak +*.tfstate +*.tfstate.backup +terraform +variables.tf +*.tfrc diff --git a/sample/config.tfrc.example b/sample/config.tfrc.example new file mode 100644 index 00000000..a9adc18f --- /dev/null +++ b/sample/config.tfrc.example @@ -0,0 +1,10 @@ +provider_installation { + dev_overrides { + "registry.terraform.io/mhenselin/stackitprivatepreview" = "/bin/" + } + + # For all other providers, install them directly from their origin provider + # registries as normal. If you omit this, Terraform will _only_ use + # the dev_overrides block, and so no other providers will be available. + direct {} +} diff --git a/sample/postgres/outputs.tf b/sample/postgres/outputs.tf new file mode 100644 index 00000000..674ca8b9 --- /dev/null +++ b/sample/postgres/outputs.tf @@ -0,0 +1,4 @@ + +output "postgres_flavor" { + value = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.flavor_id +} diff --git a/sample/postgres/postresql.tf b/sample/postgres/postresql.tf new file mode 100644 index 00000000..531b17e2 --- /dev/null +++ b/sample/postgres/postresql.tf @@ -0,0 +1,116 @@ + +data "stackitprivatepreview_postgresflexalpha_flavor" "pgsql_flavor" { + project_id = var.project_id + region = "eu01" + cpu = 2 + ram = 4 + node_type = "Single" + storage_class = "premium-perf2-stackit" +} + +resource "stackitprivatepreview_postgresflexalpha_instance" "msh-sna-pe-example" { + project_id = var.project_id + name = "mshpetest2" + backup_schedule = "0 0 * * *" + retention_days = 45 + flavor_id = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.flavor_id + replicas = 1 + storage = { + # class = "premium-perf2-stackit" + performance_class = "premium-perf2-stackit" + size = 10 + } + encryption = { + # key_id = stackit_kms_key.key.key_id + # keyring_id = stackit_kms_keyring.keyring.keyring_id + kek_key_id = var.key_id + kek_key_ring_id = var.keyring_id + kek_key_version = var.key_version + service_account = var.sa_email + } + network = { + acl = ["0.0.0.0/0", "193.148.160.0/19", "170.85.2.177/32"] + access_scope = "PUBLIC" + } + version = 17 +} + +resource "stackitprivatepreview_postgresflexalpha_instance" "msh-sna-pe-example2" { + project_id = var.project_id + name = "mshpetest2-1" + backup_schedule = "0 0 * * *" + retention_days = 45 + flavor_id = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.flavor_id + replicas = 1 + storage = { + # class = "premium-perf2-stackit" + performance_class = "premium-perf2-stackit" + size = 10 + } + encryption = { + # key_id = stackit_kms_key.key.key_id + # keyring_id = stackit_kms_keyring.keyring.keyring_id + kek_key_id = var.key_id + kek_key_ring_id = var.keyring_id + kek_key_version = var.key_version + service_account = var.sa_email + } + network = { + acl = ["0.0.0.0/0", "193.148.160.0/19", "170.85.2.177/32"] + access_scope = "SNA" + } + version = 16 +} + +resource "stackitprivatepreview_postgresflexalpha_user" "ptlsdbadminuser" { + project_id = var.project_id + instance_id = stackitprivatepreview_postgresflexalpha_instance.msh-sna-pe-example.instance_id + name = var.db_admin_username + roles = ["createdb", "login", "login"] + # roles = ["createdb", "login", "createrole"] +} + +resource "stackitprivatepreview_postgresflexalpha_user" "ptlsdbadminuser2" { + project_id = var.project_id + instance_id = stackitprivatepreview_postgresflexalpha_instance.msh-sna-pe-example2.instance_id + name = var.db_admin_username + roles = ["createdb", "login"] + # roles = ["createdb", "login", "createrole"] +} + +resource "stackitprivatepreview_postgresflexalpha_user" "ptlsdbuser" { + project_id = var.project_id + instance_id = stackitprivatepreview_postgresflexalpha_instance.msh-sna-pe-example.instance_id + name = var.db_name + roles = ["login"] + # roles = ["createdb", "login", "createrole"] +} + +resource "stackitprivatepreview_postgresflexalpha_database" "example" { + count = 5 + depends_on = [stackitprivatepreview_postgresflexalpha_user.ptlsdbadminuser] + project_id = var.project_id + instance_id = stackitprivatepreview_postgresflexalpha_instance.msh-sna-pe-example.instance_id + name = "${var.db_name}${count.index}" + owner = var.db_admin_username +} + +# data "stackitprivatepreview_postgresflexalpha_instance" "datapsql" { +# project_id = var.project_id +# instance_id = var.instance_id +# region = "eu01" +# } + +# output "psql_instance_id" { +# value = data.stackitprivatepreview_postgresflexalpha_instance.datapsql.instance_id +# } + +output "psql_user_password" { + value = stackitprivatepreview_postgresflexalpha_user.ptlsdbuser.password + sensitive = true +} + +output "psql_user_conn" { + value = stackitprivatepreview_postgresflexalpha_user.ptlsdbuser.connection_string + sensitive = true +} diff --git a/sample/postgres/providers.tf b/sample/postgres/providers.tf new file mode 100644 index 00000000..5a54a129 --- /dev/null +++ b/sample/postgres/providers.tf @@ -0,0 +1,25 @@ + +terraform { + required_providers { + # stackit = { + # source = "registry.terraform.io/stackitcloud/stackit" + # version = "~> 0.70" + # } + stackitprivatepreview = { + source = "tfregistry.sysops.stackit.rocks/mhenselin/stackitprivatepreview" + version = "> 0.0" + } + } +} + +# provider "stackit" { +# default_region = "eu01" +# enable_beta_resources = true +# service_account_key_path = "./service_account.json" +# } + +provider "stackitprivatepreview" { + default_region = "eu01" + enable_beta_resources = true + service_account_key_path = "../service_account.json" +} diff --git a/sample/postgres/variables.tf.example b/sample/postgres/variables.tf.example new file mode 100644 index 00000000..51a70be4 --- /dev/null +++ b/sample/postgres/variables.tf.example @@ -0,0 +1,11 @@ +variable "project_id" { + default = "" +} + +variable "sa_email" { + default = "" +} + +variable "db_username" { + default = "" +} diff --git a/sample/sqlserver/flavor.tf b/sample/sqlserver/flavor.tf new file mode 100644 index 00000000..c491cc09 --- /dev/null +++ b/sample/sqlserver/flavor.tf @@ -0,0 +1,13 @@ + +data "stackitprivatepreview_sqlserverflexbeta_flavor" "sqlserver_flavor" { + project_id = var.project_id + region = "eu01" + cpu = 4 + ram = 16 + node_type = "Single" + storage_class = "premium-perf2-stackit" +} + +output "sqlserver_flavor" { + value = data.stackitprivatepreview_sqlserverflexbeta_flavor.sqlserver_flavor.flavor_id +} diff --git a/sample/sqlserver/providers.tf b/sample/sqlserver/providers.tf new file mode 100644 index 00000000..233d4df2 --- /dev/null +++ b/sample/sqlserver/providers.tf @@ -0,0 +1,25 @@ + +terraform { + required_providers { + # stackit = { + # source = "registry.terraform.io/stackitcloud/stackit" + # version = "~> 0.70" + # } + stackitprivatepreview = { + source = "tfregistry.sysops.stackit.rocks/mhenselin/stackitprivatepreview" + version = "> 0.0" + } + } +} + +# provider "stackit" { +# default_region = "eu01" +# enable_beta_resources = true +# service_account_key_path = "../service_account.json" +# } + +provider "stackitprivatepreview" { + default_region = "eu01" + enable_beta_resources = true + service_account_key_path = "../service_account.json" +} diff --git a/sample/sqlserver/sqlserver.tf b/sample/sqlserver/sqlserver.tf new file mode 100644 index 00000000..d18f499c --- /dev/null +++ b/sample/sqlserver/sqlserver.tf @@ -0,0 +1,63 @@ +# resource "stackit_kms_keyring" "keyring" { +# project_id = var.project_id +# display_name = "msh-keyring01" +# description = "This is a test keyring for private endpoints" +# } +# +# resource "stackit_kms_key" "key" { +# project_id = var.project_id +# keyring_id = stackit_kms_keyring.keyring.keyring_id +# display_name = "msh-key01" +# protection = "software" +# algorithm = "aes_256_gcm" +# purpose = "symmetric_encrypt_decrypt" +# access_scope = "SNA" +# } +# +# output "keyid" { +# value = stackit_kms_key.key.key_id +# } + +resource "stackitprivatepreview_sqlserverflexbeta_instance" "msh-beta-sna-001" { + project_id = var.project_id + name = "msh-beta-sna-001" + backup_schedule = "0 3 * * *" + retention_days = 31 + flavor_id = data.stackitprivatepreview_sqlserverflexbeta_flavor.sqlserver_flavor.flavor_id + storage = { + class = "premium-perf2-stackit" + size = 10 + } + version = 2022 + encryption = { + #key_id = stackit_kms_key.key.key_id + #keyring_id = stackit_kms_keyring.keyring.keyring_id + #key_version = 1 + # key with scope public + # kek_key_id = "fe039bcf-8d7b-431a-801d-9e81371a6b7b" + kek_key_id = "c6878f92-ce55-4b79-8236-ba9d001d7967" # msh-k-001 + # key_id = var.key_id + # kek_key_ring_id = var.keyring_id + kek_key_ring_id = "0dea3f5f-9947-4dda-a9d3-18418832cefe" # msh-kr-sna01 + kek_key_version = var.key_version + service_account = var.sa_email + } + network = { + acl = ["0.0.0.0/0", "193.148.160.0/19"] + access_scope = "SNA" + } +} + +resource "stackitprivatepreview_sqlserverflexbeta_user" "betauser" { + project_id = var.project_id + instance_id = stackitprivatepreview_sqlserverflexbeta_instance.msh-beta-sna-001.instance_id + username = "betauser" + roles = ["##STACKIT_DatabaseManager##", "##STACKIT_LoginManager##"] +} + +resource "stackitprivatepreview_sqlserverflexbeta_database" "betadb" { + project_id = var.project_id + instance_id = stackitprivatepreview_sqlserverflexbeta_instance.msh-beta-sna-001.instance_id + name = "mshtest002" + owner = stackitprivatepreview_sqlserverflexbeta_user.betauser.username +} diff --git a/sample/sqlserver/variables.tf.example b/sample/sqlserver/variables.tf.example new file mode 100644 index 00000000..51a70be4 --- /dev/null +++ b/sample/sqlserver/variables.tf.example @@ -0,0 +1,11 @@ +variable "project_id" { + default = "" +} + +variable "sa_email" { + default = "" +} + +variable "db_username" { + default = "" +} diff --git a/sample/tf.sh b/sample/tf.sh new file mode 100755 index 00000000..8feaf799 --- /dev/null +++ b/sample/tf.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + + + +# ./tf.sh apply > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2) + +usage() { + echo "$0 usage:" && grep "[[:space:]].)\ #" "$0" | sed 's/#//' | sed -r 's/([a-z])\)/-\1/'; + exit 0; +} + +[ $# -eq 0 ] && usage + +CONFIG_FOLDER=$(dirname "$0") +BINARY=terraform + +ADD="" + +while getopts ":b:hdirt" arg; do + case $arg in + b) # Set binary (default is terraform). + BINARY=${OPTARG} + shift 2 + ;; + d) # Set log level to DEBUG. + TF_LOG=DEBUG + export TF_LOG + shift + ;; + i) # Set log level to INFO. + TF_LOG=INFO + export TF_LOG + shift + ;; + r) # Set log level to INFO. + ADD="-refresh-only" + shift + ;; + t) # Set log level to TRACE. + TF_LOG=TRACE + export TF_LOG + shift + ;; + h | *) # Display help. + usage + ;; + esac +done + +TERRAFORM_CONFIG=${CONFIG_FOLDER}/config.tfrc +export TERRAFORM_CONFIG + +${BINARY} "$@" ${ADD} diff --git a/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go b/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go index 6d6354ea..f6971fd1 100644 --- a/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go +++ b/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go @@ -314,11 +314,14 @@ func TestAccInstanceEncryption(t *testing.T) { data.KekKeyID = os.Getenv("TF_ACC_KEK_KEY_ID") data.KekKeyRingID = os.Getenv("TF_ACC_KEK_KEY_RING_ID") verString := os.Getenv("TF_ACC_KEK_KEY_VERSION") + if verString == "" { + verString = "1" + } version, err := strconv.ParseInt(verString, 0, 32) if err != nil { - t.Errorf("error coverting value to uint8: %+v", verString) + t.Errorf("error coverting value to uint8: '%+v'", verString) } - data.KekKeyVersion = uint8(version) //nolint:gosec // not important its a test + data.KekKeyVersion = uint8(version) //nolint:gosec // not important it's a test data.KekServiceAccount = os.Getenv("TF_ACC_KEK_SERVICE_ACCOUNT") resource.ParallelTest(t, resource.TestCase{