Skip to content

Commit

Permalink
[release-0.15] Have the webhook responses return TypeMeta (#1449)
Browse files Browse the repository at this point in the history
* Return TypeMeta as part of the conversion response (#1433)

This is a requirement when adopting CRD v1 APIs

* Return TypeMeta as part of the admission response (#1444)
  • Loading branch information
dprotaso authored Jun 25, 2020
1 parent 1c6815d commit dfb81cf
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 1 deletion.
8 changes: 7 additions & 1 deletion webhook/admission.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,13 @@ func admissionHandler(rootLogger *zap.SugaredLogger, stats StatsReporter, c Admi

ctx := logging.WithLogger(r.Context(), logger)

var response admissionv1beta1.AdmissionReview
response := admissionv1beta1.AdmissionReview{
// Use the same type meta as the request - this is required by the K8s API
// note: v1beta1 & v1 AdmissionReview shapes are identical so even though
// we're using v1 types we still support v1beta1 admission requests
TypeMeta: review.TypeMeta,
}

reviewResponse := c.Admit(ctx, review.Request)
var patchType string
if reviewResponse.PatchType != nil {
Expand Down
6 changes: 6 additions & 0 deletions webhook/admission_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"testing"
"time"

"github.com/google/go-cmp/cmp"
"golang.org/x/sync/errgroup"
jsonpatch "gomodules.xyz/jsonpatch/v2"
admissionv1beta1 "k8s.io/api/admission/v1beta1"
Expand Down Expand Up @@ -156,6 +157,11 @@ func TestAdmissionValidResponseForResource(t *testing.T) {
t.Errorf("Failed to decode response: %v", err)
return
}

if diff := cmp.Diff(rev.TypeMeta, reviewResponse.TypeMeta); diff != "" {
t.Errorf("expected the response typeMeta to be the same as the request (-want, +got)\n%s", diff)
return
}
}()

// Check that Admit calls block when they are initiated before informers sync.
Expand Down
4 changes: 4 additions & 0 deletions webhook/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ func conversionHandler(rootLogger *zap.SugaredLogger, stats StatsReporter, c Con

ctx := logging.WithLogger(r.Context(), logger)
response := apixv1beta1.ConversionReview{
// Use the same type meta as the request - this is required by the K8s API
// note: v1beta1 & v1 ConversionReview shapes are identical so even though
// we're using v1 types we still support v1beta1 conversion requests
TypeMeta: review.TypeMeta,
Response: c.Convert(ctx, review.Request),
}

Expand Down
5 changes: 5 additions & 0 deletions webhook/conversion_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"net/http"
"testing"

"github.com/google/go-cmp/cmp"
"golang.org/x/sync/errgroup"
apixv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -136,6 +137,10 @@ func TestConversionValidResponse(t *testing.T) {
if reviewResponse.Response.UID != "some-uid" {
t.Errorf("expected the response uid to be the stubbed version")
}

if diff := cmp.Diff(review.TypeMeta, reviewResponse.TypeMeta); diff != "" {
t.Errorf("expected the response typeMeta to be the same as the request (-want, +got)\n%s", diff)
}
}

func TestConversionInvalidResponse(t *testing.T) {
Expand Down

0 comments on commit dfb81cf

Please sign in to comment.