remove runtime inject dependency

Signed-off-by: 守辰 <shouchen.zz@alibaba-inc.com>
This commit is contained in:
守辰 2025-06-09 14:09:40 +08:00 committed by Zhen Zhang
parent 0fbc3ed8c4
commit 087483f1ec
8 changed files with 47 additions and 53 deletions

View File

@ -17,6 +17,8 @@ limitations under the License.
package validating package validating
import ( import (
"github.com/openkruise/rollouts/pkg/webhook/types"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission" "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
) )
@ -24,7 +26,10 @@ import (
var ( var (
// HandlerMap contains admission webhook handlers // HandlerMap contains admission webhook handlers
HandlerMap = map[string]admission.Handler{ HandlerMap = map[string]types.HandlerGetter{
"validate-rollouts-kruise-io-rollout": &RolloutCreateUpdateHandler{}, "validate-rollouts-kruise-io-rollout": func(mgr manager.Manager) admission.Handler {
decoder, _ := admission.NewDecoder(mgr.GetScheme())
return &RolloutCreateUpdateHandler{Decoder: decoder, Client: mgr.GetClient()}
},
} }
) )

View File

@ -19,6 +19,7 @@ package webhook
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/openkruise/rollouts/pkg/webhook/types"
"time" "time"
webhookutil "github.com/openkruise/rollouts/pkg/webhook/util" webhookutil "github.com/openkruise/rollouts/pkg/webhook/util"
@ -28,7 +29,6 @@ import (
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion" "sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
) )
@ -36,15 +36,15 @@ type GateFunc func() (enabled bool)
var ( var (
// HandlerMap contains all admission webhook handlers. // HandlerMap contains all admission webhook handlers.
HandlerMap = map[string]admission.Handler{} HandlerMap = map[string]types.HandlerGetter{}
handlerGates = map[string]GateFunc{} handlerGates = map[string]GateFunc{}
) )
func addHandlers(m map[string]admission.Handler) { func addHandlers(m map[string]types.HandlerGetter) {
addHandlersWithGate(m, nil) addHandlersWithGate(m, nil)
} }
func addHandlersWithGate(m map[string]admission.Handler, fn GateFunc) { func addHandlersWithGate(m map[string]types.HandlerGetter, fn GateFunc) {
for path, handler := range m { for path, handler := range m {
if len(path) == 0 { if len(path) == 0 {
klog.Warningf("Skip handler with empty path.") klog.Warningf("Skip handler with empty path.")
@ -88,7 +88,7 @@ func SetupWithManager(mgr manager.Manager) error {
// register admission handlers // register admission handlers
filterActiveHandlers() filterActiveHandlers()
for path, handler := range HandlerMap { for path, handler := range HandlerMap {
server.Register(path, &webhook.Admission{Handler: handler}) server.Register(path, &webhook.Admission{Handler: handler(mgr)})
klog.V(3).Infof("Registered webhook handler %s", path) klog.V(3).Infof("Registered webhook handler %s", path)
} }
err := initialize(context.TODO(), mgr.GetConfig()) err := initialize(context.TODO(), mgr.GetConfig())

View File

@ -0,0 +1,8 @@
package types
import (
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)
type HandlerGetter = func(manager.Manager) admission.Handler

View File

@ -23,12 +23,13 @@ import (
"net/url" "net/url"
"reflect" "reflect"
webhooktypes "github.com/openkruise/rollouts/pkg/webhook/types"
webhookutil "github.com/openkruise/rollouts/pkg/webhook/util" webhookutil "github.com/openkruise/rollouts/pkg/webhook/util"
admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
) )
const ( const (
@ -36,7 +37,7 @@ const (
ValidatingWebhookConfigurationName = "kruise-rollout-validating-webhook-configuration" ValidatingWebhookConfigurationName = "kruise-rollout-validating-webhook-configuration"
) )
func Ensure(kubeClient clientset.Interface, handlers map[string]admission.Handler, caBundle []byte) error { func Ensure(kubeClient clientset.Interface, handlers map[string]webhooktypes.HandlerGetter, caBundle []byte) error {
mutatingConfig, err := kubeClient.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(context.TODO(), MutatingWebhookConfigurationName, metav1.GetOptions{}) mutatingConfig, err := kubeClient.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(context.TODO(), MutatingWebhookConfigurationName, metav1.GetOptions{})
if err != nil { if err != nil {
return fmt.Errorf("not found MutatingWebhookConfiguration %s", MutatingWebhookConfigurationName) return fmt.Errorf("not found MutatingWebhookConfiguration %s", MutatingWebhookConfigurationName)

View File

@ -22,6 +22,7 @@ import (
"sync" "sync"
"time" "time"
webhooktypes "github.com/openkruise/rollouts/pkg/webhook/types"
webhookutil "github.com/openkruise/rollouts/pkg/webhook/util" webhookutil "github.com/openkruise/rollouts/pkg/webhook/util"
"github.com/openkruise/rollouts/pkg/webhook/util/configuration" "github.com/openkruise/rollouts/pkg/webhook/util/configuration"
"github.com/openkruise/rollouts/pkg/webhook/util/crd" "github.com/openkruise/rollouts/pkg/webhook/util/crd"
@ -44,7 +45,6 @@ import (
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
) )
const ( const (
@ -68,7 +68,7 @@ func Inited() chan struct{} {
type Controller struct { type Controller struct {
kubeClient clientset.Interface kubeClient clientset.Interface
handlers map[string]admission.Handler handlers map[string]webhooktypes.HandlerGetter
informerFactory informers.SharedInformerFactory informerFactory informers.SharedInformerFactory
//secretLister corelisters.SecretNamespaceLister //secretLister corelisters.SecretNamespaceLister
@ -82,7 +82,7 @@ type Controller struct {
queue workqueue.RateLimitingInterface queue workqueue.RateLimitingInterface
} }
func New(cfg *rest.Config, handlers map[string]admission.Handler) (*Controller, error) { func New(cfg *rest.Config, handlers map[string]webhooktypes.HandlerGetter) (*Controller, error) {
kubeClient, err := clientset.NewForConfig(cfg) kubeClient, err := clientset.NewForConfig(cfg)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -38,7 +38,6 @@ import (
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission" "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
) )
@ -188,23 +187,6 @@ func (h *UnifiedWorkloadHandler) fetchMatchedRollout(obj client.Object) (*appsv1
return nil, nil return nil, nil
} }
var _ inject.Client = &UnifiedWorkloadHandler{}
// InjectClient injects the client into the UnifiedWorkloadHandler
func (h *UnifiedWorkloadHandler) InjectClient(c client.Client) error {
h.Client = c
h.Finder = util.NewControllerFinder(c)
return nil
}
var _ admission.DecoderInjector = &UnifiedWorkloadHandler{}
// InjectDecoder injects the decoder into the UnifiedWorkloadHandler
func (h *UnifiedWorkloadHandler) InjectDecoder(d *admission.Decoder) error {
h.Decoder = d
return nil
}
func (h *UnifiedWorkloadHandler) checkWorkloadRules(ctx context.Context, req admission.Request) (bool, error) { func (h *UnifiedWorkloadHandler) checkWorkloadRules(ctx context.Context, req admission.Request) (bool, error) {
webhook := &v1.MutatingWebhookConfiguration{} webhook := &v1.MutatingWebhookConfiguration{}
if err := h.Client.Get(ctx, types.NamespacedName{Name: configuration.MutatingWebhookConfigurationName}, webhook); err != nil { if err := h.Client.Get(ctx, types.NamespacedName{Name: configuration.MutatingWebhookConfigurationName}, webhook); err != nil {

View File

@ -17,6 +17,9 @@ limitations under the License.
package mutating package mutating
import ( import (
"github.com/openkruise/rollouts/pkg/util"
"github.com/openkruise/rollouts/pkg/webhook/types"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission" "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
) )
@ -27,10 +30,23 @@ import (
var ( var (
// HandlerMap contains admission webhook handlers // HandlerMap contains admission webhook handlers
HandlerMap = map[string]admission.Handler{ HandlerMap = map[string]types.HandlerGetter{
"mutate-apps-kruise-io-v1alpha1-cloneset": &WorkloadHandler{}, "mutate-apps-kruise-io-v1alpha1-cloneset": func(mgr manager.Manager) admission.Handler {
"mutate-apps-v1-deployment": &WorkloadHandler{}, decoder, _ := admission.NewDecoder(mgr.GetScheme())
"mutate-apps-kruise-io-v1alpha1-daemonset": &WorkloadHandler{}, return &WorkloadHandler{Decoder: decoder, Client: mgr.GetClient(), Finder: util.NewControllerFinder(mgr.GetClient())}
"mutate-unified-workload": &UnifiedWorkloadHandler{}, },
"mutate-apps-v1-deployment": func(mgr manager.Manager) admission.Handler {
decoder, _ := admission.NewDecoder(mgr.GetScheme())
return &WorkloadHandler{Decoder: decoder, Client: mgr.GetClient(), Finder: util.NewControllerFinder(mgr.GetClient())}
},
"mutate-apps-kruise-io-v1alpha1-daemonset": func(mgr manager.Manager) admission.Handler {
decoder, _ := admission.NewDecoder(mgr.GetScheme())
return &WorkloadHandler{Decoder: decoder, Client: mgr.GetClient(), Finder: util.NewControllerFinder(mgr.GetClient())}
},
"mutate-unified-workload": func(mgr manager.Manager) admission.Handler {
decoder, _ := admission.NewDecoder(mgr.GetScheme())
return &UnifiedWorkloadHandler{Decoder: decoder, Client: mgr.GetClient(), Finder: util.NewControllerFinder(mgr.GetClient())}
},
} }
) )

View File

@ -43,7 +43,6 @@ import (
"k8s.io/klog/v2" "k8s.io/klog/v2"
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission" "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
) )
@ -397,23 +396,6 @@ func (h *WorkloadHandler) fetchMatchedRollout(obj client.Object) (*appsv1beta1.R
return nil, nil return nil, nil
} }
var _ inject.Client = &WorkloadHandler{}
// InjectClient injects the client into the WorkloadHandler
func (h *WorkloadHandler) InjectClient(c client.Client) error {
h.Client = c
h.Finder = util.NewControllerFinder(c)
return nil
}
var _ admission.DecoderInjector = &WorkloadHandler{}
// InjectDecoder injects the decoder into the WorkloadHandler
func (h *WorkloadHandler) InjectDecoder(d *admission.Decoder) error {
h.Decoder = d
return nil
}
func isEffectiveDeploymentRevisionChange(oldObj, newObj *apps.Deployment) bool { func isEffectiveDeploymentRevisionChange(oldObj, newObj *apps.Deployment) bool {
if newObj.Annotations[appsv1beta1.RolloutIDLabel] != "" && if newObj.Annotations[appsv1beta1.RolloutIDLabel] != "" &&
oldObj.Annotations[appsv1beta1.RolloutIDLabel] == newObj.Annotations[appsv1beta1.RolloutIDLabel] { oldObj.Annotations[appsv1beta1.RolloutIDLabel] == newObj.Annotations[appsv1beta1.RolloutIDLabel] {