From 7d57dad4a96f526401a6f7aff7ae74877e39836e Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Fri, 23 May 2025 14:49:16 +0200 Subject: [PATCH] Rename runtime extension fields in ClusterClass ExternalPatchDefinition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- api/core/v1beta1/conversion.go | 20 +++++ api/core/v1beta1/zz_generated.conversion.go | 82 ++++++++++++------- api/core/v1beta2/clusterclass_types.go | 10 +-- api/core/v1beta2/zz_generated.deepcopy.go | 8 +- api/core/v1beta2/zz_generated.openapi.go | 10 +-- .../cluster.x-k8s.io_clusterclasses.yaml | 12 +-- .../providers/migrations/v1.10-to-v1.11.md | 2 + .../topology/cluster/patches/engine.go | 4 +- .../topology/cluster/patches/engine_test.go | 12 +-- .../external/external_patch_generator.go | 4 +- .../external/external_patch_generator_test.go | 6 +- .../patches/external/external_validator.go | 4 +- internal/webhooks/patch_validation.go | 4 +- internal/webhooks/patch_validation_test.go | 16 ++-- .../clusterclass-quick-start-runtimesdk.yaml | 4 +- 15 files changed, 123 insertions(+), 75 deletions(-) diff --git a/api/core/v1beta1/conversion.go b/api/core/v1beta1/conversion.go index 0a2a40fad728..548f7a143a6d 100644 --- a/api/core/v1beta1/conversion.go +++ b/api/core/v1beta1/conversion.go @@ -912,3 +912,23 @@ func Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(in *cl } return autoConvert_v1beta2_ClusterClassVariableMetadata_To_v1beta1_ClusterClassVariableMetadata(&in.DeprecatedV1Beta1Metadata, &out.Metadata, s) } + +func Convert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(in *ExternalPatchDefinition, out *clusterv1.ExternalPatchDefinition, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(in, out, s); err != nil { + return err + } + + out.GeneratePatchesExtension = in.GenerateExtension + out.ValidateTopologyExtension = in.ValidateExtension + return nil +} + +func Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(in *clusterv1.ExternalPatchDefinition, out *ExternalPatchDefinition, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(in, out, s); err != nil { + return err + } + + out.GenerateExtension = in.GeneratePatchesExtension + out.ValidateExtension = in.ValidateTopologyExtension + return nil +} diff --git a/api/core/v1beta1/zz_generated.conversion.go b/api/core/v1beta1/zz_generated.conversion.go index 6f7b7ee13770..832091ab3a66 100644 --- a/api/core/v1beta1/zz_generated.conversion.go +++ b/api/core/v1beta1/zz_generated.conversion.go @@ -225,16 +225,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*ExternalPatchDefinition)(nil), (*v1beta2.ExternalPatchDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(a.(*ExternalPatchDefinition), b.(*v1beta2.ExternalPatchDefinition), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.ExternalPatchDefinition)(nil), (*ExternalPatchDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(a.(*v1beta2.ExternalPatchDefinition), b.(*ExternalPatchDefinition), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*FailureDomainSpec)(nil), (*v1beta2.FailureDomainSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_FailureDomainSpec_To_v1beta2_FailureDomainSpec(a.(*FailureDomainSpec), b.(*v1beta2.FailureDomainSpec), scope) }); err != nil { @@ -825,6 +815,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*ExternalPatchDefinition)(nil), (*v1beta2.ExternalPatchDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(a.(*ExternalPatchDefinition), b.(*v1beta2.ExternalPatchDefinition), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*LocalObjectTemplate)(nil), (*v1beta2.InfrastructureClass)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_LocalObjectTemplate_To_v1beta2_InfrastructureClass(a.(*LocalObjectTemplate), b.(*v1beta2.InfrastructureClass), scope) }); err != nil { @@ -910,6 +905,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.ExternalPatchDefinition)(nil), (*ExternalPatchDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(a.(*v1beta2.ExternalPatchDefinition), b.(*ExternalPatchDefinition), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.InfrastructureClass)(nil), (*LocalObjectTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_InfrastructureClass_To_v1beta1_LocalObjectTemplate(a.(*v1beta2.InfrastructureClass), b.(*LocalObjectTemplate), scope) }); err != nil { @@ -1140,7 +1140,15 @@ func autoConvert_v1beta1_ClusterClassPatch_To_v1beta2_ClusterClassPatch(in *Clus out.Description = in.Description out.EnabledIf = (*string)(unsafe.Pointer(in.EnabledIf)) out.Definitions = *(*[]v1beta2.PatchDefinition)(unsafe.Pointer(&in.Definitions)) - out.External = (*v1beta2.ExternalPatchDefinition)(unsafe.Pointer(in.External)) + if in.External != nil { + in, out := &in.External, &out.External + *out = new(v1beta2.ExternalPatchDefinition) + if err := Convert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(*in, *out, s); err != nil { + return err + } + } else { + out.External = nil + } return nil } @@ -1154,7 +1162,15 @@ func autoConvert_v1beta2_ClusterClassPatch_To_v1beta1_ClusterClassPatch(in *v1be out.Description = in.Description out.EnabledIf = (*string)(unsafe.Pointer(in.EnabledIf)) out.Definitions = *(*[]PatchDefinition)(unsafe.Pointer(&in.Definitions)) - out.External = (*ExternalPatchDefinition)(unsafe.Pointer(in.External)) + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalPatchDefinition) + if err := Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(*in, *out, s); err != nil { + return err + } + } else { + out.External = nil + } return nil } @@ -1186,7 +1202,17 @@ func autoConvert_v1beta1_ClusterClassSpec_To_v1beta2_ClusterClassSpec(in *Cluste } else { out.Variables = nil } - out.Patches = *(*[]v1beta2.ClusterClassPatch)(unsafe.Pointer(&in.Patches)) + if in.Patches != nil { + in, out := &in.Patches, &out.Patches + *out = make([]v1beta2.ClusterClassPatch, len(*in)) + for i := range *in { + if err := Convert_v1beta1_ClusterClassPatch_To_v1beta2_ClusterClassPatch(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Patches = nil + } return nil } @@ -1212,7 +1238,17 @@ func autoConvert_v1beta2_ClusterClassSpec_To_v1beta1_ClusterClassSpec(in *v1beta } else { out.Variables = nil } - out.Patches = *(*[]ClusterClassPatch)(unsafe.Pointer(&in.Patches)) + if in.Patches != nil { + in, out := &in.Patches, &out.Patches + *out = make([]ClusterClassPatch, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ClusterClassPatch_To_v1beta1_ClusterClassPatch(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Patches = nil + } return nil } @@ -1810,31 +1846,21 @@ func Convert_v1beta2_ControlPlaneVariables_To_v1beta1_ControlPlaneVariables(in * } func autoConvert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(in *ExternalPatchDefinition, out *v1beta2.ExternalPatchDefinition, s conversion.Scope) error { - out.GenerateExtension = (*string)(unsafe.Pointer(in.GenerateExtension)) - out.ValidateExtension = (*string)(unsafe.Pointer(in.ValidateExtension)) + // WARNING: in.GenerateExtension requires manual conversion: does not exist in peer-type + // WARNING: in.ValidateExtension requires manual conversion: does not exist in peer-type out.DiscoverVariablesExtension = (*string)(unsafe.Pointer(in.DiscoverVariablesExtension)) out.Settings = *(*map[string]string)(unsafe.Pointer(&in.Settings)) return nil } -// Convert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition is an autogenerated conversion function. -func Convert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(in *ExternalPatchDefinition, out *v1beta2.ExternalPatchDefinition, s conversion.Scope) error { - return autoConvert_v1beta1_ExternalPatchDefinition_To_v1beta2_ExternalPatchDefinition(in, out, s) -} - func autoConvert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(in *v1beta2.ExternalPatchDefinition, out *ExternalPatchDefinition, s conversion.Scope) error { - out.GenerateExtension = (*string)(unsafe.Pointer(in.GenerateExtension)) - out.ValidateExtension = (*string)(unsafe.Pointer(in.ValidateExtension)) + // WARNING: in.GeneratePatchesExtension requires manual conversion: does not exist in peer-type + // WARNING: in.ValidateTopologyExtension requires manual conversion: does not exist in peer-type out.DiscoverVariablesExtension = (*string)(unsafe.Pointer(in.DiscoverVariablesExtension)) out.Settings = *(*map[string]string)(unsafe.Pointer(&in.Settings)) return nil } -// Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition is an autogenerated conversion function. -func Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(in *v1beta2.ExternalPatchDefinition, out *ExternalPatchDefinition, s conversion.Scope) error { - return autoConvert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(in, out, s) -} - func autoConvert_v1beta1_FailureDomainSpec_To_v1beta2_FailureDomainSpec(in *FailureDomainSpec, out *v1beta2.FailureDomainSpec, s conversion.Scope) error { out.ControlPlane = in.ControlPlane out.Attributes = *(*map[string]string)(unsafe.Pointer(&in.Attributes)) diff --git a/api/core/v1beta2/clusterclass_types.go b/api/core/v1beta2/clusterclass_types.go index e35cf8b25cdb..55422677e4f6 100644 --- a/api/core/v1beta2/clusterclass_types.go +++ b/api/core/v1beta2/clusterclass_types.go @@ -1104,19 +1104,19 @@ type JSONPatchValue struct { } // ExternalPatchDefinition defines an external patch. -// Note: At least one of GenerateExtension or ValidateExtension must be set. +// Note: At least one of GeneratePatchesExtension or ValidateTopologyExtension must be set. type ExternalPatchDefinition struct { - // generateExtension references an extension which is called to generate patches. + // generatePatchesExtension references an extension which is called to generate patches. // +optional // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=512 - GenerateExtension *string `json:"generateExtension,omitempty"` + GeneratePatchesExtension *string `json:"generatePatchesExtension,omitempty"` - // validateExtension references an extension which is called to validate the topology. + // validateTopologyExtension references an extension which is called to validate the topology. // +optional // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=512 - ValidateExtension *string `json:"validateExtension,omitempty"` + ValidateTopologyExtension *string `json:"validateTopologyExtension,omitempty"` // discoverVariablesExtension references an extension which is called to discover variables. // +optional diff --git a/api/core/v1beta2/zz_generated.deepcopy.go b/api/core/v1beta2/zz_generated.deepcopy.go index 24829834e61c..8b98271173a4 100644 --- a/api/core/v1beta2/zz_generated.deepcopy.go +++ b/api/core/v1beta2/zz_generated.deepcopy.go @@ -875,13 +875,13 @@ func (in *ControlPlaneVariables) DeepCopy() *ControlPlaneVariables { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ExternalPatchDefinition) DeepCopyInto(out *ExternalPatchDefinition) { *out = *in - if in.GenerateExtension != nil { - in, out := &in.GenerateExtension, &out.GenerateExtension + if in.GeneratePatchesExtension != nil { + in, out := &in.GeneratePatchesExtension, &out.GeneratePatchesExtension *out = new(string) **out = **in } - if in.ValidateExtension != nil { - in, out := &in.ValidateExtension, &out.ValidateExtension + if in.ValidateTopologyExtension != nil { + in, out := &in.ValidateTopologyExtension, &out.ValidateTopologyExtension *out = new(string) **out = **in } diff --git a/api/core/v1beta2/zz_generated.openapi.go b/api/core/v1beta2/zz_generated.openapi.go index c83e5b6f4029..b224da7ee5e2 100644 --- a/api/core/v1beta2/zz_generated.openapi.go +++ b/api/core/v1beta2/zz_generated.openapi.go @@ -1566,19 +1566,19 @@ func schema_cluster_api_api_core_v1beta2_ExternalPatchDefinition(ref common.Refe return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - Description: "ExternalPatchDefinition defines an external patch. Note: At least one of GenerateExtension or ValidateExtension must be set.", + Description: "ExternalPatchDefinition defines an external patch. Note: At least one of GeneratePatchesExtension or ValidateTopologyExtension must be set.", Type: []string{"object"}, Properties: map[string]spec.Schema{ - "generateExtension": { + "generatePatchesExtension": { SchemaProps: spec.SchemaProps{ - Description: "generateExtension references an extension which is called to generate patches.", + Description: "generatePatchesExtension references an extension which is called to generate patches.", Type: []string{"string"}, Format: "", }, }, - "validateExtension": { + "validateTopologyExtension": { SchemaProps: spec.SchemaProps{ - Description: "validateExtension references an extension which is called to validate the topology.", + Description: "validateTopologyExtension references an extension which is called to validate the topology.", Type: []string{"string"}, Format: "", }, diff --git a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml index 007ca4039339..5e0c675ecaf7 100644 --- a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml +++ b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml @@ -3481,9 +3481,9 @@ spec: maxLength: 512 minLength: 1 type: string - generateExtension: - description: generateExtension references an extension which - is called to generate patches. + generatePatchesExtension: + description: generatePatchesExtension references an extension + which is called to generate patches. maxLength: 512 minLength: 1 type: string @@ -3495,9 +3495,9 @@ spec: Values defined here take precedence over the values defined in the corresponding ExtensionConfig. type: object - validateExtension: - description: validateExtension references an extension which - is called to validate the topology. + validateTopologyExtension: + description: validateTopologyExtension references an extension + which is called to validate the topology. maxLength: 512 minLength: 1 type: string diff --git a/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md b/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md index 3fd2387a5877..84ff27f87b5a 100644 --- a/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md +++ b/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md @@ -167,6 +167,8 @@ proposal because most of the changes described below are a consequence of the wo ### ClusterClass - See changes that apply to [all CRDs](#all-crds) +- The `spec.patches[].external.generateExtension` and `spec.patches[].external.validateExtension` fields have been renamed to + `spec.patches[].external.generatePatchesExtension` and `spec.patches[].external.validateTopologyExtension` - The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct: - `spec.controlPlane.machineHealthCheck` - `spec.workers.machineDeployments[].machineHealthCheck` diff --git a/internal/controllers/topology/cluster/patches/engine.go b/internal/controllers/topology/cluster/patches/engine.go index 4588c71ddf2b..6d80df6810f3 100644 --- a/internal/controllers/topology/cluster/patches/engine.go +++ b/internal/controllers/topology/cluster/patches/engine.go @@ -124,7 +124,7 @@ func (e *engine) Apply(ctx context.Context, blueprint *scope.ClusterBlueprint, d for i := range blueprint.ClusterClass.Spec.Patches { clusterClassPatch := blueprint.ClusterClass.Spec.Patches[i] - if clusterClassPatch.External == nil || clusterClassPatch.External.ValidateExtension == nil { + if clusterClassPatch.External == nil || clusterClassPatch.External.ValidateTopologyExtension == nil { continue } @@ -408,7 +408,7 @@ func createPatchGenerator(runtimeClient runtimeclient.Client, patch *clusterv1.C return inline.NewGenerator(patch), nil } // Return an externalPatchGenerator if there is an external configuration in the patch. - if patch.External != nil && patch.External.GenerateExtension != nil { + if patch.External != nil && patch.External.GeneratePatchesExtension != nil { if !feature.Gates.Enabled(feature.RuntimeSDK) { return nil, errors.Errorf("can not use external patch %q if RuntimeSDK feature flag is disabled", patch.Name) } diff --git a/internal/controllers/topology/cluster/patches/engine_test.go b/internal/controllers/topology/cluster/patches/engine_test.go index c098d27572b8..4b8fbf5bf091 100644 --- a/internal/controllers/topology/cluster/patches/engine_test.go +++ b/internal/controllers/topology/cluster/patches/engine_test.go @@ -407,8 +407,8 @@ func TestApply(t *testing.T) { { Name: "fake-patch1", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("patch-infrastructureCluster"), - ValidateExtension: ptr.To("validate-infrastructureCluster"), + GeneratePatchesExtension: ptr.To("patch-infrastructureCluster"), + ValidateTopologyExtension: ptr.To("validate-infrastructureCluster"), }, }, }, @@ -444,8 +444,8 @@ func TestApply(t *testing.T) { { Name: "fake-patch1", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("patch-infrastructureCluster"), - ValidateExtension: ptr.To("validate-infrastructureCluster"), + GeneratePatchesExtension: ptr.To("patch-infrastructureCluster"), + ValidateTopologyExtension: ptr.To("validate-infrastructureCluster"), }, }, }, @@ -478,13 +478,13 @@ func TestApply(t *testing.T) { { Name: "fake-patch1", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("patch-infrastructureCluster"), + GeneratePatchesExtension: ptr.To("patch-infrastructureCluster"), }, }, { Name: "fake-patch2", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("patch-controlPlane"), + GeneratePatchesExtension: ptr.To("patch-controlPlane"), }, }, }, diff --git a/internal/controllers/topology/cluster/patches/external/external_patch_generator.go b/internal/controllers/topology/cluster/patches/external/external_patch_generator.go index 6090cfcf0fcf..ea76c9c5cabd 100644 --- a/internal/controllers/topology/cluster/patches/external/external_patch_generator.go +++ b/internal/controllers/topology/cluster/patches/external/external_patch_generator.go @@ -46,7 +46,7 @@ func NewGenerator(runtimeClient runtimeclient.Client, patch *clusterv1.ClusterCl func (e externalPatchGenerator) Generate(ctx context.Context, forObject client.Object, req *runtimehooksv1.GeneratePatchesRequest) (*runtimehooksv1.GeneratePatchesResponse, error) { if !feature.Gates.Enabled(feature.RuntimeSDK) { - return nil, errors.Errorf("can not use external patch %q if RuntimeSDK feature flag is disabled", *e.patch.External.GenerateExtension) + return nil, errors.Errorf("can not use external patch %q if RuntimeSDK feature flag is disabled", *e.patch.External.GeneratePatchesExtension) } // Set the settings defined in external patch definition on the request object. @@ -59,7 +59,7 @@ func (e externalPatchGenerator) Generate(ctx context.Context, forObject client.O }() resp := &runtimehooksv1.GeneratePatchesResponse{} - err := e.runtimeClient.CallExtension(ctx, runtimehooksv1.GeneratePatches, forObject, *e.patch.External.GenerateExtension, req, resp) + err := e.runtimeClient.CallExtension(ctx, runtimehooksv1.GeneratePatches, forObject, *e.patch.External.GeneratePatchesExtension, req, resp) if err != nil { return nil, err } diff --git a/internal/controllers/topology/cluster/patches/external/external_patch_generator_test.go b/internal/controllers/topology/cluster/patches/external/external_patch_generator_test.go index 25cc8380511b..c93f26328ca8 100644 --- a/internal/controllers/topology/cluster/patches/external/external_patch_generator_test.go +++ b/internal/controllers/topology/cluster/patches/external/external_patch_generator_test.go @@ -53,8 +53,8 @@ func TestExternalPatchGenerator_Generate(t *testing.T) { EnabledIf: nil, Definitions: nil, External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("test-generate-extension"), - Settings: nil, + GeneratePatchesExtension: ptr.To("test-generate-extension"), + Settings: nil, }, }, request: &runtimehooksv1.GeneratePatchesRequest{}, @@ -72,7 +72,7 @@ func TestExternalPatchGenerator_Generate(t *testing.T) { EnabledIf: nil, Definitions: nil, External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("test-generate-extension"), + GeneratePatchesExtension: ptr.To("test-generate-extension"), Settings: map[string]string{ "key1": "value1", }, diff --git a/internal/controllers/topology/cluster/patches/external/external_validator.go b/internal/controllers/topology/cluster/patches/external/external_validator.go index 2d0aec4b3621..680fa1a3ec0d 100644 --- a/internal/controllers/topology/cluster/patches/external/external_validator.go +++ b/internal/controllers/topology/cluster/patches/external/external_validator.go @@ -46,7 +46,7 @@ func NewValidator(runtimeClient runtimeclient.Client, patch *clusterv1.ClusterCl func (e externalValidator) Validate(ctx context.Context, forObject client.Object, req *runtimehooksv1.ValidateTopologyRequest) (*runtimehooksv1.ValidateTopologyResponse, error) { if !feature.Gates.Enabled(feature.RuntimeSDK) { - return nil, errors.Errorf("can not use external patch %q if RuntimeSDK feature flag is disabled", *e.patch.External.ValidateExtension) + return nil, errors.Errorf("can not use external patch %q if RuntimeSDK feature flag is disabled", *e.patch.External.ValidateTopologyExtension) } // Set the settings defined in external patch definition on the request object. @@ -59,7 +59,7 @@ func (e externalValidator) Validate(ctx context.Context, forObject client.Object }() resp := &runtimehooksv1.ValidateTopologyResponse{} - err := e.runtimeClient.CallExtension(ctx, runtimehooksv1.ValidateTopology, forObject, *e.patch.External.ValidateExtension, req, resp) + err := e.runtimeClient.CallExtension(ctx, runtimehooksv1.ValidateTopology, forObject, *e.patch.External.ValidateTopologyExtension, req, resp) if err != nil { return nil, err } diff --git a/internal/webhooks/patch_validation.go b/internal/webhooks/patch_validation.go index 91cb27360a6b..223f0d946bca 100644 --- a/internal/webhooks/patch_validation.go +++ b/internal/webhooks/patch_validation.go @@ -128,12 +128,12 @@ func validatePatchDefinitions(patch clusterv1.ClusterClassPatch, clusterClass *c "patch.external can be used only if the RuntimeSDK feature flag is enabled", )) } - if patch.External.ValidateExtension == nil && patch.External.GenerateExtension == nil { + if patch.External.ValidateTopologyExtension == nil && patch.External.GeneratePatchesExtension == nil { allErrs = append(allErrs, field.Invalid( path.Child("external"), patch.External, - "one of validateExtension and generateExtension must be defined", + "one of validateTopologyExtension and generatePatchesExtension must be defined", )) } } diff --git a/internal/webhooks/patch_validation_test.go b/internal/webhooks/patch_validation_test.go index 3cb107e8b2e8..6b3b61fd3612 100644 --- a/internal/webhooks/patch_validation_test.go +++ b/internal/webhooks/patch_validation_test.go @@ -1370,7 +1370,7 @@ func TestValidatePatches(t *testing.T) { // Patch with External { - name: "pass if patch defines both external.generateExtension and external.validateExtension", + name: "pass if patch defines both external.generatePatchesExtension and external.validateTopologyExtension", clusterClass: clusterv1.ClusterClass{ Spec: clusterv1.ClusterClassSpec{ ControlPlane: clusterv1.ControlPlaneClass{ @@ -1386,8 +1386,8 @@ func TestValidatePatches(t *testing.T) { { Name: "patch1", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("generate-extension"), - ValidateExtension: ptr.To("generate-extension"), + GeneratePatchesExtension: ptr.To("generate-extension"), + ValidateTopologyExtension: ptr.To("generate-extension"), }, }, }, @@ -1413,8 +1413,8 @@ func TestValidatePatches(t *testing.T) { { Name: "patch1", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("generate-extension"), - ValidateExtension: ptr.To("generate-extension"), + GeneratePatchesExtension: ptr.To("generate-extension"), + ValidateTopologyExtension: ptr.To("generate-extension"), }, }, }, @@ -1424,7 +1424,7 @@ func TestValidatePatches(t *testing.T) { wantErr: true, }, { - name: "error if patch defines neither external.generateExtension nor external.validateExtension", + name: "error if patch defines neither external.generatePatchesExtension nor external.validateTopologyExtension", clusterClass: clusterv1.ClusterClass{ Spec: clusterv1.ClusterClassSpec{ ControlPlane: clusterv1.ControlPlaneClass{ @@ -1464,8 +1464,8 @@ func TestValidatePatches(t *testing.T) { { Name: "patch1", External: &clusterv1.ExternalPatchDefinition{ - GenerateExtension: ptr.To("generate-extension"), - ValidateExtension: ptr.To("generate-extension"), + GeneratePatchesExtension: ptr.To("generate-extension"), + ValidateTopologyExtension: ptr.To("generate-extension"), }, Definitions: []clusterv1.PatchDefinition{}, }, diff --git a/test/extension/handlers/topologymutation/testdata/clusterclass-quick-start-runtimesdk.yaml b/test/extension/handlers/topologymutation/testdata/clusterclass-quick-start-runtimesdk.yaml index cf997b1e91f8..e8e78d83ae0f 100644 --- a/test/extension/handlers/topologymutation/testdata/clusterclass-quick-start-runtimesdk.yaml +++ b/test/extension/handlers/topologymutation/testdata/clusterclass-quick-start-runtimesdk.yaml @@ -54,8 +54,8 @@ spec: patches: - name: test-patch external: - generateExtension: generate-patches.${EXTENSION_CONFIG_NAME:-"k8s-upgrade-with-runtimesdk"} - validateExtension: validate-topology.${EXTENSION_CONFIG_NAME:-"k8s-upgrade-with-runtimesdk"} + generatePatchesExtension: generate-patches.${EXTENSION_CONFIG_NAME:-"k8s-upgrade-with-runtimesdk"} + validateTopologyExtension: validate-topology.${EXTENSION_CONFIG_NAME:-"k8s-upgrade-with-runtimesdk"} discoverVariablesExtension: discover-variables.${EXTENSION_CONFIG_NAME:-"k8s-upgrade-with-runtimesdk"} --- apiVersion: infrastructure.cluster.x-k8s.io/v1beta1