1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright Authors of Tetragon
9
slimv1 "github.com/cilium/cilium/pkg/k8s/slim/k8s/apis/meta/v1"
12
type Labels map[string]string
24
K8sPodNamespace = "k8s:io.kubernetes.pod.namespace"
27
type selectorOp struct {
33
func (s selectorOp) hasValue(val string) bool {
34
for i := range s.values {
35
if val == s.values[i] {
42
func (s *selectorOp) match(labels Labels) bool {
43
val, exists := labels[s.key]
50
return exists && s.hasValue(val)
52
return !exists || !s.hasValue(val)
58
type Selector []selectorOp
60
func (s Selector) Match(labels Labels) bool {
62
if !s[i].match(labels) {
70
func SelectorFromLabelSelector(ls *slimv1.LabelSelector) (Selector, error) {
72
return []selectorOp{}, nil
74
ret := make([]selectorOp, 0, len(ls.MatchLabels)+len(ls.MatchExpressions))
75
for key, val := range ls.MatchLabels {
76
ret = append(ret, selectorOp{
79
values: []string{val},
82
for _, exp := range ls.MatchExpressions {
85
case slimv1.LabelSelectorOpIn:
87
case slimv1.LabelSelectorOpNotIn:
89
case slimv1.LabelSelectorOpExists:
91
case slimv1.LabelSelectorOpDoesNotExist:
94
return nil, fmt.Errorf("unknown operator: '%s'", exp.Operator)
97
ret = append(ret, selectorOp{
107
// Cmp checks if the labels are different. Returns true if they are.
108
func (l Labels) Cmp(a Labels) bool {
110
if len(l) != len(a) {
114
for lk, lv := range l {