Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/common/config/selectors.go
4096 views
1
package config
2
3
import (
4
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5
"k8s.io/apimachinery/pkg/labels"
6
)
7
8
// LabelSelector defines a selector to check to see if a set of Kubernetes
9
// labels matches a selector.
10
type LabelSelector struct {
11
MatchLabels map[string]string `river:"match_labels,attr,optional"`
12
MatchExpressions []MatchExpression `river:"match_expression,block,optional"`
13
}
14
15
// BuildSelector builds a [labels.Selector] from a Flow LabelSelector.
16
func (ls *LabelSelector) BuildSelector() (labels.Selector, error) {
17
if ls == nil {
18
return metav1.LabelSelectorAsSelector(nil)
19
}
20
21
exprs := make([]metav1.LabelSelectorRequirement, 0, len(ls.MatchExpressions))
22
for _, expr := range ls.MatchExpressions {
23
exprs = append(exprs, expr.buildExpression())
24
}
25
26
return metav1.LabelSelectorAsSelector(&metav1.LabelSelector{
27
MatchLabels: ls.MatchLabels,
28
MatchExpressions: exprs,
29
})
30
}
31
32
// MatchExpression defines an expression matcher to check to see if some key
33
// from a Kubernetes resource matches a selector.
34
type MatchExpression struct {
35
Key string `river:"key,attr"`
36
Operator string `river:"operator,attr"`
37
Values []string `river:"values,attr,optional"`
38
}
39
40
func (me *MatchExpression) buildExpression() metav1.LabelSelectorRequirement {
41
if me == nil {
42
return metav1.LabelSelectorRequirement{}
43
}
44
45
return metav1.LabelSelectorRequirement{
46
Key: me.Key,
47
Operator: metav1.LabelSelectorOperator(me.Operator),
48
Values: me.Values,
49
}
50
}
51
52