github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/events.go (about) 1 // Copyright 2019 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 "context" 8 9 core "k8s.io/api/core/v1" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 "k8s.io/apimachinery/pkg/fields" 12 "k8s.io/client-go/informers" 13 14 "github.com/juju/juju/caas/kubernetes/provider/resources" 15 "github.com/juju/juju/core/watcher" 16 ) 17 18 // Constants below are copied from "k8s.io/kubernetes/pkg/kubelet/events" 19 // to avoid introducing the huge dependency. 20 // Remove them once k8s.io/kubernetes added as a dependency. 21 const ( 22 // Container event reason list 23 CreatedContainer = "Created" 24 StartedContainer = "Started" 25 FailedToCreateContainer = "Failed" 26 FailedToStartContainer = "Failed" 27 KillingContainer = "Killing" 28 PreemptContainer = "Preempting" 29 BackOffStartContainer = "BackOff" 30 ExceededGracePeriod = "ExceededGracePeriod" 31 32 // Pod event reason list 33 FailedToKillPod = "FailedKillPod" 34 FailedToCreatePodContainer = "FailedCreatePodContainer" 35 FailedToMakePodDataDirectories = "Failed" 36 NetworkNotReady = "NetworkNotReady" 37 38 // Image event reason list 39 PullingImage = "Pulling" 40 PulledImage = "Pulled" 41 FailedToPullImage = "Failed" 42 FailedToInspectImage = "InspectFailed" 43 ErrImageNeverPullPolicy = "ErrImageNeverPull" 44 BackOffPullImage = "BackOff" 45 ) 46 47 func (k *kubernetesClient) getEvents(objName string, objKind string) ([]core.Event, error) { 48 if k.namespace == "" { 49 return nil, errNoNamespace 50 } 51 return resources.ListEventsForObject(context.TODO(), k.client(), k.namespace, objName, objKind) 52 } 53 54 func (k *kubernetesClient) watchEvents(objName string, objKind string) (watcher.NotifyWatcher, error) { 55 if k.namespace == "" { 56 return nil, errNoNamespace 57 } 58 factory := informers.NewSharedInformerFactoryWithOptions(k.client(), 0, 59 informers.WithNamespace(k.namespace), 60 informers.WithTweakListOptions(func(o *metav1.ListOptions) { 61 o.FieldSelector = fields.AndSelectors( 62 fields.OneTermEqualSelector("involvedObject.name", objName), 63 fields.OneTermEqualSelector("involvedObject.kind", objKind), 64 ).String() 65 }), 66 ) 67 return k.newWatcher(factory.Core().V1().Events().Informer(), objName, k.clock) 68 }