kube_events_manager

package
v1.0.0-beta.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2020 License: Apache-2.0 Imports: 27 Imported by: 10

Documentation

Index

Constants

This section is empty.

Variables

View Source
var NewKubeEventsManager = func() *kubeEventsManager {
	em := &kubeEventsManager{
		Monitors:    make(map[string]Monitor, 0),
		KubeEventCh: make(chan KubeEvent, 1),
	}
	return em
}

NewKubeEventsManager returns an implementation of KubeEventsManager.

View Source
var NewMonitor = func() Monitor {
	return &monitor{
		ResourceInformers: make([]ResourceInformer, 0),
		VaryingInformers:  make(map[string][]ResourceInformer, 0),
		cancelForNs:       make(map[string]context.CancelFunc, 0),
		staticNamespaces:  make(map[string]bool, 0),
	}
}
View Source
var NewNamespaceInformer = func(monitor *MonitorConfig) NamespaceInformer {
	informer := &namespaceInformer{
		Monitor:        monitor,
		ExistedObjects: make(map[string]bool, 0),
	}
	return informer
}
View Source
var NewResourceInformer = func(monitor *MonitorConfig) ResourceInformer {
	informer := &resourceInformer{
		Monitor:       monitor,
		CachedObjects: make(map[string]*ObjectAndFilterResult, 0),
	}
	return informer
}
View Source
var SharedInformerEventHandler = func(informer *resourceInformer) cache.ResourceEventHandlerFuncs {
	return cache.ResourceEventHandlerFuncs{
		AddFunc: func(obj interface{}) {
			informer.HandleWatchEvent(obj.(*unstructured.Unstructured), WatchEventAdded)
		},
		UpdateFunc: func(_ interface{}, obj interface{}) {
			informer.HandleWatchEvent(obj.(*unstructured.Unstructured), WatchEventModified)
		},
		DeleteFunc: func(obj interface{}) {
			informer.HandleWatchEvent(obj.(*unstructured.Unstructured), WatchEventDeleted)
		},
	}
}

TODO make monitor config accessible here to get LogLabels

View Source
var SharedNamespaceInformerEventHandler = func(informer *namespaceInformer, addFn func(string), delFn func(string)) cache.ResourceEventHandlerFuncs {
	return cache.ResourceEventHandlerFuncs{
		AddFunc: func(obj interface{}) {
			nsObj := obj.(*v1.Namespace)
			log.Debugf("NamespaceInformer: Added ns/%s", nsObj.Name)
			addFn(nsObj.Name)
		},
		DeleteFunc: func(obj interface{}) {
			nsObj := obj.(*v1.Namespace)
			log.Debugf("NamespaceInformer: Deleted ns/%s", nsObj.Name)
			delFn(nsObj.Name)
		},
	}
}

Functions

func ApplyJqFilter

func ApplyJqFilter(jqFilter string, obj *unstructured.Unstructured) (*ObjectAndFilterResult, error)

ApplyJqFilter filter object json representation with jq expression, calculate checksum over result and return ObjectAndFilterResult. If jqFilter is empty, no filter is required and checksum is calculated over full json representation of the object.

func FormatFieldSelector

func FormatFieldSelector(selector *FieldSelector) (string, error)

func FormatLabelSelector

func FormatLabelSelector(selector *metav1.LabelSelector) (string, error)

func ResourceId

func ResourceId(obj *unstructured.Unstructured) string

Types

type KubeEventsManager

type KubeEventsManager interface {
	WithContext(ctx context.Context)
	WithKubeClient(client kube.KubernetesClient)
	AddMonitor(monitorConfig *MonitorConfig) (*KubeEvent, error)
	HasMonitor(monitorId string) bool
	GetMonitor(monitorId string) Monitor
	StartMonitor(monitorId string)
	Start()

	StopMonitor(configId string) error
	Ch() chan KubeEvent
}

type Monitor

type Monitor interface {
	WithKubeClient(client kube.KubernetesClient)
	WithConfig(config *MonitorConfig)
	WithKubeEventCb(eventCb func(KubeEvent))
	CreateInformers() error
	Start(context.Context)
	Stop()
	GetExistedObjects() []ObjectAndFilterResult
	GetConfig() *MonitorConfig
}

type MonitorConfig

type MonitorConfig struct {
	Metadata struct {
		MonitorId string
		DebugName string
		LogLabels map[string]string
	}
	EventTypes        []WatchEventType
	ApiVersion        string
	Kind              string
	NameSelector      *NameSelector
	NamespaceSelector *NamespaceSelector
	LabelSelector     *metav1.LabelSelector
	FieldSelector     *FieldSelector
	JqFilter          string
	LogEntry          *log.Entry
	Mode              KubeEventMode
}

KubeEventMonitorConfig is a config that suits the latest version of OnKubernetesEventConfig.

func (*MonitorConfig) AddFieldSelectorRequirement

func (c *MonitorConfig) AddFieldSelectorRequirement(field string, op string, value string)

func (*MonitorConfig) IsAnyNamespace

func (c *MonitorConfig) IsAnyNamespace() bool

func (*MonitorConfig) Names

func (c *MonitorConfig) Names() []string

Names returns names of monitored objects if nameSelector.matchNames is defined in config.

func (*MonitorConfig) Namespaces

func (c *MonitorConfig) Namespaces() (nsNames []string)

Namespaces returns names of namespaces if namescpace.nameSelector is defined in config.

If no namespace specified or no namespace.nameSelector or length of namespace.nameSeletor.matchNames is 0 then empty string is returned to monitor all namespaces.

If namespace.labelSelector is specified, then return empty array.

func (*MonitorConfig) WithEventTypes

func (c *MonitorConfig) WithEventTypes(types []WatchEventType) *MonitorConfig

func (*MonitorConfig) WithFieldSelector

func (c *MonitorConfig) WithFieldSelector(fieldSel *FieldSelector)

WithFieldSelector copies input FieldSelector into monitor.FieldSelector

func (*MonitorConfig) WithLabelSelector

func (c *MonitorConfig) WithLabelSelector(labelSel *metav1.LabelSelector)

WithLabelSelector copies input LabelSelector into monitor.LabelSelector

func (*MonitorConfig) WithMode

func (c *MonitorConfig) WithMode(mode KubeEventMode)

func (*MonitorConfig) WithNameSelector

func (c *MonitorConfig) WithNameSelector(nSel *NameSelector)

WithNamespaceSelector copies input NamespaceSelector into monitor.NamespaceSelector

func (*MonitorConfig) WithNamespaceSelector

func (c *MonitorConfig) WithNamespaceSelector(nsSel *NamespaceSelector)

WithNamespaceSelector copies input NamespaceSelector into monitor.NamespaceSelector

type NamespaceInformer

type NamespaceInformer interface {
	WithKubeClient(client kube.KubernetesClient)
	CreateSharedInformer(addFn func(string), delFn func(string)) error
	GetExistedObjects() map[string]bool
	Run(stopCh <-chan struct{})
	Stop()
}

type ResourceInformer

type ResourceInformer interface {
	WithKubeClient(client kube.KubernetesClient)
	WithNamespace(string)
	WithName(string)
	WithKubeEventCb(eventCb func(KubeEvent))
	CreateSharedInformer() error
	GetExistedObjects() []ObjectAndFilterResult
	Run(stopCh <-chan struct{})
	Stop()
}

ResourceInformer is a kube informer for particular onKubernetesEvent

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL