Skip to content

Commit 5da66df

Browse files
authored
Merge pull request #1183 from squat/fix_webhook_panic
webhook: fix panic on unexpected parser expression
2 parents 5eb637d + 2f40e9c commit 5da66df

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

kubernetes/api/v1alpha1/servicelevelobjective_types.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,20 @@ func (in *ServiceLevelObjective) validate() (admission.Warnings, error) {
280280

281281
switch parsedTotal.Type() {
282282
case parser.ValueTypeVector:
283-
v := parsedTotal.(*parser.VectorSelector)
283+
v, ok := parsedTotal.(*parser.VectorSelector)
284+
if !ok {
285+
return warnings, fmt.Errorf("latency total metric must be a vector selector, but got %T", parsedTotal)
286+
}
284287
if !strings.HasSuffix(v.Name, "_count") {
285288
warnings = append(warnings, "latency total metric should usually be a histogram count")
286289
}
287290
}
288291
switch parsedSuccess.Type() {
289292
case parser.ValueTypeVector:
290-
v := parsedSuccess.(*parser.VectorSelector)
293+
v, ok := parsedSuccess.(*parser.VectorSelector)
294+
if !ok {
295+
return warnings, fmt.Errorf("latency success metric must be a vector selector, but got %T", parsedSuccess)
296+
}
291297
var bucketFound bool
292298
for _, matcher := range v.LabelMatchers {
293299
if matcher.Name == labels.BucketLabel {

kubernetes/api/v1alpha1/servicelevelobjective_types_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,13 @@ func TestServiceLevelObjective_Validate(t *testing.T) {
586586
latency.Spec.ServiceLevelIndicator.Latency.Success.Metric = `foo{le="foo"}`
587587
_, err = latency.ValidateCreate()
588588
require.EqualError(t, err, `latency success metric must contain a le label matcher with a float value: strconv.ParseFloat: parsing "foo": invalid syntax`)
589+
590+
latency.Spec.ServiceLevelIndicator.Latency.Success.Metric = `foo{le="1.0"} or vector(0)`
591+
_, err = latency.ValidateCreate()
592+
require.EqualError(t, err, `latency success metric must be a vector selector, but got *parser.BinaryExpr`)
593+
latency.Spec.ServiceLevelIndicator.Latency.Total.Metric = `foo{le="1.0"} or vector(0)`
594+
_, err = latency.ValidateCreate()
595+
require.EqualError(t, err, `latency total metric must be a vector selector, but got *parser.BinaryExpr`)
589596
})
590597
})
591598

0 commit comments

Comments
 (0)