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  }