diff --git a/pkg/virtualKubelet/apiReflection/controller/controller.go b/pkg/virtualKubelet/apiReflection/controller/controller.go index e91d98185b..08a3e0d607 100644 --- a/pkg/virtualKubelet/apiReflection/controller/controller.go +++ b/pkg/virtualKubelet/apiReflection/controller/controller.go @@ -5,6 +5,7 @@ import ( "sync" "time" + corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" "k8s.io/klog" @@ -21,7 +22,7 @@ const ( // APIController defines the interface exposed by a controller implementing API reflection. type APIController interface { - SetInformingFunc(apiReflection.ApiType, func(interface{})) + SetInformingFunc(apiReflection.ApiType, func(*corev1.Pod)) CacheManager() storage.CacheManagerReaderAdder StartController() StopController() error @@ -114,7 +115,7 @@ func (c *Controller) incomingReflectionControlLoop() { } // SetInformingFunc configures the handlers triggered for a certain API type by incoming reflection events. -func (c *Controller) SetInformingFunc(api apiReflection.ApiType, handler func(interface{})) { +func (c *Controller) SetInformingFunc(api apiReflection.ApiType, handler func(*corev1.Pod)) { c.incomingReflectorsController.SetInforming(api, handler) } diff --git a/pkg/virtualKubelet/apiReflection/controller/incomingReflectorsController.go b/pkg/virtualKubelet/apiReflection/controller/incomingReflectorsController.go index e106d696d5..da61365e01 100644 --- a/pkg/virtualKubelet/apiReflection/controller/incomingReflectorsController.go +++ b/pkg/virtualKubelet/apiReflection/controller/incomingReflectorsController.go @@ -3,6 +3,7 @@ package controller import ( "sync" + corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" apimgmt "github.com/liqotech/liqo/pkg/virtualKubelet/apiReflection" @@ -69,7 +70,8 @@ func (c *IncomingReflectorsController) Start() { } } -func (c *IncomingReflectorsController) SetInforming(api apimgmt.ApiType, handler func(interface{})) { +// SetInformingFunc configures the handlers triggered for a certain API type by incoming reflection events. +func (c *IncomingReflectorsController) SetInforming(api apimgmt.ApiType, handler func(*corev1.Pod)) { c.apiReflectors[api].(ri.APIReflector).SetInforming(handler) } diff --git a/pkg/virtualKubelet/apiReflection/controller/reflectorsController.go b/pkg/virtualKubelet/apiReflection/controller/reflectorsController.go index 1cef21c7f1..8ad8bdba53 100644 --- a/pkg/virtualKubelet/apiReflection/controller/reflectorsController.go +++ b/pkg/virtualKubelet/apiReflection/controller/reflectorsController.go @@ -3,6 +3,7 @@ package controller import ( "sync" + apicorev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" "k8s.io/klog" @@ -36,7 +37,7 @@ type IncomingAPIReflectorsController interface { SpecializedAPIReflectorsController buildIncomingReflector(api apimgmt.ApiType, opts map[options.OptionKey]options.Option) ri.IncomingAPIReflector - SetInforming(api apimgmt.ApiType, handler func(interface{})) + SetInforming(api apimgmt.ApiType, handler func(*apicorev1.Pod)) } type ReflectorsController struct { diff --git a/pkg/virtualKubelet/apiReflection/controller/test/mockController.go b/pkg/virtualKubelet/apiReflection/controller/test/mockController.go index 912c754639..8851585cbc 100644 --- a/pkg/virtualKubelet/apiReflection/controller/test/mockController.go +++ b/pkg/virtualKubelet/apiReflection/controller/test/mockController.go @@ -1,6 +1,8 @@ package test import ( + corev1 "k8s.io/api/core/v1" + apimgmt "github.com/liqotech/liqo/pkg/virtualKubelet/apiReflection" "github.com/liqotech/liqo/pkg/virtualKubelet/storage" ) @@ -9,7 +11,8 @@ type MockController struct { Manager storage.CacheManagerReaderAdder } -func (m MockController) SetInformingFunc(apiType apimgmt.ApiType, f func(interface{})) { +//SetInformingFunc implementation +func (m MockController) SetInformingFunc(apiType apimgmt.ApiType, f func(*corev1.Pod)) { panic("implement me") } diff --git a/pkg/virtualKubelet/apiReflection/reflectors/apiReflector.go b/pkg/virtualKubelet/apiReflection/reflectors/apiReflector.go index fd7c72def4..704bdd0fb5 100644 --- a/pkg/virtualKubelet/apiReflection/reflectors/apiReflector.go +++ b/pkg/virtualKubelet/apiReflection/reflectors/apiReflector.go @@ -4,6 +4,7 @@ import ( "context" "strings" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/kubernetes" @@ -21,7 +22,7 @@ type GenericAPIReflector struct { Api apimgmt.ApiType PreProcessingHandlers ri.PreProcessingHandlers OutputChan chan apimgmt.ApiEvent - informingFunc func(obj interface{}) + informingFunc func(pod *corev1.Pod) ForeignClient kubernetes.Interface HomeClient kubernetes.Interface @@ -143,13 +144,15 @@ func (r *GenericAPIReflector) Inform(obj apimgmt.ApiEvent) { r.OutputChan <- obj } -func (r *GenericAPIReflector) SetInforming(handler func(interface{})) { +// SetInforming configures the handlers triggered for a certain API type by incoming reflection events. +func (r *GenericAPIReflector) SetInforming(handler func(*corev1.Pod)) { r.informingFunc = handler } -func (r *GenericAPIReflector) PushToInforming(obj interface{}) { +// PushToInforming pushes a pod to the informing function +func (r *GenericAPIReflector) PushToInforming(pod *corev1.Pod) { if r.informingFunc != nil { - r.informingFunc(obj) + r.informingFunc(pod) } else { klog.V(3).Info("cannot push object to informing function, not existing yet") } diff --git a/pkg/virtualKubelet/apiReflection/reflectors/reflectorsInterfaces/interfaces.go b/pkg/virtualKubelet/apiReflection/reflectors/reflectorsInterfaces/interfaces.go index 95af78abde..e07cef68ed 100644 --- a/pkg/virtualKubelet/apiReflection/reflectors/reflectorsInterfaces/interfaces.go +++ b/pkg/virtualKubelet/apiReflection/reflectors/reflectorsInterfaces/interfaces.go @@ -3,6 +3,7 @@ package reflectorsInterfaces import ( "context" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/kubernetes" @@ -38,8 +39,8 @@ type APIReflector interface { SetupHandlers(api apimgmt.ApiType, reflectionType ReflectionType, namespace, nattedNs string) SetPreProcessingHandlers(PreProcessingHandlers) - SetInforming(handler func(interface{})) - PushToInforming(interface{}) + SetInforming(handler func(*corev1.Pod)) + PushToInforming(*corev1.Pod) } type SpecializedAPIReflector interface { diff --git a/pkg/virtualKubelet/provider/pods.go b/pkg/virtualKubelet/provider/pods.go index b33a8a8aa5..cf7fd9ee0b 100644 --- a/pkg/virtualKubelet/provider/pods.go +++ b/pkg/virtualKubelet/provider/pods.go @@ -444,7 +444,7 @@ func (p *LiqoProvider) GetStatsSummary(ctx context.Context) (*stats.Summary, err // NotifyPods is called to set a pod informing callback function. This should be called before any operations are ready // within the provider. -func (p *LiqoProvider) NotifyPods(ctx context.Context, notifier func(interface{})) { +func (p *LiqoProvider) NotifyPods(ctx context.Context, notifier func(*corev1.Pod)) { p.apiController.SetInformingFunc(apimgmgt.Pods, notifier) p.apiController.SetInformingFunc(apimgmgt.ReplicaSets, notifier) }