feat: initial copy of v0.1.0
This commit is contained in:
parent
4cc801a7f3
commit
7d4cbb6b08
538 changed files with 63361 additions and 55213 deletions
|
|
@ -16,13 +16,27 @@ import (
|
|||
"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-log/tflog"
|
||||
sdkauth "github.com/stackitcloud/stackit-sdk-go/core/auth"
|
||||
"github.com/stackitcloud/stackit-sdk-go/core/config"
|
||||
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
|
||||
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/features"
|
||||
postgresFlexAlphaInstance "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/postgresflexalpha/instance"
|
||||
sqlServerFlexAlphaInstance "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/sqlserverflexalpha/instance"
|
||||
sqlServerFlexAlpaUser "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/sqlserverflexalpha/user"
|
||||
|
||||
sqlserverflexalphaDatabase "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/database"
|
||||
sqlserverflexalphaInstance "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/instance"
|
||||
sqlserverflexalphaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/user"
|
||||
sqlserverflexbetaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta/user"
|
||||
|
||||
"tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/core"
|
||||
"tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/features"
|
||||
|
||||
postgresFlexAlphaDatabase "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/database"
|
||||
postgresFlexAlphaFlavor "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavor"
|
||||
postgresflexalphaFlavors "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavors"
|
||||
postgresFlexAlphaInstance "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance"
|
||||
postgresFlexAlphaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/user"
|
||||
|
||||
sqlserverFlexBetaDatabase "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta/database"
|
||||
sqlserverflexBetaInstance "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta/instance"
|
||||
// sqlserverFlexBetaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbetaUser/user"
|
||||
)
|
||||
|
||||
// Ensure the implementation satisfies the expected interfaces
|
||||
|
|
@ -30,6 +44,22 @@ var (
|
|||
_ provider.Provider = &Provider{}
|
||||
)
|
||||
|
||||
const providerConfigError = "Error configuring provider"
|
||||
|
||||
//nolint:unused // These constants are defined for future use in retry logic for HTTP requests, which is not yet implemented.
|
||||
/*
|
||||
const (
|
||||
// maxRetries is the maximum number of retries for a failed HTTP request.
|
||||
maxRetries = 3
|
||||
// initialDelay is the initial delay before the first retry attempt.
|
||||
initialDelay = 2 * time.Second
|
||||
// maxDelay is the maximum delay between retry attempts.
|
||||
maxDelay = 90 * time.Second
|
||||
// perTryTimeout is the timeout for each individual HTTP request attempt.
|
||||
perTryTimeout = 30 * time.Second
|
||||
)
|
||||
*/
|
||||
|
||||
// Provider is the provider implementation.
|
||||
type Provider struct {
|
||||
version string
|
||||
|
|
@ -64,7 +94,7 @@ type providerModel struct {
|
|||
// Custom endpoints
|
||||
AuthorizationCustomEndpoint types.String `tfsdk:"authorization_custom_endpoint"`
|
||||
CdnCustomEndpoint types.String `tfsdk:"cdn_custom_endpoint"`
|
||||
DnsCustomEndpoint types.String `tfsdk:"dns_custom_endpoint"`
|
||||
DNSCustomEndpoint types.String `tfsdk:"dns_custom_endpoint"`
|
||||
GitCustomEndpoint types.String `tfsdk:"git_custom_endpoint"`
|
||||
IaaSCustomEndpoint types.String `tfsdk:"iaas_custom_endpoint"`
|
||||
KmsCustomEndpoint types.String `tfsdk:"kms_custom_endpoint"`
|
||||
|
|
@ -96,6 +126,7 @@ type providerModel struct {
|
|||
|
||||
// Schema defines the provider-level schema for configuration data.
|
||||
func (p *Provider) Schema(_ context.Context, _ provider.SchemaRequest, resp *provider.SchemaResponse) {
|
||||
//nolint:gosec // These are just descriptions, not actual credentials or sensitive information.
|
||||
descriptions := map[string]string{
|
||||
"credentials_path": "Path of JSON from where the credentials are read. Takes precedence over the env var `STACKIT_CREDENTIALS_PATH`. Default value is `~/.stackit/credentials.json`.",
|
||||
"service_account_token": "Token used for authentication. If set, the token flow will be used to authenticate all operations.",
|
||||
|
|
@ -313,6 +344,7 @@ func (p *Provider) Schema(_ context.Context, _ provider.SchemaRequest, resp *pro
|
|||
|
||||
// Configure prepares a stackit API client for data sources and resources.
|
||||
func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
|
||||
tflog.Info(ctx, "Configuring provider client")
|
||||
// Retrieve provider data and configuration
|
||||
var providerConfig providerModel
|
||||
diags := req.Config.Get(ctx, &providerConfig)
|
||||
|
|
@ -340,7 +372,7 @@ func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest,
|
|||
core.LogAndAddError(
|
||||
ctx,
|
||||
&resp.Diagnostics,
|
||||
"Error configuring provider",
|
||||
providerConfigError,
|
||||
fmt.Sprintf("Setting up bool value: %v", diags.Errors()),
|
||||
)
|
||||
}
|
||||
|
|
@ -359,9 +391,9 @@ func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest,
|
|||
|
||||
setStringField(providerConfig.DefaultRegion, func(v string) { providerData.DefaultRegion = v })
|
||||
setStringField(
|
||||
providerConfig.Region,
|
||||
func(v string) { providerData.Region = v },
|
||||
) // nolint:staticcheck // preliminary handling of deprecated attribute
|
||||
providerConfig.Region, // nolint:staticcheck // preliminary handling of deprecated attribute
|
||||
func(v string) { providerData.Region = v }, // nolint:staticcheck // preliminary handling of deprecated attribute
|
||||
)
|
||||
setBoolField(providerConfig.EnableBetaResources, func(v bool) { providerData.EnableBetaResources = v })
|
||||
|
||||
setStringField(
|
||||
|
|
@ -369,7 +401,7 @@ func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest,
|
|||
func(v string) { providerData.AuthorizationCustomEndpoint = v },
|
||||
)
|
||||
setStringField(providerConfig.CdnCustomEndpoint, func(v string) { providerData.CdnCustomEndpoint = v })
|
||||
setStringField(providerConfig.DnsCustomEndpoint, func(v string) { providerData.DnsCustomEndpoint = v })
|
||||
setStringField(providerConfig.DNSCustomEndpoint, func(v string) { providerData.DnsCustomEndpoint = v })
|
||||
setStringField(providerConfig.GitCustomEndpoint, func(v string) { providerData.GitCustomEndpoint = v })
|
||||
setStringField(providerConfig.IaaSCustomEndpoint, func(v string) { providerData.IaaSCustomEndpoint = v })
|
||||
setStringField(providerConfig.KmsCustomEndpoint, func(v string) { providerData.KMSCustomEndpoint = v })
|
||||
|
|
@ -436,34 +468,44 @@ func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest,
|
|||
func(v string) { providerData.SQLServerFlexCustomEndpoint = v },
|
||||
)
|
||||
|
||||
if !(providerConfig.Experiments.IsUnknown() || providerConfig.Experiments.IsNull()) {
|
||||
if !providerConfig.Experiments.IsUnknown() && !providerConfig.Experiments.IsNull() {
|
||||
var experimentValues []string
|
||||
diags := providerConfig.Experiments.ElementsAs(ctx, &experimentValues, false)
|
||||
if diags.HasError() {
|
||||
core.LogAndAddError(
|
||||
ctx,
|
||||
&resp.Diagnostics,
|
||||
"Error configuring provider",
|
||||
providerConfigError,
|
||||
fmt.Sprintf("Setting up experiments: %v", diags.Errors()),
|
||||
)
|
||||
}
|
||||
providerData.Experiments = experimentValues
|
||||
}
|
||||
|
||||
roundTripper, err := sdkauth.SetupAuth(sdkConfig)
|
||||
baseRoundTripper, err := sdkauth.SetupAuth(sdkConfig)
|
||||
if err != nil {
|
||||
core.LogAndAddError(
|
||||
ctx,
|
||||
&resp.Diagnostics,
|
||||
"Error configuring provider",
|
||||
providerConfigError,
|
||||
fmt.Sprintf("Setting up authentication: %v", err),
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
//nolint:gocritic // maybe later in the code
|
||||
// roundTripper := core.NewRetryRoundTripper(
|
||||
// baseRoundTripper,
|
||||
// maxRetries,
|
||||
// initialDelay,
|
||||
// maxDelay,
|
||||
// perTryTimeout,
|
||||
//)
|
||||
|
||||
// Make round tripper and custom endpoints available during DataSource and Resource
|
||||
// type Configure methods.
|
||||
providerData.RoundTripper = roundTripper
|
||||
// providerData.RoundTripper = roundTripper
|
||||
providerData.RoundTripper = baseRoundTripper
|
||||
resp.DataSourceData = providerData
|
||||
resp.ResourceData = providerData
|
||||
|
||||
|
|
@ -486,8 +528,22 @@ func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest,
|
|||
// DataSources defines the data sources implemented in the provider.
|
||||
func (p *Provider) DataSources(_ context.Context) []func() datasource.DataSource {
|
||||
return []func() datasource.DataSource{
|
||||
sqlServerFlexAlphaInstance.NewInstanceDataSource,
|
||||
sqlServerFlexAlpaUser.NewUserDataSource,
|
||||
postgresFlexAlphaFlavor.NewFlavorDataSource,
|
||||
// postgresFlexAlphaFlavor.NewFlavorListDataSource,
|
||||
postgresFlexAlphaDatabase.NewDatabaseDataSource,
|
||||
postgresFlexAlphaInstance.NewInstanceDataSource,
|
||||
postgresFlexAlphaUser.NewUserDataSource,
|
||||
postgresflexalphaFlavors.NewFlavorsDataSource,
|
||||
|
||||
// sqlserverFlexAlphaFlavor.NewFlavorDataSource,
|
||||
sqlserverflexalphaInstance.NewInstanceDataSource,
|
||||
sqlserverflexalphaUser.NewUserDataSource,
|
||||
sqlserverflexalphaDatabase.NewDatabaseDataSource,
|
||||
|
||||
sqlserverFlexBetaDatabase.NewDatabaseDataSource,
|
||||
sqlserverflexBetaInstance.NewInstanceDataSource,
|
||||
sqlserverflexbetaUser.NewUserDataSource,
|
||||
// sqlserverFlexBetaFlavor.NewFlavorDataSource,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -495,8 +551,16 @@ func (p *Provider) DataSources(_ context.Context) []func() datasource.DataSource
|
|||
func (p *Provider) Resources(_ context.Context) []func() resource.Resource {
|
||||
resources := []func() resource.Resource{
|
||||
postgresFlexAlphaInstance.NewInstanceResource,
|
||||
sqlServerFlexAlphaInstance.NewInstanceResource,
|
||||
sqlServerFlexAlpaUser.NewUserResource,
|
||||
postgresFlexAlphaUser.NewUserResource,
|
||||
postgresFlexAlphaDatabase.NewDatabaseResource,
|
||||
|
||||
sqlserverflexalphaInstance.NewInstanceResource,
|
||||
sqlserverflexalphaUser.NewUserResource,
|
||||
sqlserverflexalphaDatabase.NewDatabaseResource,
|
||||
|
||||
sqlserverflexBetaInstance.NewInstanceResource,
|
||||
sqlserverflexbetaUser.NewUserResource,
|
||||
sqlserverFlexBetaDatabase.NewDatabaseResource,
|
||||
}
|
||||
return resources
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue