diff --git a/.github/actions/build/action.yaml b/.github/actions/build/action.yaml
index 3601b23f..8e8c97ab 100644
--- a/.github/actions/build/action.yaml
+++ b/.github/actions/build/action.yaml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
name: Build
description: "Build pipeline"
inputs:
diff --git a/.gitignore b/.gitignore
index 746f70d3..56ab626b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@ coverage.out
coverage.html
generated
stackit-sdk-generator
+dist
\ No newline at end of file
diff --git a/.goreleaser.yaml b/.goreleaser.yaml
index 95b11695..e0aafe37 100644
--- a/.goreleaser.yaml
+++ b/.goreleaser.yaml
@@ -5,6 +5,8 @@
# behavior.
version: 2
+project_name: terraform-provider-stackitprivatepreview
+
builds:
- env:
# goreleaser does not work with CGO, it could also complicate
@@ -30,15 +32,15 @@ builds:
- goos: darwin
goarch: '386'
- goos: windows
- goarch: 'arm6'
+ goarch: arm
binary: '{{ .ProjectName }}_v{{ .Version }}'
archives:
- formats: [ 'zip' ]
name_template: '{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}'
checksum:
- extra_files:
- - glob: 'terraform-registry-manifest.json'
- name_template: '{{ .ProjectName }}_{{ .Version }}_manifest.json'
+# extra_files:
+# - glob: 'terraform-registry-manifest.json'
+# name_template: '{{ .ProjectName }}_{{ .Version }}_manifest.json'
name_template: '{{ .ProjectName }}_{{ .Version }}_SHA256SUMS'
algorithm: sha256
signs:
diff --git a/cmd/main.go b/cmd/main.go
index 515fad5d..1da9489e 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package main
import (
@@ -16,7 +19,7 @@ func NewRootCmd() *cobra.Command {
SilenceErrors: true, // Error is beautified in a custom way before being printed
SilenceUsage: true,
DisableAutoGenTag: true,
- RunE: func(cmd *cobra.Command, _ []string) error {
+ RunE: func(_ *cobra.Command, _ []string) error {
return tools.Build()
},
}
diff --git a/docs/data-sources/postgresflexalpha_flavors.md b/docs/data-sources/postgresflexalpha_flavors.md
new file mode 100644
index 00000000..f90ae257
--- /dev/null
+++ b/docs/data-sources/postgresflexalpha_flavors.md
@@ -0,0 +1,68 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "stackitprivatepreview_postgresflexalpha_flavors Data Source - stackitprivatepreview"
+subcategory: ""
+description: |-
+
+---
+
+# stackitprivatepreview_postgresflexalpha_flavors (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `project_id` (String) The STACKIT project ID.
+- `region` (String) The region which should be addressed
+
+### Optional
+
+- `page` (Number) Number of the page of items list to be returned.
+- `size` (Number) Number of items to be returned on each page.
+- `sort` (String) Sorting of the flavors to be returned on each page.
+
+### Read-Only
+
+- `flavors` (Attributes List) List of flavors available for the project. (see [below for nested schema](#nestedatt--flavors))
+- `pagination` (Attributes) (see [below for nested schema](#nestedatt--pagination))
+
+
+### Nested Schema for `flavors`
+
+Read-Only:
+
+- `cpu` (Number) The cpu count of the instance.
+- `description` (String) The flavor description.
+- `id` (String) The id of the instance flavor.
+- `max_gb` (Number) maximum storage which can be ordered for the flavor in Gigabyte.
+- `memory` (Number) The memory of the instance in Gibibyte.
+- `min_gb` (Number) minimum storage which is required to order in Gigabyte.
+- `node_type` (String) defines the nodeType it can be either single or replica
+- `storage_classes` (Attributes List) maximum storage which can be ordered for the flavor in Gigabyte. (see [below for nested schema](#nestedatt--flavors--storage_classes))
+
+
+### Nested Schema for `flavors.storage_classes`
+
+Read-Only:
+
+- `class` (String)
+- `max_io_per_sec` (Number)
+- `max_through_in_mb` (Number)
+
+
+
+
+### Nested Schema for `pagination`
+
+Read-Only:
+
+- `page` (Number)
+- `size` (Number)
+- `sort` (String)
+- `total_pages` (Number)
+- `total_rows` (Number)
diff --git a/docs/data-sources/sqlserverflexalpha_version.md b/docs/data-sources/sqlserverflexalpha_version.md
new file mode 100644
index 00000000..c9c61732
--- /dev/null
+++ b/docs/data-sources/sqlserverflexalpha_version.md
@@ -0,0 +1,35 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "stackitprivatepreview_sqlserverflexalpha_version Data Source - stackitprivatepreview"
+subcategory: ""
+description: |-
+
+---
+
+# stackitprivatepreview_sqlserverflexalpha_version (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `project_id` (String) The STACKIT project ID.
+- `region` (String) The region which should be addressed
+
+### Read-Only
+
+- `versions` (Attributes List) A list containing available sqlserver versions. (see [below for nested schema](#nestedatt--versions))
+
+
+### Nested Schema for `versions`
+
+Read-Only:
+
+- `beta` (Boolean) Flag if the version is a beta version. If set the version may contain bugs and is not fully tested.
+- `deprecated` (String) Timestamp in RFC3339 format which says when the version will no longer be supported by STACKIT.
+- `recommend` (Boolean) Flag if the version is recommend by the STACKIT Team.
+- `version` (String) The sqlserver version used for the instance.
diff --git a/go.mod b/go.mod
index 8f99040c..223830ef 100644
--- a/go.mod
+++ b/go.mod
@@ -1,10 +1,12 @@
module github.com/mhenselin/terraform-provider-stackitprivatepreview
-go 1.25.5
+go 1.25.6
require (
github.com/google/go-cmp v0.7.0
github.com/google/uuid v1.6.0
+ github.com/hashicorp/copywrite v0.22.0
+ github.com/hashicorp/terraform-plugin-codegen-framework v0.4.1
github.com/hashicorp/terraform-plugin-framework v1.17.0
github.com/hashicorp/terraform-plugin-framework-validators v0.19.0
github.com/hashicorp/terraform-plugin-go v0.29.0
@@ -12,27 +14,49 @@ require (
github.com/hashicorp/terraform-plugin-testing v1.14.0
github.com/ldez/go-git-cmd-wrapper/v2 v2.9.1
github.com/spf13/cobra v1.10.2
- github.com/spf13/viper v1.21.0
- github.com/stackitcloud/stackit-sdk-go/core v0.20.1
- github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v1.4.0
+ github.com/stackitcloud/stackit-sdk-go/core v0.21.0
+ github.com/stackitcloud/stackit-sdk-go/services/iaasalpha v0.1.23-alpha
+ github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v1.4.1
github.com/teambition/rrule-go v1.8.2
)
require (
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
- golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect
+ golang.org/x/telemetry v0.0.0-20260116145544-c6413dc483f5 // indirect
)
require (
+ dario.cat/mergo v1.0.1 // indirect
+ github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
+ github.com/BurntSushi/toml v1.2.1 // indirect
+ github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect
+ github.com/Masterminds/goutils v1.1.1 // indirect
+ github.com/Masterminds/semver/v3 v3.3.0 // indirect
+ github.com/Masterminds/sprig/v3 v3.3.0 // indirect
github.com/ProtonMail/go-crypto v1.3.0 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
+ github.com/armon/go-radix v1.0.0 // indirect
+ github.com/bgentry/speakeasy v0.1.0 // indirect
+ github.com/bmatcuk/doublestar/v4 v4.9.2 // indirect
+ github.com/bradleyfalzon/ghinstallation/v2 v2.17.0 // indirect
+ github.com/cli/go-gh/v2 v2.13.0 // indirect
+ github.com/cli/safeexec v1.0.1 // indirect
+ github.com/clipperhouse/stringish v0.1.1 // indirect
+ github.com/clipperhouse/uax29/v2 v2.3.1 // indirect
github.com/cloudflare/circl v1.6.2 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
- github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
+ github.com/go-openapi/errors v0.22.6 // indirect
+ github.com/go-openapi/strfmt v0.25.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
+ github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
+ github.com/google/go-github/v45 v45.2.0 // indirect
+ github.com/google/go-github/v75 v75.0.0 // indirect
+ github.com/google/go-querystring v1.2.0 // indirect
+ github.com/hashicorp/cli v1.1.7 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-checkpoint v0.5.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
@@ -43,46 +67,72 @@ require (
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/hashicorp/go-version v1.8.0 // indirect
github.com/hashicorp/hc-install v0.9.2 // indirect
+ github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/hcl/v2 v2.24.0 // indirect
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/hashicorp/terraform-exec v0.24.0 // indirect
github.com/hashicorp/terraform-json v0.27.2 // indirect
+ github.com/hashicorp/terraform-plugin-codegen-spec v0.2.0 // indirect
+ github.com/hashicorp/terraform-plugin-docs v0.24.0 // indirect
github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1 // indirect
github.com/hashicorp/terraform-registry-address v0.4.0 // indirect
- github.com/hashicorp/terraform-svchost v0.1.1 // indirect
+ github.com/hashicorp/terraform-svchost v0.2.0 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
+ github.com/huandu/xstrings v1.5.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
+ github.com/jedib0t/go-pretty v4.3.0+incompatible // indirect
+ github.com/jedib0t/go-pretty/v6 v6.7.8 // indirect
+ github.com/joho/godotenv v1.5.1 // indirect
+ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
+ github.com/knadh/koanf v1.5.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/mattn/go-runewidth v0.0.19 // indirect
+ github.com/mergestat/timediff v0.0.4 // indirect
+ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
+ github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/oklog/run v1.2.0 // indirect
- github.com/pelletier/go-toml/v2 v2.2.4 // indirect
- github.com/sagikazarmark/locafero v0.11.0 // indirect
- github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
+ github.com/oklog/ulid v1.3.1 // indirect
+ github.com/posener/complete v1.2.3 // indirect
+ github.com/samber/lo v1.52.0 // indirect
+ github.com/shopspring/decimal v1.4.0 // indirect
github.com/spf13/afero v1.15.0 // indirect
- github.com/spf13/cast v1.10.0 // indirect
+ github.com/spf13/cast v1.7.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
- github.com/subosito/gotenv v1.6.0 // indirect
+ github.com/stretchr/testify v1.11.1 // indirect
+ github.com/thanhpk/randstr v1.0.6 // indirect
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
+ github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
+ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
+ github.com/xeipuuv/gojsonschema v1.2.0 // indirect
+ github.com/yuin/goldmark v1.7.8 // indirect
+ github.com/yuin/goldmark-meta v1.1.0 // indirect
github.com/zclconf/go-cty v1.17.0 // indirect
- go.yaml.in/yaml/v3 v3.0.4 // indirect
- golang.org/x/crypto v0.46.0 // indirect
+ go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
+ go.mongodb.org/mongo-driver v1.17.7 // indirect
+ golang.org/x/crypto v0.47.0 // indirect
+ golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect
golang.org/x/mod v0.32.0 // indirect
- golang.org/x/net v0.48.0 // indirect
+ golang.org/x/net v0.49.0 // indirect
+ golang.org/x/oauth2 v0.34.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.40.0 // indirect
+ golang.org/x/term v0.39.0 // indirect
golang.org/x/text v0.33.0 // indirect
- golang.org/x/tools v0.40.0 // indirect
+ golang.org/x/tools v0.41.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 // indirect
google.golang.org/grpc v1.78.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
)
tool golang.org/x/tools/cmd/goimports
diff --git a/go.sum b/go.sum
index 3b066a44..319bb993 100644
--- a/go.sum
+++ b/go.sum
@@ -1,96 +1,263 @@
-dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
-dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ=
+github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
+github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+E/3VnM0=
+github.com/Kunde21/markdownfmt/v3 v3.1.0/go.mod h1:tPXN1RTyOzJwhfHoon9wUr4HGYmWgVxSQN6VBJDkrVc=
+github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
+github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
+github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
+github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
+github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
+github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
+github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
+github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
+github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw=
github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
+github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
+github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw=
+github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ=
+github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8=
+github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk=
+github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g=
+github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bmatcuk/doublestar/v4 v4.9.2 h1:b0mc6WyRSYLjzofB2v/0cuDUZ+MqoGyH3r0dVij35GI=
+github.com/bmatcuk/doublestar/v4 v4.9.2/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
+github.com/bradleyfalzon/ghinstallation/v2 v2.17.0 h1:SmbUK/GxpAspRjSQbB6ARvH+ArzlNzTtHydNyXUQ6zg=
+github.com/bradleyfalzon/ghinstallation/v2 v2.17.0/go.mod h1:vuD/xvJT9Y+ZVZRv4HQ42cMyPFIYqpc7AbB4Gvt/DlY=
github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw=
github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cli/go-gh/v2 v2.13.0 h1:jEHZu/VPVoIJkciK3pzZd3rbT8J90swsK5Ui4ewH1ys=
+github.com/cli/go-gh/v2 v2.13.0/go.mod h1:Us/NbQ8VNM0fdaILgoXSz6PKkV5PWaEzkJdc9vR2geM=
+github.com/cli/safeexec v1.0.1 h1:e/C79PbXF4yYTN/wauC4tviMxEV13BwljGj0N9j+N00=
+github.com/cli/safeexec v1.0.1/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
+github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA=
+github.com/clipperhouse/uax29/v2 v2.3.1 h1:RjM8gnVbFbgI67SBekIC7ihFpyXwRPYWXn9BZActHbw=
+github.com/clipperhouse/uax29/v2 v2.3.1/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
github.com/cloudflare/circl v1.6.2 h1:hL7VBpHHKzrV5WTfHCaBsgx/HGbBYlgrwvNXEVDYYsQ=
github.com/cloudflare/circl v1.6.2/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
+github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
+github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
+github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-openapi/errors v0.22.6 h1:eDxcf89O8odEnohIXwEjY1IB4ph5vmbUsBMsFNwXWPo=
+github.com/go-openapi/errors v0.22.6/go.mod h1:z9S8ASTUqx7+CP1Q8dD8ewGH/1JWFFLX/2PmAYNQLgk=
+github.com/go-openapi/strfmt v0.25.0 h1:7R0RX7mbKLa9EYCTHRcCuIPcaqlyQiWNPTXwClK0saQ=
+github.com/go-openapi/strfmt v0.25.0/go.mod h1:nNXct7OzbwrMY9+5tLX4I21pzcmE6ccMGXl3jFdPfn8=
+github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls=
+github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
-github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
-github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
+github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
+github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/go-github/v45 v45.2.0 h1:5oRLszbrkvxDDqBCNj2hjDZMKmvexaZ1xw/FCD+K3FI=
+github.com/google/go-github/v45 v45.2.0/go.mod h1:FObaZJEDSTa/WGCzZ2Z3eoCDXWJKMenWWTrd8jrta28=
+github.com/google/go-github/v75 v75.0.0 h1:k7q8Bvg+W5KxRl9Tjq16a9XEgVY1pwuiG5sIL7435Ic=
+github.com/google/go-github/v75 v75.0.0/go.mod h1:H3LUJEA1TCrzuUqtdAQniBNwuKiQIqdGKgBo1/M/uqI=
+github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0=
+github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hashicorp/cli v1.1.7 h1:/fZJ+hNdwfTSfsxMBa9WWMlfjUZbX8/LnUxgAd7lCVU=
+github.com/hashicorp/cli v1.1.7/go.mod h1:e6Mfpga9OCT1vqzFuoGZiiF/KaG9CbUfO5s3ghU3YgU=
+github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ=
+github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
+github.com/hashicorp/copywrite v0.22.0 h1:mqjMrgP3VptS7aLbu2l39rtznoK+BhphHst6i7HiTAo=
+github.com/hashicorp/copywrite v0.22.0/go.mod h1:FqvGJt2+yoYDpVYgFSdg3R2iyhkCVaBmPMhfso0MR2k=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=
github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-cty v1.5.0 h1:EkQ/v+dDNUqnuVpmS5fPqyY71NXVgT5gf32+57xY8g0=
github.com/hashicorp/go-cty v1.5.0/go.mod h1:lFUCG5kd8exDobgSfyj4ONE/dc822kiYMguVKdHGMLM=
+github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
+github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
+github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
+github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA=
github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=
+github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48=
github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw=
+github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
+github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4=
github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24=
github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE=
github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM=
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
+github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
+github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
github.com/hashicorp/terraform-exec v0.24.0 h1:mL0xlk9H5g2bn0pPF6JQZk5YlByqSqrO5VoaNtAf8OE=
github.com/hashicorp/terraform-exec v0.24.0/go.mod h1:lluc/rDYfAhYdslLJQg3J0oDqo88oGQAdHR+wDqFvo4=
github.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU=
github.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE=
+github.com/hashicorp/terraform-plugin-codegen-framework v0.4.1 h1:eaI/3dsu2T5QAXbA+7N+B+UBj20GdtYnsRuYypKh3S4=
+github.com/hashicorp/terraform-plugin-codegen-framework v0.4.1/go.mod h1:kpYM23L7NtcfaQdWAN0QFkV/lU0w16qJ2ddAPCI4zAg=
+github.com/hashicorp/terraform-plugin-codegen-spec v0.2.0 h1:91dQG1A/DxP6vRz9GiytDTrZTXDbhHPvmpYnAyWA/Vw=
+github.com/hashicorp/terraform-plugin-codegen-spec v0.2.0/go.mod h1:fywrEKpordQypmAjz/HIfm2LuNVmyJ6KDe8XT9GdJxQ=
+github.com/hashicorp/terraform-plugin-docs v0.24.0 h1:YNZYd+8cpYclQyXbl1EEngbld8w7/LPOm99GD5nikIU=
+github.com/hashicorp/terraform-plugin-docs v0.24.0/go.mod h1:YLg+7LEwVmRuJc0EuCw0SPLxuQXw5mW8iJ5ml/kvi+o=
github.com/hashicorp/terraform-plugin-framework v1.17.0 h1:JdX50CFrYcYFY31gkmitAEAzLKoBgsK+iaJjDC8OexY=
github.com/hashicorp/terraform-plugin-framework v1.17.0/go.mod h1:4OUXKdHNosX+ys6rLgVlgklfxN3WHR5VHSOABeS/BM0=
github.com/hashicorp/terraform-plugin-framework-validators v0.19.0 h1:Zz3iGgzxe/1XBkooZCewS0nJAaCFPFPHdNJd8FgE4Ow=
@@ -105,19 +272,54 @@ github.com/hashicorp/terraform-plugin-testing v1.14.0 h1:5t4VKrjOJ0rg0sVuSJ86dz5
github.com/hashicorp/terraform-plugin-testing v1.14.0/go.mod h1:1qfWkecyYe1Do2EEOK/5/WnTyvC8wQucUkkhiGLg5nk=
github.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk=
github.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE=
-github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=
-github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc=
+github.com/hashicorp/terraform-svchost v0.2.0 h1:wVc2vMiodOHvNZcQw/3y9af1XSomgjGSv+rv3BMCk7I=
+github.com/hashicorp/terraform-svchost v0.2.0/go.mod h1:/98rrS2yZsbppi4VGVCjwYmh8dqsKzISqK7Hli+0rcQ=
+github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
+github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
+github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
+github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
+github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
+github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
+github.com/hjson/hjson-go/v4 v4.0.0 h1:wlm6IYYqHjOdXH1gHev4VoXCaW20HdQAGCxdOEEg2cs=
+github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E=
+github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
+github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
+github.com/jedib0t/go-pretty v4.3.0+incompatible h1:CGs8AVhEKg/n9YbUenWmNStRW2PHJzaeDodcfvRAbIo=
+github.com/jedib0t/go-pretty v4.3.0+incompatible/go.mod h1:XemHduiw8R651AF9Pt4FwCTKeG3oo7hrHJAoznj9nag=
+github.com/jedib0t/go-pretty/v6 v6.7.8 h1:BVYrDy5DPBA3Qn9ICT+PokP9cvCv1KaHv2i+Hc8sr5o=
+github.com/jedib0t/go-pretty/v6 v6.7.8/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU=
github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=
github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
+github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
+github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
+github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs=
+github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -126,67 +328,148 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/ldez/go-git-cmd-wrapper/v2 v2.9.1 h1:QJRB9Gs5i/h6TVJI6yl09Qm6rNooznRiKwIw+VIxd90=
github.com/ldez/go-git-cmd-wrapper/v2 v2.9.1/go.mod h1:0eUeas7XtKDPKQbB0KijfaMPbuQ/cIprtoTRiwaUoFg=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
+github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
+github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mergestat/timediff v0.0.4 h1:NZ3sqG/6K9flhTubdltmRx3RBfIiYv6LsGP+4FlXMM8=
+github.com/mergestat/timediff v0.0.4/go.mod h1:yvMUaRu2oetc+9IbPLYBJviz6sA7xz8OXMDfhBl7YSI=
+github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
+github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
+github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
+github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
+github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
+github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
+github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk=
+github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E=
github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk=
-github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
-github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
+github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
+github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
+github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
+github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
-github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
+github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw=
+github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
+github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
+github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
-github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
-github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
-github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
-github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
+github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
+github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
-github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
-github.com/stackitcloud/stackit-sdk-go/core v0.20.1 h1:odiuhhRXmxvEvnVTeZSN9u98edvw2Cd3DcnkepncP3M=
-github.com/stackitcloud/stackit-sdk-go/core v0.20.1/go.mod h1:fqto7M82ynGhEnpZU6VkQKYWYoFG5goC076JWXTUPRQ=
-github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v1.4.0 h1:KgIRTw4gpxx8qoiaLGLbXPVDcBgCxPl60gigw+tizYc=
-github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v1.4.0/go.mod h1:fd13ANCU/Pye8uDd/6E0I605+6PYfHuVIQpPEK2Ph6c=
+github.com/stackitcloud/stackit-sdk-go/core v0.21.0 h1:QXZqiaO7U/4IpTkJfzt4dt6QxJzG2uUS12mBnHpYNik=
+github.com/stackitcloud/stackit-sdk-go/core v0.21.0/go.mod h1:fqto7M82ynGhEnpZU6VkQKYWYoFG5goC076JWXTUPRQ=
+github.com/stackitcloud/stackit-sdk-go/services/iaasalpha v0.1.23-alpha h1:ugpMOMUZGB0yXsWcfe97F7GCdjlexbjFuGD8ZeyMSts=
+github.com/stackitcloud/stackit-sdk-go/services/iaasalpha v0.1.23-alpha/go.mod h1:v5VGvTxLcCdJJmblbhqYalt/MFHcElDfYoy15CMhaWs=
+github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v1.4.1 h1:6MJdy1xmdE+uOo/F8mR5HSldjPSHpdhwuqS3u9m2EWQ=
+github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v1.4.1/go.mod h1:XLr3ZfrT1g8ZZMm7A6RXOPBuhBkikdUN2o/+/Y+Hu+g=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
-github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
-github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/teambition/rrule-go v1.8.2 h1:lIjpjvWTj9fFUZCmuoVDrKVOtdiyzbzc93qTmRVe/J8=
github.com/teambition/rrule-go v1.8.2/go.mod h1:Ieq5AbrKGciP1V//Wq8ktsTXwSwJHDD5mD/wLBGl3p4=
+github.com/thanhpk/randstr v1.0.6 h1:psAOktJFD4vV9NEVb3qkhRSMvYh4ORRaj1+w/hn4B+o=
+github.com/thanhpk/randstr v1.0.6/go.mod h1:M/H2P1eNLZzlDwAzpkkkUvoyNNMbzRGhESZuEQk3r0U=
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
@@ -196,11 +479,32 @@ github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAh
github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
+github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
+github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
+github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
github.com/zclconf/go-cty v1.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0=
github.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
+go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw=
+go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU=
+go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
+go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
+go.mongodb.org/mongo-driver v1.17.7 h1:a9w+U3Vt67eYzcfq3k/OAv284/uUUkL0uP75VE5rCOU=
+go.mongodb.org/mongo-driver v1.17.7/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
@@ -213,30 +517,99 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
-go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
-golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
+golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
+golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME=
+golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=
golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
-golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
+golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
+golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
+golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -246,43 +619,102 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo=
-golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8=
+golang.org/x/telemetry v0.0.0-20260116145544-c6413dc483f5 h1:i0p03B68+xC1kD2QUO8JzDTPXCzhN56OLJ+IhHY8U3A=
+golang.org/x/telemetry v0.0.0-20260116145544-c6413dc483f5/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
-golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
+golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
+golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
+golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
-golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
+golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=
+golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 h1:sNrWoksmOyF5bvJUcnmbeAmQi8baNhqg5IWaI3llQqU=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
+google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/golang-ci.bck.yaml b/golang-ci.bck.yaml
index 36ace61d..cbdc4197 100644
--- a/golang-ci.bck.yaml
+++ b/golang-ci.bck.yaml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# This file contains all available configuration options
# with their default values.
diff --git a/golang-ci.yaml b/golang-ci.yaml
index 4b50846f..42277a38 100644
--- a/golang-ci.yaml
+++ b/golang-ci.yaml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
version: "2"
run:
concurrency: 4
@@ -67,6 +70,8 @@ linters:
- third_party$
- builtin$
- examples$
+ - tools/copy.go
+ - tools/main.go
formatters:
enable:
- gofmt
diff --git a/main.go b/main.go
index 97559f18..9adda418 100644
--- a/main.go
+++ b/main.go
@@ -21,7 +21,7 @@ func main() {
flag.BoolVar(&debug, "debug", false, "allows debugging the provider")
flag.Parse()
err := providerserver.Serve(context.Background(), stackit.New(version), providerserver.ServeOpts{
- Address: "registry.terraform.io/mhenselin/stackitprivatepreview",
+ Address: "tfregistry.sysops.stackit.rocks/mhenselin/stackitprivatepreview",
Debug: debug,
})
if err != nil {
diff --git a/pkg/albbeta/api_default_test.go b/pkg/albbeta/api_default_test.go
index 6afff118..03da6aa7 100644
--- a/pkg/albbeta/api_default_test.go
+++ b/pkg/albbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Application Load Balancer API
diff --git a/pkg/albwafalpha/api_default_test.go b/pkg/albwafalpha/api_default_test.go
index 5d8bc548..333489a1 100644
--- a/pkg/albwafalpha/api_default_test.go
+++ b/pkg/albwafalpha/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Application Load Balancer Web Application Firewall API
diff --git a/pkg/cdnbeta/api_default_test.go b/pkg/cdnbeta/api_default_test.go
index c91093a1..7f2518a7 100644
--- a/pkg/cdnbeta/api_default_test.go
+++ b/pkg/cdnbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
CDN API
diff --git a/pkg/certificatesbeta/api_default_test.go b/pkg/certificatesbeta/api_default_test.go
index c0617d09..25ab581c 100644
--- a/pkg/certificatesbeta/api_default_test.go
+++ b/pkg/certificatesbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Application Load Balancer Certificates API
diff --git a/pkg/edgebeta/api_default_test.go b/pkg/edgebeta/api_default_test.go
index d5b03257..bcf1270c 100644
--- a/pkg/edgebeta/api_default_test.go
+++ b/pkg/edgebeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Edge Cloud API
diff --git a/pkg/gitbeta/api_default_test.go b/pkg/gitbeta/api_default_test.go
index 9d6c106e..52796c88 100644
--- a/pkg/gitbeta/api_default_test.go
+++ b/pkg/gitbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Git API
diff --git a/pkg/iaasalpha/api_default_test.go b/pkg/iaasalpha/api_default_test.go
index e0ab157a..159cb9a3 100644
--- a/pkg/iaasalpha/api_default_test.go
+++ b/pkg/iaasalpha/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT IaaS API
diff --git a/pkg/iaasalpha/wait/wait.go b/pkg/iaasalpha/wait/wait.go
index 6293355a..e2d8a613 100644
--- a/pkg/iaasalpha/wait/wait.go
+++ b/pkg/iaasalpha/wait/wait.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package wait
import (
diff --git a/pkg/iaasalpha/wait/wait_test.go b/pkg/iaasalpha/wait/wait_test.go
index a9aba5b1..655ddbc7 100644
--- a/pkg/iaasalpha/wait/wait_test.go
+++ b/pkg/iaasalpha/wait/wait_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package wait
import (
diff --git a/pkg/iaasbeta/api_default_test.go b/pkg/iaasbeta/api_default_test.go
index e36ae66c..c09d762b 100644
--- a/pkg/iaasbeta/api_default_test.go
+++ b/pkg/iaasbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT IaaS API
diff --git a/pkg/intakebeta/api_default_test.go b/pkg/intakebeta/api_default_test.go
index db9584f4..c32f115c 100644
--- a/pkg/intakebeta/api_default_test.go
+++ b/pkg/intakebeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Intake API
diff --git a/pkg/kmsbeta/api_default_test.go b/pkg/kmsbeta/api_default_test.go
index 2df61068..acff022b 100644
--- a/pkg/kmsbeta/api_default_test.go
+++ b/pkg/kmsbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Key Management Service API
diff --git a/pkg/logsalpha/api_default_test.go b/pkg/logsalpha/api_default_test.go
index 27ed5249..d285b0b4 100644
--- a/pkg/logsalpha/api_default_test.go
+++ b/pkg/logsalpha/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Logs API
diff --git a/pkg/logsbeta/api_default_test.go b/pkg/logsbeta/api_default_test.go
index 5bc4fa7e..8289265b 100644
--- a/pkg/logsbeta/api_default_test.go
+++ b/pkg/logsbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Logs API
diff --git a/pkg/postgresflexalpha/api_default_test.go b/pkg/postgresflexalpha/api_default_test.go
index 81f31fc1..6bb207a8 100644
--- a/pkg/postgresflexalpha/api_default_test.go
+++ b/pkg/postgresflexalpha/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
PostgreSQL Flex API
diff --git a/pkg/postgresflexalpha/model_create_instance_request_payload.go b/pkg/postgresflexalpha/model_create_instance_request_payload.go
index da35858a..96d88b0c 100644
--- a/pkg/postgresflexalpha/model_create_instance_request_payload.go
+++ b/pkg/postgresflexalpha/model_create_instance_request_payload.go
@@ -17,26 +17,6 @@ import (
// checks if the CreateInstanceRequestPayload type satisfies the MappedNullable interface at compile time
var _ MappedNullable = &CreateInstanceRequestPayload{}
-/*
- types and functions for acl
-*/
-
-// isModel
-type CreateInstancePayloadGetAclAttributeType = *[]string
-type CreateInstancePayloadGetAclArgType = *[]string
-type CreateInstancePayloadGetAclRetType = []string
-
-func getCreateInstancePayloadGetAclAttributeTypeOk(arg CreateInstancePayloadGetAclAttributeType) (ret CreateInstancePayloadGetAclRetType, ok bool) {
- if arg == nil {
- return ret, false
- }
- return *arg, true
-}
-
-func setCreateInstancePayloadGetAclAttributeType(arg *CreateInstancePayloadGetAclAttributeType, val CreateInstancePayloadGetAclRetType) {
- *arg = &val
-}
-
/*
types and functions for backupSchedule
*/
@@ -223,8 +203,6 @@ type CreateInstanceRequestPayloadGetVersionRetType = string
// CreateInstanceRequestPayload struct for CreateInstanceRequestPayload
type CreateInstanceRequestPayload struct {
- // REQUIRED
- Acl CreateInstancePayloadGetAclAttributeType `json:"acl" required:"true"`
// The schedule for on what time and how often the database backup will be created. The schedule is written as a cron schedule.
// REQUIRED
BackupSchedule CreateInstanceRequestPayloadGetBackupScheduleAttributeType `json:"backupSchedule" required:"true"`
diff --git a/pkg/runcommandbeta/api_default_test.go b/pkg/runcommandbeta/api_default_test.go
index a6d1cd09..45d6c073 100644
--- a/pkg/runcommandbeta/api_default_test.go
+++ b/pkg/runcommandbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT Run Commands Service API
diff --git a/pkg/sfsbeta/api_default_test.go b/pkg/sfsbeta/api_default_test.go
index 30c328a8..fec49be3 100644
--- a/pkg/sfsbeta/api_default_test.go
+++ b/pkg/sfsbeta/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT File Storage (SFS)
diff --git a/pkg/sqlserverflexalpha/api_default_test.go b/pkg/sqlserverflexalpha/api_default_test.go
index bfa0f83c..5bc998dc 100644
--- a/pkg/sqlserverflexalpha/api_default_test.go
+++ b/pkg/sqlserverflexalpha/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT MSSQL Service API
diff --git a/pkg/vpnalpha/api_default_test.go b/pkg/vpnalpha/api_default_test.go
index ba7159be..68c2ebcd 100644
--- a/pkg/vpnalpha/api_default_test.go
+++ b/pkg/vpnalpha/api_default_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
/*
STACKIT VPN API
diff --git a/sample/postgres/outputs.tf b/sample/postgres/outputs.tf
index bbe5490c..20982c6f 100644
--- a/sample/postgres/outputs.tf
+++ b/sample/postgres/outputs.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
output "postgres_flavor" {
value = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.flavor_id
}
diff --git a/sample/postgres/postresql.tf b/sample/postgres/postresql.tf
index db395a4a..01764ad8 100644
--- a/sample/postgres/postresql.tf
+++ b/sample/postgres/postresql.tf
@@ -1,9 +1,12 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
data "stackitprivatepreview_postgresflexalpha_flavor" "pgsql_flavor" {
- project_id = var.project_id
- region = "eu01"
- cpu = 2
- ram = 4
- node_type = "Single"
+ project_id = var.project_id
+ region = "eu01"
+ cpu = 2
+ ram = 4
+ node_type = "Single"
storage_class = "premium-perf2-stackit"
}
@@ -12,19 +15,19 @@ resource "stackitprivatepreview_postgresflexalpha_instance" "msh-sna-pe-example"
name = "mshpetest2"
backup_schedule = "0 0 * * *"
retention_days = 45
- flavor_id = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.flavor_id
- replicas = 1
+ flavor_id = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.flavor_id
+ replicas = 1
storage = {
# class = "premium-perf2-stackit"
- performance_class = data.stackitprivatepreview_postgresflexalpha_flavor.pgsql_flavor.storage_class
- size = 10
+ 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
+ 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 = {
@@ -51,8 +54,8 @@ resource "stackitprivatepreview_postgresflexalpha_user" "ptlsdbuser" {
}
resource "stackitprivatepreview_postgresflexalpha_database" "example" {
- count = 5
- depends_on = [stackitprivatepreview_postgresflexalpha_user.ptlsdbadminuser]
+ 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}"
@@ -70,11 +73,11 @@ resource "stackitprivatepreview_postgresflexalpha_database" "example" {
# }
output "psql_user_password" {
- value = stackitprivatepreview_postgresflexalpha_user.ptlsdbuser.password
+ value = stackitprivatepreview_postgresflexalpha_user.ptlsdbuser.password
sensitive = true
}
output "psql_user_conn" {
- value = stackitprivatepreview_postgresflexalpha_user.ptlsdbuser.connection_string
+ value = stackitprivatepreview_postgresflexalpha_user.ptlsdbuser.connection_string
sensitive = true
}
diff --git a/sample/postgres/providers.tf b/sample/postgres/providers.tf
index c5171712..f338db74 100644
--- a/sample/postgres/providers.tf
+++ b/sample/postgres/providers.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
terraform {
required_providers {
# stackit = {
@@ -5,8 +8,8 @@ terraform {
# version = "~> 0.70"
# }
stackitprivatepreview = {
- source = "registry.terraform.io/mhenselin/stackitprivatepreview"
- version = "~> 0.1"
+ source = "tfregistry.sysops.stackit.rocks/mhenselin/stackitprivatepreview"
+ version = "0.0.0-SNAPSHOT-e91e10e"
}
}
}
diff --git a/sample/sqlserver/flavor.tf b/sample/sqlserver/flavor.tf
index 667ead6f..f23c63a0 100644
--- a/sample/sqlserver/flavor.tf
+++ b/sample/sqlserver/flavor.tf
@@ -1,9 +1,12 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
data "stackitprivatepreview_sqlserverflexalpha_flavor" "sqlserver_flavor" {
- project_id = var.project_id
- region = "eu01"
- cpu = 4
- ram = 16
- node_type = "Single"
+ project_id = var.project_id
+ region = "eu01"
+ cpu = 4
+ ram = 16
+ node_type = "Single"
storage_class = "premium-perf2-stackit"
}
diff --git a/sample/sqlserver/providers.tf b/sample/sqlserver/providers.tf
index c5171712..006aa58b 100644
--- a/sample/sqlserver/providers.tf
+++ b/sample/sqlserver/providers.tf
@@ -1,21 +1,24 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
terraform {
required_providers {
- # stackit = {
- # source = "registry.terraform.io/stackitcloud/stackit"
- # version = "~> 0.70"
- # }
+ stackit = {
+ source = "registry.terraform.io/stackitcloud/stackit"
+ version = "~> 0.70"
+ }
stackitprivatepreview = {
- source = "registry.terraform.io/mhenselin/stackitprivatepreview"
- version = "~> 0.1"
+ source = "tfregistry.sysops.stackit.rocks/mhenselin/stackitprivatepreview"
+ version = "0.0.0-SNAPSHOT-e91e10e"
}
}
}
-# provider "stackit" {
-# default_region = "eu01"
-# enable_beta_resources = true
-# service_account_key_path = "./service_account.json"
-# }
+provider "stackit" {
+ default_region = "eu01"
+ enable_beta_resources = true
+ service_account_key_path = "../service_account.json"
+}
provider "stackitprivatepreview" {
default_region = "eu01"
diff --git a/sample/sqlserver/sqlserver.tf b/sample/sqlserver/sqlserver.tf
index 4206b0fc..984a0464 100644
--- a/sample/sqlserver/sqlserver.tf
+++ b/sample/sqlserver/sqlserver.tf
@@ -1,40 +1,44 @@
-# 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"
-# }
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
-# output "keyid" {
-# value = stackit_kms_key.key.key_id
-# }
+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_sqlserverflexalpha_instance" "sqlsrv" {
project_id = var.project_id
name = "msh-example-instance-002"
backup_schedule = "0 3 * * *"
retention_days = 31
- flavor_id = data.stackitprivatepreview_sqlserverflexalpha_flavor.sqlserver_flavor.flavor_id
+ flavor_id = data.stackitprivatepreview_sqlserverflexalpha_flavor.sqlserver_flavor.flavor_id
storage = {
class = "premium-perf2-stackit"
size = 50
}
version = 2022
encryption = {
- # key_id = stackit_kms_key.key.key_id
- # keyring_id = stackit_kms_keyring.keyring.keyring_id
- key_id = var.key_id
- keyring_id = var.keyring_id
- key_version = var.key_version
+ key_id = stackit_kms_key.key.key_id
+ keyring_id = stackit_kms_keyring.keyring.keyring_id
+ #key_id = var.key_id
+ #keyring_id = var.keyring_id
+ #key_version = var.key_version
+ key_version = 1
service_account = var.sa_email
}
network = {
diff --git a/sample/tf.sh b/sample/tf.sh
index acec7988..c5565b17 100755
--- a/sample/tf.sh
+++ b/sample/tf.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# ./tf.sh apply > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)
diff --git a/scripts/check-docs.sh b/scripts/check-docs.sh
index 7d50bc26..6ae91059 100755
--- a/scripts/check-docs.sh
+++ b/scripts/check-docs.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# This script is used to ensure for PRs the docs are up-to-date via the CI pipeline
# Usage: ./check-docs.sh
diff --git a/scripts/lint-golangci-lint.sh b/scripts/lint-golangci-lint.sh
index c2ffd78f..01d7e429 100755
--- a/scripts/lint-golangci-lint.sh
+++ b/scripts/lint-golangci-lint.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# This script lints the SDK modules and the internal examples
# Pre-requisites: golangci-lint
set -eo pipefail
diff --git a/scripts/project.sh b/scripts/project.sh
index 3a810b49..6db3a30c 100755
--- a/scripts/project.sh
+++ b/scripts/project.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# This script is used to manage the project, only used for installing the required tools for now
# Usage: ./project.sh [action]
diff --git a/scripts/replace.sh b/scripts/replace.sh
index 9326b1f7..9a0a5aba 100755
--- a/scripts/replace.sh
+++ b/scripts/replace.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# Add replace directives to local files to go.work
set -eo pipefail
diff --git a/scripts/tfplugindocs.sh b/scripts/tfplugindocs.sh
index 18ac6ad8..1dd6d667 100755
--- a/scripts/tfplugindocs.sh
+++ b/scripts/tfplugindocs.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
# Pre-requisites: tfplugindocs
set -eo pipefail
diff --git a/service_specs/postgres-flex_database_config.yml b/service_specs/postgres-flex_database_config.yml
index bde8b2ee..d5f59497 100644
--- a/service_specs/postgres-flex_database_config.yml
+++ b/service_specs/postgres-flex_database_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/postgres-flex_flavor_config.yml b/service_specs/postgres-flex_flavors_config.yml
similarity index 69%
rename from service_specs/postgres-flex_flavor_config.yml
rename to service_specs/postgres-flex_flavors_config.yml
index 34f69a4d..8d82e021 100644
--- a/service_specs/postgres-flex_flavor_config.yml
+++ b/service_specs/postgres-flex_flavors_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/postgres-flex_instance_config.yml b/service_specs/postgres-flex_instance_config.yml
index 43af7151..e3dcd8a4 100644
--- a/service_specs/postgres-flex_instance_config.yml
+++ b/service_specs/postgres-flex_instance_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/postgres-flex_role_config.yml b/service_specs/postgres-flex_role_config.yml
index f1fce784..2af517c3 100644
--- a/service_specs/postgres-flex_role_config.yml
+++ b/service_specs/postgres-flex_role_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/postgres-flex_user_config.yml b/service_specs/postgres-flex_user_config.yml
index 5b5b844d..d360877e 100644
--- a/service_specs/postgres-flex_user_config.yml
+++ b/service_specs/postgres-flex_user_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/postgres-flex_version_config.yml b/service_specs/postgres-flex_version_config.yml
index a17433cb..2fb6a3d1 100644
--- a/service_specs/postgres-flex_version_config.yml
+++ b/service_specs/postgres-flex_version_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/sqlserverflex_database_config.yml b/service_specs/sqlserverflex_database_config.yml
index f6a437a9..e6a0e154 100644
--- a/service_specs/sqlserverflex_database_config.yml
+++ b/service_specs/sqlserverflex_database_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/sqlserverflex_flavor_config.yml b/service_specs/sqlserverflex_flavors_config.yml
similarity index 64%
rename from service_specs/sqlserverflex_flavor_config.yml
rename to service_specs/sqlserverflex_flavors_config.yml
index 1850e2da..8d82e021 100644
--- a/service_specs/sqlserverflex_flavor_config.yml
+++ b/service_specs/sqlserverflex_flavors_config.yml
@@ -1,8 +1,11 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
data_sources:
- flavor:
+ flavors:
read:
path: /v3alpha1/projects/{projectId}/regions/{region}/flavors
method: GET
diff --git a/service_specs/sqlserverflex_instance_config.yml b/service_specs/sqlserverflex_instance_config.yml
index 94aa7fe9..8c593393 100644
--- a/service_specs/sqlserverflex_instance_config.yml
+++ b/service_specs/sqlserverflex_instance_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/sqlserverflex_user_config.yml b/service_specs/sqlserverflex_user_config.yml
index f98d5053..aa3b07f2 100644
--- a/service_specs/sqlserverflex_user_config.yml
+++ b/service_specs/sqlserverflex_user_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/service_specs/sqlserverflex_version_config.yml b/service_specs/sqlserverflex_version_config.yml
index 1b2f5c13..4003893a 100644
--- a/service_specs/sqlserverflex_version_config.yml
+++ b/service_specs/sqlserverflex_version_config.yml
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
provider:
name: stackitprivatepreview
diff --git a/stackit/internal/services/postgresflexalpha/database/datasource.go b/stackit/internal/services/postgresflexalpha/database/datasource.go
index 3a9897f1..76189970 100644
--- a/stackit/internal/services/postgresflexalpha/database/datasource.go
+++ b/stackit/internal/services/postgresflexalpha/database/datasource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/database/functions.go b/stackit/internal/services/postgresflexalpha/database/functions.go
index 07d79e37..43eea60f 100644
--- a/stackit/internal/services/postgresflexalpha/database/functions.go
+++ b/stackit/internal/services/postgresflexalpha/database/functions.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/database/functions_test.go b/stackit/internal/services/postgresflexalpha/database/functions_test.go
index 7de0937d..f460cf23 100644
--- a/stackit/internal/services/postgresflexalpha/database/functions_test.go
+++ b/stackit/internal/services/postgresflexalpha/database/functions_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/database/resource.go b/stackit/internal/services/postgresflexalpha/database/resource.go
index 3f73f495..e53d6540 100644
--- a/stackit/internal/services/postgresflexalpha/database/resource.go
+++ b/stackit/internal/services/postgresflexalpha/database/resource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/database/resource_test.go b/stackit/internal/services/postgresflexalpha/database/resource_test.go
index c4150d47..b37313b0 100644
--- a/stackit/internal/services/postgresflexalpha/database/resource_test.go
+++ b/stackit/internal/services/postgresflexalpha/database/resource_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/flavor/datasource.go b/stackit/internal/services/postgresflexalpha/flavor/datasource.go
index b7ed25ee..ea600410 100644
--- a/stackit/internal/services/postgresflexalpha/flavor/datasource.go
+++ b/stackit/internal/services/postgresflexalpha/flavor/datasource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresFlexAlphaFlavor
import (
@@ -10,7 +13,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
"github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/postgresflexalpha"
"github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
- postgresflex "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha"
+ postgresflexalphaGen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavors/datasources_gen"
postgresflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/utils"
"github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/utils"
@@ -143,9 +146,9 @@ func (r *flavorDataSource) Schema(ctx context.Context, _ datasource.SchemaReques
Computed: true,
},
},
- CustomType: postgresflex.StorageClassesType{
+ CustomType: postgresflexalphaGen.StorageClassesType{
ObjectType: types.ObjectType{
- AttrTypes: postgresflex.StorageClassesValue{}.AttributeTypes(ctx),
+ AttrTypes: postgresflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
},
},
},
@@ -210,9 +213,9 @@ func (r *flavorDataSource) Read(ctx context.Context, req datasource.ReadRequest,
model.MinGb = types.Int64Value(*f.MinGB)
if f.StorageClasses == nil {
- model.StorageClasses = types.ListNull(postgresflex.StorageClassesType{
+ model.StorageClasses = types.ListNull(postgresflexalphaGen.StorageClassesType{
ObjectType: basetypes.ObjectType{
- AttrTypes: postgresflex.StorageClassesValue{}.AttributeTypes(ctx),
+ AttrTypes: postgresflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
},
})
} else {
@@ -220,8 +223,8 @@ func (r *flavorDataSource) Read(ctx context.Context, req datasource.ReadRequest,
for _, sc := range *f.StorageClasses {
scList = append(
scList,
- postgresflex.NewStorageClassesValueMust(
- postgresflex.StorageClassesValue{}.AttributeTypes(ctx),
+ postgresflexalphaGen.NewStorageClassesValueMust(
+ postgresflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
map[string]attr.Value{
"class": types.StringValue(*sc.Class),
"max_io_per_sec": types.Int64Value(*sc.MaxIoPerSec),
@@ -231,9 +234,9 @@ func (r *flavorDataSource) Read(ctx context.Context, req datasource.ReadRequest,
)
}
storageClassesList := types.ListValueMust(
- postgresflex.StorageClassesType{
+ postgresflexalphaGen.StorageClassesType{
ObjectType: basetypes.ObjectType{
- AttrTypes: postgresflex.StorageClassesValue{}.AttributeTypes(ctx),
+ AttrTypes: postgresflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
},
},
scList,
diff --git a/stackit/internal/services/postgresflexalpha/flavor/functions.go b/stackit/internal/services/postgresflexalpha/flavor/functions.go
index 0c8b5105..0a811d51 100644
--- a/stackit/internal/services/postgresflexalpha/flavor/functions.go
+++ b/stackit/internal/services/postgresflexalpha/flavor/functions.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresFlexAlphaFlavor
import (
diff --git a/stackit/internal/services/postgresflexalpha/flavor/functions_test.go b/stackit/internal/services/postgresflexalpha/flavor/functions_test.go
index c6f6c5f8..ecc90ebb 100644
--- a/stackit/internal/services/postgresflexalpha/flavor/functions_test.go
+++ b/stackit/internal/services/postgresflexalpha/flavor/functions_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresFlexAlphaFlavor
import (
diff --git a/stackit/internal/services/postgresflexalpha/flavors/datasource.go b/stackit/internal/services/postgresflexalpha/flavors/datasource.go
new file mode 100644
index 00000000..3cc3ab29
--- /dev/null
+++ b/stackit/internal/services/postgresflexalpha/flavors/datasource.go
@@ -0,0 +1,73 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+package postgresflexalpha
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-framework/datasource"
+ "github.com/hashicorp/terraform-plugin-log/tflog"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/postgresflexalpha"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
+ postgresflexalphaGen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavors/datasources_gen"
+ postgresflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/utils"
+)
+
+var (
+ _ datasource.DataSource = &flavorsDataSource{}
+ _ datasource.DataSourceWithConfigure = &flavorsDataSource{}
+)
+
+func NewFlavorsDataSource() datasource.DataSource {
+ return &flavorsDataSource{}
+}
+
+type flavorsDataSource struct {
+ client *postgresflexalpha.APIClient
+ providerData core.ProviderData
+}
+
+func (d *flavorsDataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
+ resp.TypeName = req.ProviderTypeName + "_postgresflexalpha_flavors"
+}
+
+func (d *flavorsDataSource) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
+ resp.Schema = postgresflexalphaGen.FlavorsDataSourceSchema(ctx)
+}
+
+// Configure adds the provider configured client to the data source.
+func (d *flavorsDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
+ var ok bool
+ d.providerData, ok = conversion.ParseProviderData(ctx, req.ProviderData, &resp.Diagnostics)
+ if !ok {
+ return
+ }
+
+ apiClient := postgresflexUtils.ConfigureClient(ctx, &d.providerData, &resp.Diagnostics)
+ if resp.Diagnostics.HasError() {
+ return
+ }
+ d.client = apiClient
+ tflog.Info(ctx, "Postgres Flex version client configured")
+}
+
+func (d *flavorsDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
+ var data postgresflexalphaGen.FlavorsModel
+
+ // Read Terraform configuration data into the model
+ resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
+
+ if resp.Diagnostics.HasError() {
+ return
+ }
+
+ // Todo: Read API call logic
+
+ // Example data value setting
+ // data.Id = types.StringValue("example-id")
+
+ // Save data into Terraform state
+ resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
+}
diff --git a/stackit/internal/services/postgresflexalpha/flavor_data_source_gen.go b/stackit/internal/services/postgresflexalpha/flavors/datasources_gen/flavors_data_source_gen.go
similarity index 97%
rename from stackit/internal/services/postgresflexalpha/flavor_data_source_gen.go
rename to stackit/internal/services/postgresflexalpha/flavors/datasources_gen/flavors_data_source_gen.go
index 9e0f567e..924d1375 100644
--- a/stackit/internal/services/postgresflexalpha/flavor_data_source_gen.go
+++ b/stackit/internal/services/postgresflexalpha/flavors/datasources_gen/flavors_data_source_gen.go
@@ -1,12 +1,10 @@
// Code generated by terraform-plugin-framework-generator DO NOT EDIT.
-package postgresflex
+package postgresflexalpha
import (
"context"
"fmt"
- "strings"
-
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
"github.com/hashicorp/terraform-plugin-framework/attr"
"github.com/hashicorp/terraform-plugin-framework/diag"
@@ -14,42 +12,18 @@ import (
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
"github.com/hashicorp/terraform-plugin-go/tftypes"
+ "strings"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
)
-func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
+func FlavorsDataSourceSchema(ctx context.Context) schema.Schema {
return schema.Schema{
Attributes: map[string]schema.Attribute{
- "cpu": schema.Int64Attribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
- "ram": schema.Int64Attribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
- "node_type": schema.StringAttribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
- "storage_class": schema.StringAttribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
"flavors": schema.ListNestedAttribute{
NestedObject: schema.NestedAttributeObject{
Attributes: map[string]schema.Attribute{
"cpu": schema.Int64Attribute{
- Optional: true,
Computed: true,
Description: "The cpu count of the instance.",
MarkdownDescription: "The cpu count of the instance.",
@@ -70,7 +44,6 @@ func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
MarkdownDescription: "maximum storage which can be ordered for the flavor in Gigabyte.",
},
"memory": schema.Int64Attribute{
- Optional: true,
Computed: true,
Description: "The memory of the instance in Gibibyte.",
MarkdownDescription: "The memory of the instance in Gibibyte.",
@@ -81,7 +54,6 @@ func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
MarkdownDescription: "minimum storage which is required to order in Gigabyte.",
},
"node_type": schema.StringAttribute{
- Optional: true,
Computed: true,
Description: "defines the nodeType it can be either single or replica",
MarkdownDescription: "defines the nodeType it can be either single or replica",
@@ -205,9 +177,6 @@ func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
}
type FlavorsModel struct {
- Cpu types.Int64 `tfsdk:"cpu"`
- Ram types.Int64 `tfsdk:"ram"`
- NodeType types.String `tfsdk:"node_type"`
Flavors types.List `tfsdk:"flavors"`
Page types.Int64 `tfsdk:"page"`
Pagination PaginationValue `tfsdk:"pagination"`
diff --git a/stackit/internal/services/postgresflexalpha/instance/datasource.go b/stackit/internal/services/postgresflexalpha/instance/datasource.go
index 498ce251..f7442f8a 100644
--- a/stackit/internal/services/postgresflexalpha/instance/datasource.go
+++ b/stackit/internal/services/postgresflexalpha/instance/datasource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/instance/functions.go b/stackit/internal/services/postgresflexalpha/instance/functions.go
index 4bab64aa..79d3e9c8 100644
--- a/stackit/internal/services/postgresflexalpha/instance/functions.go
+++ b/stackit/internal/services/postgresflexalpha/instance/functions.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
@@ -6,6 +9,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/attr"
"github.com/hashicorp/terraform-plugin-framework/types"
+ "github.com/hashicorp/terraform-plugin-framework/types/basetypes"
postgresflex "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/postgresflexalpha"
postgresflexalphadatasource "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance/datasources_gen"
postgresflexalpharesource "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance/resources_gen"
@@ -15,7 +19,7 @@ import (
func mapGetInstanceResponseToModel(ctx context.Context, m *postgresflexalpharesource.InstanceModel, resp *postgresflex.GetInstanceResponse) error {
m.BackupSchedule = types.StringValue(resp.GetBackupSchedule())
// need to leave out encryption, as the GetInstance endpoint does not provide it
- //m.Encryption = postgresflexalpharesource.NewEncryptionValueMust(
+ // m.Encryption = postgresflexalpharesource.NewEncryptionValueMust(
// m.Encryption.AttributeTypes(ctx),
// map[string]attr.Value{
// "kek_key_id": types.StringValue(resp.Encryption.GetKekKeyId()),
@@ -23,13 +27,17 @@ func mapGetInstanceResponseToModel(ctx context.Context, m *postgresflexalphareso
// "kek_key_version": types.StringValue(resp.Encryption.GetKekKeyVersion()),
// "service_account": types.StringValue(resp.Encryption.GetServiceAccount()),
// },
- //)
+ // )
m.FlavorId = types.StringValue(resp.GetFlavorId())
if m.Id.IsNull() || m.Id.IsUnknown() {
m.Id = utils.BuildInternalTerraformId(m.ProjectId.ValueString(), m.Region.ValueString(), m.InstanceId.ValueString())
}
m.InstanceId = types.StringPointerValue(resp.Id)
- m.IsDeletable = types.BoolValue(resp.GetIsDeletable())
+
+ m.IsDeletable = types.BoolUnknown()
+ if isDel, ok := resp.GetIsDeletableOk(); ok {
+ m.IsDeletable = types.BoolValue(isDel)
+ }
m.Name = types.StringValue(resp.GetName())
netAcl, diags := types.ListValueFrom(ctx, types.StringType, resp.Network.GetAcl())
@@ -37,13 +45,23 @@ func mapGetInstanceResponseToModel(ctx context.Context, m *postgresflexalphareso
return fmt.Errorf("failed converting network acl from response")
}
+ netInstAdd := types.StringUnknown()
+ if instAdd, ok := resp.Network.GetInstanceAddressOk(); ok {
+ netInstAdd = types.StringValue(instAdd)
+ }
+
+ netRtrAdd := types.StringUnknown()
+ if rtrAdd, ok := resp.Network.GetRouterAddressOk(); ok {
+ netRtrAdd = types.StringValue(rtrAdd)
+ }
+
net, diags := postgresflexalpharesource.NewNetworkValue(
postgresflexalpharesource.NetworkValue{}.AttributeTypes(ctx),
map[string]attr.Value{
- "access_scope": types.StringValue(string(resp.Network.GetAccessScope())),
+ "access_scope": basetypes.NewStringValue(string(resp.Network.GetAccessScope())),
"acl": netAcl,
- "instance_address": types.StringValue(resp.Network.GetInstanceAddress()),
- "router_address": types.StringValue(resp.Network.GetRouterAddress()),
+ "instance_address": netInstAdd,
+ "router_address": netRtrAdd,
},
)
if diags.HasError() {
@@ -53,7 +71,13 @@ func mapGetInstanceResponseToModel(ctx context.Context, m *postgresflexalphareso
m.Network = net
m.Replicas = types.Int64Value(int64(resp.GetReplicas()))
m.RetentionDays = types.Int64Value(resp.GetRetentionDays())
- m.Status = types.StringValue(string(resp.GetStatus()))
+
+ m.Name = types.StringValue(resp.GetName())
+
+ m.Status = types.StringUnknown()
+ if status, ok := resp.GetStatusOk(); ok {
+ m.Status = types.StringValue(string(status))
+ }
storage, diags := postgresflexalpharesource.NewStorageValue(
postgresflexalpharesource.StorageValue{}.AttributeTypes(ctx),
@@ -66,18 +90,20 @@ func mapGetInstanceResponseToModel(ctx context.Context, m *postgresflexalphareso
return fmt.Errorf("failed converting storage from response")
}
m.Storage = storage
+
m.Version = types.StringValue(resp.GetVersion())
return nil
}
func mapGetDataInstanceResponseToModel(ctx context.Context, m *postgresflexalphadatasource.InstanceModel, resp *postgresflex.GetInstanceResponse) error {
m.BackupSchedule = types.StringValue(resp.GetBackupSchedule())
- //m.Encryption = postgresflexalpharesource.EncryptionValue{
+ //nolint:gocritic
+ // m.Encryption = postgresflexalpharesource.EncryptionValue{
// KekKeyId: types.StringValue(resp.Encryption.GetKekKeyId()),
// KekKeyRingId: types.StringValue(resp.Encryption.GetKekKeyRingId()),
// KekKeyVersion: types.StringValue(resp.Encryption.GetKekKeyVersion()),
// ServiceAccount: types.StringValue(resp.Encryption.GetServiceAccount()),
- //}
+ // }
m.FlavorId = types.StringValue(resp.GetFlavorId())
m.Id = utils.BuildInternalTerraformId(m.ProjectId.ValueString(), m.Region.ValueString(), m.InstanceId.ValueString())
m.InstanceId = types.StringPointerValue(resp.Id)
diff --git a/stackit/internal/services/postgresflexalpha/instance/functions_test.go b/stackit/internal/services/postgresflexalpha/instance/functions_test.go
index 9daee9b7..1b325579 100644
--- a/stackit/internal/services/postgresflexalpha/instance/functions_test.go
+++ b/stackit/internal/services/postgresflexalpha/instance/functions_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/instance/models.go b/stackit/internal/services/postgresflexalpha/instance/models.go
deleted file mode 100644
index 708e5875..00000000
--- a/stackit/internal/services/postgresflexalpha/instance/models.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package postgresflexalpha
-
-import (
- "github.com/hashicorp/terraform-plugin-framework/attr"
- "github.com/hashicorp/terraform-plugin-framework/types"
- "github.com/hashicorp/terraform-plugin-framework/types/basetypes"
-)
-
-type Model struct {
- Id types.String `tfsdk:"id"` // needed by TF
- InstanceId types.String `tfsdk:"instance_id"`
- ProjectId types.String `tfsdk:"project_id"`
- Name types.String `tfsdk:"name"`
- BackupSchedule types.String `tfsdk:"backup_schedule"`
- FlavorId types.String `tfsdk:"flavor_id"`
- Replicas types.Int64 `tfsdk:"replicas"`
- RetentionDays types.Int64 `tfsdk:"retention_days"`
- Storage types.Object `tfsdk:"storage"`
- Version types.String `tfsdk:"version"`
- Region types.String `tfsdk:"region"`
- Encryption types.Object `tfsdk:"encryption"`
- Network types.Object `tfsdk:"network"`
-}
-
-type encryptionModel struct {
- KeyRingId types.String `tfsdk:"keyring_id"`
- KeyId types.String `tfsdk:"key_id"`
- KeyVersion types.String `tfsdk:"key_version"`
- ServiceAccount types.String `tfsdk:"service_account"`
-}
-
-var encryptionTypes = map[string]attr.Type{
- "keyring_id": basetypes.StringType{},
- "key_id": basetypes.StringType{},
- "key_version": basetypes.StringType{},
- "service_account": basetypes.StringType{},
-}
-
-type networkModel struct {
- ACL types.List `tfsdk:"acl"`
- AccessScope types.String `tfsdk:"access_scope"`
- InstanceAddress types.String `tfsdk:"instance_address"`
- RouterAddress types.String `tfsdk:"router_address"`
-}
-
-var networkTypes = map[string]attr.Type{
- "acl": basetypes.ListType{ElemType: types.StringType},
- "access_scope": basetypes.StringType{},
- "instance_address": basetypes.StringType{},
- "router_address": basetypes.StringType{},
-}
-
-// Struct corresponding to Model.Storage
-type storageModel struct {
- Class types.String `tfsdk:"class"`
- Size types.Int64 `tfsdk:"size"`
-}
-
-// Types corresponding to storageModel
-var storageTypes = map[string]attr.Type{
- "class": basetypes.StringType{},
- "size": basetypes.Int64Type{},
-}
diff --git a/stackit/internal/services/postgresflexalpha/instance/resource.go b/stackit/internal/services/postgresflexalpha/instance/resource.go
index 603e7182..f363b339 100644
--- a/stackit/internal/services/postgresflexalpha/instance/resource.go
+++ b/stackit/internal/services/postgresflexalpha/instance/resource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
@@ -9,9 +12,6 @@ import (
"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
- "github.com/hashicorp/terraform-plugin-framework/resource/schema"
- "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
- "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
postgresflex "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/postgresflexalpha"
@@ -47,7 +47,6 @@ type instanceResource struct {
func (r *instanceResource) ValidateConfig(ctx context.Context, req resource.ValidateConfigRequest, resp *resource.ValidateConfigResponse) {
var data postgresflexalpha.InstanceModel
- // var data Model
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
if resp.Diagnostics.HasError() {
@@ -68,7 +67,6 @@ func (r *instanceResource) ValidateConfig(ctx context.Context, req resource.Vali
// Use the modifier to set the effective region in the current plan.
func (r *instanceResource) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { // nolint:gocritic // function signature required by Terraform
var configModel postgresflexalpha.InstanceModel
- // var configModel Model
// skip initial empty configuration to avoid follow-up errors
if req.Config.Raw.IsNull() {
return
@@ -79,7 +77,6 @@ func (r *instanceResource) ModifyPlan(ctx context.Context, req resource.ModifyPl
}
var planModel postgresflexalpha.InstanceModel
- // var planModel Model
resp.Diagnostics.Append(req.Plan.Get(ctx, &planModel)...)
if resp.Diagnostics.HasError() {
return
@@ -124,16 +121,6 @@ func (r *instanceResource) Configure(
// Schema defines the schema for the resource.
func (r *instanceResource) Schema(ctx context.Context, _ resource.SchemaRequest, resp *resource.SchemaResponse) {
resp.Schema = postgresflexalpha.InstanceResourceSchema(ctx)
- resp.Schema = addPlanModifiers(resp.Schema)
-}
-
-func addPlanModifiers(s schema.Schema) schema.Schema {
- attr := s.Attributes["backup_schedule"].(schema.StringAttribute)
- attr.PlanModifiers = []planmodifier.String{
- stringplanmodifier.UseStateForUnknown(),
- }
- s.Attributes["backup_schedule"] = attr
- return s
}
// Create creates the resource and sets the initial Terraform state.
@@ -143,7 +130,7 @@ func (r *instanceResource) Create(
resp *resource.CreateResponse,
) { // nolint:gocritic // function signature required by Terraform
var model postgresflexalpha.InstanceModel
- //var model Model
+
diags := req.Plan.Get(ctx, &model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
@@ -211,7 +198,6 @@ func (r *instanceResource) Create(
func modelToCreateInstancePayload(netAcl []string, model postgresflexalpha.InstanceModel, replVal int32) postgresflex.CreateInstanceRequestPayload {
payload := postgresflex.CreateInstanceRequestPayload{
- Acl: &netAcl,
BackupSchedule: model.BackupSchedule.ValueStringPointer(),
Encryption: &postgresflex.InstanceEncryption{
KekKeyId: model.Encryption.KekKeyId.ValueStringPointer(),
@@ -243,7 +229,6 @@ func modelToCreateInstancePayload(netAcl []string, model postgresflexalpha.Insta
// Read refreshes the Terraform state with the latest data.
func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { // nolint:gocritic // function signature required by Terraform
var model postgresflexalpha.InstanceModel
- //var model Model
diags := req.State.Get(ctx, &model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
@@ -290,7 +275,7 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r
// Update updates the resource and sets the updated Terraform state on success.
func (r *instanceResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { // nolint:gocritic // function signature required by Terraform
var model postgresflexalpha.InstanceModel
- //var model Model
+
diags := req.Plan.Get(ctx, &model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
@@ -312,7 +297,13 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques
if diag.HasError() {
return
}
- replInt32 := int32(model.Replicas.ValueInt64())
+
+ if model.Replicas.ValueInt64() > math.MaxInt32 {
+ resp.Diagnostics.AddError("invalid int32 value", "provided int64 value does not fit into int32")
+ return
+ }
+ replInt32 := int32(model.Replicas.ValueInt64()) // nolint:gosec // check is performed above
+
payload := postgresflex.UpdateInstancePartiallyRequestPayload{
BackupSchedule: model.BackupSchedule.ValueStringPointer(),
FlavorId: model.FlavorId.ValueStringPointer(),
@@ -368,7 +359,7 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques
// Delete deletes the resource and removes the Terraform state on success.
func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { // nolint:gocritic // function signature required by Terraform
var model postgresflexalpha.InstanceModel
- //var model Model
+
diags := req.State.Get(ctx, &model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
diff --git a/stackit/internal/services/postgresflexalpha/instance/resource_test.go b/stackit/internal/services/postgresflexalpha/instance/resource_test.go
index 46d935a5..6adda61b 100644
--- a/stackit/internal/services/postgresflexalpha/instance/resource_test.go
+++ b/stackit/internal/services/postgresflexalpha/instance/resource_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/instance/schema_test.go b/stackit/internal/services/postgresflexalpha/instance/schema_test.go
index ec567d75..04805921 100644
--- a/stackit/internal/services/postgresflexalpha/instance/schema_test.go
+++ b/stackit/internal/services/postgresflexalpha/instance/schema_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/main.go b/stackit/internal/services/postgresflexalpha/main.go
new file mode 100644
index 00000000..24e4af4d
--- /dev/null
+++ b/stackit/internal/services/postgresflexalpha/main.go
@@ -0,0 +1,4 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+package postgresflexalpha
diff --git a/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go b/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go
index c7cd9096..e79cf893 100644
--- a/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go
+++ b/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go
@@ -1,6 +1,6 @@
// Copyright (c) STACKIT
-package postgresflex_test
+package postgresflexalpha_test
import (
"context"
@@ -23,7 +23,7 @@ import (
var (
//go:embed testdata/resource-complete.tf
- resourceSecurityGroupMinConfig string
+ resourceSecurityGroupMinConfig string //nolint:unused // needs implementation
)
// Instance resource data
diff --git a/stackit/internal/services/postgresflexalpha/testdata/resource-complete.tf b/stackit/internal/services/postgresflexalpha/testdata/resource-complete.tf
index e69de29b..d9bbe394 100644
--- a/stackit/internal/services/postgresflexalpha/testdata/resource-complete.tf
+++ b/stackit/internal/services/postgresflexalpha/testdata/resource-complete.tf
@@ -0,0 +1,3 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
diff --git a/stackit/internal/services/postgresflexalpha/user/datasource.go b/stackit/internal/services/postgresflexalpha/user/datasource.go
index b99fe911..ed5aa21b 100644
--- a/stackit/internal/services/postgresflexalpha/user/datasource.go
+++ b/stackit/internal/services/postgresflexalpha/user/datasource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/user/datasource_test.go b/stackit/internal/services/postgresflexalpha/user/datasource_test.go
index f3df8380..d26a131c 100644
--- a/stackit/internal/services/postgresflexalpha/user/datasource_test.go
+++ b/stackit/internal/services/postgresflexalpha/user/datasource_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/user/resource.go b/stackit/internal/services/postgresflexalpha/user/resource.go
index 1cc46ba2..21b66d2f 100644
--- a/stackit/internal/services/postgresflexalpha/user/resource.go
+++ b/stackit/internal/services/postgresflexalpha/user/resource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/postgresflexalpha/user/resource_test.go b/stackit/internal/services/postgresflexalpha/user/resource_test.go
index 190cfe81..c699d8de 100644
--- a/stackit/internal/services/postgresflexalpha/user/resource_test.go
+++ b/stackit/internal/services/postgresflexalpha/user/resource_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
diff --git a/stackit/internal/services/sqlserverflexalpha/backup/datasource.go b/stackit/internal/services/sqlserverflexalpha/backup/datasource.go
deleted file mode 100644
index 24f99500..00000000
--- a/stackit/internal/services/sqlserverflexalpha/backup/datasource.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package sqlserverflexalpha
-
-import (
- "context"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource"
- "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
- "github.com/hashicorp/terraform-plugin-framework/types"
-)
-
-var _ datasource.DataSource = (*backupDataSource)(nil)
-
-func NewBackupDataSource() datasource.DataSource {
- return &backupDataSource{}
-}
-
-type backupDataSource struct{}
-
-type backupDataSourceModel struct {
- Id types.String `tfsdk:"id"`
-}
-
-func (d *backupDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
- resp.TypeName = req.ProviderTypeName + "sqlserverflexalpha_backup"
-}
-
-func (d *backupDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
- resp.Schema = sqlserverflexalphaGen.BackupDataSourceSchema(ctx)
-}
-
-func (d *backupDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
- var data sqlserverflexalphaGen.backupDataSourceModel
-
- // Read Terraform configuration data into the model
- resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
-
- if resp.Diagnostics.HasError() {
- return
- }
-
- // Todo: Read API call logic
-
- // Example data value setting
- data.Id = types.StringValue("example-id")
-
- // Save data into Terraform state
- resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
-}
diff --git a/stackit/internal/services/sqlserverflexalpha/backup/datasources_gen/backup_data_source_gen.go b/stackit/internal/services/sqlserverflexalpha/backup/datasources_gen/backup_data_source_gen.go
deleted file mode 100644
index e11e4dca..00000000
--- a/stackit/internal/services/sqlserverflexalpha/backup/datasources_gen/backup_data_source_gen.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// Code generated by terraform-plugin-framework-generator DO NOT EDIT.
-
-package sqlserverflexalpha
-
-import (
- "context"
- "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
- "github.com/hashicorp/terraform-plugin-framework/schema/validator"
- "github.com/hashicorp/terraform-plugin-framework/types"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
-)
-
-func BackupDataSourceSchema(ctx context.Context) schema.Schema {
- return schema.Schema{
- Attributes: map[string]schema.Attribute{
- "backup_id": schema.Int64Attribute{
- Required: true,
- Description: "The ID of the backup.",
- MarkdownDescription: "The ID of the backup.",
- },
- "completion_time": schema.StringAttribute{
- Computed: true,
- Description: "The time when the backup was completed in RFC3339 format.",
- MarkdownDescription: "The time when the backup was completed in RFC3339 format.",
- },
- "id": schema.Int64Attribute{
- Computed: true,
- Description: "The ID of the backup.",
- MarkdownDescription: "The ID of the backup.",
- },
- "instance_id": schema.StringAttribute{
- Required: true,
- Description: "The ID of the instance.",
- MarkdownDescription: "The ID of the instance.",
- },
- "name": schema.StringAttribute{
- Computed: true,
- Description: "The name of the backup.",
- MarkdownDescription: "The name of the backup.",
- },
- "project_id": schema.StringAttribute{
- Required: true,
- Description: "The STACKIT project ID.",
- MarkdownDescription: "The STACKIT project ID.",
- },
- "region": schema.StringAttribute{
- Required: true,
- Description: "The region which should be addressed",
- MarkdownDescription: "The region which should be addressed",
- Validators: []validator.String{
- stringvalidator.OneOf(
- "eu01",
- ),
- },
- },
- "retained_until": schema.StringAttribute{
- Computed: true,
- Description: "The time until the backup will be retained.",
- MarkdownDescription: "The time until the backup will be retained.",
- },
- "size": schema.Int64Attribute{
- Computed: true,
- Description: "The size of the backup in bytes.",
- MarkdownDescription: "The size of the backup in bytes.",
- },
- "type": schema.StringAttribute{
- Computed: true,
- Description: "The type of the backup, which can be automated or manual triggered.",
- MarkdownDescription: "The type of the backup, which can be automated or manual triggered.",
- },
- },
- }
-}
-
-type BackupModel struct {
- BackupId types.Int64 `tfsdk:"backup_id"`
- CompletionTime types.String `tfsdk:"completion_time"`
- Id types.Int64 `tfsdk:"id"`
- InstanceId types.String `tfsdk:"instance_id"`
- Name types.String `tfsdk:"name"`
- ProjectId types.String `tfsdk:"project_id"`
- Region types.String `tfsdk:"region"`
- RetainedUntil types.String `tfsdk:"retained_until"`
- Size types.Int64 `tfsdk:"size"`
- Type types.String `tfsdk:"type"`
-}
diff --git a/stackit/internal/services/sqlserverflexalpha/backup/datasources_gen/backups_data_source_gen.go b/stackit/internal/services/sqlserverflexalpha/backup/datasources_gen/backups_data_source_gen.go
deleted file mode 100644
index a7acde0c..00000000
--- a/stackit/internal/services/sqlserverflexalpha/backup/datasources_gen/backups_data_source_gen.go
+++ /dev/null
@@ -1,1735 +0,0 @@
-// Code generated by terraform-plugin-framework-generator DO NOT EDIT.
-
-package sqlserverflexalpha
-
-import (
- "context"
- "fmt"
- "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
- "github.com/hashicorp/terraform-plugin-framework/attr"
- "github.com/hashicorp/terraform-plugin-framework/diag"
- "github.com/hashicorp/terraform-plugin-framework/schema/validator"
- "github.com/hashicorp/terraform-plugin-framework/types"
- "github.com/hashicorp/terraform-plugin-framework/types/basetypes"
- "github.com/hashicorp/terraform-plugin-go/tftypes"
- "strings"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
-)
-
-func BackupsDataSourceSchema(ctx context.Context) schema.Schema {
- return schema.Schema{
- Attributes: map[string]schema.Attribute{
- "backups": schema.ListNestedAttribute{
- NestedObject: schema.NestedAttributeObject{
- Attributes: map[string]schema.Attribute{
- "backups": schema.ListNestedAttribute{
- NestedObject: schema.NestedAttributeObject{
- Attributes: map[string]schema.Attribute{
- "completion_time": schema.StringAttribute{
- Computed: true,
- Description: "The time when the backup was completed in RFC3339 format.",
- MarkdownDescription: "The time when the backup was completed in RFC3339 format.",
- },
- "id": schema.Int64Attribute{
- Computed: true,
- Description: "The ID of the backup.",
- MarkdownDescription: "The ID of the backup.",
- },
- "name": schema.StringAttribute{
- Computed: true,
- Description: "The name of the backup.",
- MarkdownDescription: "The name of the backup.",
- },
- "retained_until": schema.StringAttribute{
- Computed: true,
- Description: "The time until the backup will be retained.",
- MarkdownDescription: "The time until the backup will be retained.",
- },
- "size": schema.Int64Attribute{
- Computed: true,
- Description: "The size of the backup in bytes.",
- MarkdownDescription: "The size of the backup in bytes.",
- },
- "type": schema.StringAttribute{
- Computed: true,
- Description: "The type of the backup, which can be automated or manual triggered.",
- MarkdownDescription: "The type of the backup, which can be automated or manual triggered.",
- },
- },
- CustomType: BackupsType{
- ObjectType: types.ObjectType{
- AttrTypes: BackupsValue{}.AttributeTypes(ctx),
- },
- },
- },
- Computed: true,
- Description: "List of the backups beloning to that database",
- MarkdownDescription: "List of the backups beloning to that database",
- },
- "database_name": schema.StringAttribute{
- Computed: true,
- Description: "Name of the database the backups belong to",
- MarkdownDescription: "Name of the database the backups belong to",
- },
- },
- CustomType: BackupsType{
- ObjectType: types.ObjectType{
- AttrTypes: BackupsValue{}.AttributeTypes(ctx),
- },
- },
- },
- Computed: true,
- Description: "The list containing the information about the backups.",
- MarkdownDescription: "The list containing the information about the backups.",
- },
- "instance_id": schema.StringAttribute{
- Required: true,
- Description: "The ID of the instance.",
- MarkdownDescription: "The ID of the instance.",
- },
- "page": schema.Int64Attribute{
- Optional: true,
- Computed: true,
- Description: "Number of the page of items list to be returned.",
- MarkdownDescription: "Number of the page of items list to be returned.",
- },
- "pagination": schema.SingleNestedAttribute{
- Attributes: map[string]schema.Attribute{
- "page": schema.Int64Attribute{
- Computed: true,
- },
- "size": schema.Int64Attribute{
- Computed: true,
- },
- "sort": schema.StringAttribute{
- Computed: true,
- },
- "total_pages": schema.Int64Attribute{
- Computed: true,
- },
- "total_rows": schema.Int64Attribute{
- Computed: true,
- },
- },
- CustomType: PaginationType{
- ObjectType: types.ObjectType{
- AttrTypes: PaginationValue{}.AttributeTypes(ctx),
- },
- },
- Computed: true,
- },
- "project_id": schema.StringAttribute{
- Required: true,
- Description: "The STACKIT project ID.",
- MarkdownDescription: "The STACKIT project ID.",
- },
- "region": schema.StringAttribute{
- Required: true,
- Description: "The region which should be addressed",
- MarkdownDescription: "The region which should be addressed",
- Validators: []validator.String{
- stringvalidator.OneOf(
- "eu01",
- ),
- },
- },
- "size": schema.Int64Attribute{
- Optional: true,
- Computed: true,
- Description: "Number of items to be returned on each page.",
- MarkdownDescription: "Number of items to be returned on each page.",
- },
- "sort": schema.StringAttribute{
- Optional: true,
- Computed: true,
- Description: "Sorting of the backups to be returned on each page.",
- MarkdownDescription: "Sorting of the backups to be returned on each page.",
- Validators: []validator.String{
- stringvalidator.OneOf(
- "end_time.desc",
- "end_time.asc",
- "index.desc",
- "index.asc",
- "name.desc",
- "name.asc",
- "retained_until.desc",
- "retained_until.asc",
- "size.desc",
- "size.asc",
- "type.desc",
- "type.asc",
- ),
- },
- },
- },
- }
-}
-
-type BackupsModel struct {
- Backups types.List `tfsdk:"backups"`
- InstanceId types.String `tfsdk:"instance_id"`
- Page types.Int64 `tfsdk:"page"`
- Pagination PaginationValue `tfsdk:"pagination"`
- ProjectId types.String `tfsdk:"project_id"`
- Region types.String `tfsdk:"region"`
- Size types.Int64 `tfsdk:"size"`
- Sort types.String `tfsdk:"sort"`
-}
-
-var _ basetypes.ObjectTypable = BackupsType{}
-
-type BackupsType struct {
- basetypes.ObjectType
-}
-
-func (t BackupsType) Equal(o attr.Type) bool {
- other, ok := o.(BackupsType)
-
- if !ok {
- return false
- }
-
- return t.ObjectType.Equal(other.ObjectType)
-}
-
-func (t BackupsType) String() string {
- return "BackupsType"
-}
-
-func (t BackupsType) ValueFromObject(ctx context.Context, in basetypes.ObjectValue) (basetypes.ObjectValuable, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributes := in.Attributes()
-
- backupsAttribute, ok := attributes["backups"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `backups is missing from object`)
-
- return nil, diags
- }
-
- backupsVal, ok := backupsAttribute.(basetypes.ListValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`backups expected to be basetypes.ListValue, was: %T`, backupsAttribute))
- }
-
- databaseNameAttribute, ok := attributes["database_name"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `database_name is missing from object`)
-
- return nil, diags
- }
-
- databaseNameVal, ok := databaseNameAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`database_name expected to be basetypes.StringValue, was: %T`, databaseNameAttribute))
- }
-
- if diags.HasError() {
- return nil, diags
- }
-
- return BackupsValue{
- Backups: backupsVal,
- DatabaseName: databaseNameVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewBackupsValueNull() BackupsValue {
- return BackupsValue{
- state: attr.ValueStateNull,
- }
-}
-
-func NewBackupsValueUnknown() BackupsValue {
- return BackupsValue{
- state: attr.ValueStateUnknown,
- }
-}
-
-func NewBackupsValue(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) (BackupsValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- // Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/521
- ctx := context.Background()
-
- for name, attributeType := range attributeTypes {
- attribute, ok := attributes[name]
-
- if !ok {
- diags.AddError(
- "Missing BackupsValue Attribute Value",
- "While creating a BackupsValue value, a missing attribute value was detected. "+
- "A BackupsValue must contain values for all attributes, even if null or unknown. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("BackupsValue Attribute Name (%s) Expected Type: %s", name, attributeType.String()),
- )
-
- continue
- }
-
- if !attributeType.Equal(attribute.Type(ctx)) {
- diags.AddError(
- "Invalid BackupsValue Attribute Type",
- "While creating a BackupsValue value, an invalid attribute value was detected. "+
- "A BackupsValue must use a matching attribute type for the value. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("BackupsValue Attribute Name (%s) Expected Type: %s\n", name, attributeType.String())+
- fmt.Sprintf("BackupsValue Attribute Name (%s) Given Type: %s", name, attribute.Type(ctx)),
- )
- }
- }
-
- for name := range attributes {
- _, ok := attributeTypes[name]
-
- if !ok {
- diags.AddError(
- "Extra BackupsValue Attribute Value",
- "While creating a BackupsValue value, an extra attribute value was detected. "+
- "A BackupsValue must not contain values beyond the expected attribute types. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("Extra BackupsValue Attribute Name: %s", name),
- )
- }
- }
-
- if diags.HasError() {
- return NewBackupsValueUnknown(), diags
- }
-
- backupsAttribute, ok := attributes["backups"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `backups is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- backupsVal, ok := backupsAttribute.(basetypes.ListValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`backups expected to be basetypes.ListValue, was: %T`, backupsAttribute))
- }
-
- databaseNameAttribute, ok := attributes["database_name"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `database_name is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- databaseNameVal, ok := databaseNameAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`database_name expected to be basetypes.StringValue, was: %T`, databaseNameAttribute))
- }
-
- if diags.HasError() {
- return NewBackupsValueUnknown(), diags
- }
-
- return BackupsValue{
- Backups: backupsVal,
- DatabaseName: databaseNameVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewBackupsValueMust(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) BackupsValue {
- object, diags := NewBackupsValue(attributeTypes, attributes)
-
- if diags.HasError() {
- // This could potentially be added to the diag package.
- diagsStrings := make([]string, 0, len(diags))
-
- for _, diagnostic := range diags {
- diagsStrings = append(diagsStrings, fmt.Sprintf(
- "%s | %s | %s",
- diagnostic.Severity(),
- diagnostic.Summary(),
- diagnostic.Detail()))
- }
-
- panic("NewBackupsValueMust received error(s): " + strings.Join(diagsStrings, "\n"))
- }
-
- return object
-}
-
-func (t BackupsType) ValueFromTerraform(ctx context.Context, in tftypes.Value) (attr.Value, error) {
- if in.Type() == nil {
- return NewBackupsValueNull(), nil
- }
-
- if !in.Type().Equal(t.TerraformType(ctx)) {
- return nil, fmt.Errorf("expected %s, got %s", t.TerraformType(ctx), in.Type())
- }
-
- if !in.IsKnown() {
- return NewBackupsValueUnknown(), nil
- }
-
- if in.IsNull() {
- return NewBackupsValueNull(), nil
- }
-
- attributes := map[string]attr.Value{}
-
- val := map[string]tftypes.Value{}
-
- err := in.As(&val)
-
- if err != nil {
- return nil, err
- }
-
- for k, v := range val {
- a, err := t.AttrTypes[k].ValueFromTerraform(ctx, v)
-
- if err != nil {
- return nil, err
- }
-
- attributes[k] = a
- }
-
- return NewBackupsValueMust(BackupsValue{}.AttributeTypes(ctx), attributes), nil
-}
-
-func (t BackupsType) ValueType(ctx context.Context) attr.Value {
- return BackupsValue{}
-}
-
-var _ basetypes.ObjectValuable = BackupsValue{}
-
-type BackupsValue struct {
- Backups basetypes.ListValue `tfsdk:"backups"`
- DatabaseName basetypes.StringValue `tfsdk:"database_name"`
- state attr.ValueState
-}
-
-func (v BackupsValue) ToTerraformValue(ctx context.Context) (tftypes.Value, error) {
- attrTypes := make(map[string]tftypes.Type, 2)
-
- var val tftypes.Value
- var err error
-
- attrTypes["backups"] = basetypes.ListType{
- ElemType: BackupsValue{}.Type(ctx),
- }.TerraformType(ctx)
- attrTypes["database_name"] = basetypes.StringType{}.TerraformType(ctx)
-
- objectType := tftypes.Object{AttributeTypes: attrTypes}
-
- switch v.state {
- case attr.ValueStateKnown:
- vals := make(map[string]tftypes.Value, 2)
-
- val, err = v.Backups.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["backups"] = val
-
- val, err = v.DatabaseName.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["database_name"] = val
-
- if err := tftypes.ValidateValue(objectType, vals); err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- return tftypes.NewValue(objectType, vals), nil
- case attr.ValueStateNull:
- return tftypes.NewValue(objectType, nil), nil
- case attr.ValueStateUnknown:
- return tftypes.NewValue(objectType, tftypes.UnknownValue), nil
- default:
- panic(fmt.Sprintf("unhandled Object state in ToTerraformValue: %s", v.state))
- }
-}
-
-func (v BackupsValue) IsNull() bool {
- return v.state == attr.ValueStateNull
-}
-
-func (v BackupsValue) IsUnknown() bool {
- return v.state == attr.ValueStateUnknown
-}
-
-func (v BackupsValue) String() string {
- return "BackupsValue"
-}
-
-func (v BackupsValue) ToObjectValue(ctx context.Context) (basetypes.ObjectValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- backups := types.ListValueMust(
- BackupsType{
- basetypes.ObjectType{
- AttrTypes: BackupsValue{}.AttributeTypes(ctx),
- },
- },
- v.Backups.Elements(),
- )
-
- if v.Backups.IsNull() {
- backups = types.ListNull(
- BackupsType{
- basetypes.ObjectType{
- AttrTypes: BackupsValue{}.AttributeTypes(ctx),
- },
- },
- )
- }
-
- if v.Backups.IsUnknown() {
- backups = types.ListUnknown(
- BackupsType{
- basetypes.ObjectType{
- AttrTypes: BackupsValue{}.AttributeTypes(ctx),
- },
- },
- )
- }
-
- attributeTypes := map[string]attr.Type{
- "backups": basetypes.ListType{
- ElemType: BackupsValue{}.Type(ctx),
- },
- "database_name": basetypes.StringType{},
- }
-
- if v.IsNull() {
- return types.ObjectNull(attributeTypes), diags
- }
-
- if v.IsUnknown() {
- return types.ObjectUnknown(attributeTypes), diags
- }
-
- objVal, diags := types.ObjectValue(
- attributeTypes,
- map[string]attr.Value{
- "backups": backups,
- "database_name": v.DatabaseName,
- })
-
- return objVal, diags
-}
-
-func (v BackupsValue) Equal(o attr.Value) bool {
- other, ok := o.(BackupsValue)
-
- if !ok {
- return false
- }
-
- if v.state != other.state {
- return false
- }
-
- if v.state != attr.ValueStateKnown {
- return true
- }
-
- if !v.Backups.Equal(other.Backups) {
- return false
- }
-
- if !v.DatabaseName.Equal(other.DatabaseName) {
- return false
- }
-
- return true
-}
-
-func (v BackupsValue) Type(ctx context.Context) attr.Type {
- return BackupsType{
- basetypes.ObjectType{
- AttrTypes: v.AttributeTypes(ctx),
- },
- }
-}
-
-func (v BackupsValue) AttributeTypes(ctx context.Context) map[string]attr.Type {
- return map[string]attr.Type{
- "backups": basetypes.ListType{
- ElemType: BackupsValue{}.Type(ctx),
- },
- "database_name": basetypes.StringType{},
- }
-}
-
-var _ basetypes.ObjectTypable = BackupsType{}
-
-type BackupsType struct {
- basetypes.ObjectType
-}
-
-func (t BackupsType) Equal(o attr.Type) bool {
- other, ok := o.(BackupsType)
-
- if !ok {
- return false
- }
-
- return t.ObjectType.Equal(other.ObjectType)
-}
-
-func (t BackupsType) String() string {
- return "BackupsType"
-}
-
-func (t BackupsType) ValueFromObject(ctx context.Context, in basetypes.ObjectValue) (basetypes.ObjectValuable, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributes := in.Attributes()
-
- completionTimeAttribute, ok := attributes["completion_time"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `completion_time is missing from object`)
-
- return nil, diags
- }
-
- completionTimeVal, ok := completionTimeAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`completion_time expected to be basetypes.StringValue, was: %T`, completionTimeAttribute))
- }
-
- idAttribute, ok := attributes["id"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `id is missing from object`)
-
- return nil, diags
- }
-
- idVal, ok := idAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`id expected to be basetypes.Int64Value, was: %T`, idAttribute))
- }
-
- nameAttribute, ok := attributes["name"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `name is missing from object`)
-
- return nil, diags
- }
-
- nameVal, ok := nameAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`name expected to be basetypes.StringValue, was: %T`, nameAttribute))
- }
-
- retainedUntilAttribute, ok := attributes["retained_until"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `retained_until is missing from object`)
-
- return nil, diags
- }
-
- retainedUntilVal, ok := retainedUntilAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`retained_until expected to be basetypes.StringValue, was: %T`, retainedUntilAttribute))
- }
-
- sizeAttribute, ok := attributes["size"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `size is missing from object`)
-
- return nil, diags
- }
-
- sizeVal, ok := sizeAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`size expected to be basetypes.Int64Value, was: %T`, sizeAttribute))
- }
-
- typeAttribute, ok := attributes["type"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `type is missing from object`)
-
- return nil, diags
- }
-
- typeVal, ok := typeAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`type expected to be basetypes.StringValue, was: %T`, typeAttribute))
- }
-
- if diags.HasError() {
- return nil, diags
- }
-
- return BackupsValue{
- CompletionTime: completionTimeVal,
- Id: idVal,
- Name: nameVal,
- RetainedUntil: retainedUntilVal,
- Size: sizeVal,
- BackupsType: typeVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewBackupsValueNull() BackupsValue {
- return BackupsValue{
- state: attr.ValueStateNull,
- }
-}
-
-func NewBackupsValueUnknown() BackupsValue {
- return BackupsValue{
- state: attr.ValueStateUnknown,
- }
-}
-
-func NewBackupsValue(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) (BackupsValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- // Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/521
- ctx := context.Background()
-
- for name, attributeType := range attributeTypes {
- attribute, ok := attributes[name]
-
- if !ok {
- diags.AddError(
- "Missing BackupsValue Attribute Value",
- "While creating a BackupsValue value, a missing attribute value was detected. "+
- "A BackupsValue must contain values for all attributes, even if null or unknown. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("BackupsValue Attribute Name (%s) Expected Type: %s", name, attributeType.String()),
- )
-
- continue
- }
-
- if !attributeType.Equal(attribute.Type(ctx)) {
- diags.AddError(
- "Invalid BackupsValue Attribute Type",
- "While creating a BackupsValue value, an invalid attribute value was detected. "+
- "A BackupsValue must use a matching attribute type for the value. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("BackupsValue Attribute Name (%s) Expected Type: %s\n", name, attributeType.String())+
- fmt.Sprintf("BackupsValue Attribute Name (%s) Given Type: %s", name, attribute.Type(ctx)),
- )
- }
- }
-
- for name := range attributes {
- _, ok := attributeTypes[name]
-
- if !ok {
- diags.AddError(
- "Extra BackupsValue Attribute Value",
- "While creating a BackupsValue value, an extra attribute value was detected. "+
- "A BackupsValue must not contain values beyond the expected attribute types. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("Extra BackupsValue Attribute Name: %s", name),
- )
- }
- }
-
- if diags.HasError() {
- return NewBackupsValueUnknown(), diags
- }
-
- completionTimeAttribute, ok := attributes["completion_time"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `completion_time is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- completionTimeVal, ok := completionTimeAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`completion_time expected to be basetypes.StringValue, was: %T`, completionTimeAttribute))
- }
-
- idAttribute, ok := attributes["id"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `id is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- idVal, ok := idAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`id expected to be basetypes.Int64Value, was: %T`, idAttribute))
- }
-
- nameAttribute, ok := attributes["name"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `name is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- nameVal, ok := nameAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`name expected to be basetypes.StringValue, was: %T`, nameAttribute))
- }
-
- retainedUntilAttribute, ok := attributes["retained_until"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `retained_until is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- retainedUntilVal, ok := retainedUntilAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`retained_until expected to be basetypes.StringValue, was: %T`, retainedUntilAttribute))
- }
-
- sizeAttribute, ok := attributes["size"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `size is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- sizeVal, ok := sizeAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`size expected to be basetypes.Int64Value, was: %T`, sizeAttribute))
- }
-
- typeAttribute, ok := attributes["type"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `type is missing from object`)
-
- return NewBackupsValueUnknown(), diags
- }
-
- typeVal, ok := typeAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`type expected to be basetypes.StringValue, was: %T`, typeAttribute))
- }
-
- if diags.HasError() {
- return NewBackupsValueUnknown(), diags
- }
-
- return BackupsValue{
- CompletionTime: completionTimeVal,
- Id: idVal,
- Name: nameVal,
- RetainedUntil: retainedUntilVal,
- Size: sizeVal,
- BackupsType: typeVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewBackupsValueMust(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) BackupsValue {
- object, diags := NewBackupsValue(attributeTypes, attributes)
-
- if diags.HasError() {
- // This could potentially be added to the diag package.
- diagsStrings := make([]string, 0, len(diags))
-
- for _, diagnostic := range diags {
- diagsStrings = append(diagsStrings, fmt.Sprintf(
- "%s | %s | %s",
- diagnostic.Severity(),
- diagnostic.Summary(),
- diagnostic.Detail()))
- }
-
- panic("NewBackupsValueMust received error(s): " + strings.Join(diagsStrings, "\n"))
- }
-
- return object
-}
-
-func (t BackupsType) ValueFromTerraform(ctx context.Context, in tftypes.Value) (attr.Value, error) {
- if in.Type() == nil {
- return NewBackupsValueNull(), nil
- }
-
- if !in.Type().Equal(t.TerraformType(ctx)) {
- return nil, fmt.Errorf("expected %s, got %s", t.TerraformType(ctx), in.Type())
- }
-
- if !in.IsKnown() {
- return NewBackupsValueUnknown(), nil
- }
-
- if in.IsNull() {
- return NewBackupsValueNull(), nil
- }
-
- attributes := map[string]attr.Value{}
-
- val := map[string]tftypes.Value{}
-
- err := in.As(&val)
-
- if err != nil {
- return nil, err
- }
-
- for k, v := range val {
- a, err := t.AttrTypes[k].ValueFromTerraform(ctx, v)
-
- if err != nil {
- return nil, err
- }
-
- attributes[k] = a
- }
-
- return NewBackupsValueMust(BackupsValue{}.AttributeTypes(ctx), attributes), nil
-}
-
-func (t BackupsType) ValueType(ctx context.Context) attr.Value {
- return BackupsValue{}
-}
-
-var _ basetypes.ObjectValuable = BackupsValue{}
-
-type BackupsValue struct {
- CompletionTime basetypes.StringValue `tfsdk:"completion_time"`
- Id basetypes.Int64Value `tfsdk:"id"`
- Name basetypes.StringValue `tfsdk:"name"`
- RetainedUntil basetypes.StringValue `tfsdk:"retained_until"`
- Size basetypes.Int64Value `tfsdk:"size"`
- BackupsType basetypes.StringValue `tfsdk:"type"`
- state attr.ValueState
-}
-
-func (v BackupsValue) ToTerraformValue(ctx context.Context) (tftypes.Value, error) {
- attrTypes := make(map[string]tftypes.Type, 6)
-
- var val tftypes.Value
- var err error
-
- attrTypes["completion_time"] = basetypes.StringType{}.TerraformType(ctx)
- attrTypes["id"] = basetypes.Int64Type{}.TerraformType(ctx)
- attrTypes["name"] = basetypes.StringType{}.TerraformType(ctx)
- attrTypes["retained_until"] = basetypes.StringType{}.TerraformType(ctx)
- attrTypes["size"] = basetypes.Int64Type{}.TerraformType(ctx)
- attrTypes["type"] = basetypes.StringType{}.TerraformType(ctx)
-
- objectType := tftypes.Object{AttributeTypes: attrTypes}
-
- switch v.state {
- case attr.ValueStateKnown:
- vals := make(map[string]tftypes.Value, 6)
-
- val, err = v.CompletionTime.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["completion_time"] = val
-
- val, err = v.Id.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["id"] = val
-
- val, err = v.Name.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["name"] = val
-
- val, err = v.RetainedUntil.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["retained_until"] = val
-
- val, err = v.Size.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["size"] = val
-
- val, err = v.BackupsType.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["type"] = val
-
- if err := tftypes.ValidateValue(objectType, vals); err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- return tftypes.NewValue(objectType, vals), nil
- case attr.ValueStateNull:
- return tftypes.NewValue(objectType, nil), nil
- case attr.ValueStateUnknown:
- return tftypes.NewValue(objectType, tftypes.UnknownValue), nil
- default:
- panic(fmt.Sprintf("unhandled Object state in ToTerraformValue: %s", v.state))
- }
-}
-
-func (v BackupsValue) IsNull() bool {
- return v.state == attr.ValueStateNull
-}
-
-func (v BackupsValue) IsUnknown() bool {
- return v.state == attr.ValueStateUnknown
-}
-
-func (v BackupsValue) String() string {
- return "BackupsValue"
-}
-
-func (v BackupsValue) ToObjectValue(ctx context.Context) (basetypes.ObjectValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributeTypes := map[string]attr.Type{
- "completion_time": basetypes.StringType{},
- "id": basetypes.Int64Type{},
- "name": basetypes.StringType{},
- "retained_until": basetypes.StringType{},
- "size": basetypes.Int64Type{},
- "type": basetypes.StringType{},
- }
-
- if v.IsNull() {
- return types.ObjectNull(attributeTypes), diags
- }
-
- if v.IsUnknown() {
- return types.ObjectUnknown(attributeTypes), diags
- }
-
- objVal, diags := types.ObjectValue(
- attributeTypes,
- map[string]attr.Value{
- "completion_time": v.CompletionTime,
- "id": v.Id,
- "name": v.Name,
- "retained_until": v.RetainedUntil,
- "size": v.Size,
- "type": v.BackupsType,
- })
-
- return objVal, diags
-}
-
-func (v BackupsValue) Equal(o attr.Value) bool {
- other, ok := o.(BackupsValue)
-
- if !ok {
- return false
- }
-
- if v.state != other.state {
- return false
- }
-
- if v.state != attr.ValueStateKnown {
- return true
- }
-
- if !v.CompletionTime.Equal(other.CompletionTime) {
- return false
- }
-
- if !v.Id.Equal(other.Id) {
- return false
- }
-
- if !v.Name.Equal(other.Name) {
- return false
- }
-
- if !v.RetainedUntil.Equal(other.RetainedUntil) {
- return false
- }
-
- if !v.Size.Equal(other.Size) {
- return false
- }
-
- if !v.BackupsType.Equal(other.BackupsType) {
- return false
- }
-
- return true
-}
-
-func (v BackupsValue) Type(ctx context.Context) attr.Type {
- return BackupsType{
- basetypes.ObjectType{
- AttrTypes: v.AttributeTypes(ctx),
- },
- }
-}
-
-func (v BackupsValue) AttributeTypes(ctx context.Context) map[string]attr.Type {
- return map[string]attr.Type{
- "completion_time": basetypes.StringType{},
- "id": basetypes.Int64Type{},
- "name": basetypes.StringType{},
- "retained_until": basetypes.StringType{},
- "size": basetypes.Int64Type{},
- "type": basetypes.StringType{},
- }
-}
-
-var _ basetypes.ObjectTypable = PaginationType{}
-
-type PaginationType struct {
- basetypes.ObjectType
-}
-
-func (t PaginationType) Equal(o attr.Type) bool {
- other, ok := o.(PaginationType)
-
- if !ok {
- return false
- }
-
- return t.ObjectType.Equal(other.ObjectType)
-}
-
-func (t PaginationType) String() string {
- return "PaginationType"
-}
-
-func (t PaginationType) ValueFromObject(ctx context.Context, in basetypes.ObjectValue) (basetypes.ObjectValuable, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributes := in.Attributes()
-
- pageAttribute, ok := attributes["page"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `page is missing from object`)
-
- return nil, diags
- }
-
- pageVal, ok := pageAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`page expected to be basetypes.Int64Value, was: %T`, pageAttribute))
- }
-
- sizeAttribute, ok := attributes["size"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `size is missing from object`)
-
- return nil, diags
- }
-
- sizeVal, ok := sizeAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`size expected to be basetypes.Int64Value, was: %T`, sizeAttribute))
- }
-
- sortAttribute, ok := attributes["sort"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `sort is missing from object`)
-
- return nil, diags
- }
-
- sortVal, ok := sortAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`sort expected to be basetypes.StringValue, was: %T`, sortAttribute))
- }
-
- totalPagesAttribute, ok := attributes["total_pages"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `total_pages is missing from object`)
-
- return nil, diags
- }
-
- totalPagesVal, ok := totalPagesAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`total_pages expected to be basetypes.Int64Value, was: %T`, totalPagesAttribute))
- }
-
- totalRowsAttribute, ok := attributes["total_rows"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `total_rows is missing from object`)
-
- return nil, diags
- }
-
- totalRowsVal, ok := totalRowsAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`total_rows expected to be basetypes.Int64Value, was: %T`, totalRowsAttribute))
- }
-
- if diags.HasError() {
- return nil, diags
- }
-
- return PaginationValue{
- Page: pageVal,
- Size: sizeVal,
- Sort: sortVal,
- TotalPages: totalPagesVal,
- TotalRows: totalRowsVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewPaginationValueNull() PaginationValue {
- return PaginationValue{
- state: attr.ValueStateNull,
- }
-}
-
-func NewPaginationValueUnknown() PaginationValue {
- return PaginationValue{
- state: attr.ValueStateUnknown,
- }
-}
-
-func NewPaginationValue(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) (PaginationValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- // Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/521
- ctx := context.Background()
-
- for name, attributeType := range attributeTypes {
- attribute, ok := attributes[name]
-
- if !ok {
- diags.AddError(
- "Missing PaginationValue Attribute Value",
- "While creating a PaginationValue value, a missing attribute value was detected. "+
- "A PaginationValue must contain values for all attributes, even if null or unknown. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("PaginationValue Attribute Name (%s) Expected Type: %s", name, attributeType.String()),
- )
-
- continue
- }
-
- if !attributeType.Equal(attribute.Type(ctx)) {
- diags.AddError(
- "Invalid PaginationValue Attribute Type",
- "While creating a PaginationValue value, an invalid attribute value was detected. "+
- "A PaginationValue must use a matching attribute type for the value. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("PaginationValue Attribute Name (%s) Expected Type: %s\n", name, attributeType.String())+
- fmt.Sprintf("PaginationValue Attribute Name (%s) Given Type: %s", name, attribute.Type(ctx)),
- )
- }
- }
-
- for name := range attributes {
- _, ok := attributeTypes[name]
-
- if !ok {
- diags.AddError(
- "Extra PaginationValue Attribute Value",
- "While creating a PaginationValue value, an extra attribute value was detected. "+
- "A PaginationValue must not contain values beyond the expected attribute types. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("Extra PaginationValue Attribute Name: %s", name),
- )
- }
- }
-
- if diags.HasError() {
- return NewPaginationValueUnknown(), diags
- }
-
- pageAttribute, ok := attributes["page"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `page is missing from object`)
-
- return NewPaginationValueUnknown(), diags
- }
-
- pageVal, ok := pageAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`page expected to be basetypes.Int64Value, was: %T`, pageAttribute))
- }
-
- sizeAttribute, ok := attributes["size"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `size is missing from object`)
-
- return NewPaginationValueUnknown(), diags
- }
-
- sizeVal, ok := sizeAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`size expected to be basetypes.Int64Value, was: %T`, sizeAttribute))
- }
-
- sortAttribute, ok := attributes["sort"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `sort is missing from object`)
-
- return NewPaginationValueUnknown(), diags
- }
-
- sortVal, ok := sortAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`sort expected to be basetypes.StringValue, was: %T`, sortAttribute))
- }
-
- totalPagesAttribute, ok := attributes["total_pages"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `total_pages is missing from object`)
-
- return NewPaginationValueUnknown(), diags
- }
-
- totalPagesVal, ok := totalPagesAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`total_pages expected to be basetypes.Int64Value, was: %T`, totalPagesAttribute))
- }
-
- totalRowsAttribute, ok := attributes["total_rows"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `total_rows is missing from object`)
-
- return NewPaginationValueUnknown(), diags
- }
-
- totalRowsVal, ok := totalRowsAttribute.(basetypes.Int64Value)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`total_rows expected to be basetypes.Int64Value, was: %T`, totalRowsAttribute))
- }
-
- if diags.HasError() {
- return NewPaginationValueUnknown(), diags
- }
-
- return PaginationValue{
- Page: pageVal,
- Size: sizeVal,
- Sort: sortVal,
- TotalPages: totalPagesVal,
- TotalRows: totalRowsVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewPaginationValueMust(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) PaginationValue {
- object, diags := NewPaginationValue(attributeTypes, attributes)
-
- if diags.HasError() {
- // This could potentially be added to the diag package.
- diagsStrings := make([]string, 0, len(diags))
-
- for _, diagnostic := range diags {
- diagsStrings = append(diagsStrings, fmt.Sprintf(
- "%s | %s | %s",
- diagnostic.Severity(),
- diagnostic.Summary(),
- diagnostic.Detail()))
- }
-
- panic("NewPaginationValueMust received error(s): " + strings.Join(diagsStrings, "\n"))
- }
-
- return object
-}
-
-func (t PaginationType) ValueFromTerraform(ctx context.Context, in tftypes.Value) (attr.Value, error) {
- if in.Type() == nil {
- return NewPaginationValueNull(), nil
- }
-
- if !in.Type().Equal(t.TerraformType(ctx)) {
- return nil, fmt.Errorf("expected %s, got %s", t.TerraformType(ctx), in.Type())
- }
-
- if !in.IsKnown() {
- return NewPaginationValueUnknown(), nil
- }
-
- if in.IsNull() {
- return NewPaginationValueNull(), nil
- }
-
- attributes := map[string]attr.Value{}
-
- val := map[string]tftypes.Value{}
-
- err := in.As(&val)
-
- if err != nil {
- return nil, err
- }
-
- for k, v := range val {
- a, err := t.AttrTypes[k].ValueFromTerraform(ctx, v)
-
- if err != nil {
- return nil, err
- }
-
- attributes[k] = a
- }
-
- return NewPaginationValueMust(PaginationValue{}.AttributeTypes(ctx), attributes), nil
-}
-
-func (t PaginationType) ValueType(ctx context.Context) attr.Value {
- return PaginationValue{}
-}
-
-var _ basetypes.ObjectValuable = PaginationValue{}
-
-type PaginationValue struct {
- Page basetypes.Int64Value `tfsdk:"page"`
- Size basetypes.Int64Value `tfsdk:"size"`
- Sort basetypes.StringValue `tfsdk:"sort"`
- TotalPages basetypes.Int64Value `tfsdk:"total_pages"`
- TotalRows basetypes.Int64Value `tfsdk:"total_rows"`
- state attr.ValueState
-}
-
-func (v PaginationValue) ToTerraformValue(ctx context.Context) (tftypes.Value, error) {
- attrTypes := make(map[string]tftypes.Type, 5)
-
- var val tftypes.Value
- var err error
-
- attrTypes["page"] = basetypes.Int64Type{}.TerraformType(ctx)
- attrTypes["size"] = basetypes.Int64Type{}.TerraformType(ctx)
- attrTypes["sort"] = basetypes.StringType{}.TerraformType(ctx)
- attrTypes["total_pages"] = basetypes.Int64Type{}.TerraformType(ctx)
- attrTypes["total_rows"] = basetypes.Int64Type{}.TerraformType(ctx)
-
- objectType := tftypes.Object{AttributeTypes: attrTypes}
-
- switch v.state {
- case attr.ValueStateKnown:
- vals := make(map[string]tftypes.Value, 5)
-
- val, err = v.Page.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["page"] = val
-
- val, err = v.Size.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["size"] = val
-
- val, err = v.Sort.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["sort"] = val
-
- val, err = v.TotalPages.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["total_pages"] = val
-
- val, err = v.TotalRows.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["total_rows"] = val
-
- if err := tftypes.ValidateValue(objectType, vals); err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- return tftypes.NewValue(objectType, vals), nil
- case attr.ValueStateNull:
- return tftypes.NewValue(objectType, nil), nil
- case attr.ValueStateUnknown:
- return tftypes.NewValue(objectType, tftypes.UnknownValue), nil
- default:
- panic(fmt.Sprintf("unhandled Object state in ToTerraformValue: %s", v.state))
- }
-}
-
-func (v PaginationValue) IsNull() bool {
- return v.state == attr.ValueStateNull
-}
-
-func (v PaginationValue) IsUnknown() bool {
- return v.state == attr.ValueStateUnknown
-}
-
-func (v PaginationValue) String() string {
- return "PaginationValue"
-}
-
-func (v PaginationValue) ToObjectValue(ctx context.Context) (basetypes.ObjectValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributeTypes := map[string]attr.Type{
- "page": basetypes.Int64Type{},
- "size": basetypes.Int64Type{},
- "sort": basetypes.StringType{},
- "total_pages": basetypes.Int64Type{},
- "total_rows": basetypes.Int64Type{},
- }
-
- if v.IsNull() {
- return types.ObjectNull(attributeTypes), diags
- }
-
- if v.IsUnknown() {
- return types.ObjectUnknown(attributeTypes), diags
- }
-
- objVal, diags := types.ObjectValue(
- attributeTypes,
- map[string]attr.Value{
- "page": v.Page,
- "size": v.Size,
- "sort": v.Sort,
- "total_pages": v.TotalPages,
- "total_rows": v.TotalRows,
- })
-
- return objVal, diags
-}
-
-func (v PaginationValue) Equal(o attr.Value) bool {
- other, ok := o.(PaginationValue)
-
- if !ok {
- return false
- }
-
- if v.state != other.state {
- return false
- }
-
- if v.state != attr.ValueStateKnown {
- return true
- }
-
- if !v.Page.Equal(other.Page) {
- return false
- }
-
- if !v.Size.Equal(other.Size) {
- return false
- }
-
- if !v.Sort.Equal(other.Sort) {
- return false
- }
-
- if !v.TotalPages.Equal(other.TotalPages) {
- return false
- }
-
- if !v.TotalRows.Equal(other.TotalRows) {
- return false
- }
-
- return true
-}
-
-func (v PaginationValue) Type(ctx context.Context) attr.Type {
- return PaginationType{
- basetypes.ObjectType{
- AttrTypes: v.AttributeTypes(ctx),
- },
- }
-}
-
-func (v PaginationValue) AttributeTypes(ctx context.Context) map[string]attr.Type {
- return map[string]attr.Type{
- "page": basetypes.Int64Type{},
- "size": basetypes.Int64Type{},
- "sort": basetypes.StringType{},
- "total_pages": basetypes.Int64Type{},
- "total_rows": basetypes.Int64Type{},
- }
-}
diff --git a/stackit/internal/services/sqlserverflexalpha/collation/datasource.go b/stackit/internal/services/sqlserverflexalpha/collation/datasource.go
deleted file mode 100644
index f55291c6..00000000
--- a/stackit/internal/services/sqlserverflexalpha/collation/datasource.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package sqlserverflexalpha
-
-import (
- "context"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource"
- "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
- "github.com/hashicorp/terraform-plugin-framework/types"
-)
-
-var _ datasource.DataSource = (*collationDataSource)(nil)
-
-func NewCollationDataSource() datasource.DataSource {
- return &collationDataSource{}
-}
-
-type collationDataSource struct{}
-
-type collationDataSourceModel struct {
- Id types.String `tfsdk:"id"`
-}
-
-func (d *collationDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
- resp.TypeName = req.ProviderTypeName + "sqlserverflexalpha_collation"
-}
-
-func (d *collationDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
- resp.Schema = sqlserverflexalphaGen.CollationDataSourceSchema(ctx)
-}
-
-func (d *collationDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
- var data sqlserverflexalphaGen.collationDataSourceModel
-
- // Read Terraform configuration data into the model
- resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
-
- if resp.Diagnostics.HasError() {
- return
- }
-
- // Todo: Read API call logic
-
- // Example data value setting
- data.Id = types.StringValue("example-id")
-
- // Save data into Terraform state
- resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
-}
diff --git a/stackit/internal/services/sqlserverflexalpha/collation/datasources_gen/collation_data_source_gen.go b/stackit/internal/services/sqlserverflexalpha/collation/datasources_gen/collation_data_source_gen.go
deleted file mode 100644
index 5f6460c6..00000000
--- a/stackit/internal/services/sqlserverflexalpha/collation/datasources_gen/collation_data_source_gen.go
+++ /dev/null
@@ -1,451 +0,0 @@
-// Code generated by terraform-plugin-framework-generator DO NOT EDIT.
-
-package sqlserverflexalpha
-
-import (
- "context"
- "fmt"
- "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
- "github.com/hashicorp/terraform-plugin-framework/attr"
- "github.com/hashicorp/terraform-plugin-framework/diag"
- "github.com/hashicorp/terraform-plugin-framework/schema/validator"
- "github.com/hashicorp/terraform-plugin-framework/types"
- "github.com/hashicorp/terraform-plugin-framework/types/basetypes"
- "github.com/hashicorp/terraform-plugin-go/tftypes"
- "strings"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
-)
-
-func CollationDataSourceSchema(ctx context.Context) schema.Schema {
- return schema.Schema{
- Attributes: map[string]schema.Attribute{
- "collations": schema.ListNestedAttribute{
- NestedObject: schema.NestedAttributeObject{
- Attributes: map[string]schema.Attribute{
- "collation_name": schema.StringAttribute{
- Computed: true,
- },
- "description": schema.StringAttribute{
- Computed: true,
- },
- },
- CustomType: CollationsType{
- ObjectType: types.ObjectType{
- AttrTypes: CollationsValue{}.AttributeTypes(ctx),
- },
- },
- },
- Computed: true,
- Description: "List of collations available for the instance.",
- MarkdownDescription: "List of collations available for the instance.",
- },
- "instance_id": schema.StringAttribute{
- Required: true,
- Description: "The ID of the instance.",
- MarkdownDescription: "The ID of the instance.",
- },
- "project_id": schema.StringAttribute{
- Required: true,
- Description: "The STACKIT project ID.",
- MarkdownDescription: "The STACKIT project ID.",
- },
- "region": schema.StringAttribute{
- Required: true,
- Description: "The region which should be addressed",
- MarkdownDescription: "The region which should be addressed",
- Validators: []validator.String{
- stringvalidator.OneOf(
- "eu01",
- ),
- },
- },
- },
- }
-}
-
-type CollationModel struct {
- Collations types.List `tfsdk:"collations"`
- InstanceId types.String `tfsdk:"instance_id"`
- ProjectId types.String `tfsdk:"project_id"`
- Region types.String `tfsdk:"region"`
-}
-
-var _ basetypes.ObjectTypable = CollationsType{}
-
-type CollationsType struct {
- basetypes.ObjectType
-}
-
-func (t CollationsType) Equal(o attr.Type) bool {
- other, ok := o.(CollationsType)
-
- if !ok {
- return false
- }
-
- return t.ObjectType.Equal(other.ObjectType)
-}
-
-func (t CollationsType) String() string {
- return "CollationsType"
-}
-
-func (t CollationsType) ValueFromObject(ctx context.Context, in basetypes.ObjectValue) (basetypes.ObjectValuable, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributes := in.Attributes()
-
- collationNameAttribute, ok := attributes["collation_name"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `collation_name is missing from object`)
-
- return nil, diags
- }
-
- collationNameVal, ok := collationNameAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`collation_name expected to be basetypes.StringValue, was: %T`, collationNameAttribute))
- }
-
- descriptionAttribute, ok := attributes["description"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `description is missing from object`)
-
- return nil, diags
- }
-
- descriptionVal, ok := descriptionAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`description expected to be basetypes.StringValue, was: %T`, descriptionAttribute))
- }
-
- if diags.HasError() {
- return nil, diags
- }
-
- return CollationsValue{
- CollationName: collationNameVal,
- Description: descriptionVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewCollationsValueNull() CollationsValue {
- return CollationsValue{
- state: attr.ValueStateNull,
- }
-}
-
-func NewCollationsValueUnknown() CollationsValue {
- return CollationsValue{
- state: attr.ValueStateUnknown,
- }
-}
-
-func NewCollationsValue(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) (CollationsValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- // Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/521
- ctx := context.Background()
-
- for name, attributeType := range attributeTypes {
- attribute, ok := attributes[name]
-
- if !ok {
- diags.AddError(
- "Missing CollationsValue Attribute Value",
- "While creating a CollationsValue value, a missing attribute value was detected. "+
- "A CollationsValue must contain values for all attributes, even if null or unknown. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("CollationsValue Attribute Name (%s) Expected Type: %s", name, attributeType.String()),
- )
-
- continue
- }
-
- if !attributeType.Equal(attribute.Type(ctx)) {
- diags.AddError(
- "Invalid CollationsValue Attribute Type",
- "While creating a CollationsValue value, an invalid attribute value was detected. "+
- "A CollationsValue must use a matching attribute type for the value. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("CollationsValue Attribute Name (%s) Expected Type: %s\n", name, attributeType.String())+
- fmt.Sprintf("CollationsValue Attribute Name (%s) Given Type: %s", name, attribute.Type(ctx)),
- )
- }
- }
-
- for name := range attributes {
- _, ok := attributeTypes[name]
-
- if !ok {
- diags.AddError(
- "Extra CollationsValue Attribute Value",
- "While creating a CollationsValue value, an extra attribute value was detected. "+
- "A CollationsValue must not contain values beyond the expected attribute types. "+
- "This is always an issue with the provider and should be reported to the provider developers.\n\n"+
- fmt.Sprintf("Extra CollationsValue Attribute Name: %s", name),
- )
- }
- }
-
- if diags.HasError() {
- return NewCollationsValueUnknown(), diags
- }
-
- collationNameAttribute, ok := attributes["collation_name"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `collation_name is missing from object`)
-
- return NewCollationsValueUnknown(), diags
- }
-
- collationNameVal, ok := collationNameAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`collation_name expected to be basetypes.StringValue, was: %T`, collationNameAttribute))
- }
-
- descriptionAttribute, ok := attributes["description"]
-
- if !ok {
- diags.AddError(
- "Attribute Missing",
- `description is missing from object`)
-
- return NewCollationsValueUnknown(), diags
- }
-
- descriptionVal, ok := descriptionAttribute.(basetypes.StringValue)
-
- if !ok {
- diags.AddError(
- "Attribute Wrong Type",
- fmt.Sprintf(`description expected to be basetypes.StringValue, was: %T`, descriptionAttribute))
- }
-
- if diags.HasError() {
- return NewCollationsValueUnknown(), diags
- }
-
- return CollationsValue{
- CollationName: collationNameVal,
- Description: descriptionVal,
- state: attr.ValueStateKnown,
- }, diags
-}
-
-func NewCollationsValueMust(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) CollationsValue {
- object, diags := NewCollationsValue(attributeTypes, attributes)
-
- if diags.HasError() {
- // This could potentially be added to the diag package.
- diagsStrings := make([]string, 0, len(diags))
-
- for _, diagnostic := range diags {
- diagsStrings = append(diagsStrings, fmt.Sprintf(
- "%s | %s | %s",
- diagnostic.Severity(),
- diagnostic.Summary(),
- diagnostic.Detail()))
- }
-
- panic("NewCollationsValueMust received error(s): " + strings.Join(diagsStrings, "\n"))
- }
-
- return object
-}
-
-func (t CollationsType) ValueFromTerraform(ctx context.Context, in tftypes.Value) (attr.Value, error) {
- if in.Type() == nil {
- return NewCollationsValueNull(), nil
- }
-
- if !in.Type().Equal(t.TerraformType(ctx)) {
- return nil, fmt.Errorf("expected %s, got %s", t.TerraformType(ctx), in.Type())
- }
-
- if !in.IsKnown() {
- return NewCollationsValueUnknown(), nil
- }
-
- if in.IsNull() {
- return NewCollationsValueNull(), nil
- }
-
- attributes := map[string]attr.Value{}
-
- val := map[string]tftypes.Value{}
-
- err := in.As(&val)
-
- if err != nil {
- return nil, err
- }
-
- for k, v := range val {
- a, err := t.AttrTypes[k].ValueFromTerraform(ctx, v)
-
- if err != nil {
- return nil, err
- }
-
- attributes[k] = a
- }
-
- return NewCollationsValueMust(CollationsValue{}.AttributeTypes(ctx), attributes), nil
-}
-
-func (t CollationsType) ValueType(ctx context.Context) attr.Value {
- return CollationsValue{}
-}
-
-var _ basetypes.ObjectValuable = CollationsValue{}
-
-type CollationsValue struct {
- CollationName basetypes.StringValue `tfsdk:"collation_name"`
- Description basetypes.StringValue `tfsdk:"description"`
- state attr.ValueState
-}
-
-func (v CollationsValue) ToTerraformValue(ctx context.Context) (tftypes.Value, error) {
- attrTypes := make(map[string]tftypes.Type, 2)
-
- var val tftypes.Value
- var err error
-
- attrTypes["collation_name"] = basetypes.StringType{}.TerraformType(ctx)
- attrTypes["description"] = basetypes.StringType{}.TerraformType(ctx)
-
- objectType := tftypes.Object{AttributeTypes: attrTypes}
-
- switch v.state {
- case attr.ValueStateKnown:
- vals := make(map[string]tftypes.Value, 2)
-
- val, err = v.CollationName.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["collation_name"] = val
-
- val, err = v.Description.ToTerraformValue(ctx)
-
- if err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- vals["description"] = val
-
- if err := tftypes.ValidateValue(objectType, vals); err != nil {
- return tftypes.NewValue(objectType, tftypes.UnknownValue), err
- }
-
- return tftypes.NewValue(objectType, vals), nil
- case attr.ValueStateNull:
- return tftypes.NewValue(objectType, nil), nil
- case attr.ValueStateUnknown:
- return tftypes.NewValue(objectType, tftypes.UnknownValue), nil
- default:
- panic(fmt.Sprintf("unhandled Object state in ToTerraformValue: %s", v.state))
- }
-}
-
-func (v CollationsValue) IsNull() bool {
- return v.state == attr.ValueStateNull
-}
-
-func (v CollationsValue) IsUnknown() bool {
- return v.state == attr.ValueStateUnknown
-}
-
-func (v CollationsValue) String() string {
- return "CollationsValue"
-}
-
-func (v CollationsValue) ToObjectValue(ctx context.Context) (basetypes.ObjectValue, diag.Diagnostics) {
- var diags diag.Diagnostics
-
- attributeTypes := map[string]attr.Type{
- "collation_name": basetypes.StringType{},
- "description": basetypes.StringType{},
- }
-
- if v.IsNull() {
- return types.ObjectNull(attributeTypes), diags
- }
-
- if v.IsUnknown() {
- return types.ObjectUnknown(attributeTypes), diags
- }
-
- objVal, diags := types.ObjectValue(
- attributeTypes,
- map[string]attr.Value{
- "collation_name": v.CollationName,
- "description": v.Description,
- })
-
- return objVal, diags
-}
-
-func (v CollationsValue) Equal(o attr.Value) bool {
- other, ok := o.(CollationsValue)
-
- if !ok {
- return false
- }
-
- if v.state != other.state {
- return false
- }
-
- if v.state != attr.ValueStateKnown {
- return true
- }
-
- if !v.CollationName.Equal(other.CollationName) {
- return false
- }
-
- if !v.Description.Equal(other.Description) {
- return false
- }
-
- return true
-}
-
-func (v CollationsValue) Type(ctx context.Context) attr.Type {
- return CollationsType{
- basetypes.ObjectType{
- AttrTypes: v.AttributeTypes(ctx),
- },
- }
-}
-
-func (v CollationsValue) AttributeTypes(ctx context.Context) map[string]attr.Type {
- return map[string]attr.Type{
- "collation_name": basetypes.StringType{},
- "description": basetypes.StringType{},
- }
-}
diff --git a/stackit/internal/services/sqlserverflexalpha/database/datasource.go b/stackit/internal/services/sqlserverflexalpha/database/datasource.go
index 6cca0141..c1a7c43b 100644
--- a/stackit/internal/services/sqlserverflexalpha/database/datasource.go
+++ b/stackit/internal/services/sqlserverflexalpha/database/datasource.go
@@ -1,12 +1,18 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
"context"
"github.com/hashicorp/terraform-plugin-framework/datasource"
- "github.com/hashicorp/terraform-plugin-framework/types"
-
+ "github.com/hashicorp/terraform-plugin-log/tflog"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
sqlserverflexalphaGen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/database/datasources_gen"
+ sqlserverflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/utils"
)
var _ datasource.DataSource = (*databaseDataSource)(nil)
@@ -15,20 +21,35 @@ func NewDatabaseDataSource() datasource.DataSource {
return &databaseDataSource{}
}
-type databaseDataSource struct{}
-
-type databaseDataSourceModel struct {
- Id types.String `tfsdk:"id"`
+type databaseDataSource struct {
+ client *sqlserverflexalpha.APIClient
+ providerData core.ProviderData
}
-func (d *databaseDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
+func (d *databaseDataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_sqlserverflexalpha_database"
}
-func (d *databaseDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
+func (d *databaseDataSource) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
resp.Schema = sqlserverflexalphaGen.DatabaseDataSourceSchema(ctx)
}
+// Configure adds the provider configured client to the data source.
+func (d *databaseDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
+ var ok bool
+ d.providerData, ok = conversion.ParseProviderData(ctx, req.ProviderData, &resp.Diagnostics)
+ if !ok {
+ return
+ }
+
+ apiClient := sqlserverflexUtils.ConfigureClient(ctx, &d.providerData, &resp.Diagnostics)
+ if resp.Diagnostics.HasError() {
+ return
+ }
+ d.client = apiClient
+ tflog.Info(ctx, "SQL SERVER Flex database client configured")
+}
+
func (d *databaseDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
var data sqlserverflexalphaGen.DatabaseModel
diff --git a/stackit/internal/services/sqlserverflexalpha/database/resource.go b/stackit/internal/services/sqlserverflexalpha/database/resource.go
index 3a073f82..6bfcd07b 100644
--- a/stackit/internal/services/sqlserverflexalpha/database/resource.go
+++ b/stackit/internal/services/sqlserverflexalpha/database/resource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
@@ -34,11 +37,11 @@ type databaseResource struct {
providerData core.ProviderData
}
-func (r *databaseResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) {
+func (r *databaseResource) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_sqlserverflexalpha_database"
}
-func (r *databaseResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
+func (r *databaseResource) Schema(ctx context.Context, _ resource.SchemaRequest, resp *resource.SchemaResponse) {
resp.Schema = sqlserverflexalphaGen.DatabaseResourceSchema(ctx)
}
@@ -88,7 +91,7 @@ func (r *databaseResource) Create(ctx context.Context, req resource.CreateReques
// TODO: Create API call logic
// Example data value setting
- //data.DatabaseId = types.StringValue("id-from-response")
+ // data.DatabaseId = types.StringValue("id-from-response")
// Save data into Terraform state
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
diff --git a/stackit/internal/services/sqlserverflexalpha/flavor/datasource.go b/stackit/internal/services/sqlserverflexalpha/flavor/datasource.go
index 46ad0387..5b9290dc 100644
--- a/stackit/internal/services/sqlserverflexalpha/flavor/datasource.go
+++ b/stackit/internal/services/sqlserverflexalpha/flavor/datasource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverFlexAlphaFlavor
import (
@@ -5,24 +8,25 @@ import (
"fmt"
"github.com/hashicorp/terraform-plugin-framework/attr"
+ "github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
+ "github.com/hashicorp/terraform-plugin-log/tflog"
+
"github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
"github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
"github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/utils"
- sqlserverflex "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha"
+ sqlserverflexalphaGen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/flavor/datasources_gen"
sqlserverflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/utils"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource"
- "github.com/hashicorp/terraform-plugin-log/tflog"
- "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
)
// Ensure the implementation satisfies the expected interfaces.
var (
- _ datasource.DataSource = &flavorDataSource{}
+ _ datasource.DataSource = &flavorDataSource{}
+ _ datasource.DataSourceWithConfigure = &flavorDataSource{}
)
type FlavorModel struct {
@@ -144,9 +148,9 @@ func (r *flavorDataSource) Schema(ctx context.Context, _ datasource.SchemaReques
Computed: true,
},
},
- CustomType: sqlserverflex.StorageClassesType{
+ CustomType: sqlserverflexalphaGen.StorageClassesType{
ObjectType: types.ObjectType{
- AttrTypes: sqlserverflex.StorageClassesValue{}.AttributeTypes(ctx),
+ AttrTypes: sqlserverflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
},
},
},
@@ -211,9 +215,9 @@ func (r *flavorDataSource) Read(ctx context.Context, req datasource.ReadRequest,
model.MinGb = types.Int64Value(*f.MinGB)
if f.StorageClasses == nil {
- model.StorageClasses = types.ListNull(sqlserverflex.StorageClassesType{
+ model.StorageClasses = types.ListNull(sqlserverflexalphaGen.StorageClassesType{
ObjectType: basetypes.ObjectType{
- AttrTypes: sqlserverflex.StorageClassesValue{}.AttributeTypes(ctx),
+ AttrTypes: sqlserverflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
},
})
} else {
@@ -221,8 +225,8 @@ func (r *flavorDataSource) Read(ctx context.Context, req datasource.ReadRequest,
for _, sc := range *f.StorageClasses {
scList = append(
scList,
- sqlserverflex.NewStorageClassesValueMust(
- sqlserverflex.StorageClassesValue{}.AttributeTypes(ctx),
+ sqlserverflexalphaGen.NewStorageClassesValueMust(
+ sqlserverflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
map[string]attr.Value{
"class": types.StringValue(*sc.Class),
"max_io_per_sec": types.Int64Value(*sc.MaxIoPerSec),
@@ -232,9 +236,9 @@ func (r *flavorDataSource) Read(ctx context.Context, req datasource.ReadRequest,
)
}
storageClassesList := types.ListValueMust(
- sqlserverflex.StorageClassesType{
+ sqlserverflexalphaGen.StorageClassesType{
ObjectType: basetypes.ObjectType{
- AttrTypes: sqlserverflex.StorageClassesValue{}.AttributeTypes(ctx),
+ AttrTypes: sqlserverflexalphaGen.StorageClassesValue{}.AttributeTypes(ctx),
},
},
scList,
diff --git a/stackit/internal/services/sqlserverflexalpha/flavor/functions.go b/stackit/internal/services/sqlserverflexalpha/flavor/functions.go
index 44fbba28..a4f738ac 100644
--- a/stackit/internal/services/sqlserverflexalpha/flavor/functions.go
+++ b/stackit/internal/services/sqlserverflexalpha/flavor/functions.go
@@ -1,198 +1,68 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverFlexAlphaFlavor
import (
"context"
"fmt"
- sqlserverflex "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
)
-type flavorsClient interface {
- GetFlavorsRequestExecute(ctx context.Context, projectId, region string) (*sqlserverflex.GetFlavorsResponse, error)
- GetFlavorsRequest(ctx context.Context, projectId, region string) sqlserverflex.ApiGetFlavorsRequestRequest
+type flavorsClientReader interface {
+ GetFlavorsRequest(
+ ctx context.Context,
+ projectId, region string,
+ ) sqlserverflexalpha.ApiGetFlavorsRequestRequest
}
-// func loadFlavorId(ctx context.Context, client flavorsClient, model *Model, flavor *flavorModel, storage *storageModel) error {
-// if model == nil {
-// return fmt.Errorf("nil model")
-// }
-// if flavor == nil {
-// return fmt.Errorf("nil flavor")
-// }
-// cpu := flavor.CPU.ValueInt64()
-// if cpu == 0 {
-// return fmt.Errorf("nil CPU")
-// }
-// ram := flavor.RAM.ValueInt64()
-// if ram == 0 {
-// return fmt.Errorf("nil RAM")
-// }
-//
-// nodeType := flavor.NodeType.ValueString()
-// if nodeType == "" {
-// if model.Replicas.IsNull() || model.Replicas.IsUnknown() {
-// return fmt.Errorf("nil NodeType")
-// }
-// switch model.Replicas.ValueInt64() {
-// case 1:
-// nodeType = "Single"
-// case 3:
-// nodeType = "Replica"
-// default:
-// return fmt.Errorf("unknown Replicas value: %d", model.Replicas.ValueInt64())
-// }
-// }
-//
-// storageClass := conversion.StringValueToPointer(storage.Class)
-// if storageClass == nil {
-// return fmt.Errorf("nil StorageClass")
-// }
-// storageSize := conversion.Int64ValueToPointer(storage.Size)
-// if storageSize == nil {
-// return fmt.Errorf("nil StorageSize")
-// }
-//
-// projectId := model.ProjectId.ValueString()
-// region := model.Region.ValueString()
-//
-// flavorList, err := getAllFlavors(ctx, client, projectId, region)
-// if err != nil {
-// return err
-// }
-//
-// avl := ""
-// foundFlavorCount := 0
-// var foundFlavors []string
-// for _, f := range flavorList {
-// if f.Id == nil || f.Cpu == nil || f.Memory == nil {
-// continue
-// }
-// if !strings.EqualFold(*f.NodeType, nodeType) {
-// continue
-// }
-// if *f.Cpu == cpu && *f.Memory == ram {
-// var useSc *sqlserverflex.FlavorStorageClassesStorageClass
-// for _, sc := range *f.StorageClasses {
-// if *sc.Class != *storageClass {
-// continue
-// }
-// if *storageSize < *f.MinGB || *storageSize > *f.MaxGB {
-// return fmt.Errorf("storage size %d out of bounds (min: %d - max: %d)", *storageSize, *f.MinGB, *f.MaxGB)
-// }
-// useSc = &sc
-// }
-// if useSc == nil {
-// return fmt.Errorf("no storage class found for %s", *storageClass)
-// }
-//
-// flavor.Id = types.StringValue(*f.Id)
-// flavor.Description = types.StringValue(*f.Description)
-// foundFlavors = append(foundFlavors, fmt.Sprintf("%s (%d/%d - %s)", *f.Id, *f.Cpu, *f.Memory, *f.NodeType))
-// foundFlavorCount++
-// }
-// for _, cls := range *f.StorageClasses {
-// avl = fmt.Sprintf("%s\n- %d CPU, %d GB RAM, storage %s (min: %d - max: %d)", avl, *f.Cpu, *f.Memory, *cls.Class, *f.MinGB, *f.MaxGB)
-// }
-// }
-// if foundFlavorCount > 1 {
-// return fmt.Errorf(
-// "number of flavors returned: %d\nmultiple flavors found: %d flavors\n %s",
-// len(flavorList),
-// foundFlavorCount,
-// strings.Join(foundFlavors, "\n "),
-// )
-// }
-// if flavor.Id.ValueString() == "" {
-// return fmt.Errorf("couldn't find flavor, available specs are:%s", avl)
-// }
-//
-// return nil
-//}
-
-func getAllFlavors(ctx context.Context, client flavorsClient, projectId, region string) (
- []sqlserverflex.ListFlavors,
+func getAllFlavors(ctx context.Context, client flavorsClientReader, projectId, region string) (
+ []sqlserverflexalpha.ListFlavors,
error,
) {
- if projectId == "" || region == "" {
- return nil, fmt.Errorf("listing sqlserverflex flavors: projectId and region are required")
- }
- var flavorList []sqlserverflex.ListFlavors
-
- var page int64 = 1
- counter := 0
- for {
- res, err := client.GetFlavorsRequest(ctx, projectId, region).Page(page).Execute()
- if err != nil {
- return nil, fmt.Errorf("listing sqlserverflex flavors: %w", err)
- }
- if res.Flavors == nil {
- return nil, fmt.Errorf("finding flavors for project %s", projectId)
- }
- pagination := res.GetPagination()
- flavors := res.GetFlavors()
- flavorList = append(flavorList, flavors...)
-
- if *pagination.TotalRows < int64(len(flavorList)) {
- return nil, fmt.Errorf("total rows is smaller than current accumulated list - that should not happen")
- }
- if *pagination.TotalRows == int64(len(flavorList)) {
- break
- }
- page++
-
- if page > *pagination.TotalPages {
- break
- }
-
- // implement a breakpoint
- counter++
- if counter > 1000 {
- panic("too many pagination results")
- }
+ getAllFilter := func(_ sqlserverflexalpha.ListFlavors) bool { return true }
+ flavorList, err := getFlavorsByFilter(ctx, client, projectId, region, getAllFilter)
+ if err != nil {
+ return nil, err
}
return flavorList, nil
}
-// func getFlavorModelById(ctx context.Context, client flavorsClient, model *Model, flavor *flavorModel) error {
-// if model == nil {
-// return fmt.Errorf("nil model")
-// }
-// if flavor == nil {
-// return fmt.Errorf("nil flavor")
-// }
-// id := conversion.StringValueToPointer(flavor.Id)
-// if id == nil {
-// return fmt.Errorf("nil flavor ID")
-// }
-//
-// flavor.Id = types.StringValue("")
-//
-// projectId := model.ProjectId.ValueString()
-// region := model.Region.ValueString()
-//
-// flavorList, err := getAllFlavors(ctx, client, projectId, region)
-// if err != nil {
-// return err
-// }
-//
-// avl := ""
-// for _, f := range flavorList {
-// if f.Id == nil || f.Cpu == nil || f.Memory == nil {
-// continue
-// }
-// if *f.Id == *id {
-// flavor.Id = types.StringValue(*f.Id)
-// flavor.Description = types.StringValue(*f.Description)
-// flavor.CPU = types.Int64Value(*f.Cpu)
-// flavor.RAM = types.Int64Value(*f.Memory)
-// flavor.NodeType = types.StringValue(*f.NodeType)
-// break
-// }
-// avl = fmt.Sprintf("%s\n- %d CPU, %d GB RAM", avl, *f.Cpu, *f.Memory)
-// }
-// if flavor.Id.ValueString() == "" {
-// return fmt.Errorf("couldn't find flavor, available specs are: %s", avl)
-// }
-//
-// return nil
-//}
+// getFlavorsByFilter is a helper function to retrieve flavors using a filtern function.
+// Hint: The API does not have a GetFlavors endpoint, only ListFlavors
+func getFlavorsByFilter(
+ ctx context.Context,
+ client flavorsClientReader,
+ projectId, region string,
+ filter func(db sqlserverflexalpha.ListFlavors) bool,
+) ([]sqlserverflexalpha.ListFlavors, error) {
+ if projectId == "" || region == "" {
+ return nil, fmt.Errorf("listing sqlserverflexalpha flavors: projectId and region are required")
+ }
+
+ const pageSize = 25
+
+ var result = make([]sqlserverflexalpha.ListFlavors, 0)
+
+ for page := int64(1); ; page++ {
+ res, err := client.GetFlavorsRequest(ctx, projectId, region).
+ Page(page).Size(pageSize).Sort(sqlserverflexalpha.FLAVORSORT_INDEX_ASC).Execute()
+ if err != nil {
+ return nil, fmt.Errorf("requesting flavors list (page %d): %w", page, err)
+ }
+
+ // If the API returns no flavors, we have reached the end of the list.
+ if res.Flavors == nil || len(*res.Flavors) == 0 {
+ break
+ }
+
+ for _, flavor := range *res.Flavors {
+ if filter(flavor) {
+ result = append(result, flavor)
+ }
+ }
+ }
+
+ return result, nil
+}
diff --git a/stackit/internal/services/sqlserverflexalpha/flavor/functions_test.go b/stackit/internal/services/sqlserverflexalpha/flavor/functions_test.go
new file mode 100644
index 00000000..2c31a876
--- /dev/null
+++ b/stackit/internal/services/sqlserverflexalpha/flavor/functions_test.go
@@ -0,0 +1,137 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+package sqlserverFlexAlphaFlavor
+
+import (
+ "context"
+ "testing"
+
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
+ "github.com/stackitcloud/stackit-sdk-go/core/utils"
+)
+
+type mockRequest struct {
+ executeFunc func() (*sqlserverflexalpha.GetFlavorsResponse, error)
+}
+
+func (m *mockRequest) Page(_ int64) sqlserverflexalpha.ApiGetFlavorsRequestRequest { return m }
+func (m *mockRequest) Size(_ int64) sqlserverflexalpha.ApiGetFlavorsRequestRequest { return m }
+func (m *mockRequest) Sort(_ sqlserverflexalpha.FlavorSort) sqlserverflexalpha.ApiGetFlavorsRequestRequest {
+ return m
+}
+func (m *mockRequest) Execute() (*sqlserverflexalpha.GetFlavorsResponse, error) {
+ return m.executeFunc()
+}
+
+type mockFlavorsClient struct {
+ executeRequest func() sqlserverflexalpha.ApiGetFlavorsRequestRequest
+}
+
+func (m *mockFlavorsClient) GetFlavorsRequest(_ context.Context, _, _ string) sqlserverflexalpha.ApiGetFlavorsRequestRequest {
+ return m.executeRequest()
+}
+
+var mockResp = func(page int64) (*sqlserverflexalpha.GetFlavorsResponse, error) {
+ if page == 1 {
+ return &sqlserverflexalpha.GetFlavorsResponse{
+ Flavors: &[]sqlserverflexalpha.ListFlavors{
+ {Id: utils.Ptr("flavor-1"), Description: utils.Ptr("first")},
+ {Id: utils.Ptr("flavor-2"), Description: utils.Ptr("second")},
+ },
+ }, nil
+ }
+ if page == 2 {
+ return &sqlserverflexalpha.GetFlavorsResponse{
+ Flavors: &[]sqlserverflexalpha.ListFlavors{
+ {Id: utils.Ptr("flavor-3"), Description: utils.Ptr("three")},
+ },
+ }, nil
+ }
+
+ return &sqlserverflexalpha.GetFlavorsResponse{
+ Flavors: &[]sqlserverflexalpha.ListFlavors{},
+ }, nil
+}
+
+func TestGetFlavorsByFilter(t *testing.T) {
+ tests := []struct {
+ description string
+ projectId string
+ region string
+ mockErr error
+ filter func(sqlserverflexalpha.ListFlavors) bool
+ wantCount int
+ wantErr bool
+ }{
+ {
+ description: "Success - Get all flavors (2 pages)",
+ projectId: "pid", region: "reg",
+ filter: func(_ sqlserverflexalpha.ListFlavors) bool { return true },
+ wantCount: 3,
+ wantErr: false,
+ },
+ {
+ description: "Success - Filter flavors by description",
+ projectId: "pid", region: "reg",
+ filter: func(f sqlserverflexalpha.ListFlavors) bool { return *f.Description == "first" },
+ wantCount: 1,
+ wantErr: false,
+ },
+ {
+ description: "Error - Missing parameters",
+ projectId: "", region: "reg",
+ wantErr: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(
+ tt.description, func(t *testing.T) {
+ var currentPage int64
+ client := &mockFlavorsClient{
+ executeRequest: func() sqlserverflexalpha.ApiGetFlavorsRequestRequest {
+ return &mockRequest{
+ executeFunc: func() (*sqlserverflexalpha.GetFlavorsResponse, error) {
+ currentPage++
+ return mockResp(currentPage)
+ },
+ }
+ },
+ }
+ actual, err := getFlavorsByFilter(context.Background(), client, tt.projectId, tt.region, tt.filter)
+
+ if (err != nil) != tt.wantErr {
+ t.Errorf("getFlavorsByFilter() error = %v, wantErr %v", err, tt.wantErr)
+ return
+ }
+
+ if !tt.wantErr && len(actual) != tt.wantCount {
+ t.Errorf("getFlavorsByFilter() got %d flavors, want %d", len(actual), tt.wantCount)
+ }
+ },
+ )
+ }
+}
+
+func TestGetAllFlavors(t *testing.T) {
+ var currentPage int64
+ client := &mockFlavorsClient{
+ executeRequest: func() sqlserverflexalpha.ApiGetFlavorsRequestRequest {
+ return &mockRequest{
+ executeFunc: func() (*sqlserverflexalpha.GetFlavorsResponse, error) {
+ currentPage++
+ return mockResp(currentPage)
+ },
+ }
+ },
+ }
+
+ res, err := getAllFlavors(context.Background(), client, "pid", "reg")
+ if err != nil {
+ t.Errorf("getAllFlavors() unexpected error: %v", err)
+ }
+ if len(res) != 3 {
+ t.Errorf("getAllFlavors() expected 3 flavor, got %d", len(res))
+ }
+}
diff --git a/stackit/internal/services/sqlserverflexalpha/flavor/list_datasource.go.bak b/stackit/internal/services/sqlserverflexalpha/flavor/list_datasource.go.bak
deleted file mode 100644
index 9c035504..00000000
--- a/stackit/internal/services/sqlserverflexalpha/flavor/list_datasource.go.bak
+++ /dev/null
@@ -1,79 +0,0 @@
-package postgresFlexAlphaFlavor
-
-import (
- "context"
-
- "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/postgresflexalpha"
- "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
- "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha"
- postgresflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/utils"
-
- "github.com/hashicorp/terraform-plugin-framework/datasource"
- "github.com/hashicorp/terraform-plugin-log/tflog"
- "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
-)
-
-// Ensure the implementation satisfies the expected interfaces.
-var (
- _ datasource.DataSource = &flavorListDataSource{}
-)
-
-// NewFlavorListDataSource is a helper function to simplify the provider implementation.
-func NewFlavorListDataSource() datasource.DataSource {
- return &flavorListDataSource{}
-}
-
-// flavorDataSource is the data source implementation.
-type flavorListDataSource struct {
- client *postgresflexalpha.APIClient
- providerData core.ProviderData
-}
-
-// Metadata returns the data source type name.
-func (r *flavorListDataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
- resp.TypeName = req.ProviderTypeName + "_postgresflexalpha_flavorlist"
-}
-
-// Configure adds the provider configured client to the data source.
-func (r *flavorListDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
- var ok bool
- r.providerData, ok = conversion.ParseProviderData(ctx, req.ProviderData, &resp.Diagnostics)
- if !ok {
- return
- }
-
- apiClient := postgresflexUtils.ConfigureClient(ctx, &r.providerData, &resp.Diagnostics)
- if resp.Diagnostics.HasError() {
- return
- }
- r.client = apiClient
- tflog.Info(ctx, "Postgres Flex flavors client configured")
-}
-
-func (r *flavorListDataSource) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
- resp.Schema = postgresflex.FlavorDataSourceSchema(ctx)
-}
-
-func (r *flavorListDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
- var model postgresflex.FlavorModel
- diags := req.Config.Get(ctx, &model)
- resp.Diagnostics.Append(diags...)
- if resp.Diagnostics.HasError() {
- return
- }
-
- ctx = core.InitProviderContext(ctx)
-
- projectId := model.ProjectId.ValueString()
- region := r.providerData.GetRegionWithOverride(model.Region)
- ctx = tflog.SetField(ctx, "project_id", projectId)
- ctx = tflog.SetField(ctx, "region", region)
-
- // Set refreshed state
- diags = resp.State.Set(ctx, model)
- resp.Diagnostics.Append(diags...)
- if resp.Diagnostics.HasError() {
- return
- }
- tflog.Info(ctx, "Postgres Flex flavors read")
-}
diff --git a/stackit/internal/services/sqlserverflexalpha/flavors/datasource.go b/stackit/internal/services/sqlserverflexalpha/flavors/datasource.go
new file mode 100644
index 00000000..28c20d5c
--- /dev/null
+++ b/stackit/internal/services/sqlserverflexalpha/flavors/datasource.go
@@ -0,0 +1,71 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+package sqlserverflexalpha
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-framework/datasource"
+ "github.com/hashicorp/terraform-plugin-log/tflog"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
+ sqlserverflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/utils"
+
+ sqlserverflexalphaGen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/flavors/datasources_gen"
+)
+
+var _ datasource.DataSource = (*flavorsDataSource)(nil)
+
+func NewFlavorsDataSource() datasource.DataSource {
+ return &flavorsDataSource{}
+}
+
+type flavorsDataSource struct {
+ client *sqlserverflexalpha.APIClient
+ providerData core.ProviderData
+}
+
+func (d *flavorsDataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
+ resp.TypeName = req.ProviderTypeName + "_sqlserverflexalpha_flavors"
+}
+
+func (d *flavorsDataSource) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
+ resp.Schema = sqlserverflexalphaGen.FlavorsDataSourceSchema(ctx)
+}
+
+// Configure adds the provider configured client to the data source.
+func (d *flavorsDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
+ var ok bool
+ d.providerData, ok = conversion.ParseProviderData(ctx, req.ProviderData, &resp.Diagnostics)
+ if !ok {
+ return
+ }
+
+ apiClient := sqlserverflexUtils.ConfigureClient(ctx, &d.providerData, &resp.Diagnostics)
+ if resp.Diagnostics.HasError() {
+ return
+ }
+ d.client = apiClient
+ tflog.Info(ctx, "SQL SERVER Flex flavors client configured")
+}
+
+func (d *flavorsDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
+ var data sqlserverflexalphaGen.FlavorsModel
+
+ // Read Terraform configuration data into the model
+ resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
+
+ if resp.Diagnostics.HasError() {
+ return
+ }
+
+ // Todo: Read API call logic
+
+ // Example data value setting
+ // data.Id = types.StringValue("example-id")
+
+ // Save data into Terraform state
+ resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
+}
diff --git a/stackit/internal/services/sqlserverflexalpha/flavor_data_source_gen.go b/stackit/internal/services/sqlserverflexalpha/flavors/datasources_gen/flavors_data_source_gen.go
similarity index 97%
rename from stackit/internal/services/sqlserverflexalpha/flavor_data_source_gen.go
rename to stackit/internal/services/sqlserverflexalpha/flavors/datasources_gen/flavors_data_source_gen.go
index d9e87331..43ac64f5 100644
--- a/stackit/internal/services/sqlserverflexalpha/flavor_data_source_gen.go
+++ b/stackit/internal/services/sqlserverflexalpha/flavors/datasources_gen/flavors_data_source_gen.go
@@ -1,12 +1,10 @@
// Code generated by terraform-plugin-framework-generator DO NOT EDIT.
-package sqlserverflex
+package sqlserverflexalpha
import (
"context"
"fmt"
- "strings"
-
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
"github.com/hashicorp/terraform-plugin-framework/attr"
"github.com/hashicorp/terraform-plugin-framework/diag"
@@ -14,42 +12,18 @@ import (
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
"github.com/hashicorp/terraform-plugin-go/tftypes"
+ "strings"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
)
-func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
+func FlavorsDataSourceSchema(ctx context.Context) schema.Schema {
return schema.Schema{
Attributes: map[string]schema.Attribute{
- "cpu": schema.Int64Attribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
- "ram": schema.Int64Attribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
- "node_type": schema.StringAttribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
- "storage_class": schema.StringAttribute{
- Optional: true,
- Computed: true,
- //Description: "The cpu count of the instance.",
- //MarkdownDescription: "The cpu count of the instance.",
- },
"flavors": schema.ListNestedAttribute{
NestedObject: schema.NestedAttributeObject{
Attributes: map[string]schema.Attribute{
"cpu": schema.Int64Attribute{
- Optional: true,
Computed: true,
Description: "The cpu count of the instance.",
MarkdownDescription: "The cpu count of the instance.",
@@ -70,7 +44,6 @@ func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
MarkdownDescription: "maximum storage which can be ordered for the flavor in Gigabyte.",
},
"memory": schema.Int64Attribute{
- Optional: true,
Computed: true,
Description: "The memory of the instance in Gibibyte.",
MarkdownDescription: "The memory of the instance in Gibibyte.",
@@ -81,10 +54,9 @@ func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
MarkdownDescription: "minimum storage which is required to order in Gigabyte.",
},
"node_type": schema.StringAttribute{
- Optional: true,
Computed: true,
- Description: "defines the nodeType it can be either single or replica",
- MarkdownDescription: "defines the nodeType it can be either single or replica",
+ Description: "defines the nodeType it can be either single or HA",
+ MarkdownDescription: "defines the nodeType it can be either single or HA",
},
"storage_classes": schema.ListNestedAttribute{
NestedObject: schema.NestedAttributeObject{
@@ -205,9 +177,6 @@ func FlavorDataSourceSchema(ctx context.Context) schema.Schema {
}
type FlavorsModel struct {
- Cpu types.Int64 `tfsdk:"cpu"`
- Ram types.Int64 `tfsdk:"ram"`
- NodeType types.String `tfsdk:"node_type"`
Flavors types.List `tfsdk:"flavors"`
Page types.Int64 `tfsdk:"page"`
Pagination PaginationValue `tfsdk:"pagination"`
diff --git a/stackit/internal/services/sqlserverflexalpha/instance/functions.go b/stackit/internal/services/sqlserverflexalpha/instance/functions.go
index 696edc44..310c6570 100644
--- a/stackit/internal/services/sqlserverflexalpha/instance/functions.go
+++ b/stackit/internal/services/sqlserverflexalpha/instance/functions.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflex
import (
diff --git a/stackit/internal/services/sqlserverflexalpha/main.go b/stackit/internal/services/sqlserverflexalpha/main.go
new file mode 100644
index 00000000..120c0078
--- /dev/null
+++ b/stackit/internal/services/sqlserverflexalpha/main.go
@@ -0,0 +1,4 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+package sqlserverflexalpha
diff --git a/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go b/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go
index c98de26f..e918223a 100644
--- a/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go
+++ b/stackit/internal/services/sqlserverflexalpha/sqlserverflex_acc_test.go
@@ -1,6 +1,6 @@
// Copyright (c) STACKIT
-package sqlserverflex_test
+package sqlserverflexalpha_test
import (
"context"
diff --git a/stackit/internal/services/sqlserverflexalpha/testdata/resource-max.tf b/stackit/internal/services/sqlserverflexalpha/testdata/resource-max.tf
index a0cf700a..57e37671 100644
--- a/stackit/internal/services/sqlserverflexalpha/testdata/resource-max.tf
+++ b/stackit/internal/services/sqlserverflexalpha/testdata/resource-max.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
variable "project_id" {}
variable "name" {}
variable "acl1" {}
diff --git a/stackit/internal/services/sqlserverflexalpha/testdata/resource-min.tf b/stackit/internal/services/sqlserverflexalpha/testdata/resource-min.tf
index 3953ddf1..3b816acc 100644
--- a/stackit/internal/services/sqlserverflexalpha/testdata/resource-min.tf
+++ b/stackit/internal/services/sqlserverflexalpha/testdata/resource-min.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
variable "project_id" {}
variable "name" {}
variable "flavor_cpu" {}
diff --git a/stackit/internal/services/sqlserverflexalpha/user/datasource.go b/stackit/internal/services/sqlserverflexalpha/user/datasource.go
index 19af445d..d46f3324 100644
--- a/stackit/internal/services/sqlserverflexalpha/user/datasource.go
+++ b/stackit/internal/services/sqlserverflexalpha/user/datasource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
diff --git a/stackit/internal/services/sqlserverflexalpha/user/datasource_test.go b/stackit/internal/services/sqlserverflexalpha/user/datasource_test.go
index ad4f5484..625e8a3c 100644
--- a/stackit/internal/services/sqlserverflexalpha/user/datasource_test.go
+++ b/stackit/internal/services/sqlserverflexalpha/user/datasource_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
diff --git a/stackit/internal/services/sqlserverflexalpha/user/resource.go b/stackit/internal/services/sqlserverflexalpha/user/resource.go
index 2980f31c..2afe66d2 100644
--- a/stackit/internal/services/sqlserverflexalpha/user/resource.go
+++ b/stackit/internal/services/sqlserverflexalpha/user/resource.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
diff --git a/stackit/internal/services/sqlserverflexalpha/user/resource_test.go b/stackit/internal/services/sqlserverflexalpha/user/resource_test.go
index e62c9364..0d634d36 100644
--- a/stackit/internal/services/sqlserverflexalpha/user/resource_test.go
+++ b/stackit/internal/services/sqlserverflexalpha/user/resource_test.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
diff --git a/stackit/internal/services/sqlserverflexalpha/version/datasource.go b/stackit/internal/services/sqlserverflexalpha/version/datasource.go
index 1fb9466b..3ba1e976 100644
--- a/stackit/internal/services/sqlserverflexalpha/version/datasource.go
+++ b/stackit/internal/services/sqlserverflexalpha/version/datasource.go
@@ -1,35 +1,61 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package sqlserverflexalpha
import (
"context"
"github.com/hashicorp/terraform-plugin-framework/datasource"
- "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
- "github.com/hashicorp/terraform-plugin-framework/types"
+ "github.com/hashicorp/terraform-plugin-log/tflog"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/sqlserverflexalpha"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/conversion"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/core"
+ sqlserverflexUtils "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/utils"
+
+ sqlserverflexalphaGen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/version/datasources_gen"
)
-var _ datasource.DataSource = (*versionDataSource)(nil)
+var (
+ _ datasource.DataSource = (*versionDataSource)(nil)
+ _ datasource.DataSourceWithConfigure = (*versionDataSource)(nil)
+)
func NewVersionDataSource() datasource.DataSource {
return &versionDataSource{}
}
-type versionDataSource struct{}
-
-type versionDataSourceModel struct {
- Id types.String `tfsdk:"id"`
+type versionDataSource struct {
+ client *sqlserverflexalpha.APIClient
+ providerData core.ProviderData
}
-func (d *versionDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
- resp.TypeName = req.ProviderTypeName + "sqlserverflexalpha_version"
+func (d *versionDataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
+ resp.TypeName = req.ProviderTypeName + "_sqlserverflexalpha_version"
}
-func (d *versionDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
+func (d *versionDataSource) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
resp.Schema = sqlserverflexalphaGen.VersionDataSourceSchema(ctx)
}
+// Configure adds the provider configured client to the data source.
+func (d *versionDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
+ var ok bool
+ d.providerData, ok = conversion.ParseProviderData(ctx, req.ProviderData, &resp.Diagnostics)
+ if !ok {
+ return
+ }
+
+ apiClient := sqlserverflexUtils.ConfigureClient(ctx, &d.providerData, &resp.Diagnostics)
+ if resp.Diagnostics.HasError() {
+ return
+ }
+ d.client = apiClient
+ tflog.Info(ctx, "SQL SERVER Flex version client configured")
+}
+
func (d *versionDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
- var data sqlserverflexalphaGen.versionDataSourceModel
+ var data sqlserverflexalphaGen.VersionModel
// Read Terraform configuration data into the model
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
@@ -41,7 +67,7 @@ func (d *versionDataSource) Read(ctx context.Context, req datasource.ReadRequest
// Todo: Read API call logic
// Example data value setting
- data.Id = types.StringValue("example-id")
+ // data.Id = types.StringValue("example-id")
// Save data into Terraform state
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
diff --git a/stackit/internal/wait/postgresflexalpha/wait.go b/stackit/internal/wait/postgresflexalpha/wait.go
index f0a24e7e..0ab32156 100644
--- a/stackit/internal/wait/postgresflexalpha/wait.go
+++ b/stackit/internal/wait/postgresflexalpha/wait.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package postgresflexalpha
import (
@@ -53,6 +56,8 @@ func CreateInstanceWaitHandler(
) *wait.AsyncActionHandler[postgresflex.GetInstanceResponse] {
instanceCreated := false
var instanceGetResponse *postgresflex.GetInstanceResponse
+ maxWait := time.Minute * 30
+ startTime := time.Now()
handler := wait.New(
func() (waitFinished bool, response *postgresflex.GetInstanceResponse, err error) {
@@ -74,7 +79,20 @@ func CreateInstanceWaitHandler(
case InstanceStateUnknown:
return false, nil, nil
case InstanceStateProgressing:
- return false, nil, nil
+ if time.Since(startTime) < maxWait {
+ return false, nil, nil
+ }
+ tflog.Warn(
+ ctx,
+ fmt.Sprintf(
+ "Wait handler still got status %s after %v for instance: %s",
+ InstanceStateProgressing,
+ maxWait,
+ instanceId,
+ ),
+ )
+ instanceCreated = true
+ instanceGetResponse = s
case InstanceStateSuccess:
if s.Network == nil || s.Network.InstanceAddress == nil {
tflog.Info(ctx, "Waiting for instance_address")
diff --git a/stackit/provider.go b/stackit/provider.go
index ad8bd47d..34e7dc5c 100644
--- a/stackit/provider.go
+++ b/stackit/provider.go
@@ -20,12 +20,14 @@ import (
"github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/features"
postgresFlexAlphaDatabase "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/database"
postgresFlexAlphaFlavor "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavor"
+ postgresflexalphaFlavors "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavors"
postgresFlexAlphaInstance "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance"
postgresFlexAlphaUser "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/user"
- sqlserverflexalpha "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/database"
+ sqlserverflexalphaDatabase "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/database"
sqlserverFlexAlphaFlavor "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/flavor"
sqlServerFlexAlphaInstance "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/instance"
sqlserverFlexAlphaUser "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/user"
+ sqlserverflexalphaVersion "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/version"
sdkauth "github.com/stackitcloud/stackit-sdk-go/core/auth"
"github.com/stackitcloud/stackit-sdk-go/core/config"
)
@@ -496,11 +498,13 @@ func (p *Provider) DataSources(_ context.Context) []func() datasource.DataSource
postgresFlexAlphaDatabase.NewDatabaseDataSource,
postgresFlexAlphaInstance.NewInstanceDataSource,
postgresFlexAlphaUser.NewUserDataSource,
+ postgresflexalphaFlavors.NewFlavorsDataSource,
+ sqlserverflexalphaVersion.NewVersionDataSource,
sqlserverFlexAlphaFlavor.NewFlavorDataSource,
sqlServerFlexAlphaInstance.NewInstanceDataSource,
sqlserverFlexAlphaUser.NewUserDataSource,
- sqlserverflexalpha.NewDatabaseDataSource,
+ sqlserverflexalphaDatabase.NewDatabaseDataSource,
}
}
@@ -512,7 +516,7 @@ func (p *Provider) Resources(_ context.Context) []func() resource.Resource {
postgresFlexAlphaUser.NewUserResource,
sqlServerFlexAlphaInstance.NewInstanceResource,
sqlserverFlexAlphaUser.NewUserResource,
- sqlserverflexalpha.NewDatabaseResource,
+ sqlserverflexalphaDatabase.NewDatabaseResource,
}
return resources
}
diff --git a/stackit/testdata/provider-all-attributes.tf b/stackit/testdata/provider-all-attributes.tf
index 895ea245..a8c4b508 100644
--- a/stackit/testdata/provider-all-attributes.tf
+++ b/stackit/testdata/provider-all-attributes.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
variable "project_id" {}
variable "name" {}
diff --git a/stackit/testdata/provider-credentials.tf b/stackit/testdata/provider-credentials.tf
index 32c1d863..377899cb 100644
--- a/stackit/testdata/provider-credentials.tf
+++ b/stackit/testdata/provider-credentials.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
variable "project_id" {}
variable "name" {}
diff --git a/stackit/testdata/provider-invalid-attribute.tf b/stackit/testdata/provider-invalid-attribute.tf
index d5a11a2c..4ed38812 100644
--- a/stackit/testdata/provider-invalid-attribute.tf
+++ b/stackit/testdata/provider-invalid-attribute.tf
@@ -1,3 +1,6 @@
+# Copyright (c) HashiCorp, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
variable "project_id" {}
variable "name" {}
diff --git a/tools/copy.go b/tools/copy.go
index 8597f7ba..bcd8100a 100644
--- a/tools/copy.go
+++ b/tools/copy.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package tools
import (
@@ -33,7 +36,7 @@ func CopyDirectory(scrDir, dest string) error {
switch fileInfo.Mode() & os.ModeType {
case os.ModeDir:
- if err := CreateIfNotExists(destPath, 0755); err != nil {
+ if err := CreateIfNotExists(destPath, 0o755); err != nil {
return err
}
if err := CopyDirectory(sourcePath, destPath); err != nil {
diff --git a/tools/formats.go b/tools/formats.go
index 8b73a42a..e1fac07d 100644
--- a/tools/formats.go
+++ b/tools/formats.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package tools
import (
@@ -32,7 +35,7 @@ func ToPascalCase(in string) string {
}
return snakeLetters.ReplaceAllStringFunc(ucName, func(s string) string {
- return strings.ToUpper(strings.Replace(s, "_", "", -1))
+ return strings.ToUpper(strings.ReplaceAll(s, "_", ""))
})
}
diff --git a/tools/main.go b/tools/main.go
index 3a0eef6b..e455c59d 100644
--- a/tools/main.go
+++ b/tools/main.go
@@ -1,3 +1,6 @@
+// Copyright (c) HashiCorp, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
package tools
import (
@@ -65,20 +68,20 @@ func Build() error {
slog.Info("Creating oas dir", "dir", fmt.Sprintf("%s/%s", *root, OAS_REPO_NAME))
repoDir, err := createRepoDir(genDir, OAS_REPO, OAS_REPO_NAME)
if err != nil {
- return fmt.Errorf(err.Error())
+ return fmt.Errorf("%s", err.Error())
}
slog.Info("Retrieving versions from subdirs")
// TODO - major
verMap, err := getVersions(repoDir)
if err != nil {
- return fmt.Errorf(err.Error())
+ return fmt.Errorf("%s", err.Error())
}
slog.Info("Reducing to only latest or highest")
res, err := getOnlyLatest(verMap)
if err != nil {
- return fmt.Errorf(err.Error())
+ return fmt.Errorf("%s", err.Error())
}
slog.Info("Creating OAS dir")
@@ -105,14 +108,14 @@ func Build() error {
dstFile := path.Join(genDir, "oas", fmt.Sprintf("%s.json", service))
_, err = copyFile(srcFile, dstFile)
if err != nil {
- return fmt.Errorf(err.Error())
+ return fmt.Errorf("%s", err.Error())
}
}
slog.Info("Cleaning up", "dir", repoDir)
err = os.RemoveAll(filepath.Dir(repoDir))
if err != nil {
- return fmt.Errorf(err.Error())
+ return fmt.Errorf("%s", err.Error())
}
slog.Info("Changing dir", "dir", genDir)
@@ -128,7 +131,7 @@ func Build() error {
cmd.Stderr = &stdErr
if err = cmd.Start(); err != nil {
- slog.Error("cmd.Start", err)
+ slog.Error("cmd.Start", "error", err)
return err
}
@@ -136,8 +139,9 @@ func Build() error {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
slog.Error("cmd.Wait", "code", exitErr.ExitCode())
- return fmt.Errorf(stdErr.String())
- } else {
+ return fmt.Errorf("%s", stdErr.String())
+ }
+ if err != nil {
slog.Error("cmd.Wait", "err", err)
return err
}
@@ -168,7 +172,7 @@ func Build() error {
}
slog.Info("Rearranging package directories")
- err = os.MkdirAll(path.Join(*root, "pkg"), 0755)
+ err = os.MkdirAll(path.Join(*root, "pkg"), 0755) // noqa:gosec
if err != nil {
return err
}
@@ -283,10 +287,11 @@ func createBoilerplate(rootFolder, folder string) error {
return err
}
- handleDS := false
- handleRes := false
- foundDS := false
- foundRes := false
+ var handleDS bool
+ var handleRes bool
+ var foundDS bool
+ var foundRes bool
+
for _, res := range resources {
if !res.IsDir() {
continue
@@ -436,6 +441,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
// slog.Info("Generating openapi spec json")
specFile := path.Join(rootDir, "generated", "specs", fmt.Sprintf("%s_%s_spec.json", scName, resource))
+ // noqa:gosec
cmd := exec.Command(
"tfplugingen-openapi",
"generate",
@@ -459,6 +465,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
}
// slog.Info("Generating terraform service resource files")
+ // noqa:gosec
cmd2 := exec.Command(
"tfplugingen-framework",
"generate",
@@ -475,7 +482,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
cmd2.Stderr = &stdErr
if err = cmd2.Start(); err != nil {
- slog.Error("cmd.Start", err)
+ slog.Error("cmd.Start", "error", err)
return err
}
@@ -483,8 +490,9 @@ func generateServiceFiles(rootDir, generatorDir string) error {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
slog.Error("cmd.Wait", "code", exitErr.ExitCode())
- return fmt.Errorf(stdErr.String())
- } else {
+ return fmt.Errorf("%s", stdErr.String())
+ }
+ if err != nil {
slog.Error("cmd.Wait", "err", err)
return err
}
@@ -498,6 +506,8 @@ func generateServiceFiles(rootDir, generatorDir string) error {
}
// slog.Info("Generating terraform service resource files")
+
+ // noqa:gosec
cmd3 := exec.Command(
"tfplugingen-framework",
"generate",
@@ -514,7 +524,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
cmd3.Stderr = &stdErr3
if err = cmd3.Start(); err != nil {
- slog.Error("cmd.Start", err)
+ slog.Error("cmd.Start", "error", err)
return err
}
@@ -522,8 +532,9 @@ func generateServiceFiles(rootDir, generatorDir string) error {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
slog.Error("cmd.Wait", "code", exitErr.ExitCode())
- return fmt.Errorf(stdErr.String())
- } else {
+ return fmt.Errorf("%s", stdErr.String())
+ }
+ if err != nil {
slog.Error("cmd.Wait", "err", err)
return err
}
@@ -537,11 +548,10 @@ func generateServiceFiles(rootDir, generatorDir string) error {
func checkCommands(commands []string) error {
for _, commandName := range commands {
- if commandExists(commandName) {
- slog.Info("found", "command", commandName)
- } else {
- return fmt.Errorf("missing command %s\n", commandName)
+ if !commandExists(commandName) {
+ return fmt.Errorf("missing command %s", commandName)
}
+ slog.Info("found", "command", commandName)
}
return nil
}
diff --git a/tools/templates/data_source_scaffold.gotmpl b/tools/templates/data_source_scaffold.gotmpl
index bcfb65ac..38986c9f 100644
--- a/tools/templates/data_source_scaffold.gotmpl
+++ b/tools/templates/data_source_scaffold.gotmpl
@@ -7,6 +7,8 @@ import (
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-framework/types"
+ "github.com/mhenselin/terraform-provider-stackitprivatepreview/pkg/{{.PackageName}}"
+
{{.PackageName}}Gen "github.com/mhenselin/terraform-provider-stackitprivatepreview/stackit/internal/services/{{.PackageName}}/{{.NameSnake}}/datasources_gen"
)
@@ -21,11 +23,11 @@ type {{.NameCamel}}DataSource struct{
providerData core.ProviderData
}
-func (d *{{.NameCamel}}DataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
+func (d *{{.NameCamel}}DataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_{{.PackageName}}_{{.NameSnake}}"
}
-func (d *{{.NameCamel}}DataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
+func (d *{{.NameCamel}}DataSource) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
resp.Schema = {{.PackageName}}Gen.{{.NamePascal}}DataSourceSchema(ctx)
}