From 4aaf8ef714ae28c10ae6a30cea8ed09d033794f9 Mon Sep 17 00:00:00 2001 From: Charandas Batra Date: Fri, 9 Jan 2026 16:48:18 -0800 Subject: [PATCH] FF: enumerate provider types and default to static for invalid --- pkg/extensions/enterprise_imports.go | 3 +++ pkg/registry/apis/ofrep/register.go | 4 ++-- pkg/services/featuremgmt/openfeature.go | 4 ++-- pkg/setting/setting_openfeature.go | 32 +++++++++++++++++++++---- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/pkg/extensions/enterprise_imports.go b/pkg/extensions/enterprise_imports.go index 472652cc103..b0e748422a1 100644 --- a/pkg/extensions/enterprise_imports.go +++ b/pkg/extensions/enterprise_imports.go @@ -11,6 +11,9 @@ import ( _ "github.com/Azure/azure-sdk-for-go/services/keyvault/v7.1/keyvault" _ "github.com/Azure/go-autorest/autorest" _ "github.com/Azure/go-autorest/autorest/adal" + _ "github.com/aws/aws-sdk-go-v2/credentials" + _ "github.com/aws/aws-sdk-go-v2/service/secretsmanager" + _ "github.com/aws/aws-sdk-go-v2/service/sts" _ "github.com/beevik/etree" _ "github.com/blugelabs/bluge" _ "github.com/blugelabs/bluge_segment_api" diff --git a/pkg/registry/apis/ofrep/register.go b/pkg/registry/apis/ofrep/register.go index 7101476a94b..e8d17b31a77 100644 --- a/pkg/registry/apis/ofrep/register.go +++ b/pkg/registry/apis/ofrep/register.go @@ -44,7 +44,7 @@ var groupVersion = schema.GroupVersion{ } type APIBuilder struct { - providerType string + providerType setting.OpenFeatureProviderType url *url.URL insecure bool caFile string @@ -52,7 +52,7 @@ type APIBuilder struct { logger log.Logger } -func NewAPIBuilder(providerType string, url *url.URL, insecure bool, caFile string, staticEvaluator featuremgmt.StaticFlagEvaluator) *APIBuilder { +func NewAPIBuilder(providerType setting.OpenFeatureProviderType, url *url.URL, insecure bool, caFile string, staticEvaluator featuremgmt.StaticFlagEvaluator) *APIBuilder { return &APIBuilder{ providerType: providerType, url: url, diff --git a/pkg/services/featuremgmt/openfeature.go b/pkg/services/featuremgmt/openfeature.go index cd3b77322fb..8f29a146d6e 100644 --- a/pkg/services/featuremgmt/openfeature.go +++ b/pkg/services/featuremgmt/openfeature.go @@ -20,7 +20,7 @@ const ( // OpenFeatureConfig holds configuration for initializing OpenFeature type OpenFeatureConfig struct { // ProviderType is either "static", "features-service", or "ofrep" - ProviderType string + ProviderType setting.OpenFeatureProviderType // URL is the remote provider's URL (required for features-service + OFREP providers) URL *url.URL // HTTPClient is a pre-configured HTTP client (optional, used by features-service + OFREP providers) @@ -98,7 +98,7 @@ func InitOpenFeatureWithCfg(cfg *setting.Cfg) error { } func createProvider( - providerType string, + providerType setting.OpenFeatureProviderType, u *url.URL, staticFlags map[string]bool, httpClient *http.Client, diff --git a/pkg/setting/setting_openfeature.go b/pkg/setting/setting_openfeature.go index 17ef4d9de16..8f576cb9498 100644 --- a/pkg/setting/setting_openfeature.go +++ b/pkg/setting/setting_openfeature.go @@ -5,15 +5,17 @@ import ( "net/url" ) +type OpenFeatureProviderType string + const ( - StaticProviderType = "static" - FeaturesServiceProviderType = "features-service" - OFREPProviderType = "ofrep" + StaticProviderType OpenFeatureProviderType = "static" + FeaturesServiceProviderType OpenFeatureProviderType = "features-service" + OFREPProviderType OpenFeatureProviderType = "ofrep" ) type OpenFeatureSettings struct { APIEnabled bool - ProviderType string + ProviderType OpenFeatureProviderType URL *url.URL TargetingKey string ContextAttrs map[string]string @@ -24,7 +26,27 @@ func (cfg *Cfg) readOpenFeatureSettings() error { config := cfg.Raw.Section("feature_toggles.openfeature") cfg.OpenFeature.APIEnabled = config.Key("enable_api").MustBool(true) - cfg.OpenFeature.ProviderType = config.Key("provider").MustString(StaticProviderType) + + providerType := config.Key("provider").Validate(func(in string) string { + if in == "" { + return string(StaticProviderType) + } + + switch in { + case string(StaticProviderType): + return string(StaticProviderType) + case string(FeaturesServiceProviderType): + return string(FeaturesServiceProviderType) + case string(OFREPProviderType): + return string(OFREPProviderType) + default: + cfg.Logger.Warn("invalid provider type", "provider", in) + cfg.Logger.Info("using static provider for openfeature") + return string(StaticProviderType) + } + }) + + cfg.OpenFeature.ProviderType = OpenFeatureProviderType(providerType) strURL := config.Key("url").MustString("") defaultTargetingKey := "default"