diff --git a/cmd/broker/provisioning_test.go b/cmd/broker/provisioning_test.go index 2b8c0eb972..c3abbc9362 100644 --- a/cmd/broker/provisioning_test.go +++ b/cmd/broker/provisioning_test.go @@ -1882,8 +1882,9 @@ func TestProvisioningWithAdditionalWorkerNodePools(t *testing.T) { //given cfg := fixConfig() cfg.Broker.KimConfig.Enabled = true - cfg.Broker.KimConfig.Plans = []string{"preview"} - cfg.Broker.KimConfig.KimOnlyPlans = []string{"preview"} + cfg.Broker.KimConfig.Plans = []string{"aws"} + cfg.Broker.KimConfig.KimOnlyPlans = []string{"aws"} + cfg.Broker.EnableAdditionalWorkerNodePools = true suite := NewBrokerSuiteTestWithConfig(t, cfg) defer suite.TearDown() @@ -1893,7 +1894,7 @@ func TestProvisioningWithAdditionalWorkerNodePools(t *testing.T) { resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu21/v2/service_instances/%s?accepts_incomplete=true", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "subaccount_id": "sub-id", diff --git a/cmd/broker/update_test.go b/cmd/broker/update_test.go index 7c9b357b50..3027ea9817 100644 --- a/cmd/broker/update_test.go +++ b/cmd/broker/update_test.go @@ -2530,14 +2530,20 @@ func TestUpdateErsContextAndParamsForExpiredInstance(t *testing.T) { func TestUpdateAdditionalWorkerNodePools(t *testing.T) { t.Run("should add additional worker node pools", func(t *testing.T) { // given - suite := NewBrokerSuiteTest(t) + cfg := fixConfig() + cfg.Broker.KimConfig.Enabled = true + cfg.Broker.KimConfig.Plans = []string{"aws"} + cfg.Broker.KimConfig.KimOnlyPlans = []string{"aws"} + cfg.Broker.EnableAdditionalWorkerNodePools = true + + suite := NewBrokerSuiteTestWithConfig(t, cfg) defer suite.TearDown() iid := uuid.New().String() - resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true&plan_id=7d55d31d-35ae-4438-bf13-6ffdfa107d9f&service_id=47c9dcbf-ff30-448e-ab36-d3bad66ba281", iid), + resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true&plan_id=361c511f-f939-4621-b228-d0fb79a1fe15&service_id=47c9dcbf-ff30-448e-ab36-d3bad66ba281", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "subaccount_id": "sub-id", @@ -2557,7 +2563,7 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { resp = suite.CallAPI("PATCH", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "user_id": "john.smith@email.com" @@ -2594,14 +2600,20 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { t.Run("should replace additional worker node pools", func(t *testing.T) { // given - suite := NewBrokerSuiteTest(t) + cfg := fixConfig() + cfg.Broker.KimConfig.Enabled = true + cfg.Broker.KimConfig.Plans = []string{"aws"} + cfg.Broker.KimConfig.KimOnlyPlans = []string{"aws"} + cfg.Broker.EnableAdditionalWorkerNodePools = true + + suite := NewBrokerSuiteTestWithConfig(t, cfg) defer suite.TearDown() iid := uuid.New().String() - resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true&plan_id=7d55d31d-35ae-4438-bf13-6ffdfa107d9f&service_id=47c9dcbf-ff30-448e-ab36-d3bad66ba281", iid), + resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true&plan_id=361c511f-f939-4621-b228-d0fb79a1fe15&service_id=47c9dcbf-ff30-448e-ab36-d3bad66ba281", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "subaccount_id": "sub-id", @@ -2630,7 +2642,7 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { resp = suite.CallAPI("PATCH", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "user_id": "john.smith@email.com" @@ -2659,14 +2671,20 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { t.Run("should remove additional worker node pools when list is empty", func(t *testing.T) { // given - suite := NewBrokerSuiteTest(t) + cfg := fixConfig() + cfg.Broker.KimConfig.Enabled = true + cfg.Broker.KimConfig.Plans = []string{"aws"} + cfg.Broker.KimConfig.KimOnlyPlans = []string{"aws"} + cfg.Broker.EnableAdditionalWorkerNodePools = true + + suite := NewBrokerSuiteTestWithConfig(t, cfg) defer suite.TearDown() iid := uuid.New().String() - resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true&plan_id=7d55d31d-35ae-4438-bf13-6ffdfa107d9f&service_id=47c9dcbf-ff30-448e-ab36-d3bad66ba281", iid), + resp := suite.CallAPI("PUT", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true&plan_id=361c511f-f939-4621-b228-d0fb79a1fe15&service_id=47c9dcbf-ff30-448e-ab36-d3bad66ba281", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "subaccount_id": "sub-id", @@ -2702,7 +2720,7 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { resp = suite.CallAPI("PATCH", fmt.Sprintf("oauth/cf-eu10/v2/service_instances/%s?accepts_incomplete=true", iid), `{ "service_id": "47c9dcbf-ff30-448e-ab36-d3bad66ba281", - "plan_id": "5cb3d976-b85c-42ea-a636-79cadda109a9", + "plan_id": "361c511f-f939-4621-b228-d0fb79a1fe15", "context": { "globalaccount_id": "g-account-id", "user_id": "john.smith@email.com" diff --git a/internal/broker/broker.go b/internal/broker/broker.go index 0acb893d48..43647115e7 100644 --- a/internal/broker/broker.go +++ b/internal/broker/broker.go @@ -50,6 +50,8 @@ type Config struct { TrialDocsURL string `envconfig:"default="` EnableShootAndSeedSameRegion bool `envconfig:"default=false"` AllowUpdateExpiredInstanceWithContext bool `envconfig:"default=false"` + EnableAdditionalWorkerNodePools bool `envconfig:"default=false"` + EnableLoadCurrentConfig bool `envconfig:"default=false"` Binding BindingConfig KimConfig KimConfig diff --git a/internal/broker/instance_create.go b/internal/broker/instance_create.go index 0054931a68..3d1507f471 100644 --- a/internal/broker/instance_create.go +++ b/internal/broker/instance_create.go @@ -302,6 +302,10 @@ func (b *ProvisionEndpoint) validateAndExtract(details domain.ProvisionDetails, } if parameters.AdditionalWorkerNodePools != nil { + if !b.config.EnableAdditionalWorkerNodePools { + message := fmt.Sprintf("additional worker node pools are not supported") + return ersContext, parameters, apiresponses.NewFailureResponse(fmt.Errorf(message), http.StatusUnprocessableEntity, message) + } if !supportsAdditionalWorkerNodePools(details.PlanID) { message := fmt.Sprintf("additional worker node pools are not supported for plan ID: %s", details.PlanID) return ersContext, parameters, apiresponses.NewFailureResponse(fmt.Errorf(message), http.StatusUnprocessableEntity, message) @@ -406,15 +410,16 @@ func isEuRestrictedAccess(ctx context.Context) bool { } func supportsAdditionalWorkerNodePools(planID string) bool { - var supportedPlans = []string{ - PreviewPlanID, + var unsupportedPlans = []string{ + FreemiumPlanID, + TrialPlanID, } - for _, supportedPlan := range supportedPlans { - if planID == supportedPlan { - return true + for _, unsupportedPlan := range unsupportedPlans { + if planID == unsupportedPlan { + return false } } - return false + return true } func AreNamesUnique(pools []pkg.AdditionalWorkerNodePool) bool { @@ -507,7 +512,7 @@ func (b *ProvisionEndpoint) determineLicenceType(planId string) *string { func (b *ProvisionEndpoint) validator(details *domain.ProvisionDetails, provider pkg.CloudProvider, ctx context.Context) (JSONSchemaValidator, error) { platformRegion, _ := middleware.RegionFromContext(ctx) - plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.UseSmallerMachineTypes, b.config.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion)) + plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.UseSmallerMachineTypes, b.config.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), b.config.EnableAdditionalWorkerNodePools, b.config.EnableLoadCurrentConfig) plan := plans[details.PlanID] schema := string(Marshal(plan.Schemas.Instance.Create.Parameters)) diff --git a/internal/broker/instance_create_test.go b/internal/broker/instance_create_test.go index 726e29f177..4e467ede55 100644 --- a/internal/broker/instance_create_test.go +++ b/internal/broker/instance_create_test.go @@ -1563,7 +1563,7 @@ func TestAdditionalWorkerNodePools(t *testing.T) { queue.On("Add", mock.AnythingOfType("string")) factoryBuilder := &automock.PlanValidator{} - factoryBuilder.On("IsPlanSupport", broker.PreviewPlanID).Return(true) + factoryBuilder.On("IsPlanSupport", broker.AWSPlanID).Return(true) planDefaults := func(planID string, platformProvider pkg.CloudProvider, provider *pkg.CloudProvider) (*gqlschema.ClusterConfigInput, error) { return &gqlschema.ClusterConfigInput{}, nil @@ -1573,10 +1573,11 @@ func TestAdditionalWorkerNodePools(t *testing.T) { // #create provisioner endpoint provisionEndpoint := broker.NewProvision( broker.Config{ - EnablePlans: []string{"preview"}, - URL: brokerURL, - OnlySingleTrialPerGA: true, - EnableKubeconfigURLLabel: true, + EnablePlans: []string{"aws"}, + URL: brokerURL, + OnlySingleTrialPerGA: true, + EnableKubeconfigURLLabel: true, + EnableAdditionalWorkerNodePools: true, }, gardener.Config{Project: "test", ShootDomain: "example.com", DNSProviders: fixDNSProviders()}, memoryStorage.Operations(), @@ -1596,7 +1597,7 @@ func TestAdditionalWorkerNodePools(t *testing.T) { // when _, err := provisionEndpoint.Provision(fixRequestContext(t, "cf-eu10"), instanceID, domain.ProvisionDetails{ ServiceID: serviceID, - PlanID: broker.PreviewPlanID, + PlanID: broker.AWSPlanID, RawParameters: json.RawMessage(fmt.Sprintf(`{"name": "%s", "region": "%s","additionalWorkerNodePools": %s }`, clusterName, "eu-central-1", tc.additionalWorkerNodePools)), RawContext: json.RawMessage(fmt.Sprintf(`{"globalaccount_id": "%s", "subaccount_id": "%s", "user_id": "%s"}`, "any-global-account-id", subAccountID, "Test@Test.pl")), }, true) @@ -1618,21 +1619,6 @@ func TestAdditionalWorkerNodePoolsForUnsupportedPlans(t *testing.T) { "Free": { planID: broker.FreemiumPlanID, }, - "Azure": { - planID: broker.AzurePlanID, - }, - "Azure lite": { - planID: broker.AzureLitePlanID, - }, - "AWS": { - planID: broker.AWSPlanID, - }, - "GCP": { - planID: broker.GCPPlanID, - }, - "SAP converged cloud": { - planID: broker.SapConvergedCloudPlanID, - }, } { t.Run(tn, func(t *testing.T) { // given @@ -1656,10 +1642,11 @@ func TestAdditionalWorkerNodePoolsForUnsupportedPlans(t *testing.T) { // #create provisioner endpoint provisionEndpoint := broker.NewProvision( broker.Config{ - EnablePlans: []string{"trial", "free", "azure", "azure_lite", "aws", "gcp", "sap-converged-cloud"}, - URL: brokerURL, - OnlySingleTrialPerGA: true, - EnableKubeconfigURLLabel: true, + EnablePlans: []string{"trial", "free"}, + URL: brokerURL, + OnlySingleTrialPerGA: true, + EnableKubeconfigURLLabel: true, + EnableAdditionalWorkerNodePools: true, }, gardener.Config{Project: "test", ShootDomain: "example.com", DNSProviders: fixDNSProviders()}, memoryStorage.Operations(), diff --git a/internal/broker/instance_update.go b/internal/broker/instance_update.go index d1a73b8cdf..175cf9020a 100644 --- a/internal/broker/instance_update.go +++ b/internal/broker/instance_update.go @@ -265,6 +265,10 @@ func (b *UpdateEndpoint) processUpdateParameters(instance *internal.Instance, de } if params.AdditionalWorkerNodePools != nil { + if !b.config.EnableAdditionalWorkerNodePools { + message := fmt.Sprintf("additional worker node pools are not supported") + return domain.UpdateServiceSpec{}, apiresponses.NewFailureResponse(fmt.Errorf(message), http.StatusBadRequest, message) + } if !supportsAdditionalWorkerNodePools(details.PlanID) { message := fmt.Sprintf("additional worker node pools are not supported for plan ID: %s", details.PlanID) return domain.UpdateServiceSpec{}, apiresponses.NewFailureResponse(fmt.Errorf(message), http.StatusBadRequest, message) @@ -428,7 +432,7 @@ func (b *UpdateEndpoint) extractActiveValue(id string, provisioning internal.Pro func (b *UpdateEndpoint) getJsonSchemaValidator(provider pkg.CloudProvider, planID string, platformRegion string) (JSONSchemaValidator, error) { // shootAndSeedSameRegion is never enabled for update b.log.Info(fmt.Sprintf("region is: %s", platformRegion)) - plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.UseSmallerMachineTypes, false, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion)) + plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.UseSmallerMachineTypes, false, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), b.config.EnableAdditionalWorkerNodePools, b.config.EnableLoadCurrentConfig) plan := plans[planID] schema := string(Marshal(plan.Schemas.Instance.Update.Parameters)) diff --git a/internal/broker/instance_update_test.go b/internal/broker/instance_update_test.go index 36a92992f4..74672f622c 100644 --- a/internal/broker/instance_update_test.go +++ b/internal/broker/instance_update_test.go @@ -654,7 +654,7 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { t.Run(tn, func(t *testing.T) { // given instance := fixture.FixInstance(instanceID) - instance.ServicePlanID = PreviewPlanID + instance.ServicePlanID = AWSPlanID st := storage.NewMemoryStorage() err := st.Instances().Insert(instance) require.NoError(t, err) @@ -670,11 +670,12 @@ func TestUpdateAdditionalWorkerNodePools(t *testing.T) { kcBuilder := &kcMock.KcBuilder{} svc := NewUpdate(Config{}, st.Instances(), st.RuntimeStates(), st.Operations(), handler, true, true, false, q, PlansConfig{}, planDefaults, fixLogger(), dashboardConfig, kcBuilder, &OneForAllConvergedCloudRegionsProvider{}, fakeKcpK8sClient) + svc.config.EnableAdditionalWorkerNodePools = true // when _, err = svc.Update(context.Background(), instanceID, domain.UpdateDetails{ ServiceID: "", - PlanID: PreviewPlanID, + PlanID: AWSPlanID, RawParameters: json.RawMessage("{\"additionalWorkerNodePools\":" + tc.additionalWorkerNodePools + "}"), PreviousValues: domain.PreviousValues{}, RawContext: json.RawMessage("{\"globalaccount_id\":\"globalaccount_id_1\", \"active\":true}"), @@ -691,7 +692,7 @@ func TestHAZones(t *testing.T) { t.Run("should fail when attempting to disable HA zones for existing additional worker node pool", func(t *testing.T) { // given instance := fixture.FixInstance(instanceID) - instance.ServicePlanID = PreviewPlanID + instance.ServicePlanID = AWSPlanID instance.Parameters.Parameters.AdditionalWorkerNodePools = []pkg.AdditionalWorkerNodePool{ { Name: "name-1", @@ -716,11 +717,12 @@ func TestHAZones(t *testing.T) { kcBuilder := &kcMock.KcBuilder{} svc := NewUpdate(Config{}, st.Instances(), st.RuntimeStates(), st.Operations(), handler, true, true, false, q, PlansConfig{}, planDefaults, fixLogger(), dashboardConfig, kcBuilder, &OneForAllConvergedCloudRegionsProvider{}, fakeKcpK8sClient) + svc.config.EnableAdditionalWorkerNodePools = true // when _, err = svc.Update(context.Background(), instanceID, domain.UpdateDetails{ ServiceID: "", - PlanID: PreviewPlanID, + PlanID: AWSPlanID, RawParameters: json.RawMessage(`{"additionalWorkerNodePools": [{"name": "name-1", "machineType": "m6i.large", "haZones": false, "autoScalerMin": 3, "autoScalerMax": 20}]}`), PreviousValues: domain.PreviousValues{}, RawContext: json.RawMessage("{\"globalaccount_id\":\"globalaccount_id_1\", \"active\":true}"), @@ -734,7 +736,7 @@ func TestHAZones(t *testing.T) { t.Run("should fail when attempting to enable HA zones for existing additional worker node pool", func(t *testing.T) { // given instance := fixture.FixInstance(instanceID) - instance.ServicePlanID = PreviewPlanID + instance.ServicePlanID = AWSPlanID instance.Parameters.Parameters.AdditionalWorkerNodePools = []pkg.AdditionalWorkerNodePool{ { Name: "name-1", @@ -759,11 +761,12 @@ func TestHAZones(t *testing.T) { kcBuilder := &kcMock.KcBuilder{} svc := NewUpdate(Config{}, st.Instances(), st.RuntimeStates(), st.Operations(), handler, true, true, false, q, PlansConfig{}, planDefaults, fixLogger(), dashboardConfig, kcBuilder, &OneForAllConvergedCloudRegionsProvider{}, fakeKcpK8sClient) + svc.config.EnableAdditionalWorkerNodePools = true // when _, err = svc.Update(context.Background(), instanceID, domain.UpdateDetails{ ServiceID: "", - PlanID: PreviewPlanID, + PlanID: AWSPlanID, RawParameters: json.RawMessage(`{"additionalWorkerNodePools": [{"name": "name-1", "machineType": "m6i.large", "haZones": true, "autoScalerMin": 3, "autoScalerMax": 20}]}`), PreviousValues: domain.PreviousValues{}, RawContext: json.RawMessage("{\"globalaccount_id\":\"globalaccount_id_1\", \"active\":true}"), @@ -785,21 +788,6 @@ func TestUpdateAdditionalWorkerNodePoolsForUnsupportedPlans(t *testing.T) { "Free": { planID: FreemiumPlanID, }, - "Azure": { - planID: AzurePlanID, - }, - "Azure lite": { - planID: AzureLitePlanID, - }, - "AWS": { - planID: AWSPlanID, - }, - "GCP": { - planID: GCPPlanID, - }, - "SAP converged cloud": { - planID: SapConvergedCloudPlanID, - }, } { t.Run(tn, func(t *testing.T) { // given @@ -820,8 +808,9 @@ func TestUpdateAdditionalWorkerNodePoolsForUnsupportedPlans(t *testing.T) { kcBuilder := &kcMock.KcBuilder{} svc := NewUpdate(Config{}, st.Instances(), st.RuntimeStates(), st.Operations(), handler, true, true, false, q, PlansConfig{}, planDefaults, fixLogger(), dashboardConfig, kcBuilder, &OneForAllConvergedCloudRegionsProvider{}, fakeKcpK8sClient) + svc.config.EnableAdditionalWorkerNodePools = true - additionalWorkerNodePools := `[{"name": "name-1", "machineType": "m6i.large", "autoScalerMin": 3, "autoScalerMax": 20}]` + additionalWorkerNodePools := `[{"name": "name-1", "machineType": "m6i.large", "haZones": true, "autoScalerMin": 3, "autoScalerMax": 20}]` // when _, err = svc.Update(context.Background(), instanceID, domain.UpdateDetails{ diff --git a/internal/broker/plans.go b/internal/broker/plans.go index 5b0c6891c7..8b567d76ff 100644 --- a/internal/broker/plans.go +++ b/internal/broker/plans.go @@ -366,49 +366,55 @@ func requiredOwnClusterSchemaProperties() []string { return []string{"name", "kubeconfig", "shootName", "shootDomain"} } -func SapConvergedCloudSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, shootAndSeedFeatureFlag bool, sapConvergedCloudRegions []string) *map[string]interface{} { - properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, sapConvergedCloudRegions, update) - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, false) +func SapConvergedCloudSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, shootAndSeedFeatureFlag bool, sapConvergedCloudRegions []string, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) *map[string]interface{} { + properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, sapConvergedCloudRegions, update, enableAdditionalWorkerNodePools) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, enableLoadCurrentConfig) } -func PreviewSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool) *map[string]interface{} { - properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AWSRegions(euAccessRestricted), update) +func PreviewSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) *map[string]interface{} { + properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AWSRegions(euAccessRestricted), update, enableAdditionalWorkerNodePools) properties.Networking = NewNetworkingSchema() - properties.AdditionalWorkerNodePools = NewAdditionalWorkerNodePoolsSchema(machineTypesDisplay, machineTypes) - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), false, false, true) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), false, false, enableLoadCurrentConfig) } -func GCPSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, shootAndSeedFeatureFlag bool, assuredWorkloads bool) *map[string]interface{} { - properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, GcpRegions(assuredWorkloads), update) - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, false) +func GCPSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, shootAndSeedFeatureFlag bool, assuredWorkloads bool, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) *map[string]interface{} { + properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, GcpRegions(assuredWorkloads), update, enableAdditionalWorkerNodePools) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, enableLoadCurrentConfig) } -func AWSSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, shootAndSeedSameRegion bool) *map[string]interface{} { - properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AWSRegions(euAccessRestricted), update) - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedSameRegion, false) +func AWSSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, shootAndSeedSameRegion bool, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) *map[string]interface{} { + properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AWSRegions(euAccessRestricted), update, enableAdditionalWorkerNodePools) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedSameRegion, enableLoadCurrentConfig) } -func AzureSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, shootAndSeedFeatureFlag bool) *map[string]interface{} { - properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AzureRegions(euAccessRestricted), update) - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, false) +func AzureSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, shootAndSeedFeatureFlag bool, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) *map[string]interface{} { + properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AzureRegions(euAccessRestricted), update, enableAdditionalWorkerNodePools) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, enableLoadCurrentConfig) } -func AzureLiteSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, shootAndSeedFeatureFlag bool) *map[string]interface{} { - properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AzureRegions(euAccessRestricted), update) +func AzureLiteSchema(machineTypesDisplay, regionsDisplay map[string]string, machineTypes []string, additionalParams, update bool, euAccessRestricted bool, shootAndSeedFeatureFlag bool, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) *map[string]interface{} { + properties := NewProvisioningProperties(machineTypesDisplay, regionsDisplay, machineTypes, AzureRegions(euAccessRestricted), update, enableAdditionalWorkerNodePools) properties.AutoScalerMax.Minimum = 2 properties.AutoScalerMin.Minimum = 2 properties.AutoScalerMax.Maximum = 40 + if enableAdditionalWorkerNodePools { + properties.AdditionalWorkerNodePools.Items.Properties.HAZones = nil + properties.AdditionalWorkerNodePools.Items.Properties.AutoScalerMin.Default = 2 + properties.AdditionalWorkerNodePools.Items.Properties.AutoScalerMax.Default = 10 + properties.AdditionalWorkerNodePools.Items.Properties.AutoScalerMax.Maximum = 40 + } + if !update { properties.AutoScalerMax.Default = 10 properties.AutoScalerMin.Default = 2 } - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, false) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), true, shootAndSeedFeatureFlag, enableLoadCurrentConfig) } -func FreemiumSchema(provider pkg.CloudProvider, regionsDisplay map[string]string, additionalParams, update bool, euAccessRestricted bool) *map[string]interface{} { +func FreemiumSchema(provider pkg.CloudProvider, regionsDisplay map[string]string, additionalParams, update bool, euAccessRestricted bool, enableLoadCurrentConfig bool) *map[string]interface{} { if update && !additionalParams { return empty() } @@ -436,10 +442,10 @@ func FreemiumSchema(provider pkg.CloudProvider, regionsDisplay map[string]string properties.Modules = NewModulesSchema() } - return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), false, false, false) + return createSchemaWithProperties(properties, additionalParams, update, requiredSchemaProperties(), false, false, enableLoadCurrentConfig) } -func TrialSchema(additionalParams, update bool) *map[string]interface{} { +func TrialSchema(additionalParams, update bool, enableLoadCurrentConfig bool) *map[string]interface{} { properties := ProvisioningProperties{ Name: NameProperty(), } @@ -452,7 +458,7 @@ func TrialSchema(additionalParams, update bool) *map[string]interface{} { return empty() } - return createSchemaWithProperties(properties, additionalParams, update, requiredTrialSchemaProperties(), false, false, false) + return createSchemaWithProperties(properties, additionalParams, update, requiredTrialSchemaProperties(), false, false, enableLoadCurrentConfig) } func OwnClusterSchema(update bool) *map[string]interface{} { @@ -478,7 +484,7 @@ func empty() *map[string]interface{} { return &empty } -func createSchemaWithProperties(properties ProvisioningProperties, additionalParams, update bool, required []string, shootAndSeedSameRegion bool, shootAndSeedFeatureFlag bool, loadCurrentConfig bool) *map[string]interface{} { +func createSchemaWithProperties(properties ProvisioningProperties, additionalParams, update bool, required []string, shootAndSeedSameRegion bool, shootAndSeedFeatureFlag bool, enableLoadCurrentConfig bool) *map[string]interface{} { if additionalParams { properties.IncludeAdditional() } @@ -488,14 +494,14 @@ func createSchemaWithProperties(properties ProvisioningProperties, additionalPar } if update { - return createSchemaWith(properties.UpdateProperties, update, required, loadCurrentConfig) + return createSchemaWith(properties.UpdateProperties, update, required, enableLoadCurrentConfig) } else { - return createSchemaWith(properties, update, required, loadCurrentConfig) + return createSchemaWith(properties, update, required, enableLoadCurrentConfig) } } -func createSchemaWith(properties interface{}, update bool, requiered []string, loadCurrentConfig bool) *map[string]interface{} { - schema := NewSchema(properties, update, requiered, loadCurrentConfig) +func createSchemaWith(properties interface{}, update bool, requiered []string, enableLoadCurrentConfig bool) *map[string]interface{} { + schema := NewSchema(properties, update, requiered, enableLoadCurrentConfig) return unmarshalSchema(schema) } @@ -516,7 +522,7 @@ func unmarshalSchema(schema *RootSchema) *map[string]interface{} { // Plans is designed to hold plan defaulting logic // keep internal/hyperscaler/azure/config.go in sync with any changes to available zones -func Plans(plans PlansConfig, provider pkg.CloudProvider, includeAdditionalParamsInSchema bool, euAccessRestricted bool, useSmallerMachineTypes bool, shootAndSeedFeatureFlag bool, sapConvergedCloudRegions []string, assuredWorkloads bool) map[string]domain.ServicePlan { +func Plans(plans PlansConfig, provider pkg.CloudProvider, includeAdditionalParamsInSchema bool, euAccessRestricted bool, useSmallerMachineTypes bool, shootAndSeedFeatureFlag bool, sapConvergedCloudRegions []string, assuredWorkloads bool, enableAdditionalWorkerNodePools bool, enableLoadCurrentConfig bool) map[string]domain.ServicePlan { awsMachineNames := AwsMachinesNames() awsMachinesDisplay := AwsMachinesDisplay() awsRegionsDisplay := AWSRegionsDisplay(euAccessRestricted) @@ -534,34 +540,34 @@ func Plans(plans PlansConfig, provider pkg.CloudProvider, includeAdditionalParam delete(azureLiteMachinesDisplay, "Standard_D2s_v5") } - awsSchema := AWSSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag) + awsSchema := AWSSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag, enableAdditionalWorkerNodePools, enableLoadCurrentConfig) // awsHASchema := AWSHASchema(awsMachinesDisplay, awsMachines, includeAdditionalParamsInSchema, false) - azureSchema := AzureSchema(azureMachinesDisplay, azureRegionsDisplay, azureMachinesNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag) - azureLiteSchema := AzureLiteSchema(azureLiteMachinesDisplay, azureRegionsDisplay, azureLiteMachinesNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag) - freemiumSchema := FreemiumSchema(provider, azureRegionsDisplay, includeAdditionalParamsInSchema, false, euAccessRestricted) - gcpSchema := GCPSchema(gcpMachinesDisplay, gcpRegionsDisplay, gcpMachinesNames, includeAdditionalParamsInSchema, false, shootAndSeedFeatureFlag, assuredWorkloads) + azureSchema := AzureSchema(azureMachinesDisplay, azureRegionsDisplay, azureMachinesNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag, enableAdditionalWorkerNodePools, enableLoadCurrentConfig) + azureLiteSchema := AzureLiteSchema(azureLiteMachinesDisplay, azureRegionsDisplay, azureLiteMachinesNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag, enableAdditionalWorkerNodePools, enableLoadCurrentConfig) + freemiumSchema := FreemiumSchema(provider, azureRegionsDisplay, includeAdditionalParamsInSchema, false, euAccessRestricted, enableLoadCurrentConfig) + gcpSchema := GCPSchema(gcpMachinesDisplay, gcpRegionsDisplay, gcpMachinesNames, includeAdditionalParamsInSchema, false, shootAndSeedFeatureFlag, assuredWorkloads, enableAdditionalWorkerNodePools, enableLoadCurrentConfig) ownClusterSchema := OwnClusterSchema(false) - previewCatalogSchema := PreviewSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, false, euAccessRestricted) + previewCatalogSchema := PreviewSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, false, euAccessRestricted, enableAdditionalWorkerNodePools, enableLoadCurrentConfig) - trialSchema := TrialSchema(includeAdditionalParamsInSchema, false) + trialSchema := TrialSchema(includeAdditionalParamsInSchema, false, enableLoadCurrentConfig) outputPlans := map[string]domain.ServicePlan{ - AWSPlanID: defaultServicePlan(AWSPlanID, AWSPlanName, plans, awsSchema, AWSSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, true, euAccessRestricted, shootAndSeedFeatureFlag)), - GCPPlanID: defaultServicePlan(GCPPlanID, GCPPlanName, plans, gcpSchema, GCPSchema(gcpMachinesDisplay, gcpRegionsDisplay, gcpMachinesNames, includeAdditionalParamsInSchema, true, shootAndSeedFeatureFlag, assuredWorkloads)), - AzurePlanID: defaultServicePlan(AzurePlanID, AzurePlanName, plans, azureSchema, AzureSchema(azureMachinesDisplay, azureRegionsDisplay, azureMachinesNames, includeAdditionalParamsInSchema, true, euAccessRestricted, shootAndSeedFeatureFlag)), - AzureLitePlanID: defaultServicePlan(AzureLitePlanID, AzureLitePlanName, plans, azureLiteSchema, AzureLiteSchema(azureLiteMachinesDisplay, azureRegionsDisplay, azureLiteMachinesNames, includeAdditionalParamsInSchema, true, euAccessRestricted, shootAndSeedFeatureFlag)), - FreemiumPlanID: defaultServicePlan(FreemiumPlanID, FreemiumPlanName, plans, freemiumSchema, FreemiumSchema(provider, azureRegionsDisplay, includeAdditionalParamsInSchema, true, euAccessRestricted)), - TrialPlanID: defaultServicePlan(TrialPlanID, TrialPlanName, plans, trialSchema, TrialSchema(includeAdditionalParamsInSchema, true)), + AWSPlanID: defaultServicePlan(AWSPlanID, AWSPlanName, plans, awsSchema, AWSSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, true, euAccessRestricted, shootAndSeedFeatureFlag, enableAdditionalWorkerNodePools, enableLoadCurrentConfig)), + GCPPlanID: defaultServicePlan(GCPPlanID, GCPPlanName, plans, gcpSchema, GCPSchema(gcpMachinesDisplay, gcpRegionsDisplay, gcpMachinesNames, includeAdditionalParamsInSchema, true, shootAndSeedFeatureFlag, assuredWorkloads, enableAdditionalWorkerNodePools, enableLoadCurrentConfig)), + AzurePlanID: defaultServicePlan(AzurePlanID, AzurePlanName, plans, azureSchema, AzureSchema(azureMachinesDisplay, azureRegionsDisplay, azureMachinesNames, includeAdditionalParamsInSchema, true, euAccessRestricted, shootAndSeedFeatureFlag, enableAdditionalWorkerNodePools, enableLoadCurrentConfig)), + AzureLitePlanID: defaultServicePlan(AzureLitePlanID, AzureLitePlanName, plans, azureLiteSchema, AzureLiteSchema(azureLiteMachinesDisplay, azureRegionsDisplay, azureLiteMachinesNames, includeAdditionalParamsInSchema, true, euAccessRestricted, shootAndSeedFeatureFlag, enableAdditionalWorkerNodePools, enableLoadCurrentConfig)), + FreemiumPlanID: defaultServicePlan(FreemiumPlanID, FreemiumPlanName, plans, freemiumSchema, FreemiumSchema(provider, azureRegionsDisplay, includeAdditionalParamsInSchema, true, euAccessRestricted, enableLoadCurrentConfig)), + TrialPlanID: defaultServicePlan(TrialPlanID, TrialPlanName, plans, trialSchema, TrialSchema(includeAdditionalParamsInSchema, true, enableLoadCurrentConfig)), OwnClusterPlanID: defaultServicePlan(OwnClusterPlanID, OwnClusterPlanName, plans, ownClusterSchema, OwnClusterSchema(true)), - PreviewPlanID: defaultServicePlan(PreviewPlanID, PreviewPlanName, plans, previewCatalogSchema, PreviewSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, true, euAccessRestricted)), + PreviewPlanID: defaultServicePlan(PreviewPlanID, PreviewPlanName, plans, previewCatalogSchema, PreviewSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, true, euAccessRestricted, enableAdditionalWorkerNodePools, enableLoadCurrentConfig)), } if len(sapConvergedCloudRegions) != 0 { sapConvergedCloudMachinesNames := SapConvergedCloudMachinesNames() sapConvergedCloudMachinesDisplay := SapConvergedCloudMachinesDisplay() sapConvergedCloudRegionsDisplay := SapConvergedCloudRegionsDisplay() - sapConvergedCloudSchema := SapConvergedCloudSchema(sapConvergedCloudMachinesDisplay, sapConvergedCloudRegionsDisplay, sapConvergedCloudMachinesNames, includeAdditionalParamsInSchema, false, shootAndSeedFeatureFlag, sapConvergedCloudRegions) - outputPlans[SapConvergedCloudPlanID] = defaultServicePlan(SapConvergedCloudPlanID, SapConvergedCloudPlanName, plans, sapConvergedCloudSchema, SapConvergedCloudSchema(sapConvergedCloudMachinesDisplay, sapConvergedCloudRegionsDisplay, sapConvergedCloudMachinesNames, includeAdditionalParamsInSchema, true, shootAndSeedFeatureFlag, sapConvergedCloudRegions)) + sapConvergedCloudSchema := SapConvergedCloudSchema(sapConvergedCloudMachinesDisplay, sapConvergedCloudRegionsDisplay, sapConvergedCloudMachinesNames, includeAdditionalParamsInSchema, false, shootAndSeedFeatureFlag, sapConvergedCloudRegions, enableAdditionalWorkerNodePools, enableLoadCurrentConfig) + outputPlans[SapConvergedCloudPlanID] = defaultServicePlan(SapConvergedCloudPlanID, SapConvergedCloudPlanName, plans, sapConvergedCloudSchema, SapConvergedCloudSchema(sapConvergedCloudMachinesDisplay, sapConvergedCloudRegionsDisplay, sapConvergedCloudMachinesNames, includeAdditionalParamsInSchema, true, shootAndSeedFeatureFlag, sapConvergedCloudRegions, enableAdditionalWorkerNodePools, enableLoadCurrentConfig)) } return outputPlans diff --git a/internal/broker/plans_schema.go b/internal/broker/plans_schema.go index cd2906c5b1..d017ad8be6 100644 --- a/internal/broker/plans_schema.go +++ b/internal/broker/plans_schema.go @@ -163,11 +163,11 @@ type AdditionalWorkerNodePoolsItems struct { } type AdditionalWorkerNodePoolsItemsProperties struct { - Name Type `json:"name,omitempty"` - MachineType Type `json:"machineType,omitempty"` - HAZones Type `json:"haZones,omitempty"` - AutoScalerMin Type `json:"autoScalerMin,omitempty"` - AutoScalerMax Type `json:"autoScalerMax,omitempty"` + Name Type `json:"name,omitempty"` + MachineType Type `json:"machineType,omitempty"` + HAZones *Type `json:"haZones,omitempty"` + AutoScalerMin Type `json:"autoScalerMin,omitempty"` + AutoScalerMax Type `json:"autoScalerMax,omitempty"` } func NewModulesSchema() *Modules { @@ -300,7 +300,7 @@ func ShootAndSeedSameRegionProperty() *Type { // NewProvisioningProperties creates a new properties for different plans // Note that the order of properties will be the same in the form on the website -func NewProvisioningProperties(machineTypesDisplay, regionsDisplay map[string]string, machineTypes, regions []string, update bool) ProvisioningProperties { +func NewProvisioningProperties(machineTypesDisplay, regionsDisplay map[string]string, machineTypes, regions []string, update, enableAdditionalWorkerNodePools bool) ProvisioningProperties { properties := ProvisioningProperties{ UpdateProperties: UpdateProperties{ @@ -335,6 +335,10 @@ func NewProvisioningProperties(machineTypesDisplay, regionsDisplay map[string]st Modules: NewModulesSchema(), } + if enableAdditionalWorkerNodePools { + properties.AdditionalWorkerNodePools = NewAdditionalWorkerNodePoolsSchema(machineTypesDisplay, machineTypes) + } + if update { properties.AutoScalerMax.Default = nil properties.AutoScalerMin.Default = nil @@ -380,7 +384,7 @@ func NewOIDCSchema() *OIDCType { } } -func NewSchema(properties interface{}, update bool, required []string, loadCurrentConfig bool) *RootSchema { +func NewSchema(properties interface{}, update bool, required []string, enableLoadCurrentConfig bool) *RootSchema { schema := &RootSchema{ Schema: "http://json-schema.org/draft-04/schema#", Type: Type{ @@ -395,8 +399,8 @@ func NewSchema(properties interface{}, update bool, required []string, loadCurre schema.Required = []string{} } - if loadCurrentConfig { - schema.LoadCurrentConfig = &loadCurrentConfig + if enableLoadCurrentConfig { + schema.LoadCurrentConfig = &enableLoadCurrentConfig } return schema @@ -463,7 +467,7 @@ func NewAdditionalWorkerNodePoolsSchema(machineTypesDisplay map[string]string, m EnumDisplayName: machineTypesDisplay, Description: "Specifies the type of the virtual machine.", }, - HAZones: Type{ + HAZones: &Type{ Type: "boolean", Title: "HA zones", Default: true, diff --git a/internal/broker/plans_test.go b/internal/broker/plans_test.go index dc0dc4cded..a194a797ab 100644 --- a/internal/broker/plans_test.go +++ b/internal/broker/plans_test.go @@ -35,7 +35,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "AWS schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AWSSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, additionalParams) + return AWSSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, additionalParams, false, false) }, machineTypes: AwsMachinesNames(), machineTypesDisplay: AwsMachinesDisplay(), @@ -49,7 +49,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "AWS schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AWSSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, additionalParams) + return AWSSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, additionalParams, false, false) }, machineTypes: AwsMachinesNames(), machineTypesDisplay: AwsMachinesDisplay(), @@ -63,7 +63,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Azure schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AzureSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, additionalParams) + return AzureSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, additionalParams, false, false) }, machineTypes: AzureMachinesNames(), machineTypesDisplay: AzureMachinesDisplay(), @@ -77,7 +77,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Azure schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AzureSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, additionalParams) + return AzureSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, additionalParams, false, false) }, machineTypes: AzureMachinesNames(), machineTypesDisplay: AzureMachinesDisplay(), @@ -91,7 +91,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "AzureLite schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, additionalParams) + return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, additionalParams, false, false) }, machineTypes: AzureLiteMachinesNames(), machineTypesDisplay: AzureLiteMachinesDisplay(), @@ -105,7 +105,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "AzureLite reduced schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, false) + return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, false, false, false, false) }, machineTypes: azureLiteMachineNamesReduced, machineTypesDisplay: azureLiteMachinesDisplayReduced, @@ -119,7 +119,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "AzureLite schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, additionalParams) + return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, additionalParams, false, false) }, machineTypes: AzureLiteMachinesNames(), machineTypesDisplay: AzureLiteMachinesDisplay(), @@ -133,7 +133,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "AzureLite reduced schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, false) + return AzureLiteSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, true, false, false, false) }, machineTypes: azureLiteMachineNamesReduced, machineTypesDisplay: azureLiteMachinesDisplayReduced, @@ -147,7 +147,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Freemium schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return FreemiumSchema(pkg.Azure, regionsDisplay, additionalParams, update, false) + return FreemiumSchema(pkg.Azure, regionsDisplay, additionalParams, update, false, false) }, machineTypes: []string{}, regionDisplay: AzureRegionsDisplay(false), @@ -160,7 +160,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Freemium schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return FreemiumSchema(pkg.AWS, regionsDisplay, additionalParams, update, false) + return FreemiumSchema(pkg.AWS, regionsDisplay, additionalParams, update, false, false) }, machineTypes: []string{}, regionDisplay: AWSRegionsDisplay(false), @@ -173,7 +173,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Freemium schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return FreemiumSchema(pkg.Azure, regionsDisplay, additionalParams, update, true) + return FreemiumSchema(pkg.Azure, regionsDisplay, additionalParams, update, true, false) }, machineTypes: []string{}, regionDisplay: AzureRegionsDisplay(true), @@ -186,7 +186,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Freemium schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return FreemiumSchema(pkg.AWS, regionsDisplay, additionalParams, update, true) + return FreemiumSchema(pkg.AWS, regionsDisplay, additionalParams, update, true, false) }, machineTypes: []string{}, regionDisplay: AWSRegionsDisplay(true), @@ -199,7 +199,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "GCP schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return GCPSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, additionalParams, false) + return GCPSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, additionalParams, false, false, false) }, machineTypes: GcpMachinesNames(), machineTypesDisplay: GcpMachinesDisplay(), @@ -213,7 +213,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "GCP schema with assured workloads is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return GCPSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, additionalParams, true) + return GCPSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, additionalParams, true, false, false) }, machineTypes: GcpMachinesNames(), machineTypesDisplay: GcpMachinesDisplay(), @@ -228,7 +228,7 @@ func TestSchemaGenerator(t *testing.T) { name: "SapConvergedCloud schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { convergedCloudRegionProvider := &OneForAllConvergedCloudRegionsProvider{} - return SapConvergedCloudSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, additionalParams, convergedCloudRegionProvider.GetRegions("")) + return SapConvergedCloudSchema(machinesDisplay, regionsDisplay, machines, additionalParams, update, additionalParams, convergedCloudRegionProvider.GetRegions(""), false, false) }, machineTypes: SapConvergedCloudMachinesNames(), machineTypesDisplay: SapConvergedCloudMachinesDisplay(), @@ -241,7 +241,7 @@ func TestSchemaGenerator(t *testing.T) { { name: "Trial schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { - return TrialSchema(additionalParams, update) + return TrialSchema(additionalParams, update, false) }, machineTypes: []string{}, path: "azure", @@ -287,7 +287,7 @@ func TestSapConvergedSchema(t *testing.T) { regions := []string{"region1", "region2"} // when - schema := Plans(nil, "", false, false, false, false, regions, false) + schema := Plans(nil, "", false, false, false, false, regions, false, false, false) convergedSchema, found := schema[SapConvergedCloudPlanID] schemaRegionsCreate := convergedSchema.Schemas.Instance.Create.Parameters["properties"].(map[string]interface{})["region"].(map[string]interface{})["enum"] @@ -302,7 +302,7 @@ func TestSapConvergedSchema(t *testing.T) { regions := []string{} // when - schema := Plans(nil, "", false, false, false, false, regions, false) + schema := Plans(nil, "", false, false, false, false, regions, false, false, false) _, found := schema[SapConvergedCloudPlanID] // then @@ -310,7 +310,7 @@ func TestSapConvergedSchema(t *testing.T) { assert.False(t, found) // when - schema = Plans(nil, "", false, false, false, false, nil, false) + schema = Plans(nil, "", false, false, false, false, nil, false, false, false) _, found = schema[SapConvergedCloudPlanID] // then diff --git a/internal/broker/services.go b/internal/broker/services.go index ec42ab7c04..012c9fd1a3 100644 --- a/internal/broker/services.go +++ b/internal/broker/services.go @@ -66,6 +66,8 @@ func (b *ServicesEndpoint) Services(ctx context.Context) ([]domain.Service, erro b.cfg.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), + b.cfg.EnableAdditionalWorkerNodePools, + b.cfg.EnableLoadCurrentConfig, ) { // filter out not enabled plans diff --git a/resources/keb/templates/deployment.yaml b/resources/keb/templates/deployment.yaml index d4e4c9aa0d..4c231d62d8 100644 --- a/resources/keb/templates/deployment.yaml +++ b/resources/keb/templates/deployment.yaml @@ -287,6 +287,10 @@ spec: value: "{{ .Values.broker.subaccountMovementEnabled }}" - name: APP_BROKER_UPDATE_CUSTOM_RESOURCES_LABELS_ON_ACCOUNT_MOVE value: "{{ .Values.broker.updateCustomResourcesLabelsOnAccountMove }}" + - name: APP_BROKER_ENABLE_ADDITIONAL_WORKER_NODE_POOLS + value: "{{ .Values.enableAdditionalWorkerNodePools }}" + - name: APP_BROKER_ENABLE_LOAD_CURRENT_CONFIG + value: "{{ .Values.enableLoadCurrentConfig }}" ports: - name: http containerPort: {{ .Values.broker.port }} diff --git a/resources/keb/values.yaml b/resources/keb/values.yaml index ffbc52eda2..71f9e9a7f4 100644 --- a/resources/keb/values.yaml +++ b/resources/keb/values.yaml @@ -253,6 +253,8 @@ onlyOneFreePerGA: "false" subaccountsIdsToShowTrialExpirationInfo: "a45be5d8-eddc-4001-91cf-48cc644d571f" trialDocsURL: "https://help.sap.com/docs/" useSmallerMachineTypes: "false" +enableAdditionalWorkerNodePools: "false" +enableLoadCurrentConfig: "false" osbUpdateProcessingEnabled: "false"