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
import (
"github.com/openkruise/rollouts/pkg/webhook/types"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)
@ -24,7 +26,10 @@ import (
var (
// HandlerMap contains admission webhook handlers
HandlerMap = map[string]admission.Handler{
"validate-rollouts-kruise-io-rollout": &RolloutCreateUpdateHandler{},
HandlerMap = map[string]types.HandlerGetter{
"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 (
"context"
"fmt"
"github.com/openkruise/rollouts/pkg/webhook/types"
"time"
webhookutil "github.com/openkruise/rollouts/pkg/webhook/util"
@ -28,7 +29,6 @@ import (
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
)
@ -36,15 +36,15 @@ type GateFunc func() (enabled bool)
var (
// HandlerMap contains all admission webhook handlers.
HandlerMap = map[string]admission.Handler{}
HandlerMap = map[string]types.HandlerGetter{}
handlerGates = map[string]GateFunc{}
)
func addHandlers(m map[string]admission.Handler) {
func addHandlers(m map[string]types.HandlerGetter) {
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 {
if len(path) == 0 {
klog.Warningf("Skip handler with empty path.")
@ -88,7 +88,7 @@ func SetupWithManager(mgr manager.Manager) error {
// register admission handlers
filterActiveHandlers()
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)
}
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"
"reflect"
webhooktypes "github.com/openkruise/rollouts/pkg/webhook/types"
webhookutil "github.com/openkruise/rollouts/pkg/webhook/util"
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)
const (
@ -36,7 +37,7 @@ const (
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{})
if err != nil {
return fmt.Errorf("not found MutatingWebhookConfiguration %s", MutatingWebhookConfigurationName)

View File

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

View File

@ -38,7 +38,6 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)
@ -188,23 +187,6 @@ func (h *UnifiedWorkloadHandler) fetchMatchedRollout(obj client.Object) (*appsv1
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) {
webhook := &v1.MutatingWebhookConfiguration{}
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
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"
)
@ -27,10 +30,23 @@ import (
var (
// HandlerMap contains admission webhook handlers
HandlerMap = map[string]admission.Handler{
"mutate-apps-kruise-io-v1alpha1-cloneset": &WorkloadHandler{},
"mutate-apps-v1-deployment": &WorkloadHandler{},
"mutate-apps-kruise-io-v1alpha1-daemonset": &WorkloadHandler{},
"mutate-unified-workload": &UnifiedWorkloadHandler{},
HandlerMap = map[string]types.HandlerGetter{
"mutate-apps-kruise-io-v1alpha1-cloneset": 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-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/utils/pointer"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)
@ -397,23 +396,6 @@ func (h *WorkloadHandler) fetchMatchedRollout(obj client.Object) (*appsv1beta1.R
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 {
if newObj.Annotations[appsv1beta1.RolloutIDLabel] != "" &&
oldObj.Annotations[appsv1beta1.RolloutIDLabel] == newObj.Annotations[appsv1beta1.RolloutIDLabel] {