disable webhook for testing

This commit is contained in:
Kevin Wiesmueller 2021-02-01 17:56:49 +01:00
parent a06f981fb1
commit ffbae9c5b4
4 changed files with 24 additions and 31 deletions

View File

@ -35,7 +35,6 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/audit" "k8s.io/apiserver/pkg/audit"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/features"
@ -164,8 +163,6 @@ func createHandler(r rest.NamedCreater, scope *RequestScope, admit admission.Int
return nil, fmt.Errorf("failed to create new object (Create for %v): %v", scope.Kind, err) return nil, fmt.Errorf("failed to create new object (Create for %v): %v", scope.Kind, err)
} }
obj = scope.FieldManager.UpdateNoErrors(liveObj, obj, managerOrUserAgent(options.FieldManager, req.UserAgent())) obj = scope.FieldManager.UpdateNoErrors(liveObj, obj, managerOrUserAgent(options.FieldManager, req.UserAgent()))
admit = fieldmanager.NewManagedFieldsValidatingAdmissionController(admit)
} }
if mutatingAdmission, ok := admit.(admission.MutationInterface); ok && mutatingAdmission.Handles(admission.Create) { if mutatingAdmission, ok := admit.(admission.MutationInterface); ok && mutatingAdmission.Handles(admission.Create) {
if err := mutatingAdmission.Admit(ctx, admissionAttributes, scope); err != nil { if err := mutatingAdmission.Admit(ctx, admissionAttributes, scope); err != nil {

View File

@ -171,7 +171,7 @@ func PatchResource(r rest.Patcher, scope *RequestScope, admit admission.Interfac
userInfo, userInfo,
) )
mutatingAdmission, _ := fieldmanager.NewManagedFieldsValidatingAdmissionController(admit).(admission.MutationInterface) mutatingAdmission, _ := admit.(admission.MutationInterface)
createAuthorizerAttributes := authorizer.AttributesRecord{ createAuthorizerAttributes := authorizer.AttributesRecord{
User: userInfo, User: userInfo,
ResourceRequest: true, ResourceRequest: true,

View File

@ -33,7 +33,6 @@ import (
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/audit" "k8s.io/apiserver/pkg/audit"
"k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/features"
@ -119,7 +118,6 @@ func UpdateResource(r rest.Updater, scope *RequestScope, admit admission.Interfa
ae := request.AuditEventFrom(ctx) ae := request.AuditEventFrom(ctx)
audit.LogRequestObject(ae, obj, scope.Resource, scope.Subresource, scope.Serializer) audit.LogRequestObject(ae, obj, scope.Resource, scope.Subresource, scope.Serializer)
admit = admission.WithAudit(admit, ae) admit = admission.WithAudit(admit, ae)
admit = fieldmanager.NewManagedFieldsValidatingAdmissionController(admit)
if err := checkName(obj, name, namespace, scope.Namer); err != nil { if err := checkName(obj, name, namespace, scope.Namer); err != nil {
scope.err(err, w, req) scope.err(err, w, req)

View File

@ -26,7 +26,6 @@ import (
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"strings"
"testing" "testing"
"time" "time"
@ -36,7 +35,6 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
@ -118,7 +116,7 @@ func TestMutatingWebhookResetsInvalidManagedFields(t *testing.T) {
var pod *corev1.Pod var pod *corev1.Pod
var lastErr string var lastErr string
// TODO(kwiesmueller): define warning format in the apiserver and use here // TODO(kwiesmueller): define warning format in the apiserver and use here
expectedWarning := fieldmanager.InvalidManagedFieldsAfterMutatingAdmissionWarningFormat // expectedWarning := fieldmanager.InvalidManagedFieldsAfterMutatingAdmissionWarningFormat
// Make sure reset happens on patch requests // Make sure reset happens on patch requests
// wait until new webhook is called // wait until new webhook is called
@ -127,15 +125,15 @@ func TestMutatingWebhookResetsInvalidManagedFields(t *testing.T) {
if err != nil { if err != nil {
return false, err return false, err
} }
if warningWriter.WarningCount() == 0 { // if warningWriter.WarningCount() == 0 {
lastErr = fmt.Sprintf("no warning, managedFields: %v", pod.ManagedFields) // lastErr = fmt.Sprintf("no warning, managedFields: %v", pod.ManagedFields)
return false, nil // return false, nil
} // }
if !strings.Contains(recordedWarnings.String(), expectedWarning) { // if !strings.Contains(recordedWarnings.String(), expectedWarning) {
lastErr = fmt.Sprintf("unexpected warning, expected: %v, got: %v", // lastErr = fmt.Sprintf("unexpected warning, expected: %v, got: %v",
expectedWarning, recordedWarnings.String()) // expectedWarning, recordedWarnings.String())
return false, nil // return false, nil
} // }
if err := expectValidManagedFields(pod.ManagedFields); err != nil { if err := expectValidManagedFields(pod.ManagedFields); err != nil {
lastErr = err.Error() lastErr = err.Error()
return false, nil return false, nil
@ -144,27 +142,27 @@ func TestMutatingWebhookResetsInvalidManagedFields(t *testing.T) {
}); err != nil { }); err != nil {
t.Fatalf("failed to wait for apiserver handling webhook mutation: %v, last error: %v", err, lastErr) t.Fatalf("failed to wait for apiserver handling webhook mutation: %v, last error: %v", err, lastErr)
} }
if warningWriter.WarningCount() != 1 { // if warningWriter.WarningCount() != 1 {
t.Errorf("expected one warning, got: %v", warningWriter.WarningCount()) // t.Errorf("expected one warning, got: %v", warningWriter.WarningCount())
} // }
recordedWarnings.Reset() // recordedWarnings.Reset()
// Make sure dedup happens in update requests // Make sure dedup happens in update requests
pod, err = client.CoreV1().Pods("default").Update(context.TODO(), pod, metav1.UpdateOptions{}) pod, err = client.CoreV1().Pods("default").Update(context.TODO(), pod, metav1.UpdateOptions{})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
if warningWriter.WarningCount() != 2 { // if warningWriter.WarningCount() != 2 {
t.Errorf("expected two warnings, got: %v", warningWriter.WarningCount()) // t.Errorf("expected two warnings, got: %v", warningWriter.WarningCount())
} // }
if !strings.Contains(recordedWarnings.String(), expectedWarning) { // if !strings.Contains(recordedWarnings.String(), expectedWarning) {
t.Errorf("unexpected warning, expected: %v, got: %v", // t.Errorf("unexpected warning, expected: %v, got: %v",
expectedWarning, recordedWarnings.String()) // expectedWarning, recordedWarnings.String())
} // }
if err := expectValidManagedFields(pod.ManagedFields); err != nil { if err := expectValidManagedFields(pod.ManagedFields); err != nil {
t.Error(err) t.Error(err)
} }
recordedWarnings.Reset() // recordedWarnings.Reset()
} }
@ -217,7 +215,7 @@ func newInvalidManagedFieldsWebhookHandler(t *testing.T) http.Handler {
if len(pod.ManagedFields) != 0 { if len(pod.ManagedFields) != 0 {
t.Logf("corrupting managedFields %v", pod.ManagedFields) t.Logf("corrupting managedFields %v", pod.ManagedFields)
review.Response.Patch = []byte(`[{"op":"remove","path":"metadata/managedFields/0/apiVersion"},{"op":"remove","path":"/metadata/managedFields/0/fieldsType"}]`) review.Response.Patch = []byte(`[{"op":"remove","path":"/metadata/managedFields/0/apiVersion"},{"op":"remove","path":"/metadata/managedFields/0/fieldsType"}]`)
jsonPatch := v1.PatchTypeJSONPatch jsonPatch := v1.PatchTypeJSONPatch
review.Response.PatchType = &jsonPatch review.Response.PatchType = &jsonPatch
} }