mirror of https://github.com/k3s-io/k3s
Adding a func to labels.Selector to add requirement
parent
35b2c5ce9d
commit
6ad5c07350
|
@ -36,6 +36,9 @@ type Selector interface {
|
|||
|
||||
// String returns a human readable string that represents this selector.
|
||||
String() string
|
||||
|
||||
// Add add a specific requirement for the selector
|
||||
Add(key string, operator Operator, values []string) Selector
|
||||
}
|
||||
|
||||
// Everything returns a selector that matches all labels.
|
||||
|
@ -189,6 +192,18 @@ func (r *Requirement) String() string {
|
|||
return buffer.String()
|
||||
}
|
||||
|
||||
// Add adds a requirement to the selector. It copies the current selector returning a new one
|
||||
func (lsel LabelSelector) Add(key string, operator Operator, values []string) Selector {
|
||||
var reqs []Requirement
|
||||
for _, item := range lsel {
|
||||
reqs = append(reqs, item)
|
||||
}
|
||||
if r, err := NewRequirement(key, operator, util.NewStringSet(values...)); err == nil {
|
||||
reqs = append(reqs, *r)
|
||||
}
|
||||
return LabelSelector(reqs)
|
||||
}
|
||||
|
||||
// Matches for a LabelSelector returns true if all
|
||||
// its Requirements match the input Labels. If any
|
||||
// Requirement does not match, false is returned.
|
||||
|
|
|
@ -465,3 +465,37 @@ func getRequirement(key string, op Operator, vals util.StringSet, t *testing.T)
|
|||
}
|
||||
return *req
|
||||
}
|
||||
|
||||
func TestAdd(t *testing.T) {
|
||||
testCases := []struct {
|
||||
sel Selector
|
||||
key string
|
||||
operator Operator
|
||||
values []string
|
||||
refSelector Selector
|
||||
}{
|
||||
{
|
||||
LabelSelector{},
|
||||
"key",
|
||||
InOperator,
|
||||
[]string{"value"},
|
||||
LabelSelector{Requirement{"key", InOperator, util.NewStringSet("value")}},
|
||||
},
|
||||
{
|
||||
LabelSelector{Requirement{"key", InOperator, util.NewStringSet("value")}},
|
||||
"key2",
|
||||
EqualsOperator,
|
||||
[]string{"value2"},
|
||||
LabelSelector{
|
||||
Requirement{"key", InOperator, util.NewStringSet("value")},
|
||||
Requirement{"key2", EqualsOperator, util.NewStringSet("value2")},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, ts := range testCases {
|
||||
ts.sel = ts.sel.Add(ts.key, ts.operator, ts.values)
|
||||
if !reflect.DeepEqual(ts.sel, ts.refSelector) {
|
||||
t.Errorf("Expected %t found %t", ts.refSelector, ts.sel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue