Skip to content

Commit 4288680

Browse files
committed
switching to v1 admission review
Signed-off-by: Min Jin <[email protected]>
1 parent 2a1a113 commit 4288680

File tree

3 files changed

+39
-37
lines changed

3 files changed

+39
-37
lines changed

deploy/mutatingwebhook.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ webhooks:
2424
apiVersions: ["v1"]
2525
resources: ["pods"]
2626
sideEffects: None
27-
admissionReviewVersions: ["v1beta1"]
27+
admissionReviewVersions: ["v1"]

pkg/handler/handler.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ import (
3030

3131
"github.com/aws/amazon-eks-pod-identity-webhook/pkg"
3232
"github.com/aws/amazon-eks-pod-identity-webhook/pkg/cache"
33-
"k8s.io/api/admission/v1beta1"
33+
"k8s.io/api/admission/v1"
34+
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
3435
admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
3536
corev1 "k8s.io/api/core/v1"
3637
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -41,6 +42,7 @@ import (
4142

4243
func init() {
4344
_ = corev1.AddToScheme(runtimeScheme)
45+
_ = admissionregistrationv1.AddToScheme(runtimeScheme)
4446
_ = admissionregistrationv1beta1.AddToScheme(runtimeScheme)
4547
}
4648

@@ -480,8 +482,8 @@ func (m *Modifier) buildPodPatchConfig(pod *corev1.Pod) *podPatchConfig {
480482
}
481483

482484
// MutatePod takes a AdmissionReview, mutates the pod, and returns an AdmissionResponse
483-
func (m *Modifier) MutatePod(ar *v1beta1.AdmissionReview) *v1beta1.AdmissionResponse {
484-
badRequest := &v1beta1.AdmissionResponse{
485+
func (m *Modifier) MutatePod(ar *v1.AdmissionReview) *v1.AdmissionResponse {
486+
badRequest := &v1.AdmissionResponse{
485487
Result: &metav1.Status{
486488
Message: "bad content",
487489
},
@@ -498,7 +500,7 @@ func (m *Modifier) MutatePod(ar *v1beta1.AdmissionReview) *v1beta1.AdmissionResp
498500
if err := json.Unmarshal(req.Object.Raw, &pod); err != nil {
499501
klog.Errorf("Could not unmarshal raw object: %v", err)
500502
klog.Errorf("Object: %v", string(req.Object.Raw))
501-
return &v1beta1.AdmissionResponse{
503+
return &v1.AdmissionResponse{
502504
Result: &metav1.Status{
503505
Message: err.Error(),
504506
},
@@ -511,7 +513,7 @@ func (m *Modifier) MutatePod(ar *v1beta1.AdmissionReview) *v1beta1.AdmissionResp
511513
if patchConfig == nil {
512514
klog.V(4).Infof("Pod was not mutated. Reason: "+
513515
"Service account did not have the right annotations or was not found in the cache. %s", logContext(pod.Name, pod.GenerateName, pod.Spec.ServiceAccountName, pod.Namespace))
514-
return &v1beta1.AdmissionResponse{
516+
return &v1.AdmissionResponse{
515517
Allowed: true,
516518
}
517519
}
@@ -520,7 +522,7 @@ func (m *Modifier) MutatePod(ar *v1beta1.AdmissionReview) *v1beta1.AdmissionResp
520522
patchBytes, err := json.Marshal(patch)
521523
if err != nil {
522524
klog.Errorf("Error marshaling pod update: %v", err.Error())
523-
return &v1beta1.AdmissionResponse{
525+
return &v1.AdmissionResponse{
524526
Result: &metav1.Status{
525527
Message: err.Error(),
526528
},
@@ -535,11 +537,11 @@ func (m *Modifier) MutatePod(ar *v1beta1.AdmissionReview) *v1beta1.AdmissionResp
535537
"Required volume mounts and env variables were already present. %s", logContext(pod.Name, pod.GenerateName, pod.Spec.ServiceAccountName, pod.Namespace))
536538
}
537539

538-
return &v1beta1.AdmissionResponse{
540+
return &v1.AdmissionResponse{
539541
Allowed: true,
540542
Patch: patchBytes,
541-
PatchType: func() *v1beta1.PatchType {
542-
pt := v1beta1.PatchTypeJSONPatch
543+
PatchType: func() *v1.PatchType {
544+
pt := v1.PatchTypeJSONPatch
543545
return &pt
544546
}(),
545547
}
@@ -562,11 +564,11 @@ func (m *Modifier) Handle(w http.ResponseWriter, r *http.Request) {
562564
return
563565
}
564566

565-
var admissionResponse *v1beta1.AdmissionResponse
566-
ar := v1beta1.AdmissionReview{}
567+
var admissionResponse *v1.AdmissionResponse
568+
ar := v1.AdmissionReview{}
567569
if _, _, err := deserializer.Decode(body, nil, &ar); err != nil {
568570
klog.Errorf("Can't decode body: %v", err)
569-
admissionResponse = &v1beta1.AdmissionResponse{
571+
admissionResponse = &v1.AdmissionResponse{
570572
Result: &metav1.Status{
571573
Message: err.Error(),
572574
},
@@ -575,7 +577,7 @@ func (m *Modifier) Handle(w http.ResponseWriter, r *http.Request) {
575577
admissionResponse = m.MutatePod(&ar)
576578
}
577579

578-
admissionReview := v1beta1.AdmissionReview{}
580+
admissionReview := v1.AdmissionReview{}
579581
if admissionResponse != nil {
580582
admissionReview.Response = admissionResponse
581583
if ar.Request != nil {

pkg/handler/handler_test.go

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,23 @@ package handler
1818
import (
1919
"bytes"
2020
"encoding/json"
21-
"github.com/aws/amazon-eks-pod-identity-webhook/pkg/containercredentials"
22-
"github.com/stretchr/testify/assert"
2321
"io"
2422
"io/ioutil"
25-
"k8s.io/apimachinery/pkg/types"
2623
"net/http"
2724
"net/http/httptest"
2825
"reflect"
2926
"testing"
3027

3128
"github.com/aws/amazon-eks-pod-identity-webhook/pkg/cache"
32-
"k8s.io/api/admission/v1beta1"
29+
"github.com/aws/amazon-eks-pod-identity-webhook/pkg/containercredentials"
30+
"github.com/stretchr/testify/assert"
31+
admissionv1 "k8s.io/api/admission/v1"
3332
authenticationv1 "k8s.io/api/authentication/v1"
3433
"k8s.io/api/core/v1"
3534
corev1 "k8s.io/api/core/v1"
3635
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3736
"k8s.io/apimachinery/pkg/runtime"
37+
"k8s.io/apimachinery/pkg/types"
3838
)
3939

4040
const uuid = "918ef1dc-928f-4525-99ef-988389f263c3"
@@ -54,18 +54,18 @@ func TestMutatePod(t *testing.T) {
5454
)
5555
cases := []struct {
5656
caseName string
57-
input *v1beta1.AdmissionReview
58-
response *v1beta1.AdmissionResponse
57+
input *admissionv1.AdmissionReview
58+
response *admissionv1.AdmissionResponse
5959
}{
6060
{
6161
"nilBody",
6262
nil,
63-
&v1beta1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
63+
&admissionv1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
6464
},
6565
{
6666
"NoRequest",
67-
&v1beta1.AdmissionReview{Request: nil},
68-
&v1beta1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
67+
&admissionv1.AdmissionReview{Request: nil},
68+
&admissionv1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
6969
},
7070
{
7171
"ValidRequest",
@@ -114,7 +114,7 @@ func TestMutatePod_MutationNotNeeded(t *testing.T) {
114114
assert.Nil(t, response.Patch)
115115
}
116116

117-
var jsonPatchType = v1beta1.PatchType("JSONPatch")
117+
var jsonPatchType = admissionv1.PatchType("JSONPatch")
118118

119119
var rawPodWithoutVolume = []byte(`
120120
{
@@ -138,18 +138,18 @@ var rawPodWithoutVolume = []byte(`
138138

139139
var validPatchIfNoVolumesPresent = []byte(`[{"op":"add","path":"/spec/volumes","value":[{"name":"aws-iam-token","projected":{"sources":[{"serviceAccountToken":{"audience":"sts.amazonaws.com","expirationSeconds":3600,"path":"token"}}]}}]},{"op":"add","path":"/spec/containers","value":[{"name":"balajilovesoreos","image":"amazonlinux","env":[{"name":"AWS_ROLE_ARN","value":"arn:aws:iam::111122223333:role/s3-reader"},{"name":"AWS_WEB_IDENTITY_TOKEN_FILE","value":"/var/run/secrets/eks.amazonaws.com/serviceaccount/token"}],"resources":{},"volumeMounts":[{"name":"aws-iam-token","readOnly":true,"mountPath":"/var/run/secrets/eks.amazonaws.com/serviceaccount"}]}]}]`)
140140

141-
func getValidHandlerResponse(uuid string) *v1beta1.AdmissionResponse {
142-
return &v1beta1.AdmissionResponse{
141+
func getValidHandlerResponse(uuid string) *admissionv1.AdmissionResponse {
142+
return &admissionv1.AdmissionResponse{
143143
UID: types.UID(uuid),
144144
Allowed: true,
145145
Patch: validPatchIfNoVolumesPresent,
146146
PatchType: &jsonPatchType,
147147
}
148148
}
149149

150-
func getValidReview(pod []byte) *v1beta1.AdmissionReview {
151-
return &v1beta1.AdmissionReview{
152-
Request: &v1beta1.AdmissionRequest{
150+
func getValidReview(pod []byte) *admissionv1.AdmissionReview {
151+
return &admissionv1.AdmissionReview{
152+
Request: &admissionv1.AdmissionRequest{
153153
UID: uuid,
154154
Kind: metav1.GroupVersionKind{
155155
Version: "v1",
@@ -171,7 +171,7 @@ func getValidReview(pod []byte) *v1beta1.AdmissionReview {
171171
}
172172
}
173173

174-
func serializeAdmissionReview(t *testing.T, want *v1beta1.AdmissionReview) []byte {
174+
func serializeAdmissionReview(t *testing.T, want *admissionv1.AdmissionReview) []byte {
175175
wantedBytes, err := json.Marshal(want)
176176
if err != nil {
177177
t.Errorf("Failed to marshal desired response: %v", err)
@@ -209,21 +209,21 @@ func TestModifierHandler(t *testing.T) {
209209
"nilBody",
210210
nil,
211211
"application/json",
212-
serializeAdmissionReview(t, &v1beta1.AdmissionReview{
213-
Response: &v1beta1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
212+
serializeAdmissionReview(t, &admissionv1.AdmissionReview{
213+
Response: &admissionv1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
214214
}),
215215
},
216216
{
217217
"NoRequest",
218-
serializeAdmissionReview(t, &v1beta1.AdmissionReview{Request: nil}),
218+
serializeAdmissionReview(t, &admissionv1.AdmissionReview{Request: nil}),
219219
"application/json",
220-
serializeAdmissionReview(t, &v1beta1.AdmissionReview{
221-
Response: &v1beta1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
220+
serializeAdmissionReview(t, &admissionv1.AdmissionReview{
221+
Response: &admissionv1.AdmissionResponse{Result: &metav1.Status{Message: "bad content"}},
222222
}),
223223
},
224224
{
225225
"BadContentType",
226-
serializeAdmissionReview(t, &v1beta1.AdmissionReview{Request: nil}),
226+
serializeAdmissionReview(t, &admissionv1.AdmissionReview{Request: nil}),
227227
"application/xml",
228228
[]byte("Invalid Content-Type, expected `application/json`\n"),
229229
},
@@ -243,7 +243,7 @@ func TestModifierHandler(t *testing.T) {
243243
"ValidRequestSuccessWithoutVolumes",
244244
serializeAdmissionReview(t, getValidReview(rawPodWithoutVolume)),
245245
"application/json",
246-
serializeAdmissionReview(t, &v1beta1.AdmissionReview{Response: getValidHandlerResponse(uuid)}),
246+
serializeAdmissionReview(t, &admissionv1.AdmissionReview{Response: getValidHandlerResponse(uuid)}),
247247
},
248248
}
249249

0 commit comments

Comments
 (0)