mirror of
https://github.com/status-im/consul.git
synced 2025-02-12 13:46:46 +00:00
Merge pull request #11293 from bisakhmondal/service_filter
expression validation of service-resolver subset filter
This commit is contained in:
commit
14af8cb7a9
3
.changelog/11293.txt
Normal file
3
.changelog/11293.txt
Normal file
@ -0,0 +1,3 @@
|
||||
```release-note:improvement
|
||||
connect: service-resolver subset filters are validated for valid go-bexpr syntax on write
|
||||
```
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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{
|
||||
|
Loading…
x
Reference in New Issue
Block a user