瀏覽代碼

[POR-1503] simplify retrieval of launchdarkly flags (#3539)

jose-fully-ported 2 年之前
父節點
當前提交
d39ff272c8
共有 2 個文件被更改,包括 55 次插入110 次删除
  1. 0 96
      internal/models/feature_flag.go
  2. 55 14
      internal/models/project.go

+ 0 - 96
internal/models/feature_flag.go

@@ -1,96 +0,0 @@
-package models
-
-import (
-	"fmt"
-
-	"github.com/launchdarkly/go-sdk-common/v3/ldcontext"
-	"github.com/porter-dev/porter/internal/features"
-)
-
-func getAPITokensEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("api_tokens_enabled", context, defaultValue)
-	return value
-}
-
-func getAzureEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("azure_enabled", context, defaultValue)
-	return value
-}
-
-func getCapiProvisionerEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := true
-	value, _ := client.BoolVariation("capi_provisioner_enabled", context, defaultValue)
-	return value
-}
-
-func getEnableReprovision(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("enable_reprovision", context, defaultValue)
-	return value
-}
-
-func getFullAddOns(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("full_add_ons", context, defaultValue)
-	return value
-}
-
-func getHelmValuesEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("helm_values_enabled", context, defaultValue)
-	return value
-}
-
-func getManagedInfraEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("managed_infra_enabled", context, defaultValue)
-	return value
-}
-
-func getMultiCluster(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("multi_cluster", context, defaultValue)
-	return value
-}
-
-func getPreviewEnvsEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("preview_envs_enabled", context, defaultValue)
-	return value
-}
-
-func getRdsDatabasesEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("rds_databases_enabled", context, defaultValue)
-	return value
-}
-
-func getSimplifiedViewEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := true
-	value, _ := client.BoolVariation("simplified_view_enabled", context, defaultValue)
-	return value
-}
-
-func getStacksEnabled(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("stacks_enabled", context, defaultValue)
-	return value
-}
-
-func getValidateApplyV2(context ldcontext.Context, client *features.Client) bool {
-	defaultValue := false
-	value, _ := client.BoolVariation("validate_apply_v2", context, defaultValue)
-	return value
-}
-
-func getProjectContext(projectID uint, projectName string) ldcontext.Context {
-	projectIdentifier := fmt.Sprintf("project-%d", projectID)
-	launchDarklyName := fmt.Sprintf("%s: %s", projectIdentifier, projectName)
-	return ldcontext.NewBuilder(projectIdentifier).
-		Kind("project").
-		Name(launchDarklyName).
-		SetInt("project_id", int(projectID)).
-		Build()
-}

+ 55 - 14
internal/models/project.go

@@ -1,13 +1,33 @@
 package models
 
 import (
+	"fmt"
+
 	"gorm.io/gorm"
 
+	"github.com/launchdarkly/go-sdk-common/v3/ldcontext"
 	"github.com/porter-dev/porter/api/types"
 	"github.com/porter-dev/porter/internal/features"
 	ints "github.com/porter-dev/porter/internal/models/integrations"
 )
 
+// ProjectFeatureFlags keeps track of all project-related feature flags
+var ProjectFeatureFlags = map[string]bool{
+	"api_tokens_enabled":       false,
+	"azure_enabled":            false,
+	"capi_provisioner_enabled": true,
+	"enable_reprovision":       false,
+	"full_add_ons":             false,
+	"helm_values_enabled":      false,
+	"managed_infra_enabled":    false,
+	"multi_cluster":            false,
+	"preview_envs_enabled":     false,
+	"rds_databases_enabled":    false,
+	"simplified_view_enabled":  true,
+	"stacks_enabled":           false,
+	"validate_apply_v2":        false,
+}
+
 type ProjectPlan string
 
 const (
@@ -74,6 +94,18 @@ type Project struct {
 	EnableReprovision      bool `gorm:"default:false"`
 }
 
+// GetFeatureFlag calls launchdarkly for the specified flag
+// and returns the configured value
+func (p *Project) GetFeatureFlag(flagName string, launchDarklyClient *features.Client) bool {
+	projectID := p.ID
+	projectName := p.Name
+	ldContext := getProjectContext(projectID, projectName)
+
+	defaultValue := ProjectFeatureFlags[flagName]
+	value, _ := launchDarklyClient.BoolVariation(flagName, ldContext, defaultValue)
+	return value
+}
+
 // ToProjectType generates an external types.Project to be shared over REST
 func (p *Project) ToProjectType(launchDarklyClient *features.Client) types.Project {
 	roles := make([]*types.Role, 0)
@@ -84,26 +116,25 @@ func (p *Project) ToProjectType(launchDarklyClient *features.Client) types.Proje
 
 	projectID := p.ID
 	projectName := p.Name
-	ldContext := getProjectContext(projectID, projectName)
 
 	return types.Project{
 		ID:    projectID,
 		Name:  projectName,
 		Roles: roles,
 
-		PreviewEnvsEnabled:     getPreviewEnvsEnabled(ldContext, launchDarklyClient),
-		RDSDatabasesEnabled:    getRdsDatabasesEnabled(ldContext, launchDarklyClient),
-		ManagedInfraEnabled:    getManagedInfraEnabled(ldContext, launchDarklyClient),
-		StacksEnabled:          getStacksEnabled(ldContext, launchDarklyClient),
-		APITokensEnabled:       getAPITokensEnabled(ldContext, launchDarklyClient),
-		CapiProvisionerEnabled: getCapiProvisionerEnabled(ldContext, launchDarklyClient),
-		SimplifiedViewEnabled:  getSimplifiedViewEnabled(ldContext, launchDarklyClient),
-		AzureEnabled:           getAzureEnabled(ldContext, launchDarklyClient),
-		HelmValuesEnabled:      getHelmValuesEnabled(ldContext, launchDarklyClient),
-		MultiCluster:           getMultiCluster(ldContext, launchDarklyClient),
-		EnableReprovision:      getEnableReprovision(ldContext, launchDarklyClient),
-		ValidateApplyV2:        getValidateApplyV2(ldContext, launchDarklyClient),
-		FullAddOns:             getFullAddOns(ldContext, launchDarklyClient),
+		PreviewEnvsEnabled:     p.GetFeatureFlag("preview_envs_enabled", launchDarklyClient),
+		RDSDatabasesEnabled:    p.GetFeatureFlag("rds_databases_enabled", launchDarklyClient),
+		ManagedInfraEnabled:    p.GetFeatureFlag("managed_infra_enabled", launchDarklyClient),
+		StacksEnabled:          p.GetFeatureFlag("stacks_enabled", launchDarklyClient),
+		APITokensEnabled:       p.GetFeatureFlag("api_tokens_enabled", launchDarklyClient),
+		CapiProvisionerEnabled: p.GetFeatureFlag("capi_provisioner_enabled", launchDarklyClient),
+		SimplifiedViewEnabled:  p.GetFeatureFlag("simplified_view_enabled", launchDarklyClient),
+		AzureEnabled:           p.GetFeatureFlag("azure_enabled", launchDarklyClient),
+		HelmValuesEnabled:      p.GetFeatureFlag("helm_values_enabled", launchDarklyClient),
+		MultiCluster:           p.GetFeatureFlag("multi_cluster", launchDarklyClient),
+		EnableReprovision:      p.GetFeatureFlag("enable_reprovision", launchDarklyClient),
+		ValidateApplyV2:        p.GetFeatureFlag("validate_apply_v2", launchDarklyClient),
+		FullAddOns:             p.GetFeatureFlag("full_add_ons", launchDarklyClient),
 	}
 }
 
@@ -139,3 +170,13 @@ func (p *Project) ToProjectListType() *types.ProjectList {
 		FullAddOns:             p.FullAddOns,
 	}
 }
+
+func getProjectContext(projectID uint, projectName string) ldcontext.Context {
+	projectIdentifier := fmt.Sprintf("project-%d", projectID)
+	launchDarklyName := fmt.Sprintf("%s: %s", projectIdentifier, projectName)
+	return ldcontext.NewBuilder(projectIdentifier).
+		Kind("project").
+		Name(launchDarklyName).
+		SetInt("project_id", int(projectID)).
+		Build()
+}