Skip to content

Commit 106a822

Browse files
authored
Merge pull request kubernetes#3344 from DataDog/jb/vmss-min-max
cluster-autoscaler: ignore nodegroups with min/max tag issues
2 parents 9c7d8a6 + c7483d9 commit 106a822

File tree

2 files changed

+39
-30
lines changed

2 files changed

+39
-30
lines changed

cluster-autoscaler/cloudprovider/azure/azure_manager.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -671,28 +671,38 @@ func (m *AzureManager) listScaleSets(filter []labelAutoDiscoveryConfig) ([]cloud
671671
if minSize, err := strconv.Atoi(*val); err == nil {
672672
spec.MinSize = minSize
673673
} else {
674-
return asgs, fmt.Errorf("invalid minimum size specified for vmss: %s", err)
674+
klog.Warningf("ignoring nodegroup %q because of invalid minimum size specified for vmss: %s", *scaleSet.Name, err)
675+
continue
675676
}
676677
} else {
677-
return asgs, fmt.Errorf("no minimum size specified for vmss: %s", *scaleSet.Name)
678+
klog.Warningf("ignoring nodegroup %q because of no minimum size specified for vmss", *scaleSet.Name)
679+
continue
678680
}
679681
if spec.MinSize < 0 {
680-
return asgs, fmt.Errorf("minimum size must be a non-negative number of nodes")
682+
klog.Warningf("ignoring nodegroup %q because of minimum size must be a non-negative number of nodes", *scaleSet.Name)
683+
continue
681684
}
682685
if val, ok := scaleSet.Tags["max"]; ok {
683686
if maxSize, err := strconv.Atoi(*val); err == nil {
684687
spec.MaxSize = maxSize
685688
} else {
686-
return asgs, fmt.Errorf("invalid maximum size specified for vmss: %s", err)
689+
klog.Warningf("ignoring nodegroup %q because of invalid maximum size specified for vmss: %s", *scaleSet.Name, err)
690+
continue
687691
}
688692
} else {
689-
return asgs, fmt.Errorf("no maximum size specified for vmss: %s", *scaleSet.Name)
693+
klog.Warningf("ignoring nodegroup %q because of no maximum size specified for vmss", *scaleSet.Name)
694+
continue
690695
}
691696
if spec.MaxSize < spec.MinSize {
692-
return asgs, fmt.Errorf("maximum size must be greater than minimum size")
697+
klog.Warningf("ignoring nodegroup %q because of maximum size must be greater than minimum size: max=%d < min=%d", *scaleSet.Name, spec.MaxSize, spec.MinSize)
698+
continue
693699
}
694700

695-
asg, _ := NewScaleSet(spec, m)
701+
asg, err := NewScaleSet(spec, m)
702+
if err != nil {
703+
klog.Warningf("ignoring nodegroup %q %s", *scaleSet.Name, err)
704+
continue
705+
}
696706
asgs = append(asgs, asg)
697707
}
698708

cluster-autoscaler/cloudprovider/azure/azure_manager_test.go

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -735,34 +735,28 @@ func TestListScalesets(t *testing.T) {
735735
}},
736736
},
737737
{
738-
name: "InvalidMin",
739-
specs: map[string]string{"min": "some-invalid-string"},
740-
expectedErrString: "invalid minimum size specified for vmss:",
738+
name: "InvalidMin",
739+
specs: map[string]string{"min": "some-invalid-string"},
741740
},
742741
{
743-
name: "NoMin",
744-
specs: map[string]string{"max": "50"},
745-
expectedErrString: fmt.Sprintf("no minimum size specified for vmss: %s", vmssName),
742+
name: "NoMin",
743+
specs: map[string]string{"max": "50"},
746744
},
747745
{
748-
name: "InvalidMax",
749-
specs: map[string]string{"min": "5", "max": "some-invalid-string"},
750-
expectedErrString: "invalid maximum size specified for vmss:",
746+
name: "InvalidMax",
747+
specs: map[string]string{"min": "5", "max": "some-invalid-string"},
751748
},
752749
{
753-
name: "NoMax",
754-
specs: map[string]string{"min": "5"},
755-
expectedErrString: fmt.Sprintf("no maximum size specified for vmss: %s", vmssName),
750+
name: "NoMax",
751+
specs: map[string]string{"min": "5"},
756752
},
757753
{
758-
name: "MinLessThanZero",
759-
specs: map[string]string{"min": "-4", "max": "20"},
760-
expectedErrString: fmt.Sprintf("minimum size must be a non-negative number of nodes"),
754+
name: "MinLessThanZero",
755+
specs: map[string]string{"min": "-4", "max": "20"},
761756
},
762757
{
763-
name: "MinGreaterThanMax",
764-
specs: map[string]string{"min": "50", "max": "5"},
765-
expectedErrString: "maximum size must be greater than minimum size",
758+
name: "MinGreaterThanMax",
759+
specs: map[string]string{"min": "50", "max": "5"},
766760
},
767761
{
768762
name: "ListVMSSFail",
@@ -792,13 +786,18 @@ func TestListScalesets(t *testing.T) {
792786
manager.azClient.virtualMachineScaleSetsClient = mockVMSSClient
793787

794788
asgs, err := manager.listScaleSets(specs)
795-
if tc.expectedErrString != "" {
796-
assert.Error(t, err)
797-
assert.Contains(t, err.Error(), tc.expectedErrString)
789+
if tc.expected != nil {
790+
assert.NoError(t, err)
791+
assert.True(t, assert.ObjectsAreEqualValues(tc.expected, asgs), "expected %#v, but found: %#v", tc.expected, asgs)
798792
return
799793
}
800-
assert.NoError(t, err)
801-
assert.True(t, assert.ObjectsAreEqualValues(tc.expected, asgs), "expected %#v, but found: %#v", tc.expected, asgs)
794+
assert.Len(t, asgs, 0)
795+
if tc.expectedErrString == "" {
796+
assert.NoError(t, err)
797+
return
798+
}
799+
assert.Error(t, err)
800+
assert.Contains(t, err.Error(), tc.expectedErrString)
802801
})
803802
}
804803
}

0 commit comments

Comments
 (0)