terraform-provider-stackitp.../stackit/internal/features/beta.go
Diogo Ferrão 610b65f1cc
Add documentation to support beta resources (#417)
* add README, guide and description method

* undo unwanted changes to docs

* Update docs/guides/opting_into_beta_resources.md

Co-authored-by: GokceGK <161626272+GokceGK@users.noreply.github.com>

* address PR comments

* address PR comments

---------

Co-authored-by: GokceGK <161626272+GokceGK@users.noreply.github.com>
2024-06-24 15:07:31 +01:00

53 lines
2.1 KiB
Go

package features
import (
"context"
"fmt"
"os"
"strings"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
)
// BetaResourcesEnabled returns whether this provider has beta functionality enabled.
//
// In order of precedence, beta functionality can be managed by:
// - Environment Variable `STACKIT_TF_ENABLE_BETA_RESOURCES` - `true` is enabled, `false` is disabled.
// - Provider configuration feature flag `enable_beta` - `true` is enabled, `false` is disabled.
func BetaResourcesEnabled(ctx context.Context, data *core.ProviderData, diags *diag.Diagnostics) bool {
value, set := os.LookupEnv("STACKIT_TF_ENABLE_BETA_RESOURCES")
if set {
if strings.EqualFold(value, "true") {
return true
}
if strings.EqualFold(value, "false") {
return false
}
warnDetails := fmt.Sprintf(`The value of the environment variable that enables beta functionality must be either "true" or "false", got %q.
Defaulting to the provider feature flag.`, value)
core.LogAndAddWarning(ctx, diags, "Invalid value for STACKIT_TF_ENABLE_BETA_RESOURCES environment variable.", warnDetails)
}
// ProviderData should always be set, but we check just in case
if data == nil {
return false
}
return data.EnableBetaResources
}
// CheckBetaResourcesEnabled is a helper function to log and add a warning or error if the beta functionality is not enabled.
//
// Should be called in the Configure method of a beta resource.
// Then, check for Errors in the diags using the diags.HasError() method.
func CheckBetaResourcesEnabled(ctx context.Context, data *core.ProviderData, diags *diag.Diagnostics, resourceName string) {
if !BetaResourcesEnabled(ctx, data, diags) {
core.LogAndAddErrorBeta(ctx, diags, resourceName)
return
}
core.LogAndAddWarningBeta(ctx, diags, resourceName)
}
func AddBetaDescription(description string) string {
// Callout block: https://developer.hashicorp.com/terraform/registry/providers/docs#callouts
return fmt.Sprintf("%s\n\n!> This resource is in beta and may be subject to breaking changes in the future. Use with caution.", description)
}