Skip to content

Commit 8600094

Browse files
committed
feat: switched to strict unmarshal in rule check
1 parent cf21fad commit 8600094

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

cmd/thanos/check.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/go-kit/kit/log"
77
"github.com/go-kit/kit/log/level"
8-
thanosrule "github.com/improbable-eng/thanos/pkg/rule"
98
"github.com/oklog/run"
109
"github.com/opentracing/opentracing-go"
1110
"github.com/prometheus/client_golang/prometheus"
@@ -56,6 +55,16 @@ func checkRulesFiles(logger log.Logger, files *[]string) error {
5655
return nil
5756
}
5857

58+
type ThanosRuleGroup struct{
59+
PartialResponseStrategy string `yaml:"partial_response_strategy"`
60+
rulefmt.RuleGroup `yaml:",inline"`
61+
}
62+
63+
type ThanosRuleGroups struct {
64+
Groups []ThanosRuleGroup `yaml:"groups"`
65+
}
66+
67+
5968
func checkRules(logger log.Logger, filename string) (int, tsdb.MultiError) {
6069
level.Info(logger).Log("msg", "checking", "filename", filename)
6170
checkErrors := tsdb.MultiError{}
@@ -66,8 +75,8 @@ func checkRules(logger log.Logger, filename string) (int, tsdb.MultiError) {
6675
return 0, checkErrors
6776
}
6877

69-
var rgs thanosrule.RuleGroups
70-
if err := yaml.Unmarshal(b, &rgs); err != nil {
78+
var rgs ThanosRuleGroups
79+
if err := yaml.UnmarshalStrict(b, &rgs); err != nil {
7180
checkErrors.Add(err)
7281
return 0, checkErrors
7382
}
@@ -89,7 +98,7 @@ func checkRules(logger log.Logger, filename string) (int, tsdb.MultiError) {
8998
return numRules, checkErrors
9099
}
91100

92-
func thanosRuleGroupsToPromRuleGroups(ruleGroups thanosrule.RuleGroups) rulefmt.RuleGroups {
101+
func thanosRuleGroupsToPromRuleGroups(ruleGroups ThanosRuleGroups) rulefmt.RuleGroups {
93102
promRuleGroups := rulefmt.RuleGroups{Groups: []rulefmt.RuleGroup{}}
94103
for _, g := range ruleGroups.Groups {
95104
group := rulefmt.RuleGroup{

cmd/thanos/check_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func Test_checkRules(t *testing.T) {
1717
[]string{"./testdata/rules-files/non-existing-file.yaml"},
1818
[]string{"./testdata/rules-files/invalid-yaml-format.yaml"},
1919
[]string{"./testdata/rules-files/invalid-rules-data.yaml"},
20+
[]string{"./testdata/rules-files/invalid-unknown-field.yaml"},
2021
}
2122

2223
logger := log.NewNopLogger()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
groups:
2+
- name: test-alert-group
3+
partial_response_strategy: "warn"
4+
interrrrrrrrval: 2m
5+
rules:
6+
- alert: TestAlert
7+
expr: 1
8+
labels:
9+
key: value
10+
annotations:
11+
key: value
12+
13+
- name: test-rule-group
14+
partial_response_strategy: "warn"
15+
interval: 2m
16+
rules:
17+
- record: test_metric
18+
expr: 1

cmd/thanos/testdata/rules-files/valid.yaml

-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ groups:
44
interval: 2m
55
rules:
66
- alert: TestAlert
7-
partial_response_strategy: "warn"
87
expr: 1
98
labels:
109
key: value
@@ -17,4 +16,3 @@ groups:
1716
rules:
1817
- record: test_metric
1918
expr: 1
20-
partial_response_strategy: "warn"

0 commit comments

Comments
 (0)