diff --git a/pkg/watcher/watcher.go b/pkg/watcher/watcher.go index 8c972dd..ba174c2 100644 --- a/pkg/watcher/watcher.go +++ b/pkg/watcher/watcher.go @@ -2,13 +2,18 @@ package watcher import ( kapi "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/fields" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/tools/cache" k8sClient "github.com/Mellanox/ib-kubernetes/pkg/k8s-client" resEventHandler "github.com/Mellanox/ib-kubernetes/pkg/watcher/handler" ) +var ( + kubevirtSelectorString = SelectorMustValidateFromSet(labels.Set{"kubevirt.io": "virt-launcher"}).String() +) + type StopFunc func() type Watcher interface { @@ -25,7 +30,11 @@ type watcher struct { func NewWatcher(eventHandler resEventHandler.ResourceEventHandler, client k8sClient.Client) Watcher { resource := eventHandler.GetResourceObject().GetObjectKind().GroupVersionKind().Kind - watchList := cache.NewListWatchFromClient(client.GetRestClient(), resource, kapi.NamespaceAll, fields.Everything()) + filterByKubevirtLabel := func(options *metav1.ListOptions) { + + options.LabelSelector = kubevirtSelectorString + } + watchList := cache.NewFilteredListWatchFromClient(client.GetRestClient(), resource, kapi.NamespaceAll, filterByKubevirtLabel) return &watcher{eventHandler: eventHandler, watchList: watchList} } @@ -48,3 +57,12 @@ func (w *watcher) RunBackground() StopFunc { func (w *watcher) GetHandler() resEventHandler.ResourceEventHandler { return w.eventHandler } + +// SelectorMustValidateFromSet acts like regex.MustCompile for labels.Selector objects. It will attempt to validate the selector from the label set and panic if it fails. +func SelectorMustValidateFromSet(set labels.Set) labels.Selector { + selector, err := labels.ValidatedSelectorFromSet(set) + if err != nil { + panic(err) + } + return selector +}