mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 14:37:00 +00:00
CRD v1: combine webhookClientConfig and conversionReviewVersions under webhook struct
This commit is contained in:
parent
05d8b448d2
commit
9a2dd16a0f
@ -172,3 +172,41 @@ func Convert_v1_CustomResourceDefinitionSpec_To_apiextensions_CustomResourceDefi
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Convert_v1_CustomResourceConversion_To_apiextensions_CustomResourceConversion(in *CustomResourceConversion, out *apiextensions.CustomResourceConversion, s conversion.Scope) error {
|
||||
if err := autoConvert_v1_CustomResourceConversion_To_apiextensions_CustomResourceConversion(in, out, s); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
out.WebhookClientConfig = nil
|
||||
out.ConversionReviewVersions = nil
|
||||
if in.Webhook != nil {
|
||||
out.ConversionReviewVersions = in.Webhook.ConversionReviewVersions
|
||||
if in.Webhook.ClientConfig != nil {
|
||||
out.WebhookClientConfig = &apiextensions.WebhookClientConfig{}
|
||||
if err := Convert_v1_WebhookClientConfig_To_apiextensions_WebhookClientConfig(in.Webhook.ClientConfig, out.WebhookClientConfig, s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Convert_apiextensions_CustomResourceConversion_To_v1_CustomResourceConversion(in *apiextensions.CustomResourceConversion, out *CustomResourceConversion, s conversion.Scope) error {
|
||||
if err := autoConvert_apiextensions_CustomResourceConversion_To_v1_CustomResourceConversion(in, out, s); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
out.Webhook = nil
|
||||
if in.WebhookClientConfig != nil || in.ConversionReviewVersions != nil {
|
||||
out.Webhook = &WebhookConversion{}
|
||||
out.Webhook.ConversionReviewVersions = in.ConversionReviewVersions
|
||||
if in.WebhookClientConfig != nil {
|
||||
out.Webhook.ClientConfig = &WebhookClientConfig{}
|
||||
if err := Convert_apiextensions_WebhookClientConfig_To_v1_WebhookClientConfig(in.WebhookClientConfig, out.Webhook.ClientConfig, s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -374,6 +374,118 @@ func TestConversion(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
// webhook conversion config
|
||||
{
|
||||
Name: "internal to v1, no webhook client config",
|
||||
In: &apiextensions.CustomResourceDefinition{
|
||||
Spec: apiextensions.CustomResourceDefinitionSpec{
|
||||
Conversion: &apiextensions.CustomResourceConversion{},
|
||||
},
|
||||
},
|
||||
Out: &CustomResourceDefinition{},
|
||||
ExpectOut: &CustomResourceDefinition{
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Conversion: &CustomResourceConversion{},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "internal to v1, webhook client config",
|
||||
In: &apiextensions.CustomResourceDefinition{
|
||||
Spec: apiextensions.CustomResourceDefinitionSpec{
|
||||
Conversion: &apiextensions.CustomResourceConversion{
|
||||
WebhookClientConfig: &apiextensions.WebhookClientConfig{URL: pointer.StringPtr("http://example.com")},
|
||||
},
|
||||
},
|
||||
},
|
||||
Out: &CustomResourceDefinition{},
|
||||
ExpectOut: &CustomResourceDefinition{
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Conversion: &CustomResourceConversion{
|
||||
Webhook: &WebhookConversion{
|
||||
ClientConfig: &WebhookClientConfig{URL: pointer.StringPtr("http://example.com")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "internal to v1, webhook versions",
|
||||
In: &apiextensions.CustomResourceDefinition{
|
||||
Spec: apiextensions.CustomResourceDefinitionSpec{
|
||||
Conversion: &apiextensions.CustomResourceConversion{
|
||||
ConversionReviewVersions: []string{"v1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
Out: &CustomResourceDefinition{},
|
||||
ExpectOut: &CustomResourceDefinition{
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Conversion: &CustomResourceConversion{
|
||||
Webhook: &WebhookConversion{
|
||||
ConversionReviewVersions: []string{"v1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "v1 to internal, no webhook client config",
|
||||
In: &CustomResourceDefinition{
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Conversion: &CustomResourceConversion{},
|
||||
},
|
||||
},
|
||||
Out: &apiextensions.CustomResourceDefinition{},
|
||||
ExpectOut: &apiextensions.CustomResourceDefinition{
|
||||
Spec: apiextensions.CustomResourceDefinitionSpec{
|
||||
Conversion: &apiextensions.CustomResourceConversion{},
|
||||
PreserveUnknownFields: pointer.BoolPtr(false),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "v1 to internal, webhook client config",
|
||||
In: &CustomResourceDefinition{
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Conversion: &CustomResourceConversion{
|
||||
Webhook: &WebhookConversion{
|
||||
ClientConfig: &WebhookClientConfig{URL: pointer.StringPtr("http://example.com")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Out: &apiextensions.CustomResourceDefinition{},
|
||||
ExpectOut: &apiextensions.CustomResourceDefinition{
|
||||
Spec: apiextensions.CustomResourceDefinitionSpec{
|
||||
Conversion: &apiextensions.CustomResourceConversion{
|
||||
WebhookClientConfig: &apiextensions.WebhookClientConfig{URL: pointer.StringPtr("http://example.com")},
|
||||
},
|
||||
PreserveUnknownFields: pointer.BoolPtr(false),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "v1 to internal, webhook versions",
|
||||
In: &CustomResourceDefinition{
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Conversion: &CustomResourceConversion{
|
||||
Webhook: &WebhookConversion{
|
||||
ConversionReviewVersions: []string{"v1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Out: &apiextensions.CustomResourceDefinition{},
|
||||
ExpectOut: &apiextensions.CustomResourceDefinition{
|
||||
Spec: apiextensions.CustomResourceDefinitionSpec{
|
||||
Conversion: &apiextensions.CustomResourceConversion{
|
||||
ConversionReviewVersions: []string{"v1"},
|
||||
},
|
||||
PreserveUnknownFields: pointer.BoolPtr(false),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
scheme := runtime.NewScheme()
|
||||
|
@ -51,9 +51,6 @@ func SetDefaults_CustomResourceDefinitionSpec(obj *CustomResourceDefinitionSpec)
|
||||
Strategy: NoneConverter,
|
||||
}
|
||||
}
|
||||
if obj.Conversion.Strategy == WebhookConverter && len(obj.Conversion.ConversionReviewVersions) == 0 {
|
||||
obj.Conversion.ConversionReviewVersions = []string{SchemeGroupVersion.Version}
|
||||
}
|
||||
if obj.PreserveUnknownFields == nil {
|
||||
obj.PreserveUnknownFields = utilpointer.BoolPtr(true)
|
||||
}
|
||||
|
@ -51,8 +51,10 @@ func TestDefaults(t *testing.T) {
|
||||
Scope: NamespaceScoped,
|
||||
Conversion: &CustomResourceConversion{
|
||||
Strategy: WebhookConverter,
|
||||
WebhookClientConfig: &WebhookClientConfig{
|
||||
Service: &ServiceReference{},
|
||||
Webhook: &WebhookConversion{
|
||||
ClientConfig: &WebhookClientConfig{
|
||||
Service: &ServiceReference{},
|
||||
},
|
||||
},
|
||||
},
|
||||
PreserveUnknownFields: utilpointer.BoolPtr(true),
|
||||
@ -62,10 +64,11 @@ func TestDefaults(t *testing.T) {
|
||||
Spec: CustomResourceDefinitionSpec{
|
||||
Scope: NamespaceScoped,
|
||||
Conversion: &CustomResourceConversion{
|
||||
Strategy: WebhookConverter,
|
||||
ConversionReviewVersions: []string{"v1"},
|
||||
WebhookClientConfig: &WebhookClientConfig{
|
||||
Service: &ServiceReference{Port: utilpointer.Int32Ptr(443)},
|
||||
Strategy: WebhookConverter,
|
||||
Webhook: &WebhookConversion{
|
||||
ClientConfig: &WebhookClientConfig{
|
||||
Service: &ServiceReference{Port: utilpointer.Int32Ptr(443)},
|
||||
},
|
||||
},
|
||||
},
|
||||
PreserveUnknownFields: utilpointer.BoolPtr(true),
|
||||
|
@ -69,10 +69,16 @@ type CustomResourceConversion struct {
|
||||
// is needed for this option. This requires spec.preserveUnknownFields to be false.
|
||||
Strategy ConversionStrategyType `json:"strategy" protobuf:"bytes,1,name=strategy"`
|
||||
|
||||
// `webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. This field is
|
||||
// alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.
|
||||
// webhook describes how to call the conversion webhook. Required when strategy is "Webhook".
|
||||
// +optional
|
||||
WebhookClientConfig *WebhookClientConfig `json:"webhookClientConfig,omitempty" protobuf:"bytes,2,name=webhookClientConfig"`
|
||||
Webhook *WebhookConversion `json:"webhook,omitempty" protobuf:"bytes,2,opt,name=webhook"`
|
||||
}
|
||||
|
||||
// WebhookConversion describes how to call a conversion webhook
|
||||
type WebhookConversion struct {
|
||||
// `clientConfig` is the instructions for how to call the webhook if strategy is `Webhook`.
|
||||
// +optional
|
||||
ClientConfig *WebhookClientConfig `json:"clientConfig,omitempty" protobuf:"bytes,2,name=clientConfig"`
|
||||
|
||||
// ConversionReviewVersions is an ordered list of preferred `ConversionReview`
|
||||
// versions the Webhook expects. API server will try to use first version in
|
||||
@ -80,9 +86,7 @@ type CustomResourceConversion struct {
|
||||
// supported by API server, conversion will fail for this object.
|
||||
// If a persisted Webhook configuration specifies allowed versions and does not
|
||||
// include any versions known to the API Server, calls to the webhook will fail.
|
||||
// Default to `['v1']`.
|
||||
// +optional
|
||||
ConversionReviewVersions []string `json:"conversionReviewVersions,omitempty" protobuf:"bytes,3,rep,name=conversionReviewVersions"`
|
||||
ConversionReviewVersions []string `json:"conversionReviewVersions" protobuf:"bytes,3,rep,name=conversionReviewVersions"`
|
||||
}
|
||||
|
||||
// WebhookClientConfig contains the information to make a TLS
|
||||
|
Loading…
Reference in New Issue
Block a user