Merge pull request #11293 from bisakhmondal/service_filter

expression validation of service-resolver subset filter
This commit is contained in:
Jared Kirschner 2021-10-20 08:57:37 -04:00 committed by GitHub
commit 716b05f934
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 1 deletions

3
.changelog/11293.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:improvement
connect: service-resolver subset filters are validated for valid go-bexpr syntax on write
```

View File

@ -11,6 +11,7 @@ import (
"strings"
"time"
"github.com/hashicorp/go-bexpr"
"github.com/mitchellh/copystructure"
"github.com/mitchellh/hashstructure"
@ -901,13 +902,18 @@ func (e *ServiceResolverConfigEntry) Validate() error {
}
if len(e.Subsets) > 0 {
for name := range e.Subsets {
for name, subset := range e.Subsets {
if name == "" {
return fmt.Errorf("Subset defined with empty name")
}
if err := validateServiceSubset(name); err != nil {
return fmt.Errorf("Subset %q is invalid: %v", name, err)
}
if subset.Filter != "" {
if _, err := bexpr.CreateEvaluator(subset.Filter, nil); err != nil {
return fmt.Errorf("Filter for subset %q is not a valid expression: %v", name, err)
}
}
}
}

View File

@ -552,6 +552,17 @@ func TestServiceResolverConfigEntry(t *testing.T) {
},
validateErr: "Subset defined with empty name",
},
{
name: "invalid boolean expression subset filter",
entry: &ServiceResolverConfigEntry{
Kind: ServiceResolver,
Name: "test",
Subsets: map[string]ServiceResolverSubset{
"v1": {Filter: "random string"},
},
},
validateErr: `Filter for subset "v1" is not a valid expression`,
},
{
name: "default subset does not exist",
entry: &ServiceResolverConfigEntry{