feat: kubesphere 4.0 (#6115)
* feat: kubesphere 4.0 Signed-off-by: ci-bot <ci-bot@kubesphere.io> * feat: kubesphere 4.0 Signed-off-by: ci-bot <ci-bot@kubesphere.io> --------- Signed-off-by: ci-bot <ci-bot@kubesphere.io> Co-authored-by: ks-ci-bot <ks-ci-bot@example.com> Co-authored-by: joyceliu <joyceliu@yunify.com>
This commit is contained in:
committed by
GitHub
parent
b5015ec7b9
commit
447a51f08b
84
vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go
generated
vendored
84
vendor/sigs.k8s.io/controller-runtime/pkg/builder/webhook.go
generated
vendored
@@ -22,9 +22,12 @@ import (
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/go-logr/logr"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
|
||||
"sigs.k8s.io/controller-runtime/pkg/manager"
|
||||
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
|
||||
@@ -33,16 +36,17 @@ import (
|
||||
|
||||
// WebhookBuilder builds a Webhook.
|
||||
type WebhookBuilder struct {
|
||||
apiType runtime.Object
|
||||
withDefaulter admission.CustomDefaulter
|
||||
withValidator admission.CustomValidator
|
||||
gvk schema.GroupVersionKind
|
||||
mgr manager.Manager
|
||||
config *rest.Config
|
||||
recoverPanic bool
|
||||
apiType runtime.Object
|
||||
customDefaulter admission.CustomDefaulter
|
||||
customValidator admission.CustomValidator
|
||||
gvk schema.GroupVersionKind
|
||||
mgr manager.Manager
|
||||
config *rest.Config
|
||||
recoverPanic bool
|
||||
logConstructor func(base logr.Logger, req *admission.Request) logr.Logger
|
||||
}
|
||||
|
||||
// WebhookManagedBy allows inform its manager.Manager.
|
||||
// WebhookManagedBy returns a new webhook builder.
|
||||
func WebhookManagedBy(m manager.Manager) *WebhookBuilder {
|
||||
return &WebhookBuilder{mgr: m}
|
||||
}
|
||||
@@ -57,19 +61,25 @@ func (blder *WebhookBuilder) For(apiType runtime.Object) *WebhookBuilder {
|
||||
return blder
|
||||
}
|
||||
|
||||
// WithDefaulter takes a admission.WithDefaulter interface, a MutatingWebhook will be wired for this type.
|
||||
// WithDefaulter takes an admission.CustomDefaulter interface, a MutatingWebhook will be wired for this type.
|
||||
func (blder *WebhookBuilder) WithDefaulter(defaulter admission.CustomDefaulter) *WebhookBuilder {
|
||||
blder.withDefaulter = defaulter
|
||||
blder.customDefaulter = defaulter
|
||||
return blder
|
||||
}
|
||||
|
||||
// WithValidator takes a admission.WithValidator interface, a ValidatingWebhook will be wired for this type.
|
||||
// WithValidator takes a admission.CustomValidator interface, a ValidatingWebhook will be wired for this type.
|
||||
func (blder *WebhookBuilder) WithValidator(validator admission.CustomValidator) *WebhookBuilder {
|
||||
blder.withValidator = validator
|
||||
blder.customValidator = validator
|
||||
return blder
|
||||
}
|
||||
|
||||
// RecoverPanic indicates whether the panic caused by webhook should be recovered.
|
||||
// WithLogConstructor overrides the webhook's LogConstructor.
|
||||
func (blder *WebhookBuilder) WithLogConstructor(logConstructor func(base logr.Logger, req *admission.Request) logr.Logger) *WebhookBuilder {
|
||||
blder.logConstructor = logConstructor
|
||||
return blder
|
||||
}
|
||||
|
||||
// RecoverPanic indicates whether panics caused by the webhook should be recovered.
|
||||
func (blder *WebhookBuilder) RecoverPanic() *WebhookBuilder {
|
||||
blder.recoverPanic = true
|
||||
return blder
|
||||
@@ -80,6 +90,9 @@ func (blder *WebhookBuilder) Complete() error {
|
||||
// Set the Config
|
||||
blder.loadRestConfig()
|
||||
|
||||
// Configure the default LogConstructor
|
||||
blder.setLogConstructor()
|
||||
|
||||
// Set the Webhook if needed
|
||||
return blder.registerWebhooks()
|
||||
}
|
||||
@@ -90,18 +103,38 @@ func (blder *WebhookBuilder) loadRestConfig() {
|
||||
}
|
||||
}
|
||||
|
||||
func (blder *WebhookBuilder) setLogConstructor() {
|
||||
if blder.logConstructor == nil {
|
||||
blder.logConstructor = func(base logr.Logger, req *admission.Request) logr.Logger {
|
||||
log := base.WithValues(
|
||||
"webhookGroup", blder.gvk.Group,
|
||||
"webhookKind", blder.gvk.Kind,
|
||||
)
|
||||
if req != nil {
|
||||
return log.WithValues(
|
||||
blder.gvk.Kind, klog.KRef(req.Namespace, req.Name),
|
||||
"namespace", req.Namespace, "name", req.Name,
|
||||
"resource", req.Resource, "user", req.UserInfo.Username,
|
||||
"requestID", req.UID,
|
||||
)
|
||||
}
|
||||
return log
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (blder *WebhookBuilder) registerWebhooks() error {
|
||||
typ, err := blder.getType()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Create webhook(s) for each type
|
||||
blder.gvk, err = apiutil.GVKForObject(typ, blder.mgr.GetScheme())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Register webhook(s) for type
|
||||
blder.registerDefaultingWebhook()
|
||||
blder.registerValidatingWebhook()
|
||||
|
||||
@@ -112,10 +145,11 @@ func (blder *WebhookBuilder) registerWebhooks() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// registerDefaultingWebhook registers a defaulting webhook if th.
|
||||
// registerDefaultingWebhook registers a defaulting webhook if necessary.
|
||||
func (blder *WebhookBuilder) registerDefaultingWebhook() {
|
||||
mwh := blder.getDefaultingWebhook()
|
||||
if mwh != nil {
|
||||
mwh.LogConstructor = blder.logConstructor
|
||||
path := generateMutatePath(blder.gvk)
|
||||
|
||||
// Checking if the path is already registered.
|
||||
@@ -130,11 +164,11 @@ func (blder *WebhookBuilder) registerDefaultingWebhook() {
|
||||
}
|
||||
|
||||
func (blder *WebhookBuilder) getDefaultingWebhook() *admission.Webhook {
|
||||
if defaulter := blder.withDefaulter; defaulter != nil {
|
||||
return admission.WithCustomDefaulter(blder.apiType, defaulter).WithRecoverPanic(blder.recoverPanic)
|
||||
if defaulter := blder.customDefaulter; defaulter != nil {
|
||||
return admission.WithCustomDefaulter(blder.mgr.GetScheme(), blder.apiType, defaulter).WithRecoverPanic(blder.recoverPanic)
|
||||
}
|
||||
if defaulter, ok := blder.apiType.(admission.Defaulter); ok {
|
||||
return admission.DefaultingWebhookFor(defaulter).WithRecoverPanic(blder.recoverPanic)
|
||||
return admission.DefaultingWebhookFor(blder.mgr.GetScheme(), defaulter).WithRecoverPanic(blder.recoverPanic)
|
||||
}
|
||||
log.Info(
|
||||
"skip registering a mutating webhook, object does not implement admission.Defaulter or WithDefaulter wasn't called",
|
||||
@@ -142,9 +176,11 @@ func (blder *WebhookBuilder) getDefaultingWebhook() *admission.Webhook {
|
||||
return nil
|
||||
}
|
||||
|
||||
// registerValidatingWebhook registers a validating webhook if necessary.
|
||||
func (blder *WebhookBuilder) registerValidatingWebhook() {
|
||||
vwh := blder.getValidatingWebhook()
|
||||
if vwh != nil {
|
||||
vwh.LogConstructor = blder.logConstructor
|
||||
path := generateValidatePath(blder.gvk)
|
||||
|
||||
// Checking if the path is already registered.
|
||||
@@ -159,11 +195,11 @@ func (blder *WebhookBuilder) registerValidatingWebhook() {
|
||||
}
|
||||
|
||||
func (blder *WebhookBuilder) getValidatingWebhook() *admission.Webhook {
|
||||
if validator := blder.withValidator; validator != nil {
|
||||
return admission.WithCustomValidator(blder.apiType, validator).WithRecoverPanic(blder.recoverPanic)
|
||||
if validator := blder.customValidator; validator != nil {
|
||||
return admission.WithCustomValidator(blder.mgr.GetScheme(), blder.apiType, validator).WithRecoverPanic(blder.recoverPanic)
|
||||
}
|
||||
if validator, ok := blder.apiType.(admission.Validator); ok {
|
||||
return admission.ValidatingWebhookFor(validator).WithRecoverPanic(blder.recoverPanic)
|
||||
return admission.ValidatingWebhookFor(blder.mgr.GetScheme(), validator).WithRecoverPanic(blder.recoverPanic)
|
||||
}
|
||||
log.Info(
|
||||
"skip registering a validating webhook, object does not implement admission.Validator or WithValidator wasn't called",
|
||||
@@ -179,7 +215,7 @@ func (blder *WebhookBuilder) registerConversionWebhook() error {
|
||||
}
|
||||
if ok {
|
||||
if !blder.isAlreadyHandled("/convert") {
|
||||
blder.mgr.GetWebhookServer().Register("/convert", &conversion.Webhook{})
|
||||
blder.mgr.GetWebhookServer().Register("/convert", conversion.NewWebhookHandler(blder.mgr.GetScheme()))
|
||||
}
|
||||
log.Info("Conversion webhook enabled", "GVK", blder.gvk)
|
||||
}
|
||||
@@ -195,10 +231,10 @@ func (blder *WebhookBuilder) getType() (runtime.Object, error) {
|
||||
}
|
||||
|
||||
func (blder *WebhookBuilder) isAlreadyHandled(path string) bool {
|
||||
if blder.mgr.GetWebhookServer().WebhookMux == nil {
|
||||
if blder.mgr.GetWebhookServer().WebhookMux() == nil {
|
||||
return false
|
||||
}
|
||||
h, p := blder.mgr.GetWebhookServer().WebhookMux.Handler(&http.Request{URL: &url.URL{Path: path}})
|
||||
h, p := blder.mgr.GetWebhookServer().WebhookMux().Handler(&http.Request{URL: &url.URL{Path: path}})
|
||||
if p == path && h != nil {
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user