Commit 22fff319 authored by Darren Shepherd's avatar Darren Shepherd Committed by Erik Wilson

Remove CustomResourceWebhookConversion

parent 248e131b
...@@ -392,10 +392,9 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS ...@@ -392,10 +392,9 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
// unintentionally on either side: // unintentionally on either side:
apiextensionsfeatures.CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, apiextensionsfeatures.CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta},
apiextensionsfeatures.CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, apiextensionsfeatures.CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta},
apiextensionsfeatures.CustomResourceWebhookConversion: {Default: false, PreRelease: utilfeature.Alpha}, apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha},
apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha},
// features that enable backwards compatibility but are scheduled to be removed // features that enable backwards compatibility but are scheduled to be removed
// ... // ...
......
...@@ -27,13 +27,11 @@ import ( ...@@ -27,13 +27,11 @@ import (
utilvalidation "k8s.io/apimachinery/pkg/util/validation" utilvalidation "k8s.io/apimachinery/pkg/util/validation"
validationutil "k8s.io/apimachinery/pkg/util/validation" validationutil "k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/apiserver/pkg/util/webhook" "k8s.io/apiserver/pkg/util/webhook"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apiservervalidation "k8s.io/apiextensions-apiserver/pkg/apiserver/validation" apiservervalidation "k8s.io/apiextensions-apiserver/pkg/apiserver/validation"
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
) )
var ( var (
...@@ -298,11 +296,7 @@ func validateCustomResourceConversion(conversion *apiextensions.CustomResourceCo ...@@ -298,11 +296,7 @@ func validateCustomResourceConversion(conversion *apiextensions.CustomResourceCo
allErrs = append(allErrs, validateEnumStrings(fldPath.Child("strategy"), string(conversion.Strategy), []string{string(apiextensions.NoneConverter), string(apiextensions.WebhookConverter)}, true)...) allErrs = append(allErrs, validateEnumStrings(fldPath.Child("strategy"), string(conversion.Strategy), []string{string(apiextensions.NoneConverter), string(apiextensions.WebhookConverter)}, true)...)
if conversion.Strategy == apiextensions.WebhookConverter { if conversion.Strategy == apiextensions.WebhookConverter {
if conversion.WebhookClientConfig == nil { if conversion.WebhookClientConfig == nil {
if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) { allErrs = append(allErrs, field.Required(fldPath.Child("webhookClientConfig"), "required when strategy is set to Webhook, but not allowed because the CustomResourceWebhookConversion feature is disabled"))
allErrs = append(allErrs, field.Required(fldPath.Child("webhookClientConfig"), "required when strategy is set to Webhook"))
} else {
allErrs = append(allErrs, field.Required(fldPath.Child("webhookClientConfig"), "required when strategy is set to Webhook, but not allowed because the CustomResourceWebhookConversion feature is disabled"))
}
} else { } else {
cc := conversion.WebhookClientConfig cc := conversion.WebhookClientConfig
switch { switch {
......
...@@ -20,34 +20,19 @@ import ( ...@@ -20,34 +20,19 @@ import (
"fmt" "fmt"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/apiserver/pkg/util/webhook" "k8s.io/apiserver/pkg/util/webhook"
) )
// CRConverterFactory is the factory for all CR converters. // CRConverterFactory is the factory for all CR converters.
type CRConverterFactory struct { type CRConverterFactory struct {
// webhookConverterFactory is the factory for webhook converters.
// This field should not be used if CustomResourceWebhookConversion feature is disabled.
webhookConverterFactory *webhookConverterFactory
converterMetricFactory *converterMetricFactory
} }
// NewCRConverterFactory creates a new CRConverterFactory // NewCRConverterFactory creates a new CRConverterFactory
func NewCRConverterFactory(serviceResolver webhook.ServiceResolver, authResolverWrapper webhook.AuthenticationInfoResolverWrapper) (*CRConverterFactory, error) { func NewCRConverterFactory(serviceResolver webhook.ServiceResolver, authResolverWrapper webhook.AuthenticationInfoResolverWrapper) (*CRConverterFactory, error) {
converterFactory := &CRConverterFactory{ converterFactory := &CRConverterFactory{}
converterMetricFactory: newConverterMertricFactory(),
}
if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) {
webhookConverterFactory, err := newWebhookConverterFactory(serviceResolver, authResolverWrapper)
if err != nil {
return nil, err
}
converterFactory.webhookConverterFactory = webhookConverterFactory
}
return converterFactory, nil return converterFactory, nil
} }
...@@ -63,17 +48,7 @@ func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefin ...@@ -63,17 +48,7 @@ func (m *CRConverterFactory) NewConverter(crd *apiextensions.CustomResourceDefin
case apiextensions.NoneConverter: case apiextensions.NoneConverter:
converter = &nopConverter{} converter = &nopConverter{}
case apiextensions.WebhookConverter: case apiextensions.WebhookConverter:
if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) { return nil, nil, fmt.Errorf("webhook conversion is disabled on this cluster")
return nil, nil, fmt.Errorf("webhook conversion is disabled on this cluster")
}
converter, err = m.webhookConverterFactory.NewWebhookConverter(crd)
if err != nil {
return nil, nil, err
}
converter, err = m.converterMetricFactory.addMetrics("webhook", crd.Name, converter)
if err != nil {
return nil, nil, err
}
default: default:
return nil, nil, fmt.Errorf("unknown conversion strategy %q for CRD %s", crd.Spec.Conversion.Strategy, crd.Name) return nil, nil, fmt.Errorf("unknown conversion strategy %q for CRD %s", crd.Spec.Conversion.Strategy, crd.Name)
} }
......
...@@ -46,12 +46,6 @@ const ( ...@@ -46,12 +46,6 @@ const (
// //
// CustomResourceSubresources defines the subresources for CustomResources // CustomResourceSubresources defines the subresources for CustomResources
CustomResourceSubresources utilfeature.Feature = "CustomResourceSubresources" CustomResourceSubresources utilfeature.Feature = "CustomResourceSubresources"
// owner: @mbohlool, @roycaihw
// alpha: v1.13
//
// CustomResourceWebhookConversion defines the webhook conversion for Custom Resources.
CustomResourceWebhookConversion utilfeature.Feature = "CustomResourceWebhookConversion"
) )
func init() { func init() {
...@@ -62,8 +56,7 @@ func init() { ...@@ -62,8 +56,7 @@ func init() {
// To add a new feature, define a key for it above and add it here. The features will be // To add a new feature, define a key for it above and add it here. The features will be
// available throughout Kubernetes binaries. // available throughout Kubernetes binaries.
var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{
CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta},
CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta},
CustomResourceWebhookConversion: {Default: false, PreRelease: utilfeature.Alpha}, CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha},
CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha},
} }
...@@ -212,8 +212,7 @@ func dropDisabledFields(crdSpec, oldCrdSpec *apiextensions.CustomResourceDefinit ...@@ -212,8 +212,7 @@ func dropDisabledFields(crdSpec, oldCrdSpec *apiextensions.CustomResourceDefinit
// This is to be consistent with the other built-in types, as the apiserver drops unknown // This is to be consistent with the other built-in types, as the apiserver drops unknown
// fields. If the old CRD already uses per-version fields, the CRD is allowed to continue // fields. If the old CRD already uses per-version fields, the CRD is allowed to continue
// use per-version fields. // use per-version fields.
if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) && if !hasPerVersionField(oldCrdSpec) {
!hasPerVersionField(oldCrdSpec) {
for i := range crdSpec.Versions { for i := range crdSpec.Versions {
crdSpec.Versions[i].Schema = nil crdSpec.Versions[i].Schema = nil
crdSpec.Versions[i].Subresources = nil crdSpec.Versions[i].Subresources = nil
...@@ -221,8 +220,7 @@ func dropDisabledFields(crdSpec, oldCrdSpec *apiextensions.CustomResourceDefinit ...@@ -221,8 +220,7 @@ func dropDisabledFields(crdSpec, oldCrdSpec *apiextensions.CustomResourceDefinit
} }
} }
if !utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceWebhookConversion) && if !conversionWebhookInUse(oldCrdSpec) {
!conversionWebhookInUse(oldCrdSpec) {
if crdSpec.Conversion != nil { if crdSpec.Conversion != nil {
crdSpec.Conversion.WebhookClientConfig = nil crdSpec.Conversion.WebhookClientConfig = nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment