Skip to content

Commit 3e8c6cf

Browse files
Disable machine type update (#2003)
* Disable machine type update * Update value name in deployment file * Change description and error message
1 parent e4d487f commit 3e8c6cf

File tree

45 files changed

+147
-79
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+147
-79
lines changed

common/runtime/model.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,3 +534,14 @@ func (a AdditionalWorkerNodePool) ValidateHAZonesUnchanged(currentAdditionalWork
534534
}
535535
return nil
536536
}
537+
538+
func (a AdditionalWorkerNodePool) ValidateMachineTypesUnchanged(currentAdditionalWorkerNodePools []AdditionalWorkerNodePool) error {
539+
for _, currentAdditionalWorkerNodePool := range currentAdditionalWorkerNodePools {
540+
if a.Name == currentAdditionalWorkerNodePool.Name {
541+
if a.MachineType != currentAdditionalWorkerNodePool.MachineType {
542+
return fmt.Errorf("Machine type setting is permanent, and you cannot change it for the %s additional worker node pool", a.Name)
543+
}
544+
}
545+
}
546+
return nil
547+
}

internal/broker/broker.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ type Config struct {
5656
WorkerHealthCheckWarnInterval time.Duration `envconfig:"default=10m"`
5757

5858
UseAdditionalOIDCSchema bool `envconfig:"default=false"`
59+
60+
DisableMachineTypeUpdate bool `envconfig:"default=false"`
5961
}
6062

6163
type ServicesConfig map[string]Service

internal/broker/instance_create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ func (b *ProvisionEndpoint) validator(details *domain.ProvisionDetails, provider
649649
platformRegion, _ := middleware.RegionFromContext(ctx)
650650
plans := Plans(b.plansConfig, provider, nil, b.config.IncludeAdditionalParamsInSchema,
651651
euaccess.IsEURestrictedAccess(platformRegion),
652-
b.infrastructureManager.UseSmallerMachineTypes, b.config.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), b.config.UseAdditionalOIDCSchema)
652+
b.infrastructureManager.UseSmallerMachineTypes, b.config.EnableShootAndSeedSameRegion, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), b.config.UseAdditionalOIDCSchema, b.config.DisableMachineTypeUpdate)
653653
plan := plans[details.PlanID]
654654

655655
return validator.NewFromSchema(plan.Schemas.Instance.Create.Parameters)

internal/broker/instance_update.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,11 @@ func (b *UpdateEndpoint) processUpdateParameters(instance *internal.Instance, de
294294
if err := additionalWorkerNodePool.ValidateHAZonesUnchanged(instance.Parameters.Parameters.AdditionalWorkerNodePools); err != nil {
295295
return domain.UpdateServiceSpec{}, apiresponses.NewFailureResponse(err, http.StatusBadRequest, err.Error())
296296
}
297+
if b.config.DisableMachineTypeUpdate {
298+
if err := additionalWorkerNodePool.ValidateMachineTypesUnchanged(instance.Parameters.Parameters.AdditionalWorkerNodePools); err != nil {
299+
return domain.UpdateServiceSpec{}, apiresponses.NewFailureResponse(err, http.StatusBadRequest, err.Error())
300+
}
301+
}
297302
if b.zoneMapping {
298303
if err := checkAvailableZones(b.regionsSupportingMachine, additionalWorkerNodePool, providerValues.Region, details.PlanID); err != nil {
299304
return domain.UpdateServiceSpec{}, apiresponses.NewFailureResponse(err, http.StatusBadRequest, err.Error())
@@ -455,7 +460,7 @@ func (b *UpdateEndpoint) extractActiveValue(id string, provisioning internal.Pro
455460
func (b *UpdateEndpoint) getJsonSchemaValidator(provider pkg.CloudProvider, planID string, platformRegion string) (*jsonschema.Schema, error) {
456461
// shootAndSeedSameRegion is never enabled for update
457462
b.log.Info(fmt.Sprintf("region is: %s", platformRegion))
458-
plans := Plans(b.plansConfig, provider, nil, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.useSmallerMachineTypes, false, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), b.config.UseAdditionalOIDCSchema)
463+
plans := Plans(b.plansConfig, provider, nil, b.config.IncludeAdditionalParamsInSchema, euaccess.IsEURestrictedAccess(platformRegion), b.useSmallerMachineTypes, false, b.convergedCloudRegionsProvider.GetRegions(platformRegion), assuredworkloads.IsKSA(platformRegion), b.config.UseAdditionalOIDCSchema, b.config.DisableMachineTypeUpdate)
459464
plan := plans[planID]
460465

461466
return validator.NewFromSchema(plan.Schemas.Instance.Update.Parameters)

internal/broker/instance_update_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,6 +1463,48 @@ func TestAvailableZonesValidationDuringUpdate(t *testing.T) {
14631463
assert.EqualError(t, err, "In the westeurope, the g6.xlarge machine type is not available in 3 zones. If you want to use this machine type, set HA to false.")
14641464
}
14651465

1466+
func TestMachineTypeUpdateInAdditionalWorkerNodePools(t *testing.T) {
1467+
// given
1468+
instance := fixture.FixInstance(instanceID)
1469+
instance.Parameters.Parameters.AdditionalWorkerNodePools = []pkg.AdditionalWorkerNodePool{
1470+
{
1471+
Name: "name-1",
1472+
MachineType: "Standard_NC8as_T4_v3",
1473+
HAZones: true,
1474+
AutoScalerMin: 3,
1475+
AutoScalerMax: 20,
1476+
},
1477+
}
1478+
st := storage.NewMemoryStorage()
1479+
err := st.Instances().Insert(instance)
1480+
require.NoError(t, err)
1481+
err = st.Operations().InsertProvisioningOperation(fixProvisioningOperation("provisioning01"))
1482+
require.NoError(t, err)
1483+
1484+
handler := &handler{}
1485+
q := &automock.Queue{}
1486+
q.On("Add", mock.AnythingOfType("string"))
1487+
1488+
kcBuilder := &kcMock.KcBuilder{}
1489+
kcBuilder.On("GetServerURL", mock.Anything).Return("https://kcp.example.dummy", nil)
1490+
svc := broker.NewUpdate(broker.Config{DisableMachineTypeUpdate: true}, st, handler, true, true, false, q, broker.PlansConfig{},
1491+
fixValueProvider(), fixLogger(), dashboardConfig, kcBuilder, &broker.OneForAllConvergedCloudRegionsProvider{}, fakeKcpK8sClient, regionssupportingmachine.RegionsSupportingMachine{}, false, false)
1492+
1493+
additionalWorkerNodePools := `[{"name": "name-1", "machineType": "Standard_NC4as_T4_v3", "haZones": true, "autoScalerMin": 3, "autoScalerMax": 20}]`
1494+
// when
1495+
_, err = svc.Update(context.Background(), instanceID, domain.UpdateDetails{
1496+
ServiceID: "",
1497+
PlanID: broker.AzurePlanID,
1498+
RawParameters: json.RawMessage("{\"machineType\":\"Standard_D16s_v5\", \"additionalWorkerNodePools\": " + additionalWorkerNodePools + "}"),
1499+
PreviousValues: domain.PreviousValues{},
1500+
RawContext: json.RawMessage("{\"globalaccount_id\":\"globalaccount_id_1\", \"active\":true}"),
1501+
MaintenanceInfo: nil,
1502+
}, true)
1503+
1504+
// then
1505+
assert.EqualError(t, err, "Machine type setting is permanent, and you cannot change it for the name-1 additional worker node pool")
1506+
}
1507+
14661508
func fixValueProvider() broker.ValuesProvider {
14671509
return provider.NewPlanSpecificValuesProvider(true, pkg.AWS, true, nil, "production", "")
14681510
}

0 commit comments

Comments
 (0)