|
|
@@ -11,21 +11,66 @@ import (
|
|
|
ints "github.com/porter-dev/porter/internal/models/integrations"
|
|
|
)
|
|
|
|
|
|
+// FeatureFlagLabel strongly types project feature flags
|
|
|
+type FeatureFlagLabel string
|
|
|
+
|
|
|
+const (
|
|
|
+ // APITokensEnabled allows users to create Bearer tokens for use with the Porter API
|
|
|
+ // #nosec G101 - Not actually an api token
|
|
|
+ APITokensEnabled FeatureFlagLabel = "api_tokens_enabled"
|
|
|
+
|
|
|
+ // AzureEnabled enables Azure Provisioning
|
|
|
+ AzureEnabled FeatureFlagLabel = "azure_enabled"
|
|
|
+
|
|
|
+ // CapiProvisionerEnabled enables the CAPI Provisioning flow
|
|
|
+ CapiProvisionerEnabled FeatureFlagLabel = "capi_provisioner_enabled"
|
|
|
+
|
|
|
+ // EnableReprovision enables the provisioning button after initial creation of the cluster
|
|
|
+ EnableReprovision FeatureFlagLabel = "enable_reprovision"
|
|
|
+
|
|
|
+ // FullAddOns shows all addons, not just curated
|
|
|
+ FullAddOns FeatureFlagLabel = "full_add_ons"
|
|
|
+
|
|
|
+ // HelmValuesEnabled shows the helm values tab for porter apps (when simplified_view_enabled=true)
|
|
|
+ HelmValuesEnabled FeatureFlagLabel = "helm_values_enabled"
|
|
|
+
|
|
|
+ // ManagedInfraEnabled uses terraform provisioning instead of capi
|
|
|
+ ManagedInfraEnabled FeatureFlagLabel = "managed_infra_enabled"
|
|
|
+
|
|
|
+ // MultiCluster allows multiple clusters in simplified view (simplified_view_enabled=true)
|
|
|
+ MultiCluster FeatureFlagLabel = "multi_cluster"
|
|
|
+
|
|
|
+ // PreviewEnvsEnabled allows legacy user the ability to see preview environments in sidebar (simplified_view_enabled=false)
|
|
|
+ PreviewEnvsEnabled FeatureFlagLabel = "preview_envs_enabled"
|
|
|
+
|
|
|
+ // RDSDatabasesEnabled allows for users to provision RDS instances within their cluster vpc
|
|
|
+ RDSDatabasesEnabled FeatureFlagLabel = "rds_databases_enabled"
|
|
|
+
|
|
|
+ // SimplifiedViewEnabled shows the new UI dashboard or not
|
|
|
+ SimplifiedViewEnabled FeatureFlagLabel = "simplified_view_enabled"
|
|
|
+
|
|
|
+ // StacksEnabled uses stack view for legacy (simplified_view_enabled=false)
|
|
|
+ StacksEnabled FeatureFlagLabel = "stacks_enabled"
|
|
|
+
|
|
|
+ // ValidateApplyV2 controls whether apps deploys use a porter app revision contract vs helm
|
|
|
+ ValidateApplyV2 FeatureFlagLabel = "validate_apply_v2"
|
|
|
+)
|
|
|
+
|
|
|
// 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,
|
|
|
+var ProjectFeatureFlags = map[FeatureFlagLabel]bool{
|
|
|
+ APITokensEnabled: false,
|
|
|
+ AzureEnabled: false,
|
|
|
+ CapiProvisionerEnabled: true,
|
|
|
+ EnableReprovision: false,
|
|
|
+ FullAddOns: false,
|
|
|
+ HelmValuesEnabled: false,
|
|
|
+ ManagedInfraEnabled: false,
|
|
|
+ MultiCluster: false,
|
|
|
+ PreviewEnvsEnabled: false,
|
|
|
+ RDSDatabasesEnabled: false,
|
|
|
+ SimplifiedViewEnabled: true,
|
|
|
+ StacksEnabled: false,
|
|
|
+ ValidateApplyV2: false,
|
|
|
}
|
|
|
|
|
|
type ProjectPlan string
|
|
|
@@ -79,30 +124,56 @@ type Project struct {
|
|
|
AzureIntegrations []ints.AzureIntegration `json:"azure_integrations"`
|
|
|
GitlabIntegrations []ints.GitlabIntegration `json:"gitlab_integrations"`
|
|
|
|
|
|
- PreviewEnvsEnabled bool
|
|
|
- RDSDatabasesEnabled bool
|
|
|
- ManagedInfraEnabled bool
|
|
|
- StacksEnabled bool
|
|
|
- APITokensEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(PreviewEnvsEnabled, *features.Client) instead
|
|
|
+ PreviewEnvsEnabled bool
|
|
|
+
|
|
|
+ // Deprecated: use p.GetFeatureFlag(RDSDatabasesEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ RDSDatabasesEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(ManagedInfraEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ ManagedInfraEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(StacksEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ StacksEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(APITokensEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ APITokensEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(CapiProvisionerEnabled, *features.Client) instead
|
|
|
+
|
|
|
CapiProvisionerEnabled bool
|
|
|
- SimplifiedViewEnabled bool
|
|
|
- AzureEnabled bool
|
|
|
- HelmValuesEnabled bool
|
|
|
- MultiCluster bool `gorm:"default:false"`
|
|
|
- FullAddOns bool `gorm:"default:false"`
|
|
|
- ValidateApplyV2 bool `gorm:"default:false"`
|
|
|
- EnableReprovision bool `gorm:"default:false"`
|
|
|
+ // Deprecated: use p.GetFeatureFlag(SimplifiedViewEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ SimplifiedViewEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(AzureEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ AzureEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(HelmValuesEnabled, *features.Client) instead
|
|
|
+
|
|
|
+ HelmValuesEnabled bool
|
|
|
+ // Deprecated: use p.GetFeatureFlag(MultiCluster, *features.Client) instead
|
|
|
+
|
|
|
+ MultiCluster bool `gorm:"default:false"`
|
|
|
+ // Deprecated: use p.GetFeatureFlag(FullAddOns, *features.Client) instead
|
|
|
+
|
|
|
+ FullAddOns bool `gorm:"default:false"`
|
|
|
+ // Deprecated: use p.GetFeatureFlag(ValidateApplyV2, *features.Client) instead
|
|
|
+
|
|
|
+ ValidateApplyV2 bool `gorm:"default:false"`
|
|
|
+ // Deprecated: use p.GetFeatureFlag(EnableReprovision, *features.Client) instead
|
|
|
+
|
|
|
+ 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 {
|
|
|
+func (p *Project) GetFeatureFlag(flagName FeatureFlagLabel, launchDarklyClient *features.Client) bool {
|
|
|
projectID := p.ID
|
|
|
projectName := p.Name
|
|
|
ldContext := getProjectContext(projectID, projectName)
|
|
|
|
|
|
defaultValue := ProjectFeatureFlags[flagName]
|
|
|
- value, _ := launchDarklyClient.BoolVariation(flagName, ldContext, defaultValue)
|
|
|
+ value, _ := launchDarklyClient.BoolVariation(string(flagName), ldContext, defaultValue)
|
|
|
return value
|
|
|
}
|
|
|
|
|
|
@@ -122,19 +193,19 @@ func (p *Project) ToProjectType(launchDarklyClient *features.Client) types.Proje
|
|
|
Name: projectName,
|
|
|
Roles: roles,
|
|
|
|
|
|
- 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),
|
|
|
+ PreviewEnvsEnabled: p.GetFeatureFlag(PreviewEnvsEnabled, launchDarklyClient),
|
|
|
+ RDSDatabasesEnabled: p.GetFeatureFlag(RDSDatabasesEnabled, launchDarklyClient),
|
|
|
+ ManagedInfraEnabled: p.GetFeatureFlag(ManagedInfraEnabled, launchDarklyClient),
|
|
|
+ StacksEnabled: p.GetFeatureFlag(StacksEnabled, launchDarklyClient),
|
|
|
+ APITokensEnabled: p.GetFeatureFlag(APITokensEnabled, launchDarklyClient),
|
|
|
+ CapiProvisionerEnabled: p.GetFeatureFlag(CapiProvisionerEnabled, launchDarklyClient),
|
|
|
+ SimplifiedViewEnabled: p.GetFeatureFlag(SimplifiedViewEnabled, launchDarklyClient),
|
|
|
+ AzureEnabled: p.GetFeatureFlag(AzureEnabled, launchDarklyClient),
|
|
|
+ HelmValuesEnabled: p.GetFeatureFlag(HelmValuesEnabled, launchDarklyClient),
|
|
|
+ MultiCluster: p.GetFeatureFlag(MultiCluster, launchDarklyClient),
|
|
|
+ EnableReprovision: p.GetFeatureFlag(EnableReprovision, launchDarklyClient),
|
|
|
+ ValidateApplyV2: p.GetFeatureFlag(ValidateApplyV2, launchDarklyClient),
|
|
|
+ FullAddOns: p.GetFeatureFlag(FullAddOns, launchDarklyClient),
|
|
|
}
|
|
|
}
|
|
|
|