Repository: knative-sandbox/eventing-kafka-broker
Pull request #193 (2020-09-18 09:48:23)

Register admission webhooks
We need to register Validating and Mutating admission webhooks with
names matching names used in webhook-kafka/main.go

## Proposed Changes

- Register admission webhooks

knative-prow-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/193#" title="Author self-approved">pierDipi</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **evankanderson**
You can assign the PR to them by writing `/assign @evankanderson` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=knative-sandbox%2Feventing-kafka-broker).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/knative-sandbox/eventing-kafka-broker/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["evankanderson"]} -->
pierDipi: Could you please take a look a this?

/cc @matzew @lionelvillard @aliok 
knative-prow-robot: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-integration-tests | d083b36ac6d6948b2c7729370959789ea1b73a85 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/193/pull-knative-sandbox-eventing-kafka-broker-integration-tests/1306893005948456961) | `/test pull-knative-sandbox-eventing-kafka-broker-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/193). [Your PR dashboard](https://gubernator.knative.dev/pr/pierDipi).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
aliok: The changes look good, but leaving the `/approve` to others (can't do myself anyway :D)

/lgtm
knative-prow-robot: New changes are detected. LGTM label has been removed.
codecov[bot]: # [Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/193?src=pr&el=h1) Report
> :exclamation: No coverage uploaded for pull request base (`master@34c42c6`). [Click here to learn what that means](https://docs.codecov.io/docs/error-reference#section-missing-base-commit).
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/193/graphs/tree.svg?width=650&height=150&src=pr&token=xyPIgGOiwy)](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/193?src=pr&el=tree)

```diff
@@            Coverage Diff            @@
##             master     #193   +/-   ##
=========================================
  Coverage          ?   76.46%           
=========================================
  Files             ?       22           
  Lines             ?      718           
  Branches          ?        0           
=========================================
  Hits              ?      549           
  Misses            ?      122           
  Partials          ?       47           
```



------

[Continue to review full report at Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/193?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/193?src=pr&el=footer). Last update [34c42c6...1b7d448](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/193?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

knative-prow-robot: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-integration-tests | 5d3202573b33e2830e25a0e8ab16b6436b92eafe | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/193/pull-knative-sandbox-eventing-kafka-broker-integration-tests/1306941450608447489) | `/test pull-knative-sandbox-eventing-kafka-broker-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/193). [Your PR dashboard](https://gubernator.knative.dev/pr/pierDipi).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
pierDipi: Worked, retesting
/test pull-knative-sandbox-eventing-kafka-broker-integration-tests
knative-prow-robot: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-integration-tests | 3efac1aa1b33806ef051db3e6ad3991ef9eeeff5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/193/pull-knative-sandbox-eventing-kafka-broker-integration-tests/1307006252412309504) | `/test pull-knative-sandbox-eventing-kafka-broker-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/193). [Your PR dashboard](https://gubernator.knative.dev/pr/pierDipi).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
pierDipi: ```
        	Error Trace:	kafka_sink_test.go:62
        	Error:      	Expected nil, but got: &errors.StatusError{ErrStatus:v1.Status{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""}, ListMeta:v1.ListMeta{SelfLink:"", ResourceVersion:"", Continue:"", RemainingItemCount:(*int64)(nil)}, Status:"Failure", Message:"Internal error occurred: failed calling webhook \"defaulting.webhook.kafka.eventing.knative.dev\": Post https://kafka-webhook-eventing.knative-eventing.svc:443/defaulting?timeout=2s: no endpoints available for service \"kafka-webhook-eventing\"", Reason:"InternalError", Details:(*v1.StatusDetails)(0xc00170fe00), Code:500}}
        	Test:       	TestKafkaSinkV1Alpha1DefaultContentMode/2
Failed to get test-kafka-sink-v1-alpha1-default-content-mode-2-xgn4x/: name is requiredFailed to get test-kafka-sink-v1-alpha1-default-content-mode-2-xgn4x/: name is required    operation.go:70: Failed to get the object { }- when dumping error state: name is required
    operation.go:75: Failed to get { }- ready: name is required
        knative.dev/eventing/test/lib.(*Client).WaitForResourceReadyOrFail
        	/home/prow/go/src/knative.dev/eventing-kafka-broker/vendor/knative.dev/eventing/test/lib/operation.go:75
        knative.dev/eventing-kafka-broker/test/e2e.TestKafkaSinkV1Alpha1DefaultContentMode.func1
        	/home/prow/go/src/knative.dev/eventing-kafka-broker/test/e2e/kafka_sink_test.go:64
        testing.tRunner
        	/root/.gvm/gos/go1.14.6/src/testing/testing.go:1039
        runtime.goexit
        	/root/.gvm/gos/go1.14.6/src/runtime/asm_amd64.s:1373
```
The same error...
/hold
/retest
knative-prow-robot: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-integration-tests | 3efac1aa1b33806ef051db3e6ad3991ef9eeeff5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/193/pull-knative-sandbox-eventing-kafka-broker-integration-tests/1307019339509010432) | `/test pull-knative-sandbox-eventing-kafka-broker-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/193). [Your PR dashboard](https://gubernator.knative.dev/pr/pierDipi).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow-robot: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-integration-tests | a21bf49e5e1b174e58121392e126bd605698fd36 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/193/pull-knative-sandbox-eventing-kafka-broker-integration-tests/1307966454334754818) | `/test pull-knative-sandbox-eventing-kafka-broker-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/193). [Your PR dashboard](https://gubernator.knative.dev/pr/pierDipi).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow-robot: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-integration-tests | 3efac1aa1b33806ef051db3e6ad3991ef9eeeff5 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/193/pull-knative-sandbox-eventing-kafka-broker-integration-tests/1307976897606455297) | `/test pull-knative-sandbox-eventing-kafka-broker-integration-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/193). [Your PR dashboard](https://gubernator.knative.dev/pr/pierDipi).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
pierDipi: /unhold
pierDipi: Worked, retesting
/test pull-knative-sandbox-eventing-kafka-broker-integration-tests
slinkydeveloper: /lgtm
/approve
knative-prow-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/193#" title="Author self-approved">pierDipi</a>*, *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/193#issuecomment-696085851" title="Approved">slinkydeveloper</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=knative-sandbox%2Feventing-kafka-broker).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/knative-sandbox/eventing-kafka-broker/blob/master/OWNERS)~~ [slinkydeveloper]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->

Patch:
diff --git a/control-plane/cmd/webhook-kafka/main.go b/control-plane/cmd/webhook-kafka/main.go
index 0bb73ddb1..c97e9c7ba 100644
--- a/control-plane/cmd/webhook-kafka/main.go
+++ b/control-plane/cmd/webhook-kafka/main.go
@@ -28,11 +28,9 @@ import (
 	"knative.dev/pkg/webhook"
 	"knative.dev/pkg/webhook/certificates"
 	"knative.dev/pkg/webhook/resourcesemantics"
-	"knative.dev/pkg/webhook/resourcesemantics/conversion"
 	"knative.dev/pkg/webhook/resourcesemantics/defaulting"
 	"knative.dev/pkg/webhook/resourcesemantics/validation"
 
-	"knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing"
 	eventingv1alpha1 "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
 )
 
@@ -52,7 +50,7 @@ func NewDefaultingAdmissionController(ctx context.Context, _ configmap.Watcher)
 
 	return defaulting.NewAdmissionController(ctx,
 		// Name of the resource webhook.
-		"defaulting.webhook.kafka."+eventing.GroupName,
+		"defaulting.webhook.kafka.eventing.knative.dev",
 
 		// The path on which to serve the webhook.
 		"/defaulting",
@@ -71,7 +69,7 @@ func NewDefaultingAdmissionController(ctx context.Context, _ configmap.Watcher)
 func NewValidationAdmissionController(ctx context.Context, _ configmap.Watcher) *controller.Impl {
 	return validation.NewAdmissionController(ctx,
 		// Name of the resource webhook.
-		"validation.webhook.kafka."+eventing.GroupName,
+		"validation.webhook.kafka.eventing.knative.dev",
 
 		// The path on which to serve the webhook.
 		"/resource-validation",
@@ -92,35 +90,6 @@ func NewValidationAdmissionController(ctx context.Context, _ configmap.Watcher)
 	)
 }
 
-func NewConversionController(ctx context.Context, _ configmap.Watcher) *controller.Impl {
-
-	var (
-		eventingv1alpha1_ = eventingv1alpha1.SchemeGroupVersion.Version
-	)
-
-	return conversion.NewConversionController(ctx,
-
-		// The path on which to serve the webhook
-		"/resource-conversion",
-
-		// Specify the types of custom resource definitions that should be converted
-		map[schema.GroupKind]conversion.GroupKindConversion{
-			eventingv1alpha1.Kind("KafkaSink"): {
-				DefinitionName: eventing.KafkaSinksResource.String(),
-				HubVersion:     eventingv1alpha1_,
-				Zygotes: map[string]conversion.ConvertibleObject{
-					eventingv1alpha1_: &eventingv1alpha1.KafkaSink{},
-				},
-			},
-		},
-
-		// A function that infuses the context passed to ConvertTo/ConvertFrom/SetDefaults with custom metadata.
-		func(ctx context.Context) context.Context {
-			return ctx
-		},
-	)
-}
-
 func main() {
 
 	// Set up a signal context with our webhook options
@@ -128,13 +97,12 @@ func main() {
 		ServiceName: logconfig.WebhookName(),
 		Port:        webhook.PortFromEnv(8443),
 		// SecretName must match the name of the Secret created in the configuration.
-		SecretName: "eventing-webhook-certs",
+		SecretName: "kafka-webhook-eventing-certs",
 	})
 
 	sharedmain.MainWithContext(ctx, logconfig.WebhookName(),
 		certificates.NewController,
 		NewDefaultingAdmissionController,
 		NewValidationAdmissionController,
-		NewConversionController,
 	)
 }
diff --git a/control-plane/config/sink/400-webhook-defaulting.yaml b/control-plane/config/sink/400-webhook-defaulting.yaml
new file mode 100644
index 000000000..0d40d773e
--- /dev/null
+++ b/control-plane/config/sink/400-webhook-defaulting.yaml
@@ -0,0 +1,30 @@
+# Copyright 2020 The Knative Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+  name: defaulting.webhook.kafka.eventing.knative.dev
+  labels:
+    eventing.knative.dev/release: devel
+webhooks:
+  - admissionReviewVersions: ["v1", "v1beta1"]
+    clientConfig:
+      service:
+        name: kafka-webhook-eventing
+        namespace: knative-eventing
+    sideEffects: None
+    failurePolicy: Fail
+    name: defaulting.webhook.kafka.eventing.knative.dev
+    timeoutSeconds: 2
diff --git a/control-plane/config/sink/400-webhook-secret.yaml b/control-plane/config/sink/400-webhook-secret.yaml
new file mode 100644
index 000000000..a6e29f48b
--- /dev/null
+++ b/control-plane/config/sink/400-webhook-secret.yaml
@@ -0,0 +1,22 @@
+# Copyright 2020 The Knative Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: Secret
+metadata:
+  name: kafka-webhook-eventing-certs
+  namespace: knative-eventing
+  labels:
+    eventing.knative.dev/release: devel
+# The data is populated at install time.
diff --git a/control-plane/config/sink/400-webhook-validation.yaml b/control-plane/config/sink/400-webhook-validation.yaml
new file mode 100644
index 000000000..79c1c87bc
--- /dev/null
+++ b/control-plane/config/sink/400-webhook-validation.yaml
@@ -0,0 +1,30 @@
+# Copyright 2020 The Knative Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+  name: validation.webhook.kafka.eventing.knative.dev
+  labels:
+    eventing.knative.dev/release: devel
+webhooks:
+  - admissionReviewVersions: ["v1", "v1beta1"]
+    clientConfig:
+      service:
+        name: kafka-webhook-eventing
+        namespace: knative-eventing
+    sideEffects: None
+    failurePolicy: Fail
+    name: validation.webhook.kafka.eventing.knative.dev
+    timeoutSeconds: 2
diff --git a/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation.go b/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation.go
index 6d9bd6a48..608960b9d 100644
--- a/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation.go
+++ b/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation.go
@@ -20,6 +20,7 @@ import (
 	"context"
 	"fmt"
 
+	"github.com/google/go-cmp/cmp"
 	"knative.dev/pkg/apis"
 )
 
@@ -54,6 +55,14 @@ func (kss *KafkaSinkSpec) Validate(ctx context.Context) *apis.FieldError {
 		errs = errs.Also(apis.ErrInvalidValue(kss.Topic, "topic"))
 	}
 
+	if kss.ReplicationFactor != nil && *kss.ReplicationFactor <= 0 {
+		errs = errs.Also(apis.ErrInvalidValue(*kss.ReplicationFactor, "replicationFactor"))
+	}
+
+	if kss.NumPartitions != nil && *kss.NumPartitions <= 0 {
+		errs = errs.Also(apis.ErrInvalidValue(*kss.NumPartitions, "numPartitions"))
+	}
+
 	return errs
 }
 
@@ -74,11 +83,11 @@ func (kss *KafkaSinkSpec) CheckImmutableFields(ctx context.Context, original *Ka
 		errs = errs.Also(ErrImmutableField("topic"))
 	}
 
-	if kss.ReplicationFactor != original.ReplicationFactor {
+	if !cmp.Equal(kss.ReplicationFactor, original.ReplicationFactor) {
 		errs = errs.Also(ErrImmutableField("replicationFactor"))
 	}
 
-	if kss.NumPartitions != original.NumPartitions {
+	if !cmp.Equal(kss.NumPartitions, original.NumPartitions) {
 		errs = errs.Also(ErrImmutableField("numPartitions"))
 	}
 
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/interface.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/interface.go
deleted file mode 100644
index 1bdd40e26..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/interface.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package apiextensions
-
-import (
-	v1 "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
-	v1beta1 "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1"
-	internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces"
-)
-
-// Interface provides access to each of this group's versions.
-type Interface interface {
-	// V1beta1 provides access to shared informers for resources in V1beta1.
-	V1beta1() v1beta1.Interface
-	// V1 provides access to shared informers for resources in V1.
-	V1() v1.Interface
-}
-
-type group struct {
-	factory          internalinterfaces.SharedInformerFactory
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// New returns a new Interface.
-func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
-	return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
-}
-
-// V1beta1 returns a new v1beta1.Interface.
-func (g *group) V1beta1() v1beta1.Interface {
-	return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
-}
-
-// V1 returns a new v1.Interface.
-func (g *group) V1() v1.Interface {
-	return v1.New(g.factory, g.namespace, g.tweakListOptions)
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1/customresourcedefinition.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1/customresourcedefinition.go
deleted file mode 100644
index 7d1b57111..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1/customresourcedefinition.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1
-
-import (
-	"context"
-	time "time"
-
-	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
-	clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
-	internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces"
-	v1 "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// CustomResourceDefinitionInformer provides access to a shared informer and lister for
-// CustomResourceDefinitions.
-type CustomResourceDefinitionInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v1.CustomResourceDefinitionLister
-}
-
-type customResourceDefinitionInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// NewCustomResourceDefinitionInformer constructs a new informer for CustomResourceDefinition type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewCustomResourceDefinitionInformer(client clientset.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredCustomResourceDefinitionInformer(client, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredCustomResourceDefinitionInformer constructs a new informer for CustomResourceDefinition type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredCustomResourceDefinitionInformer(client clientset.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ApiextensionsV1().CustomResourceDefinitions().List(context.TODO(), options)
-			},
-			WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ApiextensionsV1().CustomResourceDefinitions().Watch(context.TODO(), options)
-			},
-		},
-		&apiextensionsv1.CustomResourceDefinition{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *customResourceDefinitionInformer) defaultInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredCustomResourceDefinitionInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *customResourceDefinitionInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apiextensionsv1.CustomResourceDefinition{}, f.defaultInformer)
-}
-
-func (f *customResourceDefinitionInformer) Lister() v1.CustomResourceDefinitionLister {
-	return v1.NewCustomResourceDefinitionLister(f.Informer().GetIndexer())
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1/interface.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1/interface.go
deleted file mode 100644
index d96e2099a..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1/interface.go
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1
-
-import (
-	internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces"
-)
-
-// Interface provides access to all the informers in this group version.
-type Interface interface {
-	// CustomResourceDefinitions returns a CustomResourceDefinitionInformer.
-	CustomResourceDefinitions() CustomResourceDefinitionInformer
-}
-
-type version struct {
-	factory          internalinterfaces.SharedInformerFactory
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// New returns a new Interface.
-func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
-	return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
-}
-
-// CustomResourceDefinitions returns a CustomResourceDefinitionInformer.
-func (v *version) CustomResourceDefinitions() CustomResourceDefinitionInformer {
-	return &customResourceDefinitionInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1/customresourcedefinition.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1/customresourcedefinition.go
deleted file mode 100644
index 489c87ae9..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1/customresourcedefinition.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1beta1
-
-import (
-	"context"
-	time "time"
-
-	apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
-	clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
-	internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces"
-	v1beta1 "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	watch "k8s.io/apimachinery/pkg/watch"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// CustomResourceDefinitionInformer provides access to a shared informer and lister for
-// CustomResourceDefinitions.
-type CustomResourceDefinitionInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() v1beta1.CustomResourceDefinitionLister
-}
-
-type customResourceDefinitionInformer struct {
-	factory          internalinterfaces.SharedInformerFactory
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// NewCustomResourceDefinitionInformer constructs a new informer for CustomResourceDefinition type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewCustomResourceDefinitionInformer(client clientset.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
-	return NewFilteredCustomResourceDefinitionInformer(client, resyncPeriod, indexers, nil)
-}
-
-// NewFilteredCustomResourceDefinitionInformer constructs a new informer for CustomResourceDefinition type.
-// Always prefer using an informer factory to get a shared informer instead of getting an independent
-// one. This reduces memory footprint and number of connections to the server.
-func NewFilteredCustomResourceDefinitionInformer(client clientset.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
-	return cache.NewSharedIndexInformer(
-		&cache.ListWatch{
-			ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ApiextensionsV1beta1().CustomResourceDefinitions().List(context.TODO(), options)
-			},
-			WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
-				if tweakListOptions != nil {
-					tweakListOptions(&options)
-				}
-				return client.ApiextensionsV1beta1().CustomResourceDefinitions().Watch(context.TODO(), options)
-			},
-		},
-		&apiextensionsv1beta1.CustomResourceDefinition{},
-		resyncPeriod,
-		indexers,
-	)
-}
-
-func (f *customResourceDefinitionInformer) defaultInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
-	return NewFilteredCustomResourceDefinitionInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
-}
-
-func (f *customResourceDefinitionInformer) Informer() cache.SharedIndexInformer {
-	return f.factory.InformerFor(&apiextensionsv1beta1.CustomResourceDefinition{}, f.defaultInformer)
-}
-
-func (f *customResourceDefinitionInformer) Lister() v1beta1.CustomResourceDefinitionLister {
-	return v1beta1.NewCustomResourceDefinitionLister(f.Informer().GetIndexer())
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1/interface.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1/interface.go
deleted file mode 100644
index f78edbb59..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1/interface.go
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package v1beta1
-
-import (
-	internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces"
-)
-
-// Interface provides access to all the informers in this group version.
-type Interface interface {
-	// CustomResourceDefinitions returns a CustomResourceDefinitionInformer.
-	CustomResourceDefinitions() CustomResourceDefinitionInformer
-}
-
-type version struct {
-	factory          internalinterfaces.SharedInformerFactory
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-}
-
-// New returns a new Interface.
-func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
-	return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
-}
-
-// CustomResourceDefinitions returns a CustomResourceDefinitionInformer.
-func (v *version) CustomResourceDefinitions() CustomResourceDefinitionInformer {
-	return &customResourceDefinitionInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/factory.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/factory.go
deleted file mode 100644
index 94d039c72..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/factory.go
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package externalversions
-
-import (
-	reflect "reflect"
-	sync "sync"
-	time "time"
-
-	clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
-	apiextensions "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions"
-	internalinterfaces "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// SharedInformerOption defines the functional option type for SharedInformerFactory.
-type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
-
-type sharedInformerFactory struct {
-	client           clientset.Interface
-	namespace        string
-	tweakListOptions internalinterfaces.TweakListOptionsFunc
-	lock             sync.Mutex
-	defaultResync    time.Duration
-	customResync     map[reflect.Type]time.Duration
-
-	informers map[reflect.Type]cache.SharedIndexInformer
-	// startedInformers is used for tracking which informers have been started.
-	// This allows Start() to be called multiple times safely.
-	startedInformers map[reflect.Type]bool
-}
-
-// WithCustomResyncConfig sets a custom resync period for the specified informer types.
-func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption {
-	return func(factory *sharedInformerFactory) *sharedInformerFactory {
-		for k, v := range resyncConfig {
-			factory.customResync[reflect.TypeOf(k)] = v
-		}
-		return factory
-	}
-}
-
-// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory.
-func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption {
-	return func(factory *sharedInformerFactory) *sharedInformerFactory {
-		factory.tweakListOptions = tweakListOptions
-		return factory
-	}
-}
-
-// WithNamespace limits the SharedInformerFactory to the specified namespace.
-func WithNamespace(namespace string) SharedInformerOption {
-	return func(factory *sharedInformerFactory) *sharedInformerFactory {
-		factory.namespace = namespace
-		return factory
-	}
-}
-
-// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
-func NewSharedInformerFactory(client clientset.Interface, defaultResync time.Duration) SharedInformerFactory {
-	return NewSharedInformerFactoryWithOptions(client, defaultResync)
-}
-
-// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory.
-// Listers obtained via this SharedInformerFactory will be subject to the same filters
-// as specified here.
-// Deprecated: Please use NewSharedInformerFactoryWithOptions instead
-func NewFilteredSharedInformerFactory(client clientset.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
-	return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
-}
-
-// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options.
-func NewSharedInformerFactoryWithOptions(client clientset.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory {
-	factory := &sharedInformerFactory{
-		client:           client,
-		namespace:        v1.NamespaceAll,
-		defaultResync:    defaultResync,
-		informers:        make(map[reflect.Type]cache.SharedIndexInformer),
-		startedInformers: make(map[reflect.Type]bool),
-		customResync:     make(map[reflect.Type]time.Duration),
-	}
-
-	// Apply all options
-	for _, opt := range options {
-		factory = opt(factory)
-	}
-
-	return factory
-}
-
-// Start initializes all requested informers.
-func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
-	f.lock.Lock()
-	defer f.lock.Unlock()
-
-	for informerType, informer := range f.informers {
-		if !f.startedInformers[informerType] {
-			go informer.Run(stopCh)
-			f.startedInformers[informerType] = true
-		}
-	}
-}
-
-// WaitForCacheSync waits for all started informers' cache were synced.
-func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
-	informers := func() map[reflect.Type]cache.SharedIndexInformer {
-		f.lock.Lock()
-		defer f.lock.Unlock()
-
-		informers := map[reflect.Type]cache.SharedIndexInformer{}
-		for informerType, informer := range f.informers {
-			if f.startedInformers[informerType] {
-				informers[informerType] = informer
-			}
-		}
-		return informers
-	}()
-
-	res := map[reflect.Type]bool{}
-	for informType, informer := range informers {
-		res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced)
-	}
-	return res
-}
-
-// InternalInformerFor returns the SharedIndexInformer for obj using an internal
-// client.
-func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
-	f.lock.Lock()
-	defer f.lock.Unlock()
-
-	informerType := reflect.TypeOf(obj)
-	informer, exists := f.informers[informerType]
-	if exists {
-		return informer
-	}
-
-	resyncPeriod, exists := f.customResync[informerType]
-	if !exists {
-		resyncPeriod = f.defaultResync
-	}
-
-	informer = newFunc(f.client, resyncPeriod)
-	f.informers[informerType] = informer
-
-	return informer
-}
-
-// SharedInformerFactory provides shared informers for resources in all known
-// API group versions.
-type SharedInformerFactory interface {
-	internalinterfaces.SharedInformerFactory
-	ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
-	WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
-
-	Apiextensions() apiextensions.Interface
-}
-
-func (f *sharedInformerFactory) Apiextensions() apiextensions.Interface {
-	return apiextensions.New(f, f.namespace, f.tweakListOptions)
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/generic.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/generic.go
deleted file mode 100644
index 86f79cd41..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/generic.go
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package externalversions
-
-import (
-	"fmt"
-
-	v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
-	v1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
-	schema "k8s.io/apimachinery/pkg/runtime/schema"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// GenericInformer is type of SharedIndexInformer which will locate and delegate to other
-// sharedInformers based on type
-type GenericInformer interface {
-	Informer() cache.SharedIndexInformer
-	Lister() cache.GenericLister
-}
-
-type genericInformer struct {
-	informer cache.SharedIndexInformer
-	resource schema.GroupResource
-}
-
-// Informer returns the SharedIndexInformer.
-func (f *genericInformer) Informer() cache.SharedIndexInformer {
-	return f.informer
-}
-
-// Lister returns the GenericLister.
-func (f *genericInformer) Lister() cache.GenericLister {
-	return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource)
-}
-
-// ForResource gives generic access to a shared informer of the matching type
-// TODO extend this to unknown resources with a client pool
-func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
-	switch resource {
-	// Group=apiextensions.k8s.io, Version=v1
-	case v1.SchemeGroupVersion.WithResource("customresourcedefinitions"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Apiextensions().V1().CustomResourceDefinitions().Informer()}, nil
-
-		// Group=apiextensions.k8s.io, Version=v1beta1
-	case v1beta1.SchemeGroupVersion.WithResource("customresourcedefinitions"):
-		return &genericInformer{resource: resource.GroupResource(), informer: f.Apiextensions().V1beta1().CustomResourceDefinitions().Informer()}, nil
-
-	}
-
-	return nil, fmt.Errorf("no informer found for %v", resource)
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go
deleted file mode 100644
index da6eadaa7..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by informer-gen. DO NOT EDIT.
-
-package internalinterfaces
-
-import (
-	time "time"
-
-	clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
-	cache "k8s.io/client-go/tools/cache"
-)
-
-// NewInformerFunc takes clientset.Interface and time.Duration to return a SharedIndexInformer.
-type NewInformerFunc func(clientset.Interface, time.Duration) cache.SharedIndexInformer
-
-// SharedInformerFactory a small interface to allow for adding an informer without an import cycle
-type SharedInformerFactory interface {
-	Start(stopCh <-chan struct{})
-	InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer
-}
-
-// TweakListOptionsFunc is a function that transforms a v1.ListOptions.
-type TweakListOptionsFunc func(*v1.ListOptions)
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1/customresourcedefinition.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1/customresourcedefinition.go
deleted file mode 100644
index 683ce9498..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1/customresourcedefinition.go
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v1
-
-import (
-	v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
-	"k8s.io/apimachinery/pkg/api/errors"
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/client-go/tools/cache"
-)
-
-// CustomResourceDefinitionLister helps list CustomResourceDefinitions.
-type CustomResourceDefinitionLister interface {
-	// List lists all CustomResourceDefinitions in the indexer.
-	List(selector labels.Selector) (ret []*v1.CustomResourceDefinition, err error)
-	// Get retrieves the CustomResourceDefinition from the index for a given name.
-	Get(name string) (*v1.CustomResourceDefinition, error)
-	CustomResourceDefinitionListerExpansion
-}
-
-// customResourceDefinitionLister implements the CustomResourceDefinitionLister interface.
-type customResourceDefinitionLister struct {
-	indexer cache.Indexer
-}
-
-// NewCustomResourceDefinitionLister returns a new CustomResourceDefinitionLister.
-func NewCustomResourceDefinitionLister(indexer cache.Indexer) CustomResourceDefinitionLister {
-	return &customResourceDefinitionLister{indexer: indexer}
-}
-
-// List lists all CustomResourceDefinitions in the indexer.
-func (s *customResourceDefinitionLister) List(selector labels.Selector) (ret []*v1.CustomResourceDefinition, err error) {
-	err = cache.ListAll(s.indexer, selector, func(m interface{}) {
-		ret = append(ret, m.(*v1.CustomResourceDefinition))
-	})
-	return ret, err
-}
-
-// Get retrieves the CustomResourceDefinition from the index for a given name.
-func (s *customResourceDefinitionLister) Get(name string) (*v1.CustomResourceDefinition, error) {
-	obj, exists, err := s.indexer.GetByKey(name)
-	if err != nil {
-		return nil, err
-	}
-	if !exists {
-		return nil, errors.NewNotFound(v1.Resource("customresourcedefinition"), name)
-	}
-	return obj.(*v1.CustomResourceDefinition), nil
-}
diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1/expansion_generated.go b/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1/expansion_generated.go
deleted file mode 100644
index 609d86be3..000000000
--- a/vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1/expansion_generated.go
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by lister-gen. DO NOT EDIT.
-
-package v1
-
-// CustomResourceDefinitionListerExpansion allows custom methods to be added to
-// CustomResourceDefinitionLister.
-type CustomResourceDefinitionListerExpansion interface{}
diff --git a/vendor/knative.dev/pkg/client/injection/apiextensions/client/client.go b/vendor/knative.dev/pkg/client/injection/apiextensions/client/client.go
deleted file mode 100644
index 0881e8704..000000000
--- a/vendor/knative.dev/pkg/client/injection/apiextensions/client/client.go
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Copyright 2020 The Knative Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by injection-gen. DO NOT EDIT.
-
-package client
-
-import (
-	context "context"
-
-	clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
-	rest "k8s.io/client-go/rest"
-	injection "knative.dev/pkg/injection"
-	logging "knative.dev/pkg/logging"
-)
-
-func init() {
-	injection.Default.RegisterClient(withClient)
-}
-
-// Key is used as the key for associating information with a context.Context.
-type Key struct{}
-
-func withClient(ctx context.Context, cfg *rest.Config) context.Context {
-	return context.WithValue(ctx, Key{}, clientset.NewForConfigOrDie(cfg))
-}
-
-// Get extracts the clientset.Interface client from the context.
-func Get(ctx context.Context) clientset.Interface {
-	untyped := ctx.Value(Key{})
-	if untyped == nil {
-		logging.FromContext(ctx).Panic(
-			"Unable to fetch k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset.Interface from context.")
-	}
-	return untyped.(clientset.Interface)
-}
diff --git a/vendor/knative.dev/pkg/client/injection/apiextensions/informers/apiextensions/v1/customresourcedefinition/customresourcedefinition.go b/vendor/knative.dev/pkg/client/injection/apiextensions/informers/apiextensions/v1/customresourcedefinition/customresourcedefinition.go
deleted file mode 100644
index 9c7757d3e..000000000
--- a/vendor/knative.dev/pkg/client/injection/apiextensions/informers/apiextensions/v1/customresourcedefinition/customresourcedefinition.go
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Copyright 2020 The Knative Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by injection-gen. DO NOT EDIT.
-
-package customresourcedefinition
-
-import (
-	context "context"
-
-	v1 "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
-	factory "knative.dev/pkg/client/injection/apiextensions/informers/factory"
-	controller "knative.dev/pkg/controller"
-	injection "knative.dev/pkg/injection"
-	logging "knative.dev/pkg/logging"
-)
-
-func init() {
-	injection.Default.RegisterInformer(withInformer)
-}
-
-// Key is used for associating the Informer inside the context.Context.
-type Key struct{}
-
-func withInformer(ctx context.Context) (context.Context, controller.Informer) {
-	f := factory.Get(ctx)
-	inf := f.Apiextensions().V1().CustomResourceDefinitions()
-	return context.WithValue(ctx, Key{}, inf), inf.Informer()
-}
-
-// Get extracts the typed informer from the context.
-func Get(ctx context.Context) v1.CustomResourceDefinitionInformer {
-	untyped := ctx.Value(Key{})
-	if untyped == nil {
-		logging.FromContext(ctx).Panic(
-			"Unable to fetch k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1.CustomResourceDefinitionInformer from context.")
-	}
-	return untyped.(v1.CustomResourceDefinitionInformer)
-}
diff --git a/vendor/knative.dev/pkg/client/injection/apiextensions/informers/factory/factory.go b/vendor/knative.dev/pkg/client/injection/apiextensions/informers/factory/factory.go
deleted file mode 100644
index 346d9b673..000000000
--- a/vendor/knative.dev/pkg/client/injection/apiextensions/informers/factory/factory.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright 2020 The Knative Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Code generated by injection-gen. DO NOT EDIT.
-
-package factory
-
-import (
-	context "context"
-
-	externalversions "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions"
-	client "knative.dev/pkg/client/injection/apiextensions/client"
-	controller "knative.dev/pkg/controller"
-	injection "knative.dev/pkg/injection"
-	logging "knative.dev/pkg/logging"
-)
-
-func init() {
-	injection.Default.RegisterInformerFactory(withInformerFactory)
-}
-
-// Key is used as the key for associating information with a context.Context.
-type Key struct{}
-
-func withInformerFactory(ctx context.Context) context.Context {
-	c := client.Get(ctx)
-	opts := make([]externalversions.SharedInformerOption, 0, 1)
-	if injection.HasNamespaceScope(ctx) {
-		opts = append(opts, externalversions.WithNamespace(injection.GetNamespaceScope(ctx)))
-	}
-	return context.WithValue(ctx, Key{},
-		externalversions.NewSharedInformerFactoryWithOptions(c, controller.GetResyncPeriod(ctx), opts...))
-}
-
-// Get extracts the InformerFactory from the context.
-func Get(ctx context.Context) externalversions.SharedInformerFactory {
-	untyped := ctx.Value(Key{})
-	if untyped == nil {
-		logging.FromContext(ctx).Panic(
-			"Unable to fetch k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions.SharedInformerFactory from context.")
-	}
-	return untyped.(externalversions.SharedInformerFactory)
-}
diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/controller.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/controller.go
deleted file mode 100644
index a53915a87..000000000
--- a/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/controller.go
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-Copyright 2020 The Knative Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package conversion
-
-import (
-	"context"
-
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
-	"k8s.io/apimachinery/pkg/types"
-	"k8s.io/client-go/tools/cache"
-	"knative.dev/pkg/apis"
-	apixclient "knative.dev/pkg/client/injection/apiextensions/client"
-	crdinformer "knative.dev/pkg/client/injection/apiextensions/informers/apiextensions/v1/customresourcedefinition"
-	"knative.dev/pkg/controller"
-	secretinformer "knative.dev/pkg/injection/clients/namespacedkube/informers/core/v1/secret"
-	"knative.dev/pkg/logging"
-	pkgreconciler "knative.dev/pkg/reconciler"
-	"knative.dev/pkg/system"
-	"knative.dev/pkg/webhook"
-)
-
-// ConvertibleObject defines the functionality our API types
-// are required to implement in order to be convertible from
-// one version to another
-//
-// Optionally if the object implements apis.Defaultable the
-// ConversionController will apply defaults before returning
-// the response
-type ConvertibleObject interface {
-	// ConvertTo(ctx, to)
-	// ConvertFrom(ctx, from)
-	apis.Convertible
-
-	// DeepCopyObject()
-	// GetObjectKind() => SetGroupVersionKind(gvk)
-	runtime.Object
-}
-
-// GroupKindConversion specifies how a specific Kind for a given
-// group should be converted
-type GroupKindConversion struct {
-	// DefinitionName specifies the CustomResourceDefinition that should
-	// be reconciled with by the controller.
-	//
-	// The conversion webhook configuration will be updated
-	// when the CA bundle changes
-	DefinitionName string
-
-	// HubVersion specifies which version of the CustomResource supports
-	// convertions to and from all types
-	//
-	// It is expected that the Zygotes map contains an entry for the
-	// specified HubVersion
-	HubVersion string
-
-	// Zygotes contains a map of version strings (ie. v1, v2) to empty
-	// ConvertibleObject objects
-	//
-	// During a conversion request these zygotes will be deep copied
-	// and manipulated using the apis.Convertible interface
-	Zygotes map[string]ConvertibleObject
-}
-
-// NewConversionController returns a K8s controller that will
-// will reconcile CustomResourceDefinitions and update their
-// conversion webhook attributes such as path & CA bundle.
-//
-// Additionally the controller's Reconciler implements
-// webhook.ConversionController for the purposes of converting
-// resources between different versions
-func NewConversionController(
-	ctx context.Context,
-	path string,
-	kinds map[schema.GroupKind]GroupKindConversion,
-	withContext func(context.Context) context.Context,
-) *controller.Impl {
-
-	secretInformer := secretinformer.Get(ctx)
-	crdInformer := crdinformer.Get(ctx)
-	client := apixclient.Get(ctx)
-	options := webhook.GetOptions(ctx)
-
-	r := &reconciler{
-		LeaderAwareFuncs: pkgreconciler.LeaderAwareFuncs{
-			// Have this reconciler enqueue our types whenever it becomes leader.
-			PromoteFunc: func(bkt pkgreconciler.Bucket, enq func(pkgreconciler.Bucket, types.NamespacedName)) error {
-				for _, gkc := range kinds {
-					name := gkc.DefinitionName
-					enq(bkt, types.NamespacedName{Name: name})
-				}
-				return nil
-			},
-		},
-
-		kinds:       kinds,
-		path:        path,
-		secretName:  options.SecretName,
-		withContext: withContext,
-
-		client:       client,
-		secretLister: secretInformer.Lister(),
-		crdLister:    crdInformer.Lister(),
-	}
-
-	c := controller.NewImpl(r, logging.FromContext(ctx), "ConversionWebhook")
-
-	// Reconciler when the named CRDs change.
-	for _, gkc := range kinds {
-		name := gkc.DefinitionName
-
-		crdInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
-			FilterFunc: controller.FilterWithName(name),
-			Handler:    controller.HandleAll(c.Enqueue),
-		})
-
-		sentinel := c.EnqueueSentinel(types.NamespacedName{Name: name})
-
-		// Reconcile when the cert bundle changes.
-		secretInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
-			FilterFunc: controller.FilterWithNameAndNamespace(system.Namespace(), options.SecretName),
-			Handler:    controller.HandleAll(sentinel),
-		})
-	}
-
-	return c
-}
diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/conversion.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/conversion.go
deleted file mode 100644
index ddc4681e3..000000000
--- a/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/conversion.go
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-Copyright 2020 The Knative Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package conversion
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-
-	"go.uber.org/zap"
-
-	apixv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
-
-	"knative.dev/pkg/apis"
-	"knative.dev/pkg/kmeta"
-	"knative.dev/pkg/logging"
-	"knative.dev/pkg/logging/logkey"
-)
-
-// Convert implements webhook.ConversionController
-func (r *reconciler) Convert(
-	ctx context.Context,
-	req *apixv1.ConversionRequest,
-) *apixv1.ConversionResponse {
-
-	if r.withContext != nil {
-		ctx = r.withContext(ctx)
-	}
-
-	res := &apixv1.ConversionResponse{
-		UID: req.UID,
-		Result: metav1.Status{
-			Status: metav1.StatusSuccess,
-		},
-	}
-
-	result := make([]runtime.RawExtension, 0, len(req.Objects))
-
-	for _, obj := range req.Objects {
-		converted, err := r.convert(ctx, obj, req.DesiredAPIVersion)
-		if err != nil {
-			logging.FromContext(ctx).Errorf("Conversion failed: %v", err)
-			res.Result.Status = metav1.StatusFailure
-			res.Result.Message = err.Error()
-			break
-		}
-
-		result = append(result, converted)
-	}
-
-	res.ConvertedObjects = result
-	return res
-}
-
-func (r *reconciler) convert(
-	ctx context.Context,
-	inRaw runtime.RawExtension,
-	targetVersion string,
-) (runtime.RawExtension, error) {
-	logger := logging.FromContext(ctx)
-	var ret runtime.RawExtension
-
-	inGVK, err := parseGVK(inRaw)
-	if err != nil {
-		return ret, err
-	}
-
-	inGK := inGVK.GroupKind()
-	conv, ok := r.kinds[inGK]
-	if !ok {
-		return ret, fmt.Errorf("no conversion support for type %s", formatGK(inGVK.GroupKind()))
-	}
-
-	outGVK, err := parseAPIVersion(targetVersion, inGK.Kind)
-	if err != nil {
-		return ret, err
-	}
-
-	inZygote, ok := conv.Zygotes[inGVK.Version]
-	if !ok {
-		return ret, fmt.Errorf("conversion not supported for type %s", formatGVK(inGVK))
-	}
-	outZygote, ok := conv.Zygotes[outGVK.Version]
-	if !ok {
-		return ret, fmt.Errorf("conversion not supported for type %s", formatGVK(outGVK))
-	}
-	hubZygote, ok := conv.Zygotes[conv.HubVersion]
-	if !ok {
-		return ret, fmt.Errorf("conversion not supported for type %s", formatGK(inGVK.GroupKind()))
-	}
-
-	in := inZygote.DeepCopyObject().(ConvertibleObject)
-	hub := hubZygote.DeepCopyObject().(ConvertibleObject)
-	out := outZygote.DeepCopyObject().(ConvertibleObject)
-
-	hubGVK := inGVK.GroupKind().WithVersion(conv.HubVersion)
-
-	logger = logger.With(
-		zap.String("inputType", formatGVK(inGVK)),
-		zap.String("outputType", formatGVK(outGVK)),
-		zap.String("hubType", formatGVK(hubGVK)),
-	)
-
-	// TODO(dprotaso) - potentially error on unknown fields
-	if err = json.Unmarshal(inRaw.Raw, &in); err != nil {
-		return ret, fmt.Errorf("unable to unmarshal input: %w", err)
-	}
-
-	if acc, err := kmeta.DeletionHandlingAccessor(in); err == nil {
-		// TODO: right now we don't convert any non-namespaced objects. If we ever do that
-		// this needs to updated to deal with it.
-		logger = logger.With(zap.String(logkey.Key, acc.GetNamespace()+"/"+acc.GetName()))
-	} else {
-		logger.Infof("Could not get Accessor for %s: %v", formatGK(inGVK.GroupKind()), err)
-	}
-	ctx = logging.WithLogger(ctx, logger)
-
-	if inGVK.Version == conv.HubVersion {
-		hub = in
-	} else if err = hub.ConvertFrom(ctx, in); err != nil {
-		return ret, fmt.Errorf("conversion failed to version %s for type %s -  %w", outGVK.Version, formatGVK(inGVK), err)
-	}
-
-	if outGVK.Version == conv.HubVersion {
-		out = hub
-	} else if err = hub.ConvertTo(ctx, out); err != nil {
-		return ret, fmt.Errorf("conversion failed to version %s for type %s -  %w", outGVK.Version, formatGVK(inGVK), err)
-	}
-
-	out.GetObjectKind().SetGroupVersionKind(outGVK)
-
-	if defaultable, ok := out.(apis.Defaultable); ok {
-		defaultable.SetDefaults(ctx)
-	}
-
-	if ret.Raw, err = json.Marshal(out); err != nil {
-		return ret, fmt.Errorf("unable to marshal output: %w", err)
-	}
-	return ret, nil
-}
-
-func parseGVK(in runtime.RawExtension) (schema.GroupVersionKind, error) {
-	var (
-		typeMeta metav1.TypeMeta
-		gvk      schema.GroupVersionKind
-	)
-
-	if err := json.Unmarshal(in.Raw, &typeMeta); err != nil {
-		return gvk, fmt.Errorf("error parsing type meta %q - %w", string(in.Raw), err)
-	}
-
-	gv, err := schema.ParseGroupVersion(typeMeta.APIVersion)
-	if err != nil {
-		return gvk, fmt.Errorf("error parsing GV %q: %w", typeMeta.APIVersion, err)
-	}
-	gvk = gv.WithKind(typeMeta.Kind)
-
-	if gvk.Group == "" || gvk.Version == "" || gvk.Kind == "" {
-		return gvk, fmt.Errorf("invalid GroupVersionKind %v", gvk)
-	}
-
-	return gvk, nil
-}
-
-func parseAPIVersion(apiVersion string, kind string) (schema.GroupVersionKind, error) {
-	gv, err := schema.ParseGroupVersion(apiVersion)
-	if err != nil {
-		err = fmt.Errorf("desired API version %q is not valid", apiVersion)
-		return schema.GroupVersionKind{}, err
-	}
-
-	if !isValidGV(gv) {
-		err = fmt.Errorf("desired API version %q is not valid", apiVersion)
-		return schema.GroupVersionKind{}, err
-	}
-
-	return gv.WithKind(kind), nil
-}
-
-func formatGVK(gvk schema.GroupVersionKind) string {
-	return fmt.Sprintf("[kind=%s group=%s version=%s]", gvk.Kind, gvk.Group, gvk.Version)
-}
-
-func formatGK(gk schema.GroupKind) string {
-	return fmt.Sprintf("[kind=%s group=%s]", gk.Kind, gk.Group)
-}
-
-func isValidGV(gk schema.GroupVersion) bool {
-	return gk.Group != "" && gk.Version != ""
-}
diff --git a/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/reconciler.go b/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/reconciler.go
deleted file mode 100644
index 97d45ac2a..000000000
--- a/vendor/knative.dev/pkg/webhook/resourcesemantics/conversion/reconciler.go
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-Copyright 2020 The Knative Authors
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package conversion
-
-import (
-	"context"
-	"fmt"
-
-	apixv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
-	apixclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
-	apixlisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime/schema"
-	"k8s.io/apimachinery/pkg/types"
-	corelisters "k8s.io/client-go/listers/core/v1"
-	"knative.dev/pkg/controller"
-	"knative.dev/pkg/kmp"
-	"knative.dev/pkg/logging"
-	"knative.dev/pkg/ptr"
-	pkgreconciler "knative.dev/pkg/reconciler"
-	"knative.dev/pkg/system"
-	"knative.dev/pkg/webhook"
-	certresources "knative.dev/pkg/webhook/certificates/resources"
-)
-
-type reconciler struct {
-	pkgreconciler.LeaderAwareFuncs
-
-	kinds       map[schema.GroupKind]GroupKindConversion
-	path        string
-	secretName  string
-	withContext func(context.Context) context.Context
-
-	secretLister corelisters.SecretLister
-	crdLister    apixlisters.CustomResourceDefinitionLister
-	client       apixclient.Interface
-}
-
-var _ webhook.ConversionController = (*reconciler)(nil)
-var _ controller.Reconciler = (*reconciler)(nil)
-var _ pkgreconciler.LeaderAware = (*reconciler)(nil)
-
-// Path implements webhook.ConversionController
-func (r *reconciler) Path() string {
-	return r.path
-}
-
-// Reconciler implements controller.Reconciler
-func (r *reconciler) Reconcile(ctx context.Context, key string) error {
-	logger := logging.FromContext(ctx)
-
-	if !r.IsLeaderFor(types.NamespacedName{Name: key}) {
-		logger.Debugf("Skipping key %q, not the leader.", key)
-		return nil
-	}
-
-	// Look up the webhook secret, and fetch the CA cert bundle.
-	secret, err := r.secretLister.Secrets(system.Namespace()).Get(r.secretName)
-	if err != nil {
-		logger.Errorf("Error fetching secret: %v", err)
-		return err
-	}
-
-	cacert, ok := secret.Data[certresources.CACert]
-	if !ok {
-		return fmt.Errorf("secret %q is missing %q key", r.secretName, certresources.CACert)
-	}
-
-	return r.reconcileCRD(ctx, cacert, key)
-}
-
-func (r *reconciler) reconcileCRD(ctx context.Context, cacert []byte, key string) error {
-	logger := logging.FromContext(ctx)
-
-	configuredCRD, err := r.crdLister.Get(key)
-	if err != nil {
-		return fmt.Errorf("error retrieving crd: %w", err)
-	}
-
-	crd := configuredCRD.DeepCopy()
-
-	if crd.Spec.Conversion == nil ||
-		crd.Spec.Conversion.Strategy != apixv1.WebhookConverter ||
-		crd.Spec.Conversion.Webhook.ClientConfig == nil ||
-		crd.Spec.Conversion.Webhook.ClientConfig.Service == nil {
-		return fmt.Errorf("custom resource %q isn't configured for webhook conversion", key)
-	}
-
-	crd.Spec.Conversion.Webhook.ClientConfig.CABundle = cacert
-	crd.Spec.Conversion.Webhook.ClientConfig.Service.Path = ptr.String(r.path)
-
-	if ok, err := kmp.SafeEqual(configuredCRD, crd); err != nil {
-		return fmt.Errorf("error diffing custom resource definitions: %w", err)
-	} else if !ok {
-		logger.Infof("updating CRD")
-		crdClient := r.client.ApiextensionsV1().CustomResourceDefinitions()
-		if _, err := crdClient.Update(ctx, crd, metav1.UpdateOptions{}); err != nil {
-			return fmt.Errorf("failed to update webhook: %w", err)
-		}
-	} else {
-		logger.Info("CRD is up to date")
-	}
-
-	return nil
-}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 0410b51be..778c07758 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -704,12 +704,6 @@ k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextension
 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1/fake
 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1
 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1/fake
-k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions
-k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions
-k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1
-k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1
-k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces
-k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1
 k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1
 # k8s.io/apimachinery v0.18.8 => k8s.io/apimachinery v0.18.8
 ## explicit
@@ -1176,9 +1170,6 @@ knative.dev/pkg/apis/duck/v1alpha1
 knative.dev/pkg/apis/duck/v1beta1
 knative.dev/pkg/apis/testing/fuzzer
 knative.dev/pkg/changeset
-knative.dev/pkg/client/injection/apiextensions/client
-knative.dev/pkg/client/injection/apiextensions/informers/apiextensions/v1/customresourcedefinition
-knative.dev/pkg/client/injection/apiextensions/informers/factory
 knative.dev/pkg/client/injection/ducks/duck/v1/addressable
 knative.dev/pkg/client/injection/ducks/duck/v1/addressable/fake
 knative.dev/pkg/client/injection/kube/client
@@ -1250,7 +1241,6 @@ knative.dev/pkg/webhook
 knative.dev/pkg/webhook/certificates
 knative.dev/pkg/webhook/certificates/resources
 knative.dev/pkg/webhook/resourcesemantics
-knative.dev/pkg/webhook/resourcesemantics/conversion
 knative.dev/pkg/webhook/resourcesemantics/defaulting
 knative.dev/pkg/webhook/resourcesemantics/validation
 # knative.dev/test-infra v0.0.0-20200916223841-d362984af929


Test patch:
diff --git a/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation_test.go b/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation_test.go
index 78d26267d..66254e67e 100644
--- a/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation_test.go
+++ b/control-plane/pkg/apis/eventing/v1alpha1/kafka_sink_validation_test.go
@@ -71,6 +71,62 @@ func TestKafkaSink_Validate(t *testing.T) {
 			ctx:  context.Background(),
 			want: apis.ErrInvalidValue("str", "spec.contentMode"),
 		},
+		{
+			name: "invalid num partitions 0",
+			ks: &KafkaSink{
+				Spec: KafkaSinkSpec{
+					Topic:             "topic-name-1",
+					BootstrapServers:  []string{"broker-1:9092"},
+					ContentMode:       pointer.StringPtr(ModeBinary),
+					ReplicationFactor: pointerInt16(10),
+					NumPartitions:     pointer.Int32Ptr(0),
+				},
+			},
+			ctx:  context.Background(),
+			want: apis.ErrInvalidValue("0", "spec.numPartitions"),
+		},
+		{
+			name: "invalid num partitions",
+			ks: &KafkaSink{
+				Spec: KafkaSinkSpec{
+					Topic:             "topic-name-1",
+					BootstrapServers:  []string{"broker-1:9092"},
+					ContentMode:       pointer.StringPtr(ModeBinary),
+					ReplicationFactor: pointerInt16(10),
+					NumPartitions:     pointer.Int32Ptr(-10),
+				},
+			},
+			ctx:  context.Background(),
+			want: apis.ErrInvalidValue("-10", "spec.numPartitions"),
+		},
+		{
+			name: "invalid replication factor 0",
+			ks: &KafkaSink{
+				Spec: KafkaSinkSpec{
+					Topic:             "topic-name-1",
+					BootstrapServers:  []string{"broker-1:9092"},
+					ContentMode:       pointer.StringPtr(ModeBinary),
+					ReplicationFactor: pointerInt16(0),
+					NumPartitions:     pointer.Int32Ptr(10),
+				},
+			},
+			ctx:  context.Background(),
+			want: apis.ErrInvalidValue("0", "spec.replicationFactor"),
+		},
+		{
+			name: "invalid replication factor",
+			ks: &KafkaSink{
+				Spec: KafkaSinkSpec{
+					Topic:             "topic-name-1",
+					BootstrapServers:  []string{"broker-1:9092"},
+					ContentMode:       pointer.StringPtr(ModeBinary),
+					ReplicationFactor: pointerInt16(-10),
+					NumPartitions:     pointer.Int32Ptr(10),
+				},
+			},
+			ctx:  context.Background(),
+			want: apis.ErrInvalidValue("-10", "spec.replicationFactor"),
+		},
 		{
 			name: "immutable replication factor",
 			ks: &KafkaSink{
@@ -78,6 +134,7 @@ func TestKafkaSink_Validate(t *testing.T) {
 					Topic:             "topic-name-1",
 					BootstrapServers:  []string{"broker-1:9092"},
 					ReplicationFactor: pointerInt16(10),
+					NumPartitions:     pointer.Int32Ptr(10),
 				},
 			},
 			ctx: apis.WithinUpdate(context.Background(), &KafkaSink{
@@ -85,6 +142,7 @@ func TestKafkaSink_Validate(t *testing.T) {
 					Topic:             "topic-name-1",
 					BootstrapServers:  []string{"broker-2:9092"},
 					ReplicationFactor: pointerInt16(11),
+					NumPartitions:     pointer.Int32Ptr(10),
 				},
 			}),
 			want: ErrImmutableField("spec.replicationFactor"),
@@ -93,16 +151,18 @@ func TestKafkaSink_Validate(t *testing.T) {
 			name: "immutable num partitions",
 			ks: &KafkaSink{
 				Spec: KafkaSinkSpec{
-					Topic:            "topic-name-1",
-					BootstrapServers: []string{"broker-1:9092"},
-					NumPartitions:    pointer.Int32Ptr(10),
+					Topic:             "topic-name-1",
+					BootstrapServers:  []string{"broker-1:9092"},
+					ReplicationFactor: pointerInt16(11),
+					NumPartitions:     pointer.Int32Ptr(10),
 				},
 			},
 			ctx: apis.WithinUpdate(context.Background(), &KafkaSink{
 				Spec: KafkaSinkSpec{
-					Topic:            "topic-name-1",
-					BootstrapServers: []string{"broker-2:9092"},
-					NumPartitions:    pointer.Int32Ptr(11),
+					Topic:             "topic-name-1",
+					BootstrapServers:  []string{"broker-2:9092"},
+					ReplicationFactor: pointerInt16(11),
+					NumPartitions:     pointer.Int32Ptr(11),
 				},
 			}),
 			want: ErrImmutableField("spec.numPartitions"),
diff --git a/test/e2e-common.sh b/test/e2e-common.sh
index 7ca974e02..81117dd4c 100644
--- a/test/e2e-common.sh
+++ b/test/e2e-common.sh
@@ -120,7 +120,7 @@ function test_setup() {
   kubectl rollout restart deployment -n knative-eventing kafka-broker-dispatcher
   kubectl rollout restart deployment -n knative-eventing kafka-sink-receiver
 
-  scale_controlplane kafka-controller eventing-webhook eventing-controller
+  scale_controlplane kafka-controller kafka-webhook-eventing eventing-webhook eventing-controller
 }
 
 function test_teardown() {
diff --git a/test/pkg/testing/run.go b/test/pkg/testing/run.go
index 941bc9fd4..5c49366be 100644
--- a/test/pkg/testing/run.go
+++ b/test/pkg/testing/run.go
@@ -35,6 +35,10 @@ func RunMultiple(t *testing.T, f func(t *testing.T)) {
 func RunMultipleN(t *testing.T, n int, f func(t *testing.T)) {
 	t.Parallel()
 
+	if testing.Short() {
+		n = 1
+	}
+
 	for i := 0; i < n; i++ {
 		t.Run(fmt.Sprintf("%d", i), f)
 	}