Skip to content

Commit 4a53874

Browse files
authored
Merge pull request #2144 from vincepri/fix-conversion-remove-admission-decoder
⚠️ Add constructor for conversion webhooks, rm admission.GetDecoder()
2 parents 505566d + 9e4e844 commit 4a53874

File tree

4 files changed

+25
-29
lines changed

4 files changed

+25
-29
lines changed

pkg/builder/webhook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ func (blder *WebhookBuilder) registerConversionWebhook() error {
213213
}
214214
if ok {
215215
if !blder.isAlreadyHandled("/convert") {
216-
blder.mgr.GetWebhookServer().Register("/convert", &conversion.Webhook{})
216+
blder.mgr.GetWebhookServer().Register("/convert", conversion.NewWebhookHandler(blder.mgr.GetScheme()))
217217
}
218218
log.Info("Conversion webhook enabled", "GVK", blder.gvk)
219219
}

pkg/webhook/admission/webhook.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,6 @@ type Webhook struct {
135135
// outside the context of requests.
136136
LogConstructor func(base logr.Logger, req *Request) logr.Logger
137137

138-
// decoder is constructed on receiving a scheme and passed down to then handler
139-
decoder *Decoder
140-
141138
setupLogOnce sync.Once
142139
log logr.Logger
143140
}
@@ -204,12 +201,6 @@ func DefaultLogConstructor(base logr.Logger, req *Request) logr.Logger {
204201
return base
205202
}
206203

207-
// GetDecoder returns a decoder to decode the objects embedded in admission requests.
208-
// It may be nil if we haven't received a scheme to use to determine object types yet.
209-
func (wh *Webhook) GetDecoder() *Decoder {
210-
return wh.decoder
211-
}
212-
213204
// StandaloneOptions let you configure a StandaloneWebhook.
214205
type StandaloneOptions struct {
215206
// Logger to be used by the webhook.

pkg/webhook/conversion/conversion.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,20 @@ var (
3939
log = logf.Log.WithName("conversion-webhook")
4040
)
4141

42-
// Webhook implements a CRD conversion webhook HTTP handler.
43-
type Webhook struct {
42+
func NewWebhookHandler(scheme *runtime.Scheme) http.Handler {
43+
return &webhook{scheme: scheme, decoder: NewDecoder(scheme)}
44+
}
45+
46+
// webhook implements a CRD conversion webhook HTTP handler.
47+
type webhook struct {
4448
scheme *runtime.Scheme
4549
decoder *Decoder
4650
}
4751

4852
// ensure Webhook implements http.Handler
49-
var _ http.Handler = &Webhook{}
53+
var _ http.Handler = &webhook{}
5054

51-
func (wh *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) {
55+
func (wh *webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) {
5256
convertReview := &apix.ConversionReview{}
5357
err := json.NewDecoder(r.Body).Decode(convertReview)
5458
if err != nil {
@@ -83,7 +87,7 @@ func (wh *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) {
8387
}
8488

8589
// handles a version conversion request.
86-
func (wh *Webhook) handleConvertRequest(req *apix.ConversionRequest) (*apix.ConversionResponse, error) {
90+
func (wh *webhook) handleConvertRequest(req *apix.ConversionRequest) (*apix.ConversionResponse, error) {
8791
if req == nil {
8892
return nil, fmt.Errorf("conversion request is nil")
8993
}
@@ -116,7 +120,7 @@ func (wh *Webhook) handleConvertRequest(req *apix.ConversionRequest) (*apix.Conv
116120
// convertObject will convert given a src object to dst object.
117121
// Note(droot): couldn't find a way to reduce the cyclomatic complexity under 10
118122
// without compromising readability, so disabling gocyclo linter
119-
func (wh *Webhook) convertObject(src, dst runtime.Object) error {
123+
func (wh *webhook) convertObject(src, dst runtime.Object) error {
120124
srcGVK := src.GetObjectKind().GroupVersionKind()
121125
dstGVK := dst.GetObjectKind().GroupVersionKind()
122126

@@ -143,7 +147,7 @@ func (wh *Webhook) convertObject(src, dst runtime.Object) error {
143147
}
144148
}
145149

146-
func (wh *Webhook) convertViaHub(src, dst conversion.Convertible) error {
150+
func (wh *webhook) convertViaHub(src, dst conversion.Convertible) error {
147151
hub, err := wh.getHub(src)
148152
if err != nil {
149153
return err
@@ -167,7 +171,7 @@ func (wh *Webhook) convertViaHub(src, dst conversion.Convertible) error {
167171
}
168172

169173
// getHub returns an instance of the Hub for passed-in object's group/kind.
170-
func (wh *Webhook) getHub(obj runtime.Object) (conversion.Hub, error) {
174+
func (wh *webhook) getHub(obj runtime.Object) (conversion.Hub, error) {
171175
gvks, err := objectGVKs(wh.scheme, obj)
172176
if err != nil {
173177
return nil, err
@@ -195,7 +199,7 @@ func (wh *Webhook) getHub(obj runtime.Object) (conversion.Hub, error) {
195199
}
196200

197201
// allocateDstObject returns an instance for a given GVK.
198-
func (wh *Webhook) allocateDstObject(apiVersion, kind string) (runtime.Object, error) {
202+
func (wh *webhook) allocateDstObject(apiVersion, kind string) (runtime.Object, error) {
199203
gvk := schema.FromAPIVersionAndKind(apiVersion, kind)
200204

201205
obj, err := wh.scheme.New(gvk)

pkg/webhook/conversion/conversion_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package conversion
17+
package conversion_test
1818

1919
import (
2020
"bytes"
@@ -33,6 +33,7 @@ import (
3333
"k8s.io/apimachinery/pkg/runtime"
3434
kscheme "k8s.io/client-go/kubernetes/scheme"
3535

36+
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
3637
jobsv1 "sigs.k8s.io/controller-runtime/pkg/webhook/conversion/testdata/api/v1"
3738
jobsv2 "sigs.k8s.io/controller-runtime/pkg/webhook/conversion/testdata/api/v2"
3839
jobsv3 "sigs.k8s.io/controller-runtime/pkg/webhook/conversion/testdata/api/v3"
@@ -41,9 +42,9 @@ import (
4142
var _ = Describe("Conversion Webhook", func() {
4243

4344
var respRecorder *httptest.ResponseRecorder
44-
var decoder *Decoder
45+
var decoder *conversion.Decoder
4546
var scheme *runtime.Scheme
46-
var webhook *Webhook
47+
var wh http.Handler
4748

4849
BeforeEach(func() {
4950
respRecorder = &httptest.ResponseRecorder{
@@ -56,8 +57,8 @@ var _ = Describe("Conversion Webhook", func() {
5657
Expect(jobsv2.AddToScheme(scheme)).To(Succeed())
5758
Expect(jobsv3.AddToScheme(scheme)).To(Succeed())
5859

59-
decoder = NewDecoder(scheme)
60-
webhook = &Webhook{scheme: scheme, decoder: decoder}
60+
decoder = conversion.NewDecoder(scheme)
61+
wh = conversion.NewWebhookHandler(scheme)
6162
})
6263

6364
doRequest := func(convReq *apix.ConversionReview) *apix.ConversionReview {
@@ -69,7 +70,7 @@ var _ = Describe("Conversion Webhook", func() {
6970
req := &http.Request{
7071
Body: io.NopCloser(bytes.NewReader(payload.Bytes())),
7172
}
72-
webhook.ServeHTTP(respRecorder, req)
73+
wh.ServeHTTP(respRecorder, req)
7374
Expect(json.NewDecoder(respRecorder.Result().Body).Decode(convReview)).To(Succeed())
7475
return convReview
7576
}
@@ -313,7 +314,7 @@ var _ = Describe("IsConvertible", func() {
313314
It("should not error for uninitialized types", func() {
314315
obj := &jobsv2.ExternalJob{}
315316

316-
ok, err := IsConvertible(scheme, obj)
317+
ok, err := conversion.IsConvertible(scheme, obj)
317318
Expect(err).NotTo(HaveOccurred())
318319
Expect(ok).To(BeTrue())
319320
})
@@ -326,7 +327,7 @@ var _ = Describe("IsConvertible", func() {
326327
},
327328
}
328329

329-
ok, err := IsConvertible(scheme, obj)
330+
ok, err := conversion.IsConvertible(scheme, obj)
330331
Expect(err).NotTo(HaveOccurred())
331332
Expect(ok).To(BeTrue())
332333
})
@@ -339,7 +340,7 @@ var _ = Describe("IsConvertible", func() {
339340
},
340341
}
341342

342-
ok, err := IsConvertible(scheme, obj)
343+
ok, err := conversion.IsConvertible(scheme, obj)
343344
Expect(err).NotTo(HaveOccurred())
344345
Expect(ok).To(BeTrue())
345346
})
@@ -352,7 +353,7 @@ var _ = Describe("IsConvertible", func() {
352353
},
353354
}
354355

355-
ok, err := IsConvertible(scheme, obj)
356+
ok, err := conversion.IsConvertible(scheme, obj)
356357
Expect(err).NotTo(HaveOccurred())
357358
Expect(ok).ToNot(BeTrue())
358359
})

0 commit comments

Comments
 (0)