mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2024-12-14 11:57:51 +00:00
5b0788ced4
The exclude-list allows to filter specific resource accounting from NRT's objects per node basis. The CRs created by the topology-updater are used by the scheduler-plugin as a source of truth for making scheduling decisions. As such, this feature allows to hide specific information from the scheduler, which in turn will affect the scheduling decision. A common use case is when user would like to perform scheduling decisions which are based on a specific resource. In that case, we can exclude all the other resources which we don't want the scheduler to exemine. The exclude-list is provided to the topology-updater via a ConfigMap. Resource type's names specified in the list should match the names as shown here: https://pkg.go.dev/k8s.io/api/core/v1#ResourceName This is a resurrection of an old work started here: https://github.com/kubernetes-sigs/node-feature-discovery/pull/545 Signed-off-by: Talor Itzhak <titzhak@redhat.com>
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package resourcemonitor
|
|
|
|
import (
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
)
|
|
|
|
const (
|
|
cpu = string(corev1.ResourceCPU)
|
|
memory = string(corev1.ResourceMemory)
|
|
hugepages2Mi = "hugepages-2Mi"
|
|
nicResourceName = "vendor/nic1"
|
|
)
|
|
|
|
func TestNewExcludeResourceList(t *testing.T) {
|
|
tests := []struct {
|
|
desc string
|
|
excludeListConfig map[string][]string
|
|
nodeName string
|
|
expectedExcludedResources []string
|
|
}{
|
|
{
|
|
|
|
desc: "exclude list with multiple nodes",
|
|
excludeListConfig: map[string][]string{
|
|
"node1": {
|
|
cpu,
|
|
nicResourceName,
|
|
},
|
|
"node2": {
|
|
memory,
|
|
hugepages2Mi,
|
|
},
|
|
},
|
|
nodeName: "node1",
|
|
expectedExcludedResources: []string{cpu, nicResourceName},
|
|
},
|
|
{
|
|
desc: "exclude list with wild card",
|
|
excludeListConfig: map[string][]string{
|
|
"*": {
|
|
memory, nicResourceName,
|
|
},
|
|
"node1": {
|
|
cpu,
|
|
hugepages2Mi,
|
|
},
|
|
},
|
|
nodeName: "node2",
|
|
expectedExcludedResources: []string{memory, nicResourceName},
|
|
},
|
|
{
|
|
desc: "empty exclude list",
|
|
excludeListConfig: map[string][]string{},
|
|
nodeName: "node1",
|
|
expectedExcludedResources: []string{},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Logf("test %s", tt.desc)
|
|
excludeList := NewExcludeResourceList(tt.excludeListConfig, tt.nodeName)
|
|
for _, res := range tt.expectedExcludedResources {
|
|
if !excludeList.IsExcluded(corev1.ResourceName(res)) {
|
|
t.Errorf("resource: %q expected to be excluded from node: %q", res, tt.nodeName)
|
|
}
|
|
}
|
|
}
|
|
}
|