fix(go.d/sd): correctly adding tags in classify (#19312)
Ilya Mashchenko committed
Jan 2, 2025 at 15:17 UTC
8e2f1a4b386f25a430f2700aa4714493b541cf60
3 files changed
+16
-6
src/go/plugin/go.d/agent/discovery/sd/model/tags.go
+10
@@ -35,6 +35,16 @@ func (t Tags) Merge(tags Tags) {
35
}
36
}
37
38
+func (t Tags) Add(tags Tags) {
39
+ for tag := range tags {
40
+ v := strings.TrimPrefix(tag, "-")
41
+ if _, ok := t[v]; ok {
42
+ delete(t, v)
43
+ }
44
+ t[tag] = struct{}{}
45
+ }
46
+}
47
+
48
func (t Tags) Clone() Tags {
49
ts := NewTags()
50
ts.Merge(t)
src/go/plugin/go.d/agent/discovery/sd/pipeline/classify.go
+2
-2
@@ -69,8 +69,8 @@ func (c *targetClassificator) classify(tgt model.Target) model.Tags {
69
tags = model.NewTags()
70
}
71
72
- tags.Merge(rule.tags)
73
- tags.Merge(match.tags)
72
+ tags.Add(rule.tags)
73
+ tags.Add(match.tags)
74
tgtTags.Merge(tags)
75
}
76
}
src/go/plugin/go.d/agent/discovery/sd/pipeline/classify_test.go
+4
-4
@@ -34,7 +34,7 @@ func TestTargetClassificator_classify(t *testing.T) {
34
- tags: "bar4"
35
expr: '{{ glob .Name "mock*4*" }}'
36
- selector: "rule3"
37
- tags: "foo3"
37
+ tags: "-skip foo3"
38
match:
39
- tags: "bar5"
40
expr: '{{ glob .Name "mock*5*" }}'
@@ -55,15 +55,15 @@ func TestTargetClassificator_classify(t *testing.T) {
55
},
56
"one rule two match": {
57
target: newMockTarget("mock56", "rule3"),
58
- wantTags: mustParseTags("foo3 bar5 bar6"),
58
+ wantTags: mustParseTags("-skip foo3 bar5 bar6"),
59
},
60
"all rules all matches": {
61
target: newMockTarget("mock123456", "rule1 rule2 rule3"),
62
- wantTags: mustParseTags("foo1 foo2 foo3 bar1 bar2 bar3 bar4 bar5 bar6"),
62
+ wantTags: mustParseTags("-skip foo1 foo2 foo3 bar1 bar2 bar3 bar4 bar5 bar6"),
63
},
64
"applying labels after every rule": {
65
target: newMockTarget("mock123456", "rule0 rule1 rule2 rule3"),
66
- wantTags: mustParseTags("skip foo3 bar5 bar6"),
66
+ wantTags: mustParseTags("-skip foo3 bar5 bar6"),
67
},
68
}
69