diff --git a/cmd/broker/broker_suite_test.go b/cmd/broker/broker_suite_test.go index 58f640376d..7b0cc15bcb 100644 --- a/cmd/broker/broker_suite_test.go +++ b/cmd/broker/broker_suite_test.go @@ -183,7 +183,7 @@ func NewBrokerSuiteTestWithConfig(t *testing.T, cfg *Config, version ...string) DefaultGardenerShootPurpose: "testing", DefaultTrialProvider: internal.AWS, EnableShootAndSeedSameRegion: cfg.Provisioner.EnableShootAndSeedSameRegion, - }, defaultKymaVer, map[string]string{"cf-eu10": "europe", "cf-us10": "us"}, cfg.FreemiumProviders, defaultOIDCValues()) + }, defaultKymaVer, map[string]string{"cf-eu10": "europe", "cf-us10": "us"}, cfg.FreemiumProviders, defaultOIDCValues(), cfg.Broker.UseSmallerMachineTypes) storageCleanup, db, err := GetStorageForE2ETests() assert.NoError(t, err) diff --git a/cmd/broker/main.go b/cmd/broker/main.go index c55fa1d8a4..372510b6fe 100644 --- a/cmd/broker/main.go +++ b/cmd/broker/main.go @@ -308,7 +308,7 @@ func main() { oidcDefaultValues, err := runtime.ReadOIDCDefaultValuesFromYAML(cfg.SkrOidcDefaultValuesYAMLFilePath) fatalOnError(err, logs) - inputFactory, err := input.NewInputBuilderFactory(configProvider, cfg.Provisioner, cfg.KymaVersion, regions, cfg.FreemiumProviders, oidcDefaultValues) + inputFactory, err := input.NewInputBuilderFactory(configProvider, cfg.Provisioner, cfg.KymaVersion, regions, cfg.FreemiumProviders, oidcDefaultValues, cfg.Broker.UseSmallerMachineTypes) fatalOnError(err, logs) edpClient := edp.NewClient(cfg.EDP) diff --git a/cmd/broker/provisioning_test.go b/cmd/broker/provisioning_test.go index 19145f32e0..79f934ae9e 100644 --- a/cmd/broker/provisioning_test.go +++ b/cmd/broker/provisioning_test.go @@ -74,7 +74,7 @@ func TestCatalog(t *testing.T) { func TestProvisioning_HappyPath(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() // when @@ -847,6 +847,7 @@ func TestProvisioning_ClusterParameters(t *testing.T) { region string multiZone bool controlPlaneFailureTolerance string + useSmallerMachineTypes bool expectedZonesCount *int expectedProvider string @@ -859,6 +860,17 @@ func TestProvisioning_ClusterParameters(t *testing.T) { "Regular trial": { planID: broker.TrialPlanID, + expectedMinimalNumberOfNodes: 1, + expectedMaximumNumberOfNodes: 1, + expectedMachineType: "Standard_D4s_v5", + expectedProvider: "azure", + expectedSharedSubscription: true, + expectedSubscriptionHyperscalerType: hyperscaler.Azure(), + }, + "Regular trial with smaller machines": { + planID: broker.TrialPlanID, + useSmallerMachineTypes: true, + expectedMinimalNumberOfNodes: 1, expectedMaximumNumberOfNodes: 1, expectedMachineType: "Standard_D2s_v5", @@ -870,6 +882,18 @@ func TestProvisioning_ClusterParameters(t *testing.T) { planID: broker.FreemiumPlanID, platformProvider: internal.AWS, + expectedMinimalNumberOfNodes: 1, + expectedMaximumNumberOfNodes: 1, + expectedProvider: "aws", + expectedSharedSubscription: false, + expectedMachineType: "m5.xlarge", + expectedSubscriptionHyperscalerType: hyperscaler.AWS(), + }, + "Freemium aws with smaller machines": { + planID: broker.FreemiumPlanID, + platformProvider: internal.AWS, + useSmallerMachineTypes: true, + expectedMinimalNumberOfNodes: 1, expectedMaximumNumberOfNodes: 1, expectedProvider: "aws", @@ -881,6 +905,18 @@ func TestProvisioning_ClusterParameters(t *testing.T) { planID: broker.FreemiumPlanID, platformProvider: internal.Azure, + expectedMinimalNumberOfNodes: 1, + expectedMaximumNumberOfNodes: 1, + expectedProvider: "azure", + expectedSharedSubscription: false, + expectedMachineType: "Standard_D4s_v5", + expectedSubscriptionHyperscalerType: hyperscaler.Azure(), + }, + "Freemium azure with smaller machines": { + planID: broker.FreemiumPlanID, + platformProvider: internal.Azure, + useSmallerMachineTypes: true, + expectedMinimalNumberOfNodes: 1, expectedMaximumNumberOfNodes: 1, expectedProvider: "azure", @@ -972,7 +1008,7 @@ func TestProvisioning_ClusterParameters(t *testing.T) { } { t.Run(tn, func(t *testing.T) { // given - suite := NewProvisioningSuite(t, tc.multiZone, tc.controlPlaneFailureTolerance) + suite := NewProvisioningSuite(t, tc.multiZone, tc.controlPlaneFailureTolerance, tc.useSmallerMachineTypes) defer suite.TearDown() // when @@ -1010,7 +1046,7 @@ func TestProvisioning_OIDCValues(t *testing.T) { t.Run("should apply default OIDC values when OIDC object is nil", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() defaultOIDC := fixture.FixOIDCConfigDTO() expectedOIDC := gqlschema.OIDCConfigInput{ @@ -1041,7 +1077,7 @@ func TestProvisioning_OIDCValues(t *testing.T) { t.Run("should apply default OIDC values when all OIDC object's fields are empty", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() defaultOIDC := fixture.FixOIDCConfigDTO() expectedOIDC := gqlschema.OIDCConfigInput{ @@ -1075,7 +1111,7 @@ func TestProvisioning_OIDCValues(t *testing.T) { t.Run("should apply provided OIDC configuration", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() providedOIDC := internal.OIDCConfigDTO{ ClientID: "fake-client-id-1", @@ -1114,7 +1150,7 @@ func TestProvisioning_OIDCValues(t *testing.T) { t.Run("should apply default OIDC values on empty OIDC params from input", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() providedOIDC := internal.OIDCConfigDTO{ ClientID: "fake-client-id-1", @@ -1152,7 +1188,7 @@ func TestProvisioning_OIDCValues(t *testing.T) { func TestProvisioning_RuntimeAdministrators(t *testing.T) { t.Run("should use UserID as default value for admins list", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() options := RuntimeOptions{ UserID: "fake-user-id", @@ -1178,7 +1214,7 @@ func TestProvisioning_RuntimeAdministrators(t *testing.T) { t.Run("should apply new admins list", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() options := RuntimeOptions{ UserID: "fake-user-id", @@ -1205,7 +1241,7 @@ func TestProvisioning_RuntimeAdministrators(t *testing.T) { t.Run("should apply empty admin value (list is not empty)", func(t *testing.T) { // given - suite := NewProvisioningSuite(t, false, "") + suite := NewProvisioningSuite(t, false, "", false) defer suite.TearDown() options := RuntimeOptions{ UserID: "fake-user-id", diff --git a/cmd/broker/suite_test.go b/cmd/broker/suite_test.go index ae065eac4b..ff355b1e77 100644 --- a/cmd/broker/suite_test.go +++ b/cmd/broker/suite_test.go @@ -143,7 +143,7 @@ func NewOrchestrationSuite(t *testing.T, additionalKymaVersions []string) *Orche ProvisioningTimeout: time.Minute, URL: "http://localhost", DefaultGardenerShootPurpose: "testing", - }, kymaVer, map[string]string{"cf-eu10": "europe"}, cfg.FreemiumProviders, oidcDefaults) + }, kymaVer, map[string]string{"cf-eu10": "europe"}, cfg.FreemiumProviders, oidcDefaults, cfg.Broker.UseSmallerMachineTypes) require.NoError(t, err) gardenerClient := gardener.NewDynamicFakeClient() @@ -551,7 +551,7 @@ func (s *ProvisioningSuite) TearDown() { } } -func NewProvisioningSuite(t *testing.T, multiZoneCluster bool, controlPlaneFailureTolerance string) *ProvisioningSuite { +func NewProvisioningSuite(t *testing.T, multiZoneCluster bool, controlPlaneFailureTolerance string, useSmallerMachineTypes bool) *ProvisioningSuite { defer func() { if r := recover(); r != nil { err := cleanupContainer() @@ -594,7 +594,7 @@ func NewProvisioningSuite(t *testing.T, multiZoneCluster bool, controlPlaneFailu DefaultGardenerShootPurpose: "testing", MultiZoneCluster: multiZoneCluster, ControlPlaneFailureTolerance: controlPlaneFailureTolerance, - }, defaultKymaVer, map[string]string{"cf-eu10": "europe"}, cfg.FreemiumProviders, oidcDefaults) + }, defaultKymaVer, map[string]string{"cf-eu10": "europe"}, cfg.FreemiumProviders, oidcDefaults, useSmallerMachineTypes) require.NoError(t, err) server := avs.NewMockAvsServer(t) diff --git a/cmd/broker/update_test.go b/cmd/broker/update_test.go index 05d2957420..50ec7cba8b 100644 --- a/cmd/broker/update_test.go +++ b/cmd/broker/update_test.go @@ -2082,7 +2082,7 @@ func TestUpdateMachineType(t *testing.T) { rs, err := suite.db.RuntimeStates().ListByRuntimeID(i.RuntimeID) assert.NoError(t, err, "runtime states after provisioning") assert.Equal(t, 1, len(rs), "runtime states after provisioning") - assert.Equal(t, "m6i.large", rs[0].ClusterConfig.MachineType, "after provisioning") + assert.Equal(t, "m5.xlarge", rs[0].ClusterConfig.MachineType, "after provisioning") // when patch to change machine type diff --git a/internal/broker/broker.go b/internal/broker/broker.go index a89ec01788..c636675663 100644 --- a/internal/broker/broker.go +++ b/internal/broker/broker.go @@ -48,7 +48,8 @@ type Config struct { TrialDocsURL string `envconfig:"default="` EnableShootAndSeedSameRegion bool `envconfig:"default=false"` - Binding BindingConfig + Binding BindingConfig + UseSmallerMachineTypes bool `envconfig:"default=false"` } type ServicesConfig map[string]Service diff --git a/internal/broker/instance_create.go b/internal/broker/instance_create.go index d91e15c211..e836c0887b 100644 --- a/internal/broker/instance_create.go +++ b/internal/broker/instance_create.go @@ -469,7 +469,7 @@ func (b *ProvisionEndpoint) determineLicenceType(planId string) *string { func (b *ProvisionEndpoint) validator(details *domain.ProvisionDetails, provider internal.CloudProvider, ctx context.Context) (JSONSchemaValidator, error) { platformRegion, _ := middleware.RegionFromContext(ctx) - plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion)) + plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.UseSmallerMachineTypes, b.config.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion)) plan := plans[details.PlanID] schema := string(Marshal(plan.Schemas.Instance.Create.Parameters)) diff --git a/internal/broker/instance_update.go b/internal/broker/instance_update.go index c23b9e63a3..1ea8eb7c79 100644 --- a/internal/broker/instance_update.go +++ b/internal/broker/instance_update.go @@ -388,7 +388,7 @@ func (b *UpdateEndpoint) isKyma2(instance *internal.Instance) (bool, string, err func (b *UpdateEndpoint) getJsonSchemaValidator(provider internal.CloudProvider, planID string, platformRegion string) (JSONSchemaValidator, error) { // shootAndSeedSameRegion is never enabled for update b.log.Printf("region is: %s", platformRegion) - plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), false, b.convergedCloudRegionsProvider.GetRegions(platformRegion)) + plans := Plans(b.plansConfig, provider, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.config.UseSmallerMachineTypes, false, b.convergedCloudRegionsProvider.GetRegions(platformRegion)) plan := plans[planID] schema := string(Marshal(plan.Schemas.Instance.Update.Parameters)) diff --git a/internal/broker/plans.go b/internal/broker/plans.go index 0ebb336fd2..a22171e29b 100644 --- a/internal/broker/plans.go +++ b/internal/broker/plans.go @@ -289,6 +289,20 @@ func SapConvergedCloudMachinesDisplay() map[string]string { } } +func removeMachinesNamesFromList(machinesNames []string, machinesNamesToRemove ...string) []string { + for i, machineName := range machinesNames { + for _, machineNameToRemove := range machinesNamesToRemove { + if machineName == machineNameToRemove { + copy(machinesNames[i:], machinesNames[i+1:]) + machinesNames[len(machinesNames)-1] = "" + machinesNames = machinesNames[:len(machinesNames)-1] + } + } + } + + return machinesNames +} + func requiredSchemaProperties() []string { return []string{"name", "region"} } @@ -450,7 +464,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 internal.CloudProvider, includeAdditionalParamsInSchema bool, euAccessRestricted bool, shootAndSeedFeatureFlag bool, sapConvergedCloudRegions []string) map[string]domain.ServicePlan { +func Plans(plans PlansConfig, provider internal.CloudProvider, includeAdditionalParamsInSchema bool, euAccessRestricted bool, useSmallerMachineTypes bool, shootAndSeedFeatureFlag bool, sapConvergedCloudRegions []string) map[string]domain.ServicePlan { awsMachineNames := AwsMachinesNames() awsMachinesDisplay := AwsMachinesDisplay() awsRegionsDisplay := AWSRegionsDisplay() @@ -463,6 +477,11 @@ func Plans(plans PlansConfig, provider internal.CloudProvider, includeAdditional gcpMachinesDisplay := GcpMachinesDisplay() gcpRegionsDisplay := GcpRegionsDisplay() + if !useSmallerMachineTypes { + azureLiteMachinesNames = removeMachinesNamesFromList(azureLiteMachinesNames, "Standard_D2s_v5") + delete(azureLiteMachinesDisplay, "Standard_D2s_v5") + } + awsSchema := AWSSchema(awsMachinesDisplay, awsRegionsDisplay, awsMachineNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag) // awsHASchema := AWSHASchema(awsMachinesDisplay, awsMachines, includeAdditionalParamsInSchema, false) azureSchema := AzureSchema(azureMachinesDisplay, azureRegionsDisplay, azureMachinesNames, includeAdditionalParamsInSchema, false, euAccessRestricted, shootAndSeedFeatureFlag) diff --git a/internal/broker/plans_test.go b/internal/broker/plans_test.go index 26724b3df0..c3747e7e4c 100644 --- a/internal/broker/plans_test.go +++ b/internal/broker/plans_test.go @@ -14,6 +14,12 @@ import ( ) func TestSchemaGenerator(t *testing.T) { + azureLiteMachineNamesReduced := AzureLiteMachinesNames() + azureLiteMachinesDisplayReduced := AzureLiteMachinesDisplay() + + azureLiteMachineNamesReduced = removeMachinesNamesFromList(azureLiteMachineNamesReduced, "Standard_D2s_v5") + delete(azureLiteMachinesDisplayReduced, "Standard_D2s_v5") + tests := []struct { name string generator func(map[string]string, map[string]string, []string, bool, bool) *map[string]interface{} @@ -94,6 +100,20 @@ func TestSchemaGenerator(t *testing.T) { fileOIDC: "azure-lite-schema-additional-params.json", updateFileOIDC: "update-azure-lite-schema-additional-params.json", }, + { + 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) + }, + machineTypes: azureLiteMachineNamesReduced, + machineTypesDisplay: azureLiteMachinesDisplayReduced, + regionDisplay: AzureRegionsDisplay(false), + path: "azure", + file: "azure-lite-schema-reduced.json", + updateFile: "update-azure-lite-schema-reduced.json", + fileOIDC: "azure-lite-schema-additional-params-reduced.json", + updateFileOIDC: "update-azure-lite-schema-additional-params-reduced.json", + }, { name: "AzureLite schema with EU access restriction is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { @@ -108,6 +128,20 @@ func TestSchemaGenerator(t *testing.T) { fileOIDC: "azure-lite-schema-additional-params-eu.json", updateFileOIDC: "update-azure-lite-schema-additional-params.json", }, + { + 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) + }, + machineTypes: azureLiteMachineNamesReduced, + machineTypesDisplay: azureLiteMachinesDisplayReduced, + regionDisplay: AzureRegionsDisplay(true), + path: "azure", + file: "azure-lite-schema-eu-reduced.json", + updateFile: "update-azure-lite-schema-reduced.json", + fileOIDC: "azure-lite-schema-additional-params-eu-reduced.json", + updateFileOIDC: "update-azure-lite-schema-additional-params-reduced.json", + }, { name: "Freemium schema is correct", generator: func(machinesDisplay, regionsDisplay map[string]string, machines []string, additionalParams, update bool) *map[string]interface{} { @@ -235,7 +269,7 @@ func TestSapConvergedSchema(t *testing.T) { regions := []string{"region1", "region2"} // when - schema := Plans(nil, "", false, false, false, regions) + schema := Plans(nil, "", false, false, false, false, regions) convergedSchema, found := schema[SapConvergedCloudPlanID] schemaRegionsCreate := convergedSchema.Schemas.Instance.Create.Parameters["properties"].(map[string]interface{})["region"].(map[string]interface{})["enum"] @@ -250,7 +284,7 @@ func TestSapConvergedSchema(t *testing.T) { regions := []string{} // when - schema := Plans(nil, "", false, false, false, regions) + schema := Plans(nil, "", false, false, false, false, regions) _, found := schema[SapConvergedCloudPlanID] // then @@ -258,7 +292,7 @@ func TestSapConvergedSchema(t *testing.T) { assert.False(t, found) // when - schema = Plans(nil, "", false, false, false, nil) + schema = Plans(nil, "", false, false, false, false, nil) _, found = schema[SapConvergedCloudPlanID] // then diff --git a/internal/broker/services.go b/internal/broker/services.go index de166bddb9..a23242abf6 100644 --- a/internal/broker/services.go +++ b/internal/broker/services.go @@ -60,6 +60,7 @@ func (b *ServicesEndpoint) Services(ctx context.Context) ([]domain.Service, erro provider, b.cfg.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), + b.cfg.UseSmallerMachineTypes, b.cfg.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion), ) { diff --git a/internal/broker/testdata/azure/azure-lite-schema-additional-params-eu-reduced.json b/internal/broker/testdata/azure/azure-lite-schema-additional-params-eu-reduced.json new file mode 100644 index 0000000000..72a7ee42ae --- /dev/null +++ b/internal/broker/testdata/azure/azure-lite-schema-additional-params-eu-reduced.json @@ -0,0 +1,223 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "_controlsOrder": [ + "name", + "region", + "machineType", + "autoScalerMin", + "autoScalerMax", + "modules", + "networking", + "oidc", + "administrators" + ], + "_show_form_view": true, + "properties": { + "administrators": { + "description": "Specifies the list of runtime administrators", + "items": { + "type": "string" + }, + "title": "Administrators", + "type": "array" + }, + "autoScalerMax": { + "default": 10, + "description": "Specifies the maximum number of virtual machines to create", + "maximum": 40, + "minimum": 2, + "type": "integer" + }, + "autoScalerMin": { + "default": 2, + "description": "Specifies the minimum number of virtual machines to create", + "minimum": 2, + "type": "integer" + }, + "machineType":{ + "_enumDisplayName":{ + "Standard_D4s_v5":"Standard_D4s_v5 (4vCPU, 16GB RAM)", + "Standard_D4_v3":"Standard_D4_v3 (4vCPU, 16GB RAM)" + }, + "enum":[ + "Standard_D4s_v5", + "Standard_D4_v3" + ], + "type":"string" + }, + "modules": { + "_controlsOrder": [ + "default", + "list" + ], + "description": "Use default modules or provide your custom list of modules. Provide an empty custom list of modules if you don’t want any modules enabled.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Default modules", + "properties": { + "default": { + "default": true, + "description": "Check the default modules in the default modules table.", + "readOnly": true, + "title": "Use Default", + "type": "boolean" + } + }, + "title": "Default", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Define custom module list", + "properties": { + "list": { + "description": "Check a module technical name on this website. You can only use a module technical name once. Provide an empty custom list of modules if you don’t want any modules enabled.", + "items": { + "_controlsOrder": [ + "name", + "channel", + "customResourcePolicy" + ], + "properties": { + "channel": { + "_enumDisplayName": { + "": "", + "fast": "Fast - latest version", + "regular": "Regular - default version" + }, + "default": "", + "description": "Select your preferred release channel or leave this field empty.", + "enum": [ + "", + "regular", + "fast" + ], + "type": "string" + }, + "customResourcePolicy": { + "_enumDisplayName": { + "": "", + "CreateAndDelete": "CreateAndDelete - default module resource is created or deleted.", + "Ignore": "Ignore - module resource is not created." + }, + "default": "", + "description": "Select your preferred CustomResourcePolicy setting or leave this field empty.", + "enum": [ + "", + "CreateAndDelete", + "Ignore" + ], + "type": "string" + }, + "name": { + "description": "Check a module technical name on this website. You can only use a module technical name once.", + "minLength": 1, + "title": "Name", + "type": "string" + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + } + }, + "title": "Custom", + "type": "object" + } + ], + "type": "object" + }, + "name": { + "_BTPdefaultTemplate": { + "elements": [ + "saSubdomain" + ] + }, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$", + "title": "Cluster Name", + "type": "string" + }, + "networking": { + "description": "Networking configuration. These values are immutable and cannot be updated later. All provided CIDR ranges must not overlap one another.", + "properties": { + "nodes": { + "default": "10.250.0.0/22", + "description": "CIDR range for Nodes, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Nodes", + "type": "string" + }, + "pods": { + "default": "10.96.0.0/13", + "description": "CIDR range for Pods, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Pods", + "type": "string" + }, + "services": { + "default": "10.104.0.0/13", + "description": "CIDR range for Services, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Services", + "type": "string" + } + }, + "required": [ + "nodes" + ], + "type": "object" + }, + "oidc": { + "description": "OIDC configuration", + "properties": { + "clientID": { + "description": "The client ID for the OpenID Connect client.", + "type": "string" + }, + "groupsClaim": { + "description": "If provided, the name of a custom OpenID Connect claim for specifying user groups.", + "type": "string" + }, + "issuerURL": { + "description": "The URL of the OpenID issuer, only HTTPS scheme will be accepted.", + "type": "string" + }, + "signingAlgs": { + "description": "Comma separated list of allowed JOSE asymmetric signing algorithms, for example, RS256, ES256", + "items": { + "type": "string" + }, + "type": "array" + }, + "usernameClaim": { + "description": "The OpenID claim to use as the user name.", + "type": "string" + }, + "usernamePrefix": { + "description": "If provided, all usernames will be prefixed with this value. If not provided, username claims other than 'email' are prefixed by the issuer URL to avoid clashes. To skip any prefixing, provide the value '-' (dash character without additional characters).", + "type": "string" + } + }, + "required": [ + "clientID", + "issuerURL" + ], + "type": "object" + }, + "region": { + "_enumDisplayName": { + "switzerlandnorth": "switzerlandnorth (Switzerland, Zurich)" + }, + "enum": [ + "switzerlandnorth" + ], + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "region" + ], + "type": "object" +} diff --git a/internal/broker/testdata/azure/azure-lite-schema-additional-params-reduced.json b/internal/broker/testdata/azure/azure-lite-schema-additional-params-reduced.json new file mode 100644 index 0000000000..980cbef549 --- /dev/null +++ b/internal/broker/testdata/azure/azure-lite-schema-additional-params-reduced.json @@ -0,0 +1,239 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "_controlsOrder": [ + "name", + "region", + "machineType", + "autoScalerMin", + "autoScalerMax", + "modules", + "networking", + "oidc", + "administrators" + ], + "_show_form_view": true, + "properties": { + "administrators": { + "description": "Specifies the list of runtime administrators", + "items": { + "type": "string" + }, + "title": "Administrators", + "type": "array" + }, + "autoScalerMax": { + "default": 10, + "description": "Specifies the maximum number of virtual machines to create", + "maximum": 40, + "minimum": 2, + "type": "integer" + }, + "autoScalerMin": { + "default": 2, + "description": "Specifies the minimum number of virtual machines to create", + "minimum": 2, + "type": "integer" + }, + "machineType":{ + "_enumDisplayName":{ + "Standard_D4s_v5":"Standard_D4s_v5 (4vCPU, 16GB RAM)", + "Standard_D4_v3":"Standard_D4_v3 (4vCPU, 16GB RAM)" + }, + "enum":[ + "Standard_D4s_v5", + "Standard_D4_v3" + ], + "type":"string" + }, + "modules": { + "_controlsOrder": [ + "default", + "list" + ], + "description": "Use default modules or provide your custom list of modules. Provide an empty custom list of modules if you don’t want any modules enabled.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Default modules", + "properties": { + "default": { + "default": true, + "description": "Check the default modules in the default modules table.", + "readOnly": true, + "title": "Use Default", + "type": "boolean" + } + }, + "title": "Default", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Define custom module list", + "properties": { + "list": { + "description": "Check a module technical name on this website. You can only use a module technical name once. Provide an empty custom list of modules if you don’t want any modules enabled.", + "items": { + "_controlsOrder": [ + "name", + "channel", + "customResourcePolicy" + ], + "properties": { + "channel": { + "_enumDisplayName": { + "": "", + "fast": "Fast - latest version", + "regular": "Regular - default version" + }, + "default": "", + "description": "Select your preferred release channel or leave this field empty.", + "enum": [ + "", + "regular", + "fast" + ], + "type": "string" + }, + "customResourcePolicy": { + "_enumDisplayName": { + "": "", + "CreateAndDelete": "CreateAndDelete - default module resource is created or deleted.", + "Ignore": "Ignore - module resource is not created." + }, + "default": "", + "description": "Select your preferred CustomResourcePolicy setting or leave this field empty.", + "enum": [ + "", + "CreateAndDelete", + "Ignore" + ], + "type": "string" + }, + "name": { + "description": "Check a module technical name on this website. You can only use a module technical name once.", + "minLength": 1, + "title": "Name", + "type": "string" + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + } + }, + "title": "Custom", + "type": "object" + } + ], + "type": "object" + }, + "name": { + "_BTPdefaultTemplate": { + "elements": [ + "saSubdomain" + ] + }, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$", + "title": "Cluster Name", + "type": "string" + }, + "networking": { + "description": "Networking configuration. These values are immutable and cannot be updated later. All provided CIDR ranges must not overlap one another.", + "properties": { + "nodes": { + "default": "10.250.0.0/22", + "description": "CIDR range for Nodes, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Nodes", + "type": "string" + }, + "pods": { + "default": "10.96.0.0/13", + "description": "CIDR range for Pods, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Pods", + "type": "string" + }, + "services": { + "default": "10.104.0.0/13", + "description": "CIDR range for Services, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Services", + "type": "string" + } + }, + "required": [ + "nodes" + ], + "type": "object" + }, + "oidc": { + "description": "OIDC configuration", + "properties": { + "clientID": { + "description": "The client ID for the OpenID Connect client.", + "type": "string" + }, + "groupsClaim": { + "description": "If provided, the name of a custom OpenID Connect claim for specifying user groups.", + "type": "string" + }, + "issuerURL": { + "description": "The URL of the OpenID issuer, only HTTPS scheme will be accepted.", + "type": "string" + }, + "signingAlgs": { + "description": "Comma separated list of allowed JOSE asymmetric signing algorithms, for example, RS256, ES256", + "items": { + "type": "string" + }, + "type": "array" + }, + "usernameClaim": { + "description": "The OpenID claim to use as the user name.", + "type": "string" + }, + "usernamePrefix": { + "description": "If provided, all usernames will be prefixed with this value. If not provided, username claims other than 'email' are prefixed by the issuer URL to avoid clashes. To skip any prefixing, provide the value '-' (dash character without additional characters).", + "type": "string" + } + }, + "required": [ + "clientID", + "issuerURL" + ], + "type": "object" + }, + "region": { + "_enumDisplayName": { + "eastus": "eastus (US East, VA)", + "centralus": "centralus (US Central, IA)", + "westus2": "westus2 (US West, WA)", + "uksouth": "uksouth (UK South, London)", + "northeurope": "northeurope (Europe, Ireland)", + "westeurope": "westeurope (Europe, Netherlands)", + "japaneast": "japaneast (Japan, Tokyo)", + "southeastasia": "southeastasia (Asia Pacific, Singapore)", + "australiaeast": "australiaeast (Australia, Sydney)" + }, + "enum": [ + "eastus", + "centralus", + "westus2", + "uksouth", + "northeurope", + "westeurope", + "japaneast", + "southeastasia", + "australiaeast" + ], + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "region" + ], + "type": "object" +} diff --git a/internal/broker/testdata/azure/azure-lite-schema-eu-reduced.json b/internal/broker/testdata/azure/azure-lite-schema-eu-reduced.json new file mode 100644 index 0000000000..c8059820ea --- /dev/null +++ b/internal/broker/testdata/azure/azure-lite-schema-eu-reduced.json @@ -0,0 +1,176 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "_controlsOrder": [ + "name", + "region", + "machineType", + "autoScalerMin", + "autoScalerMax", + "modules", + "networking" + ], + "_show_form_view": true, + "properties": { + "autoScalerMax": { + "default": 10, + "description": "Specifies the maximum number of virtual machines to create", + "maximum": 40, + "minimum": 2, + "type": "integer" + }, + "autoScalerMin": { + "default": 2, + "description": "Specifies the minimum number of virtual machines to create", + "minimum": 2, + "type": "integer" + }, + "machineType":{ + "_enumDisplayName":{ + "Standard_D4s_v5":"Standard_D4s_v5 (4vCPU, 16GB RAM)", + "Standard_D4_v3":"Standard_D4_v3 (4vCPU, 16GB RAM)" + }, + "enum":[ + "Standard_D4s_v5", + "Standard_D4_v3" + ], + "type":"string" + }, + "modules": { + "_controlsOrder": [ + "default", + "list" + ], + "description": "Use default modules or provide your custom list of modules. Provide an empty custom list of modules if you don’t want any modules enabled.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Default modules", + "properties": { + "default": { + "default": true, + "description": "Check the default modules in the default modules table.", + "readOnly": true, + "title": "Use Default", + "type": "boolean" + } + }, + "title": "Default", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Define custom module list", + "properties": { + "list": { + "description": "Check a module technical name on this website. You can only use a module technical name once. Provide an empty custom list of modules if you don’t want any modules enabled.", + "items": { + "_controlsOrder": [ + "name", + "channel", + "customResourcePolicy" + ], + "properties": { + "channel": { + "_enumDisplayName": { + "": "", + "fast": "Fast - latest version", + "regular": "Regular - default version" + }, + "default": "", + "description": "Select your preferred release channel or leave this field empty.", + "enum": [ + "", + "regular", + "fast" + ], + "type": "string" + }, + "customResourcePolicy": { + "_enumDisplayName": { + "": "", + "CreateAndDelete": "CreateAndDelete - default module resource is created or deleted.", + "Ignore": "Ignore - module resource is not created." + }, + "default": "", + "description": "Select your preferred CustomResourcePolicy setting or leave this field empty.", + "enum": [ + "", + "CreateAndDelete", + "Ignore" + ], + "type": "string" + }, + "name": { + "description": "Check a module technical name on this website. You can only use a module technical name once.", + "minLength": 1, + "title": "Name", + "type": "string" + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + } + }, + "title": "Custom", + "type": "object" + } + ], + "type": "object" + }, + "name": { + "_BTPdefaultTemplate": { + "elements": [ + "saSubdomain" + ] + }, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$", + "title": "Cluster Name", + "type": "string" + }, + "networking": { + "description": "Networking configuration. These values are immutable and cannot be updated later. All provided CIDR ranges must not overlap one another.", + "properties": { + "nodes": { + "default": "10.250.0.0/22", + "description": "CIDR range for Nodes, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Nodes", + "type": "string" + }, + "pods": { + "default": "10.96.0.0/13", + "description": "CIDR range for Pods, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Pods", + "type": "string" + }, + "services": { + "default": "10.104.0.0/13", + "description": "CIDR range for Services, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Services", + "type": "string" + } + }, + "required": [ + "nodes" + ], + "type": "object" + }, + "region": { + "_enumDisplayName": { + "switzerlandnorth": "switzerlandnorth (Switzerland, Zurich)" + }, + "enum": [ + "switzerlandnorth" + ], + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "region" + ], + "type": "object" +} diff --git a/internal/broker/testdata/azure/azure-lite-schema-reduced.json b/internal/broker/testdata/azure/azure-lite-schema-reduced.json new file mode 100644 index 0000000000..04f4c29e2c --- /dev/null +++ b/internal/broker/testdata/azure/azure-lite-schema-reduced.json @@ -0,0 +1,192 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "_controlsOrder": [ + "name", + "region", + "machineType", + "autoScalerMin", + "autoScalerMax", + "modules", + "networking" + ], + "_show_form_view": true, + "properties": { + "autoScalerMax": { + "default": 10, + "description": "Specifies the maximum number of virtual machines to create", + "maximum": 40, + "minimum": 2, + "type": "integer" + }, + "autoScalerMin": { + "default": 2, + "description": "Specifies the minimum number of virtual machines to create", + "minimum": 2, + "type": "integer" + }, + "machineType":{ + "_enumDisplayName":{ + "Standard_D4s_v5":"Standard_D4s_v5 (4vCPU, 16GB RAM)", + "Standard_D4_v3":"Standard_D4_v3 (4vCPU, 16GB RAM)" + }, + "enum":[ + "Standard_D4s_v5", + "Standard_D4_v3" + ], + "type":"string" + }, + "modules": { + "_controlsOrder": [ + "default", + "list" + ], + "description": "Use default modules or provide your custom list of modules. Provide an empty custom list of modules if you don’t want any modules enabled.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Default modules", + "properties": { + "default": { + "default": true, + "description": "Check the default modules in the default modules table.", + "readOnly": true, + "title": "Use Default", + "type": "boolean" + } + }, + "title": "Default", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Define custom module list", + "properties": { + "list": { + "description": "Check a module technical name on this website. You can only use a module technical name once. Provide an empty custom list of modules if you don’t want any modules enabled.", + "items": { + "_controlsOrder": [ + "name", + "channel", + "customResourcePolicy" + ], + "properties": { + "channel": { + "_enumDisplayName": { + "": "", + "fast": "Fast - latest version", + "regular": "Regular - default version" + }, + "default": "", + "description": "Select your preferred release channel or leave this field empty.", + "enum": [ + "", + "regular", + "fast" + ], + "type": "string" + }, + "customResourcePolicy": { + "_enumDisplayName": { + "": "", + "CreateAndDelete": "CreateAndDelete - default module resource is created or deleted.", + "Ignore": "Ignore - module resource is not created." + }, + "default": "", + "description": "Select your preferred CustomResourcePolicy setting or leave this field empty.", + "enum": [ + "", + "CreateAndDelete", + "Ignore" + ], + "type": "string" + }, + "name": { + "description": "Check a module technical name on this website. You can only use a module technical name once.", + "minLength": 1, + "title": "Name", + "type": "string" + } + }, + "type": "object" + }, + "type": "array", + "uniqueItems": true + } + }, + "title": "Custom", + "type": "object" + } + ], + "type": "object" + }, + "name": { + "_BTPdefaultTemplate": { + "elements": [ + "saSubdomain" + ] + }, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$", + "title": "Cluster Name", + "type": "string" + }, + "networking": { + "description": "Networking configuration. These values are immutable and cannot be updated later. All provided CIDR ranges must not overlap one another.", + "properties": { + "nodes": { + "default": "10.250.0.0/22", + "description": "CIDR range for Nodes, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Nodes", + "type": "string" + }, + "pods": { + "default": "10.96.0.0/13", + "description": "CIDR range for Pods, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Pods", + "type": "string" + }, + "services": { + "default": "10.104.0.0/13", + "description": "CIDR range for Services, must not overlap with the following CIDRs: 10.243.128.0/17, 10.242.0.0/16, 10.243.0.0/17, 10.64.0.0/11, 10.254.0.0/16, 10.243.0.0/16", + "title": "CIDR range for Services", + "type": "string" + } + }, + "required": [ + "nodes" + ], + "type": "object" + }, + "region": { + "_enumDisplayName": { + "eastus": "eastus (US East, VA)", + "centralus": "centralus (US Central, IA)", + "westus2": "westus2 (US West, WA)", + "uksouth": "uksouth (UK South, London)", + "northeurope": "northeurope (Europe, Ireland)", + "westeurope": "westeurope (Europe, Netherlands)", + "japaneast": "japaneast (Japan, Tokyo)", + "southeastasia": "southeastasia (Asia Pacific, Singapore)", + "australiaeast": "australiaeast (Australia, Sydney)" + }, + "enum": [ + "eastus", + "centralus", + "westus2", + "uksouth", + "northeurope", + "westeurope", + "japaneast", + "southeastasia", + "australiaeast" + ], + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "region" + ], + "type": "object" +} diff --git a/internal/broker/testdata/azure/update-azure-lite-schema-additional-params-reduced.json b/internal/broker/testdata/azure/update-azure-lite-schema-additional-params-reduced.json new file mode 100644 index 0000000000..0ad6206f7f --- /dev/null +++ b/internal/broker/testdata/azure/update-azure-lite-schema-additional-params-reduced.json @@ -0,0 +1,82 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "_controlsOrder": [ + "machineType", + "autoScalerMin", + "autoScalerMax", + "oidc", + "administrators" + ], + "_show_form_view": true, + "properties": { + "administrators": { + "description": "Specifies the list of runtime administrators", + "items": { + "type": "string" + }, + "title": "Administrators", + "type": "array" + }, + "autoScalerMax": { + "description": "Specifies the maximum number of virtual machines to create", + "maximum": 40, + "minimum": 2, + "type": "integer" + }, + "autoScalerMin": { + "description": "Specifies the minimum number of virtual machines to create", + "minimum": 2, + "type": "integer" + }, + "machineType":{ + "_enumDisplayName":{ + "Standard_D4s_v5":"Standard_D4s_v5 (4vCPU, 16GB RAM)", + "Standard_D4_v3":"Standard_D4_v3 (4vCPU, 16GB RAM)" + }, + "enum":[ + "Standard_D4s_v5", + "Standard_D4_v3" + ], + "type":"string" + }, + "oidc": { + "description": "OIDC configuration", + "properties": { + "clientID": { + "description": "The client ID for the OpenID Connect client.", + "type": "string" + }, + "groupsClaim": { + "description": "If provided, the name of a custom OpenID Connect claim for specifying user groups.", + "type": "string" + }, + "issuerURL": { + "description": "The URL of the OpenID issuer, only HTTPS scheme will be accepted.", + "type": "string" + }, + "signingAlgs": { + "description": "Comma separated list of allowed JOSE asymmetric signing algorithms, for example, RS256, ES256", + "items": { + "type": "string" + }, + "type": "array" + }, + "usernameClaim": { + "description": "The OpenID claim to use as the user name.", + "type": "string" + }, + "usernamePrefix": { + "description": "If provided, all usernames will be prefixed with this value. If not provided, username claims other than 'email' are prefixed by the issuer URL to avoid clashes. To skip any prefixing, provide the value '-' (dash character without additional characters).", + "type": "string" + } + }, + "required": [ + "clientID", + "issuerURL" + ], + "type": "object" + } + }, + "required": [], + "type": "object" +} \ No newline at end of file diff --git a/internal/broker/testdata/azure/update-azure-lite-schema-reduced.json b/internal/broker/testdata/azure/update-azure-lite-schema-reduced.json new file mode 100644 index 0000000000..7d3af88f58 --- /dev/null +++ b/internal/broker/testdata/azure/update-azure-lite-schema-reduced.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "_controlsOrder": [ + "machineType", + "autoScalerMin", + "autoScalerMax" + ], + "_show_form_view": true, + "properties": { + "autoScalerMax": { + "description": "Specifies the maximum number of virtual machines to create", + "maximum": 40, + "minimum": 2, + "type": "integer" + }, + "autoScalerMin": { + "description": "Specifies the minimum number of virtual machines to create", + "minimum": 2, + "type": "integer" + }, + "machineType":{ + "_enumDisplayName":{ + "Standard_D4s_v5":"Standard_D4s_v5 (4vCPU, 16GB RAM)", + "Standard_D4_v3":"Standard_D4_v3 (4vCPU, 16GB RAM)" + }, + "enum":[ + "Standard_D4s_v5", + "Standard_D4_v3" + ], + "type":"string" + } + }, + "required": [], + "type": "object" +} \ No newline at end of file diff --git a/internal/process/input/builder.go b/internal/process/input/builder.go index 57d8b198c8..9d8bc0eaad 100644 --- a/internal/process/input/builder.go +++ b/internal/process/input/builder.go @@ -40,11 +40,12 @@ type InputBuilderFactory struct { trialPlatformRegionMapping map[string]string enabledFreemiumProviders map[string]struct{} oidcDefaultValues internal.OIDCConfigDTO + useSmallerMachineTypes bool } func NewInputBuilderFactory(configProvider ConfigurationProvider, config Config, defaultKymaVersion string, trialPlatformRegionMapping map[string]string, - enabledFreemiumProviders []string, oidcValues internal.OIDCConfigDTO) (CreatorForPlan, error) { + enabledFreemiumProviders []string, oidcValues internal.OIDCConfigDTO, useSmallerMachineTypes bool) (CreatorForPlan, error) { freemiumProviders := map[string]struct{}{} for _, p := range enabledFreemiumProviders { @@ -58,6 +59,7 @@ func NewInputBuilderFactory(configProvider ConfigurationProvider, trialPlatformRegionMapping: trialPlatformRegionMapping, enabledFreemiumProviders: freemiumProviders, oidcDefaultValues: oidcValues, + useSmallerMachineTypes: useSmallerMachineTypes, }, nil } @@ -105,7 +107,9 @@ func (f *InputBuilderFactory) getHyperscalerProviderForPlanID(planID string, pla ControlPlaneFailureTolerance: f.config.ControlPlaneFailureTolerance, } case broker.AzureLitePlanID: - provider = &cloudProvider.AzureLiteInput{} + provider = &cloudProvider.AzureLiteInput{ + UseSmallerMachineTypes: f.useSmallerMachineTypes, + } case broker.TrialPlanID: provider = f.forTrialPlan(parametersProvider) case broker.AWSPlanID: @@ -176,11 +180,13 @@ func (f *InputBuilderFactory) forTrialPlan(provider *internal.CloudProvider) Hyp } case internal.AWS: return &cloudProvider.AWSTrialInput{ - PlatformRegionMapping: f.trialPlatformRegionMapping, + PlatformRegionMapping: f.trialPlatformRegionMapping, + UseSmallerMachineTypes: f.useSmallerMachineTypes, } default: return &cloudProvider.AzureTrialInput{ - PlatformRegionMapping: f.trialPlatformRegionMapping, + PlatformRegionMapping: f.trialPlatformRegionMapping, + UseSmallerMachineTypes: f.useSmallerMachineTypes, } } @@ -326,9 +332,13 @@ func (f *InputBuilderFactory) forFreemiumPlan(provider internal.CloudProvider) ( } switch provider { case internal.AWS: - return &cloudProvider.AWSFreemiumInput{}, nil + return &cloudProvider.AWSFreemiumInput{ + UseSmallerMachineTypes: f.useSmallerMachineTypes, + }, nil case internal.Azure: - return &cloudProvider.AzureFreemiumInput{}, nil + return &cloudProvider.AzureFreemiumInput{ + UseSmallerMachineTypes: f.useSmallerMachineTypes, + }, nil default: return nil, fmt.Errorf("provider %s is not supported", provider) } diff --git a/internal/process/input/builder_test.go b/internal/process/input/builder_test.go index 28d48ec205..ec8fce36a7 100644 --- a/internal/process/input/builder_test.go +++ b/internal/process/input/builder_test.go @@ -17,7 +17,7 @@ func TestInputBuilderFactory_IsPlanSupport(t *testing.T) { // given configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) // when/then @@ -33,7 +33,7 @@ func TestInputBuilderFactory_ForPlan(t *testing.T) { // given configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) @@ -57,7 +57,7 @@ func TestInputBuilderFactory_ForPlan(t *testing.T) { // given configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) @@ -76,7 +76,7 @@ func TestInputBuilderFactory_ForPlan(t *testing.T) { // given configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) @@ -92,7 +92,7 @@ func TestInputBuilderFactory_ForPlan(t *testing.T) { // given configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) @@ -125,7 +125,7 @@ func TestInputBuilderFactory_ForPlan(t *testing.T) { // given configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) @@ -163,7 +163,7 @@ func TestInputBuilderFactory_ForPlan(t *testing.T) { var provider HyperscalerInputProvider configProvider := mockConfigProvider() - ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.10", fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) provider = &cloudProvider.GcpInput{} // for broker.GCPPlanID diff --git a/internal/process/input/input_test.go b/internal/process/input/input_test.go index a9c43b7e00..3229149c09 100644 --- a/internal/process/input/input_test.go +++ b/internal/process/input/input_test.go @@ -29,7 +29,7 @@ func TestInputBuilderFactoryForAzurePlan(t *testing.T) { configProvider := mockConfigProvider() factory, err := NewInputBuilderFactory(configProvider, config, "1.10.0", fixTrialRegionMapping(), - fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.AzurePlanID) @@ -101,7 +101,7 @@ func TestShouldAdjustRuntimeName(t *testing.T) { configProvider := mockConfigProvider() builder, err := NewInputBuilderFactory(configProvider, Config{TrialNodesNumber: 0}, "not-important", fixTrialRegionMapping(), - fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.TrialPlanID) @@ -135,7 +135,7 @@ func TestShouldSetNumberOfNodesForTrialPlan(t *testing.T) { configProvider := mockConfigProvider() builder, err := NewInputBuilderFactory(configProvider, Config{TrialNodesNumber: 2}, "not-important", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.TrialPlanID) @@ -161,7 +161,7 @@ func TestShouldSetGlobalConfiguration(t *testing.T) { configProvider := mockConfigProvider() builder, err := NewInputBuilderFactory(configProvider, Config{}, "", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.TrialPlanID) @@ -184,7 +184,7 @@ func TestShouldSetGlobalConfiguration(t *testing.T) { configProvider := mockConfigProvider() builder, err := NewInputBuilderFactory(configProvider, Config{}, "", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.TrialPlanID) @@ -224,7 +224,7 @@ func TestCreateProvisionRuntimeInput_ConfigureDNS(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.4", fixTrialRegionMapping(), - fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -255,7 +255,7 @@ func TestCreateProvisionRuntimeInput_ConfigureDNS(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.4", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -296,7 +296,7 @@ func TestCreateProvisionRuntimeInput_ConfigureOIDC(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -331,7 +331,7 @@ func TestCreateProvisionRuntimeInput_ConfigureOIDC(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -367,7 +367,7 @@ func TestCreateProvisionRuntimeInput_ConfigureOIDC(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -405,7 +405,7 @@ func TestCreateProvisionRuntimeInput_ConfigureAdmins(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -432,7 +432,7 @@ func TestCreateProvisionRuntimeInput_ConfigureAdmins(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -470,7 +470,7 @@ func TestCreateUpgradeRuntimeInput_ConfigureAdmins(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -503,7 +503,7 @@ func TestCreateUpgradeRuntimeInput_ConfigureAdmins(t *testing.T) { configProvider := mockConfigProvider() inputBuilder, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) provisioningParams := fixture.FixProvisioningParameters(id) @@ -534,7 +534,7 @@ func TestCreateUpgradeShootInput_ConfigureAutoscalerParams(t *testing.T) { configProvider := mockConfigProvider() ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) //ar provider HyperscalerInputProvider @@ -571,7 +571,7 @@ func TestCreateUpgradeShootInput_ConfigureAutoscalerParams(t *testing.T) { configProvider := mockConfigProvider() ibf, err := NewInputBuilderFactory(configProvider, Config{}, "1.24.0", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixProvisioningParameters(broker.GCPPlanID) @@ -613,7 +613,7 @@ func TestShootAndSeedSameRegion(t *testing.T) { configProvider := mockConfigProvider() builder, err := NewInputBuilderFactory(configProvider, Config{EnableShootAndSeedSameRegion: true}, "not-important", - fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO()) + fixTrialRegionMapping(), fixTrialProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := fixture.FixProvisioningParameters("") diff --git a/internal/process/provisioning/create_runtime_for_own_cluster_step_test.go b/internal/process/provisioning/create_runtime_for_own_cluster_step_test.go index 32d50be5a6..d9c650a31e 100644 --- a/internal/process/provisioning/create_runtime_for_own_cluster_step_test.go +++ b/internal/process/provisioning/create_runtime_for_own_cluster_step_test.go @@ -138,7 +138,7 @@ func fixInputCreator(t *testing.T) internal.ProvisionerInputCreator { AutoUpdateMachineImageVersion: autoUpdateMachineImageVersion, MultiZoneCluster: true, ControlPlaneFailureTolerance: "zone", - }, kymaVersion, fixTrialRegionMapping(), fixFreemiumProviders(), fixture.FixOIDCConfigDTO()) + }, kymaVersion, fixTrialRegionMapping(), fixFreemiumProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := internal.ProvisioningParameters{ diff --git a/internal/process/update/upgrade_shoot_step_test.go b/internal/process/update/upgrade_shoot_step_test.go index e8284a3e7b..125e0b4cad 100644 --- a/internal/process/update/upgrade_shoot_step_test.go +++ b/internal/process/update/upgrade_shoot_step_test.go @@ -90,7 +90,7 @@ func fixInputCreator(t *testing.T) internal.ProvisionerInputCreator { ibf, err := input.NewInputBuilderFactory(configProvider, input.Config{ KubernetesVersion: k8sVersion, DefaultGardenerShootPurpose: "test", - }, kymaVersion, fixTrialRegionMapping(), fixFreemiumProviders(), fixture.FixOIDCConfigDTO()) + }, kymaVersion, fixTrialRegionMapping(), fixFreemiumProviders(), fixture.FixOIDCConfigDTO(), false) assert.NoError(t, err) pp := internal.ProvisioningParameters{ diff --git a/internal/process/upgrade_cluster/upgrade_cluster_step_test.go b/internal/process/upgrade_cluster/upgrade_cluster_step_test.go index b91ff10352..e62143a8da 100644 --- a/internal/process/upgrade_cluster/upgrade_cluster_step_test.go +++ b/internal/process/upgrade_cluster/upgrade_cluster_step_test.go @@ -133,7 +133,7 @@ func fixInputCreator(t *testing.T) internal.ProvisionerInputCreator { TrialNodesNumber: 1, AutoUpdateKubernetesVersion: fixAutoUpdateKubernetesVersion, AutoUpdateMachineImageVersion: fixAutoUpdateMachineImageVersion, - }, fixKymaVersion, nil, nil, fixture.FixOIDCConfigDTO()) + }, fixKymaVersion, nil, nil, fixture.FixOIDCConfigDTO(), false) require.NoError(t, err, "Input factory creation error") ver := internal.RuntimeVersionData{ diff --git a/internal/provider/aws_provider.go b/internal/provider/aws_provider.go index a11d29cdd1..8d88f5420a 100644 --- a/internal/provider/aws_provider.go +++ b/internal/provider/aws_provider.go @@ -19,11 +19,12 @@ import ( ) const ( - DefaultAWSRegion = "eu-central-1" - DefaultAWSTrialRegion = "eu-west-1" - DefaultEuAccessAWSRegion = "eu-central-1" - DefaultAWSMultiZoneCount = 3 - DefaultAWSMachineType = "m6i.large" + DefaultAWSRegion = "eu-central-1" + DefaultAWSTrialRegion = "eu-west-1" + DefaultEuAccessAWSRegion = "eu-central-1" + DefaultAWSMultiZoneCount = 3 + DefaultAWSMachineType = "m6i.large" + DefaultOldAWSTrialMachineType = "m5.xlarge" ) var europeAWS = "eu-west-1" @@ -42,9 +43,12 @@ type ( ControlPlaneFailureTolerance string } AWSTrialInput struct { - PlatformRegionMapping map[string]string + PlatformRegionMapping map[string]string + UseSmallerMachineTypes bool + } + AWSFreemiumInput struct { + UseSmallerMachineTypes bool } - AWSFreemiumInput struct{} ) func (p *AWSInput) Defaults() *gqlschema.ClusterConfigInput { @@ -238,15 +242,19 @@ func (p *AWSInput) Provider() internal.CloudProvider { } func (p *AWSTrialInput) Defaults() *gqlschema.ClusterConfigInput { - return awsLiteDefaults(DefaultAWSTrialRegion) + return awsLiteDefaults(DefaultAWSTrialRegion, p.UseSmallerMachineTypes) } -func awsLiteDefaults(region string) *gqlschema.ClusterConfigInput { +func awsLiteDefaults(region string, useSmallerMachineTypes bool) *gqlschema.ClusterConfigInput { + machineType := DefaultOldAWSTrialMachineType + if useSmallerMachineTypes { + machineType = DefaultAWSMachineType + } return &gqlschema.ClusterConfigInput{ GardenerConfig: &gqlschema.GardenerConfigInput{ DiskType: ptr.String("gp2"), VolumeSizeGb: ptr.Integer(50), - MachineType: DefaultAWSMachineType, + MachineType: machineType, Region: region, Provider: "aws", WorkerCidr: networking.DefaultNodesCIDR, @@ -303,7 +311,7 @@ func (p *AWSTrialInput) Provider() internal.CloudProvider { func (p *AWSFreemiumInput) Defaults() *gqlschema.ClusterConfigInput { // Lite (freemium) must have the same defaults as Trial plan, but there was a requirement to change a region only for Trial. - defaults := awsLiteDefaults(DefaultAWSRegion) + defaults := awsLiteDefaults(DefaultAWSRegion, p.UseSmallerMachineTypes) return defaults } diff --git a/internal/provider/azure_provider.go b/internal/provider/azure_provider.go index 62d40e2998..72f3aea93f 100644 --- a/internal/provider/azure_provider.go +++ b/internal/provider/azure_provider.go @@ -17,10 +17,11 @@ import ( ) const ( - DefaultAzureRegion = "eastus" - DefaultEuAccessAzureRegion = "switzerlandnorth" - DefaultAzureMultiZoneCount = 3 - DefaultAzureMachineType = "Standard_D2s_v5" + DefaultAzureRegion = "eastus" + DefaultEuAccessAzureRegion = "switzerlandnorth" + DefaultAzureMultiZoneCount = 3 + DefaultAzureMachineType = "Standard_D2s_v5" + DefaultOldAzureTrialMachineType = "Standard_D4s_v5" ) var europeAzure = "westeurope" @@ -40,11 +41,16 @@ type ( MultiZone bool ControlPlaneFailureTolerance string } - AzureLiteInput struct{} + AzureLiteInput struct { + UseSmallerMachineTypes bool + } AzureTrialInput struct { - PlatformRegionMapping map[string]string + PlatformRegionMapping map[string]string + UseSmallerMachineTypes bool + } + AzureFreemiumInput struct { + UseSmallerMachineTypes bool } - AzureFreemiumInput struct{} ) func (p *AzureInput) Defaults() *gqlschema.ClusterConfigInput { @@ -121,11 +127,15 @@ func (p *AzureInput) Provider() internal.CloudProvider { } func (p *AzureLiteInput) Defaults() *gqlschema.ClusterConfigInput { + machineType := DefaultOldAzureTrialMachineType + if p.UseSmallerMachineTypes { + machineType = DefaultAzureMachineType + } return &gqlschema.ClusterConfigInput{ GardenerConfig: &gqlschema.GardenerConfigInput{ DiskType: ptr.String("Standard_LRS"), VolumeSizeGb: ptr.Integer(50), - MachineType: DefaultAzureMachineType, + MachineType: machineType, Region: DefaultAzureRegion, Provider: "azure", WorkerCidr: networking.DefaultNodesCIDR, @@ -176,15 +186,19 @@ func (p *AzureLiteInput) Provider() internal.CloudProvider { } func (p *AzureTrialInput) Defaults() *gqlschema.ClusterConfigInput { - return azureTrialDefaults() + return azureTrialDefaults(p.UseSmallerMachineTypes) } -func azureTrialDefaults() *gqlschema.ClusterConfigInput { +func azureTrialDefaults(useSmallerMachineTypes bool) *gqlschema.ClusterConfigInput { + machineType := DefaultOldAzureTrialMachineType + if useSmallerMachineTypes { + machineType = DefaultAzureMachineType + } return &gqlschema.ClusterConfigInput{ GardenerConfig: &gqlschema.GardenerConfigInput{ DiskType: ptr.String("Standard_LRS"), VolumeSizeGb: ptr.Integer(50), - MachineType: DefaultAzureMachineType, + MachineType: machineType, Region: DefaultAzureRegion, Provider: "azure", WorkerCidr: networking.DefaultNodesCIDR, @@ -242,7 +256,7 @@ func (p *AzureTrialInput) Profile() gqlschema.KymaProfile { } func (p *AzureFreemiumInput) Defaults() *gqlschema.ClusterConfigInput { - return azureTrialDefaults() + return azureTrialDefaults(p.UseSmallerMachineTypes) } func (p *AzureFreemiumInput) ApplyParameters(input *gqlschema.ClusterConfigInput, params internal.ProvisioningParameters) { diff --git a/resources/keb/templates/deployment.yaml b/resources/keb/templates/deployment.yaml index 909f73dad3..5abe3a0b3d 100644 --- a/resources/keb/templates/deployment.yaml +++ b/resources/keb/templates/deployment.yaml @@ -390,6 +390,8 @@ spec: value: /config/freemiumWhitelistedGlobalAccountIds.yaml - name: APP_KYMA_RESOURCE_DELETION_TIMEOUT value: "{{ .Values.kymaResourceDeletionTimeout }}" + - name: APP_BROKER_USE_SMALLER_MACHINE_TYPES + value: "{{ .Values.useSmallerMachineTypes }}" ports: - name: http containerPort: {{ .Values.broker.port }} diff --git a/resources/keb/values.yaml b/resources/keb/values.yaml index 859634db88..b32017536f 100644 --- a/resources/keb/values.yaml +++ b/resources/keb/values.yaml @@ -234,6 +234,7 @@ freeExpirationPeriod: 720h onlyOneFreePerGA: "false" subaccountsIdsToShowTrialExpirationInfo: "a45be5d8-eddc-4001-91cf-48cc644d571f" trialDocsURL: "https://help.sap.com/docs/" +useSmallerMachineTypes: "false" osbUpdateProcessingEnabled: "false"