mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 09:49:50 +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
|
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()
|
scheme := runtime.NewScheme()
|
||||||
|
@ -51,9 +51,6 @@ func SetDefaults_CustomResourceDefinitionSpec(obj *CustomResourceDefinitionSpec)
|
|||||||
Strategy: NoneConverter,
|
Strategy: NoneConverter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if obj.Conversion.Strategy == WebhookConverter && len(obj.Conversion.ConversionReviewVersions) == 0 {
|
|
||||||
obj.Conversion.ConversionReviewVersions = []string{SchemeGroupVersion.Version}
|
|
||||||
}
|
|
||||||
if obj.PreserveUnknownFields == nil {
|
if obj.PreserveUnknownFields == nil {
|
||||||
obj.PreserveUnknownFields = utilpointer.BoolPtr(true)
|
obj.PreserveUnknownFields = utilpointer.BoolPtr(true)
|
||||||
}
|
}
|
||||||
|
@ -51,8 +51,10 @@ func TestDefaults(t *testing.T) {
|
|||||||
Scope: NamespaceScoped,
|
Scope: NamespaceScoped,
|
||||||
Conversion: &CustomResourceConversion{
|
Conversion: &CustomResourceConversion{
|
||||||
Strategy: WebhookConverter,
|
Strategy: WebhookConverter,
|
||||||
WebhookClientConfig: &WebhookClientConfig{
|
Webhook: &WebhookConversion{
|
||||||
Service: &ServiceReference{},
|
ClientConfig: &WebhookClientConfig{
|
||||||
|
Service: &ServiceReference{},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
PreserveUnknownFields: utilpointer.BoolPtr(true),
|
PreserveUnknownFields: utilpointer.BoolPtr(true),
|
||||||
@ -62,10 +64,11 @@ func TestDefaults(t *testing.T) {
|
|||||||
Spec: CustomResourceDefinitionSpec{
|
Spec: CustomResourceDefinitionSpec{
|
||||||
Scope: NamespaceScoped,
|
Scope: NamespaceScoped,
|
||||||
Conversion: &CustomResourceConversion{
|
Conversion: &CustomResourceConversion{
|
||||||
Strategy: WebhookConverter,
|
Strategy: WebhookConverter,
|
||||||
ConversionReviewVersions: []string{"v1"},
|
Webhook: &WebhookConversion{
|
||||||
WebhookClientConfig: &WebhookClientConfig{
|
ClientConfig: &WebhookClientConfig{
|
||||||
Service: &ServiceReference{Port: utilpointer.Int32Ptr(443)},
|
Service: &ServiceReference{Port: utilpointer.Int32Ptr(443)},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
PreserveUnknownFields: utilpointer.BoolPtr(true),
|
PreserveUnknownFields: utilpointer.BoolPtr(true),
|
||||||
|
@ -69,10 +69,16 @@ type CustomResourceConversion struct {
|
|||||||
// is needed for this option. This requires spec.preserveUnknownFields to be false.
|
// is needed for this option. This requires spec.preserveUnknownFields to be false.
|
||||||
Strategy ConversionStrategyType `json:"strategy" protobuf:"bytes,1,name=strategy"`
|
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
|
// webhook describes how to call the conversion webhook. Required when strategy is "Webhook".
|
||||||
// alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.
|
|
||||||
// +optional
|
// +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`
|
// ConversionReviewVersions is an ordered list of preferred `ConversionReview`
|
||||||
// versions the Webhook expects. API server will try to use first version in
|
// 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.
|
// supported by API server, conversion will fail for this object.
|
||||||
// If a persisted Webhook configuration specifies allowed versions and does not
|
// 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.
|
// include any versions known to the API Server, calls to the webhook will fail.
|
||||||
// Default to `['v1']`.
|
ConversionReviewVersions []string `json:"conversionReviewVersions" protobuf:"bytes,3,rep,name=conversionReviewVersions"`
|
||||||
// +optional
|
|
||||||
ConversionReviewVersions []string `json:"conversionReviewVersions,omitempty" protobuf:"bytes,3,rep,name=conversionReviewVersions"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// WebhookClientConfig contains the information to make a TLS
|
// WebhookClientConfig contains the information to make a TLS
|
||||||
|
Loading…
Reference in New Issue
Block a user