diff --git a/pkg/watcher/watcher.go b/pkg/watcher/watcher.go index e34f2a1e..a781fc20 100644 --- a/pkg/watcher/watcher.go +++ b/pkg/watcher/watcher.go @@ -4,13 +4,23 @@ import ( kapi "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" "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() +// capiClusterNameSelector matches any pod owned by a Cluster API machine — +// covers both KubeVirt virt-launcher pods (via CAPK) and Virtink VM pods (via CAPCH). +// CAPI propagates this label onto every machine-owned pod regardless of provider. +var capiClusterNameSelector = func() string { + req, err := labels.NewRequirement("cluster.x-k8s.io/cluster-name", selection.Exists, nil) + if err != nil { + panic(err) + } + return labels.NewSelector().Add(*req).String() +}() type StopFunc func() @@ -28,11 +38,11 @@ type watcher struct { func NewWatcher(eventHandler resEventHandler.ResourceEventHandler, client k8sClient.Client) Watcher { resource := eventHandler.GetResourceObject().GetObjectKind().GroupVersionKind().Kind - filterByKubevirtLabel := func(options *metav1.ListOptions) { - options.LabelSelector = kubevirtSelectorString + filterByCAPIClusterName := func(options *metav1.ListOptions) { + options.LabelSelector = capiClusterNameSelector } watchList := cache.NewFilteredListWatchFromClient( - client.GetRestClient(), resource, kapi.NamespaceAll, filterByKubevirtLabel) + client.GetRestClient(), resource, kapi.NamespaceAll, filterByCAPIClusterName) return &watcher{eventHandler: eventHandler, watchList: watchList} } @@ -55,13 +65,3 @@ 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 -}