From 3dda523a0421efb9e4dec7e406f4d7b5ab1bb50b Mon Sep 17 00:00:00 2001 From: Jay Deokar <23660509+jaydeokar@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:34:04 -0700 Subject: [PATCH] Update Container-Runtime to 0.15 (#286) * chore: Upgrade to controller-runtime 1.15 * Playing with the cache * cache filters and add initialize decoder on webhooks --------- Co-authored-by: Ellis Tarn --- config/controller/controller.yaml | 11 ++- controllers/custom/builder.go | 2 +- go.mod | 28 ++++---- go.sum | 70 +++++++++---------- main.go | 48 +++++++------ scripts/test/test-with-eksctl.sh | 25 +++---- test/framework/framework.go | 7 +- test/framework/resource/k8s/pod/manager.go | 6 +- test/integration/perpodsg/perpodsg_test.go | 2 +- .../core/annotation_validation_webhook.go | 9 +-- .../annotation_validation_webhook_test.go | 12 +--- webhooks/core/node_update_webhook.go | 9 +-- webhooks/core/node_update_webhook_test.go | 4 +- webhooks/core/pod_webhook.go | 8 +-- webhooks/core/pod_webhook_test.go | 2 +- 15 files changed, 111 insertions(+), 132 deletions(-) diff --git a/config/controller/controller.yaml b/config/controller/controller.yaml index fa6ca4aa..bf2fea23 100644 --- a/config/controller/controller.yaml +++ b/config/controller/controller.yaml @@ -17,6 +17,16 @@ spec: control-plane: controller app: vpc-resource-controller spec: + volumes: + - name: aws-iam-token + projected: + defaultMode: 420 + sources: + - serviceAccountToken: + audience: sts.amazonaws.com + expirationSeconds: 86400 + path: token + serviceAccountName: vpc-resource-controller containers: - args: - --cluster-name=CLUSTER_NAME @@ -47,7 +57,6 @@ spec: - containerPort: 8443 name: metrics protocol: TCP - serviceAccountName: vpc-resource-controller terminationGracePeriodSeconds: 10 nodeSelector: kubernetes.io/os: linux \ No newline at end of file diff --git a/controllers/custom/builder.go b/controllers/custom/builder.go index 7c2a4658..181c9bc8 100644 --- a/controllers/custom/builder.go +++ b/controllers/custom/builder.go @@ -122,7 +122,7 @@ func (b *Builder) Complete(reconciler Reconciler) (healthz.Checker, error) { ListerWatcher: optimizedListWatch, ObjectType: b.converter.ResourceType(), FullResyncPeriod: b.options.ResyncPeriod, - Process: func(obj interface{}) error { + Process: func(obj interface{}, _ bool) error { // from oldest to newest for _, d := range obj.(cache.Deltas) { // Strip down the pod object and keep only the required details diff --git a/go.mod b/go.mod index 72d0403b..f6a758b7 100644 --- a/go.mod +++ b/go.mod @@ -6,23 +6,23 @@ require ( github.com/aws/amazon-vpc-cni-k8s v1.13.2 github.com/aws/aws-sdk-go v1.43.29 github.com/go-logr/logr v1.2.4 - github.com/go-logr/zapr v1.2.3 + github.com/go-logr/zapr v1.2.4 github.com/golang/mock v1.6.0 github.com/google/uuid v1.3.0 github.com/onsi/ginkgo/v2 v2.11.0 github.com/onsi/gomega v1.27.8 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_golang v1.15.1 github.com/prometheus/client_model v0.4.0 - github.com/prometheus/common v0.39.0 + github.com/prometheus/common v0.42.0 github.com/stretchr/testify v1.8.1 go.uber.org/zap v1.24.0 golang.org/x/time v0.3.0 gomodules.xyz/jsonpatch/v2 v2.3.0 - k8s.io/api v0.26.5 - k8s.io/apimachinery v0.26.5 - k8s.io/client-go v0.26.5 - sigs.k8s.io/controller-runtime v0.14.6 + k8s.io/api v0.27.2 + k8s.io/apimachinery v0.27.2 + k8s.io/client-go v0.27.2 + sigs.k8s.io/controller-runtime v0.15.1 ) require ( @@ -43,7 +43,7 @@ require ( github.com/google/gnostic v0.6.9 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -62,7 +62,7 @@ require ( go.uber.org/multierr v1.6.0 // indirect golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.4.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect golang.org/x/sys v0.9.0 // indirect golang.org/x/term v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect @@ -72,11 +72,11 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.26.1 // indirect - k8s.io/component-base v0.26.1 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect + k8s.io/apiextensions-apiserver v0.27.2 // indirect + k8s.io/component-base v0.27.2 // indirect + k8s.io/klog/v2 v2.90.1 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/go.sum b/go.sum index 7db7ec21..3bd1d25f 100644 --- a/go.sum +++ b/go.sum @@ -29,7 +29,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ= github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -47,11 +46,10 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= @@ -97,8 +95,8 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -120,8 +118,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -148,16 +146,17 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= +github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= -github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -168,7 +167,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -185,11 +183,10 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -224,8 +221,8 @@ golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -267,11 +264,11 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -324,30 +321,29 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.26.5 h1:Npao/+sMSng6nkEcNydgH3BNo4s5YoBg7iw35HM7Hcw= -k8s.io/api v0.26.5/go.mod h1:O7ICW7lj6+ZQQQ3cxekgCoW+fnGo5kWT0nTHkLZ5grc= -k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= -k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= -k8s.io/apimachinery v0.26.5 h1:hTQVhJao2piX7vSgCn4Lwd6E0o/+TJIH4NqRf+q4EmE= -k8s.io/apimachinery v0.26.5/go.mod h1:HUvk6wrOP4v22AIYqeCGSQ6xWCHo41J9d6psb3temAg= -k8s.io/client-go v0.26.5 h1:e8Z44pafL/c6ayF/6qYEypbJoDSakaFxhJ9lqULEJEo= -k8s.io/client-go v0.26.5/go.mod h1:/CYyNt+ZLMvWqMF8h1SvkUXz2ujFWQLwdDrdiQlZ5X0= -k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= -k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= -k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= -sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= +k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= +k8s.io/apiextensions-apiserver v0.27.2 h1:iwhyoeS4xj9Y7v8YExhUwbVuBhMr3Q4bd/laClBV6Bo= +k8s.io/apiextensions-apiserver v0.27.2/go.mod h1:Oz9UdvGguL3ULgRdY9QMUzL2RZImotgxvGjdWRq6ZXQ= +k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= +k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= +k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= +k8s.io/component-base v0.27.2 h1:neju+7s/r5O4x4/txeUONNTS9r1HsPbyoPBAtHsDCpo= +k8s.io/component-base v0.27.2/go.mod h1:5UPk7EjfgrfgRIuDBFtsEFAe4DAvP3U+M8RTzoSJkpo= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= +k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= +k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= +sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/main.go b/main.go index e27b7c41..7e92a701 100644 --- a/main.go +++ b/main.go @@ -54,7 +54,9 @@ import ( "k8s.io/client-go/tools/leaderelection/resourcelock" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" // +kubebuilder:scaffold:imports ) @@ -66,6 +68,7 @@ var ( ) func init() { + // TODO: We should restrict this even more to use only the schemas the controller really needs to have. _ = clientgoscheme.AddToScheme(scheme) _ = corev1.AddToScheme(scheme) @@ -204,24 +207,6 @@ func main() { retryPeriod := time.Second * time.Duration(leaderLeaseRetryPeriod) // filter cache to subscribe to events from specific resources - newCache := cache.BuilderWithOptions(cache.Options{ - SelectorsByObject: cache.SelectorsByObject{ - &corev1.ConfigMap{}: {Field: fields.Set{ - "metadata.name": config.VpcCniConfigMapName, - "metadata.namespace": config.KubeSystemNamespace, - }.AsSelector()}, - &appsv1.Deployment{}: {Field: fields.Set{ - "metadata.name": config.OldVPCControllerDeploymentName, - "metadata.namespace": config.KubeSystemNamespace, - }.AsSelector()}, - &appsv1.DaemonSet{}: {Field: fields.Set{ - "metadata.name": config.VpcCNIDaemonSetName, - "metadata.namespace": config.KubeSystemNamespace, - }.AsSelector(), - }, - }, - }) - leaderElectionSource := resourcelock.ConfigMapsLeasesResourceLock if leaseOnly { leaderElectionSource = resourcelock.LeasesResourceLock @@ -240,7 +225,26 @@ func main() { LeaderElectionNamespace: config.LeaderElectionNamespace, LeaderElectionResourceLock: leaderElectionSource, HealthProbeBindAddress: ":61779", // the liveness endpoint is default to "/healthz" - NewCache: newCache, + // ConfigMaps - WATCH only the ConfigMap that VPC RC consumes + // Deployments - WATCH only the old VPC Controller deployment + // Daemonsets - WATCH only the VPC CNI + Cache: cache.Options{ + ByObject: map[client.Object]cache.ByObject{ + &corev1.ConfigMap{}: {Field: fields.Set{ + "metadata.name": config.VpcCniConfigMapName, + "metadata.namespace": config.KubeSystemNamespace, + }.AsSelector()}, + &appsv1.Deployment{}: {Field: fields.Set{ + "metadata.name": config.OldVPCControllerDeploymentName, + "metadata.namespace": config.KubeSystemNamespace, + }.AsSelector()}, + &appsv1.DaemonSet{}: {Field: fields.Set{ + "metadata.name": config.VpcCNIDaemonSetName, + "metadata.namespace": config.KubeSystemNamespace, + }.AsSelector(), + }, + }, + }, }) if err != nil { setupLog.Error(err, "unable to start manager") @@ -391,19 +395,19 @@ func main() { setupLog.Info("registering webhooks to the webhook server") podMutationWebhook := webhookcore.NewPodMutationWebHook( - sgpAPI, ctrl.Log.WithName("resource mutating webhook"), controllerConditions, healthzHandler) + sgpAPI, ctrl.Log.WithName("resource mutating webhook"), controllerConditions, admission.NewDecoder(mgr.GetScheme()), healthzHandler) webhookServer.Register("/mutate-v1-pod", &webhook.Admission{ Handler: podMutationWebhook, }) nodeValidateWebhook := webhookcore.NewNodeUpdateWebhook( - controllerConditions, ctrl.Log.WithName("node validating webhook"), healthzHandler) + controllerConditions, ctrl.Log.WithName("node validating webhook"), admission.NewDecoder(mgr.GetScheme()), healthzHandler) webhookServer.Register("/validate-v1-node", &webhook.Admission{ Handler: nodeValidateWebhook}) // Validating webhook for pod. annotationValidator := webhookcore.NewAnnotationValidator( - controllerConditions, ctrl.Log.WithName("annotation validating webhook"), healthzHandler) + controllerConditions, ctrl.Log.WithName("annotation validating webhook"), admission.NewDecoder(mgr.GetScheme()), healthzHandler) webhookServer.Register("/validate-v1-pod", &webhook.Admission{ Handler: annotationValidator}) diff --git a/scripts/test/test-with-eksctl.sh b/scripts/test/test-with-eksctl.sh index 8db38d50..304baa1b 100755 --- a/scripts/test/test-with-eksctl.sh +++ b/scripts/test/test-with-eksctl.sh @@ -86,15 +86,13 @@ if [[ -z "$VPC_RC_ROLE_ARN" ]]; then fi ECR_URL=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com -ECR_REPOSITORY=amazon/vpc-resource-controller -ECR_IMAGE_TAG=$(add_suffix "test") +ECR_REPOSITORY=aws/amazon-vpc-resource-controller-k8s -IMAGE=$ECR_URL/$ECR_REPOSITORY:$ECR_IMAGE_TAG +IMAGE=$ECR_URL/$ECR_REPOSITORY function build_and_push_image() { echo "building and pushing controller image to ECR" - IMAGE=$IMAGE AWS_ACCOUNT=$AWS_ACCOUNT_ID AWS_REGION=$AWS_REGION make docker-build - IMAGE=$IMAGE AWS_ACCOUNT=$AWS_ACCOUNT_ID AWS_REGION=$AWS_REGION make docker-push + IMAGE=$IMAGE AWS_REGION=$AWS_REGION make image } function install_controller() { @@ -113,12 +111,12 @@ function disable_eks_controller() { echo "disabling the default amazon-vpc-resource-controller-k8s controller" # Delete Mutating Webhook Configuration - kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io vpc-resource-mutating-webhook + kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io vpc-resource-mutating-webhook --ignore-not-found # Delete the Validating Webhook Configuration - kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io vpc-resource-validating-webhook + kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io vpc-resource-validating-webhook --ignore-not-found # Remove the patch/update permission on ConfigMap from the EKS VPC RC Leader election Role - kubectl patch roles -n kube-system vpc-resource-controller-leader-election-role \ + kubectl patch roles -n kube-system eks-vpc-resource-controller-role \ --patch "$(cat "$TEMPLATE_DIR/cp-vpc-leader-election-role-patch.yaml")" } @@ -233,16 +231,11 @@ function get_leader_lease_transistion_count() { | jq .leaderTransitions } -function output_logs() { +function on_exit() { + echo "Exiting..." cat $CONTROLLER_LOG_FILE } -function clean_up() { - echo "cleaning up..." - delete_ecr_image "$ECR_REPOSITORY" "$ECR_IMAGE_TAG" - output_logs -} - function redirect_vpc_controller_logs() { # Till the time the bash process keeps running, keep on redirecting the logs to the file # The parent process will log the output of the file on exit @@ -258,7 +251,7 @@ function redirect_vpc_controller_logs() { } # Delete the IAM Policies, Roles and the EKS Cluster -trap 'clean_up' EXIT +trap 'on_exit' EXIT # Cordon the Windows Nodes as cert manager and other future 3rd pary # dependency may not have nodeselectors to schedule pods on linux diff --git a/test/framework/framework.go b/test/framework/framework.go index 9e85412d..f2f65be2 100644 --- a/test/framework/framework.go +++ b/test/framework/framework.go @@ -82,12 +82,7 @@ func New(options Options) *Framework { }() cache.WaitForCacheSync(stopChan) - realClient, err := client.New(config, client.Options{Scheme: k8sSchema}) - Expect(err).NotTo(HaveOccurred()) - k8sClient, err := client.NewDelegatingClient(client.NewDelegatingClientInput{ - CacheReader: cache, - Client: realClient, - }) + k8sClient, err := client.New(config, client.Options{Scheme: k8sSchema, Cache: &client.CacheOptions{Reader: cache}}) Expect(err).NotTo(HaveOccurred()) sess := session.Must(session.NewSession(&aws.Config{ diff --git a/test/framework/resource/k8s/pod/manager.go b/test/framework/resource/k8s/pod/manager.go index 317b1a59..943e79ca 100644 --- a/test/framework/resource/k8s/pod/manager.go +++ b/test/framework/resource/k8s/pod/manager.go @@ -238,5 +238,9 @@ func (d *defaultManager) getRestClientForPod(namespace string, name string) (res if err != nil { return nil, err } - return apiutil.RESTClientForGVK(gkv, false, d.config, serializer.NewCodecFactory(d.k8sSchema)) + client, err := rest.HTTPClientFor(d.config) + if err != nil { + return nil, err + } + return apiutil.RESTClientForGVK(gkv, false, d.config, serializer.NewCodecFactory(d.k8sSchema), client) } diff --git a/test/integration/perpodsg/perpodsg_test.go b/test/integration/perpodsg/perpodsg_test.go index feb817c5..4c34ddf8 100644 --- a/test/integration/perpodsg/perpodsg_test.go +++ b/test/integration/perpodsg/perpodsg_test.go @@ -470,7 +470,7 @@ var _ = Describe("Branch ENI Pods", func() { By("removing the has-trunk-attached label from the node") err = frameWork.NodeManager.RemoveLabels(targetedNodes, map[string]string{config.HasTrunkAttachedLabel: "true"}) - Expect(err).To(HaveOccurred()) + Expect(err).ToNot(HaveOccurred()) firstPod := podTemplate.DeepCopy() By("creating a Pod on the un-managed node and verifying it fails") diff --git a/webhooks/core/annotation_validation_webhook.go b/webhooks/core/annotation_validation_webhook.go index 5e160ee3..f108f30a 100644 --- a/webhooks/core/annotation_validation_webhook.go +++ b/webhooks/core/annotation_validation_webhook.go @@ -40,10 +40,11 @@ type AnnotationValidator struct { Checker healthz.Checker } -func NewAnnotationValidator(condition condition.Conditions, log logr.Logger, healthzHandler *rcHealthz.HealthzHandler) *AnnotationValidator { +func NewAnnotationValidator(condition condition.Conditions, log logr.Logger, d *admission.Decoder, healthzHandler *rcHealthz.HealthzHandler) *AnnotationValidator { annotationValidator := &AnnotationValidator{ Condition: condition, Log: log, + decoder: d, } // add health check on subpath for pod annotation validating webhook @@ -152,9 +153,3 @@ func (a *AnnotationValidator) getAnnotationKeysToBeValidated() []string { } return annotationsToValidate } - -// InjectDecoder injects the decoder. -func (a *AnnotationValidator) InjectDecoder(d *admission.Decoder) error { - a.decoder = d - return nil -} diff --git a/webhooks/core/annotation_validation_webhook_test.go b/webhooks/core/annotation_validation_webhook_test.go index 66dd9d6e..4410d9eb 100644 --- a/webhooks/core/annotation_validation_webhook_test.go +++ b/webhooks/core/annotation_validation_webhook_test.go @@ -19,7 +19,7 @@ import ( "net/http" "testing" - "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/condition" + mock_condition "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/condition" "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/config" "github.com/golang/mock/gomock" @@ -38,20 +38,12 @@ type MockAnnotationWebHook struct { MockCondition *mock_condition.MockConditions } -func TestAnnotationValidator_InjectDecoder(t *testing.T) { - a := AnnotationValidator{} - decoder := &admission.Decoder{} - a.InjectDecoder(decoder) - - assert.Equal(t, decoder, a.decoder) -} - func TestAnnotationValidator_Handle(t *testing.T) { schema := runtime.NewScheme() err := clientgoscheme.AddToScheme(schema) assert.NoError(t, err) - decoder, _ := admission.NewDecoder(schema) + decoder := admission.NewDecoder(schema) basePod := &corev1.Pod{ TypeMeta: metav1.TypeMeta{ diff --git a/webhooks/core/node_update_webhook.go b/webhooks/core/node_update_webhook.go index c3e52f05..4c88e967 100644 --- a/webhooks/core/node_update_webhook.go +++ b/webhooks/core/node_update_webhook.go @@ -21,10 +21,11 @@ type NodeUpdateWebhook struct { Checker healthz.Checker } -func NewNodeUpdateWebhook(condition condition.Conditions, log logr.Logger, healthzHandler *rcHealthz.HealthzHandler) *NodeUpdateWebhook { +func NewNodeUpdateWebhook(condition condition.Conditions, log logr.Logger, d *admission.Decoder, healthzHandler *rcHealthz.HealthzHandler) *NodeUpdateWebhook { nodeUpdateWebhook := &NodeUpdateWebhook{ Condition: condition, Log: log, + decoder: d, } // add health check on subpath for node validation webhook @@ -92,9 +93,3 @@ func (a *NodeUpdateWebhook) Handle(_ context.Context, req admission.Request) adm // If all validation check succeed, allow admission return admission.Allowed("") } - -// InjectDecoder injects the decoder. -func (a *NodeUpdateWebhook) InjectDecoder(d *admission.Decoder) error { - a.decoder = d - return nil -} diff --git a/webhooks/core/node_update_webhook_test.go b/webhooks/core/node_update_webhook_test.go index 76e82920..6f2c4777 100644 --- a/webhooks/core/node_update_webhook_test.go +++ b/webhooks/core/node_update_webhook_test.go @@ -6,7 +6,7 @@ import ( "net/http" "testing" - "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/condition" + mock_condition "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/condition" "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/config" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -29,7 +29,7 @@ func TestNodeUpdateWebhook_Handle(t *testing.T) { err := clientgoscheme.AddToScheme(schema) assert.NoError(t, err) - decoder, _ := admission.NewDecoder(schema) + decoder := admission.NewDecoder(schema) baseNode := &corev1.Node{ TypeMeta: metav1.TypeMeta{ diff --git a/webhooks/core/pod_webhook.go b/webhooks/core/pod_webhook.go index b1eb0cc8..b6fa0019 100644 --- a/webhooks/core/pod_webhook.go +++ b/webhooks/core/pod_webhook.go @@ -51,12 +51,14 @@ func NewPodMutationWebHook( sgpAPI utils.SecurityGroupForPodsAPI, log logr.Logger, condition condition.Conditions, + d *admission.Decoder, healthzHandler *rcHealthz.HealthzHandler, ) *PodMutationWebHook { podWebhook := &PodMutationWebHook{ SGPAPI: sgpAPI, Log: log, Condition: condition, + decoder: d, } // add health check on subpath for pod mutation webhook healthzHandler.AddControllersHealthCheckers( @@ -245,9 +247,3 @@ func hasWindowsNodeSelector(pod *corev1.Pod) bool { } return true } - -// InjectDecoder injects the decoder. -func (i *PodMutationWebHook) InjectDecoder(d *admission.Decoder) error { - i.decoder = d - return nil -} diff --git a/webhooks/core/pod_webhook_test.go b/webhooks/core/pod_webhook_test.go index ec4c4fe1..cd934b87 100644 --- a/webhooks/core/pod_webhook_test.go +++ b/webhooks/core/pod_webhook_test.go @@ -55,7 +55,7 @@ func TestPodMutationWebHook_Handle(t *testing.T) { err := clientgoscheme.AddToScheme(schema) assert.NoError(t, err) - decoder, _ := admission.NewDecoder(schema) + decoder := admission.NewDecoder(schema) name := "foo" namespace := "default"