mirror of https://github.com/k3s-io/k3s
Merge pull request #5919 from sdminonne/labels_req
Adding method to labels.Selector to add Requirementpull/6/head
commit
6dd8f73266
|
@ -36,6 +36,9 @@ type Selector interface {
|
||||||
|
|
||||||
// String returns a human readable string that represents this selector.
|
// String returns a human readable string that represents this selector.
|
||||||
String() string
|
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.
|
// Everything returns a selector that matches all labels.
|
||||||
|
@ -189,6 +192,18 @@ func (r *Requirement) String() string {
|
||||||
return buffer.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
|
// Matches for a LabelSelector returns true if all
|
||||||
// its Requirements match the input Labels. If any
|
// its Requirements match the input Labels. If any
|
||||||
// Requirement does not match, false is returned.
|
// 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
|
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