From 2f1755aca9130dea0883def4fadd7bdec3689fb0 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Thu, 22 May 2025 20:20:45 +0200 Subject: [PATCH] Renamed deprecated ClusterClass Metadata field to DeprecatedV1Beta1Metadata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- .golangci.yml | 2 +- api/core/v1beta1/conversion.go | 28 ++++ api/core/v1beta1/zz_generated.conversion.go | 148 +++++++++++------- api/core/v1beta2/clusterclass_types.go | 12 +- api/core/v1beta2/zz_generated.deepcopy.go | 4 +- api/core/v1beta2/zz_generated.openapi.go | 8 +- .../cluster.x-k8s.io_clusterclasses.yaml | 28 ++-- .../providers/migrations/v1.10-to-v1.11.md | 4 + .../clusterclass/clusterclass_controller.go | 18 +-- .../clusterclass_controller_test.go | 18 +-- .../clusterclass_variable_validation.go | 2 +- .../clusterclass_variable_validation_test.go | 10 +- 12 files changed, 173 insertions(+), 109 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index e004c37fd839..926236769782 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -231,7 +231,7 @@ linters: # should be removed as the referenced deprecated item is removed from the project. - linters: - staticcheck - text: 'SA1019: (bootstrapv1.ClusterStatus|DockerMachine.Spec.Bootstrapped|machineStatus.Bootstrapped|dockerMachine.Spec.Backend.Docker.Bootstrapped|dockerMachine.Spec.Bootstrapped|devMachine.Spec.Backend.Docker.Bootstrapped|c.TopologyPlan|clusterv1.ClusterClassVariableMetadata|clusterv1beta1.ClusterClassVariableMetadata|(variable|currentDefinition|specVar|newVariableDefinition|statusVarDefinition).Metadata) is deprecated' + text: 'SA1019: (bootstrapv1.ClusterStatus|DockerMachine.Spec.Bootstrapped|machineStatus.Bootstrapped|dockerMachine.Spec.Backend.Docker.Bootstrapped|dockerMachine.Spec.Bootstrapped|devMachine.Spec.Backend.Docker.Bootstrapped|c.TopologyPlan|clusterv1.ClusterClassVariableMetadata|clusterv1beta1.ClusterClassVariableMetadata|(variable|currentDefinition|specVar|newVariableDefinition|statusVarDefinition|out).DeprecatedV1Beta1Metadata) is deprecated' # Deprecations for MD revision management - linters: - staticcheck diff --git a/api/core/v1beta1/conversion.go b/api/core/v1beta1/conversion.go index 4a209f4f959e..0a2a40fad728 100644 --- a/api/core/v1beta1/conversion.go +++ b/api/core/v1beta1/conversion.go @@ -884,3 +884,31 @@ func Convert_v1beta1_MachinePoolStatus_To_v1beta2_MachinePoolStatus(in *MachineP func Convert_v1beta1_MachinePoolSpec_To_v1beta2_MachinePoolSpec(in *MachinePoolSpec, out *clusterv1.MachinePoolSpec, s apimachineryconversion.Scope) error { return autoConvert_v1beta1_MachinePoolSpec_To_v1beta2_MachinePoolSpec(in, out, s) } + +func Convert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(in *ClusterClassStatusVariableDefinition, out *clusterv1.ClusterClassStatusVariableDefinition, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(in, out, s); err != nil { + return err + } + return autoConvert_v1beta1_ClusterClassVariableMetadata_To_v1beta2_ClusterClassVariableMetadata(&in.Metadata, &out.DeprecatedV1Beta1Metadata, s) +} + +func Convert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(in *clusterv1.ClusterClassStatusVariableDefinition, out *ClusterClassStatusVariableDefinition, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(in, out, s); err != nil { + return err + } + return autoConvert_v1beta2_ClusterClassVariableMetadata_To_v1beta1_ClusterClassVariableMetadata(&in.DeprecatedV1Beta1Metadata, &out.Metadata, s) +} + +func Convert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(in *ClusterClassVariable, out *clusterv1.ClusterClassVariable, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(in, out, s); err != nil { + return err + } + return autoConvert_v1beta1_ClusterClassVariableMetadata_To_v1beta2_ClusterClassVariableMetadata(&in.Metadata, &out.DeprecatedV1Beta1Metadata, s) +} + +func Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(in *clusterv1.ClusterClassVariable, out *ClusterClassVariable, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(in, out, s); err != nil { + return err + } + return autoConvert_v1beta2_ClusterClassVariableMetadata_To_v1beta1_ClusterClassVariableMetadata(&in.DeprecatedV1Beta1Metadata, &out.Metadata, s) +} diff --git a/api/core/v1beta1/zz_generated.conversion.go b/api/core/v1beta1/zz_generated.conversion.go index 0217448971f5..14f80a13015f 100644 --- a/api/core/v1beta1/zz_generated.conversion.go +++ b/api/core/v1beta1/zz_generated.conversion.go @@ -120,26 +120,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*ClusterClassStatusVariableDefinition)(nil), (*v1beta2.ClusterClassStatusVariableDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(a.(*ClusterClassStatusVariableDefinition), b.(*v1beta2.ClusterClassStatusVariableDefinition), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterClassStatusVariableDefinition)(nil), (*ClusterClassStatusVariableDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(a.(*v1beta2.ClusterClassStatusVariableDefinition), b.(*ClusterClassStatusVariableDefinition), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*ClusterClassVariable)(nil), (*v1beta2.ClusterClassVariable)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(a.(*ClusterClassVariable), b.(*v1beta2.ClusterClassVariable), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterClassVariable)(nil), (*ClusterClassVariable)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(a.(*v1beta2.ClusterClassVariable), b.(*ClusterClassVariable), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*ClusterClassVariableMetadata)(nil), (*v1beta2.ClusterClassVariableMetadata)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ClusterClassVariableMetadata_To_v1beta2_ClusterClassVariableMetadata(a.(*ClusterClassVariableMetadata), b.(*v1beta2.ClusterClassVariableMetadata), scope) }); err != nil { @@ -815,11 +795,21 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*ClusterClassStatusVariableDefinition)(nil), (*v1beta2.ClusterClassStatusVariableDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(a.(*ClusterClassStatusVariableDefinition), b.(*v1beta2.ClusterClassStatusVariableDefinition), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*ClusterClassStatus)(nil), (*v1beta2.ClusterClassStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ClusterClassStatus_To_v1beta2_ClusterClassStatus(a.(*ClusterClassStatus), b.(*v1beta2.ClusterClassStatus), scope) }); err != nil { return err } + if err := s.AddConversionFunc((*ClusterClassVariable)(nil), (*v1beta2.ClusterClassVariable)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(a.(*ClusterClassVariable), b.(*v1beta2.ClusterClassVariable), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*ClusterStatus)(nil), (*v1beta2.ClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ClusterStatus_To_v1beta2_ClusterStatus(a.(*ClusterStatus), b.(*v1beta2.ClusterStatus), scope) }); err != nil { @@ -900,11 +890,21 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.ClusterClassStatusVariableDefinition)(nil), (*ClusterClassStatusVariableDefinition)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(a.(*v1beta2.ClusterClassStatusVariableDefinition), b.(*ClusterClassStatusVariableDefinition), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.ClusterClassStatus)(nil), (*ClusterClassStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_ClusterClassStatus_To_v1beta1_ClusterClassStatus(a.(*v1beta2.ClusterClassStatus), b.(*ClusterClassStatus), scope) }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.ClusterClassVariable)(nil), (*ClusterClassVariable)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(a.(*v1beta2.ClusterClassVariable), b.(*ClusterClassVariable), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.ClusterStatus)(nil), (*ClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_ClusterStatus_To_v1beta1_ClusterStatus(a.(*v1beta2.ClusterStatus), b.(*ClusterStatus), scope) }); err != nil { @@ -1175,7 +1175,17 @@ func autoConvert_v1beta1_ClusterClassSpec_To_v1beta2_ClusterClassSpec(in *Cluste if err := Convert_v1beta1_WorkersClass_To_v1beta2_WorkersClass(&in.Workers, &out.Workers, s); err != nil { return err } - out.Variables = *(*[]v1beta2.ClusterClassVariable)(unsafe.Pointer(&in.Variables)) + if in.Variables != nil { + in, out := &in.Variables, &out.Variables + *out = make([]v1beta2.ClusterClassVariable, len(*in)) + for i := range *in { + if err := Convert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Variables = nil + } out.Patches = *(*[]v1beta2.ClusterClassPatch)(unsafe.Pointer(&in.Patches)) return nil } @@ -1191,13 +1201,33 @@ func autoConvert_v1beta2_ClusterClassSpec_To_v1beta1_ClusterClassSpec(in *v1beta if err := Convert_v1beta2_WorkersClass_To_v1beta1_WorkersClass(&in.Workers, &out.Workers, s); err != nil { return err } - out.Variables = *(*[]ClusterClassVariable)(unsafe.Pointer(&in.Variables)) + if in.Variables != nil { + in, out := &in.Variables, &out.Variables + *out = make([]ClusterClassVariable, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Variables = nil + } out.Patches = *(*[]ClusterClassPatch)(unsafe.Pointer(&in.Patches)) return nil } func autoConvert_v1beta1_ClusterClassStatus_To_v1beta2_ClusterClassStatus(in *ClusterClassStatus, out *v1beta2.ClusterClassStatus, s conversion.Scope) error { - out.Variables = *(*[]v1beta2.ClusterClassStatusVariable)(unsafe.Pointer(&in.Variables)) + if in.Variables != nil { + in, out := &in.Variables, &out.Variables + *out = make([]v1beta2.ClusterClassStatusVariable, len(*in)) + for i := range *in { + if err := Convert_v1beta1_ClusterClassStatusVariable_To_v1beta2_ClusterClassStatusVariable(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Variables = nil + } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions *out = make([]v1.Condition, len(*in)) @@ -1226,7 +1256,17 @@ func autoConvert_v1beta2_ClusterClassStatus_To_v1beta1_ClusterClassStatus(in *v1 } else { out.Conditions = nil } - out.Variables = *(*[]ClusterClassStatusVariable)(unsafe.Pointer(&in.Variables)) + if in.Variables != nil { + in, out := &in.Variables, &out.Variables + *out = make([]ClusterClassStatusVariable, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ClusterClassStatusVariable_To_v1beta1_ClusterClassStatusVariable(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Variables = nil + } out.ObservedGeneration = in.ObservedGeneration // WARNING: in.Deprecated requires manual conversion: does not exist in peer-type return nil @@ -1235,7 +1275,17 @@ func autoConvert_v1beta2_ClusterClassStatus_To_v1beta1_ClusterClassStatus(in *v1 func autoConvert_v1beta1_ClusterClassStatusVariable_To_v1beta2_ClusterClassStatusVariable(in *ClusterClassStatusVariable, out *v1beta2.ClusterClassStatusVariable, s conversion.Scope) error { out.Name = in.Name out.DefinitionsConflict = in.DefinitionsConflict - out.Definitions = *(*[]v1beta2.ClusterClassStatusVariableDefinition)(unsafe.Pointer(&in.Definitions)) + if in.Definitions != nil { + in, out := &in.Definitions, &out.Definitions + *out = make([]v1beta2.ClusterClassStatusVariableDefinition, len(*in)) + for i := range *in { + if err := Convert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Definitions = nil + } return nil } @@ -1247,7 +1297,17 @@ func Convert_v1beta1_ClusterClassStatusVariable_To_v1beta2_ClusterClassStatusVar func autoConvert_v1beta2_ClusterClassStatusVariable_To_v1beta1_ClusterClassStatusVariable(in *v1beta2.ClusterClassStatusVariable, out *ClusterClassStatusVariable, s conversion.Scope) error { out.Name = in.Name out.DefinitionsConflict = in.DefinitionsConflict - out.Definitions = *(*[]ClusterClassStatusVariableDefinition)(unsafe.Pointer(&in.Definitions)) + if in.Definitions != nil { + in, out := &in.Definitions, &out.Definitions + *out = make([]ClusterClassStatusVariableDefinition, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Definitions = nil + } return nil } @@ -1259,71 +1319,43 @@ func Convert_v1beta2_ClusterClassStatusVariable_To_v1beta1_ClusterClassStatusVar func autoConvert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(in *ClusterClassStatusVariableDefinition, out *v1beta2.ClusterClassStatusVariableDefinition, s conversion.Scope) error { out.From = in.From out.Required = in.Required - if err := Convert_v1beta1_ClusterClassVariableMetadata_To_v1beta2_ClusterClassVariableMetadata(&in.Metadata, &out.Metadata, s); err != nil { - return err - } + // WARNING: in.Metadata requires manual conversion: does not exist in peer-type if err := Convert_v1beta1_VariableSchema_To_v1beta2_VariableSchema(&in.Schema, &out.Schema, s); err != nil { return err } return nil } -// Convert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition is an autogenerated conversion function. -func Convert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(in *ClusterClassStatusVariableDefinition, out *v1beta2.ClusterClassStatusVariableDefinition, s conversion.Scope) error { - return autoConvert_v1beta1_ClusterClassStatusVariableDefinition_To_v1beta2_ClusterClassStatusVariableDefinition(in, out, s) -} - func autoConvert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(in *v1beta2.ClusterClassStatusVariableDefinition, out *ClusterClassStatusVariableDefinition, s conversion.Scope) error { out.From = in.From out.Required = in.Required - if err := Convert_v1beta2_ClusterClassVariableMetadata_To_v1beta1_ClusterClassVariableMetadata(&in.Metadata, &out.Metadata, s); err != nil { - return err - } + // WARNING: in.DeprecatedV1Beta1Metadata requires manual conversion: does not exist in peer-type if err := Convert_v1beta2_VariableSchema_To_v1beta1_VariableSchema(&in.Schema, &out.Schema, s); err != nil { return err } return nil } -// Convert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition is an autogenerated conversion function. -func Convert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(in *v1beta2.ClusterClassStatusVariableDefinition, out *ClusterClassStatusVariableDefinition, s conversion.Scope) error { - return autoConvert_v1beta2_ClusterClassStatusVariableDefinition_To_v1beta1_ClusterClassStatusVariableDefinition(in, out, s) -} - func autoConvert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(in *ClusterClassVariable, out *v1beta2.ClusterClassVariable, s conversion.Scope) error { out.Name = in.Name out.Required = in.Required - if err := Convert_v1beta1_ClusterClassVariableMetadata_To_v1beta2_ClusterClassVariableMetadata(&in.Metadata, &out.Metadata, s); err != nil { - return err - } + // WARNING: in.Metadata requires manual conversion: does not exist in peer-type if err := Convert_v1beta1_VariableSchema_To_v1beta2_VariableSchema(&in.Schema, &out.Schema, s); err != nil { return err } return nil } -// Convert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable is an autogenerated conversion function. -func Convert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(in *ClusterClassVariable, out *v1beta2.ClusterClassVariable, s conversion.Scope) error { - return autoConvert_v1beta1_ClusterClassVariable_To_v1beta2_ClusterClassVariable(in, out, s) -} - func autoConvert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(in *v1beta2.ClusterClassVariable, out *ClusterClassVariable, s conversion.Scope) error { out.Name = in.Name out.Required = in.Required - if err := Convert_v1beta2_ClusterClassVariableMetadata_To_v1beta1_ClusterClassVariableMetadata(&in.Metadata, &out.Metadata, s); err != nil { - return err - } + // WARNING: in.DeprecatedV1Beta1Metadata requires manual conversion: does not exist in peer-type if err := Convert_v1beta2_VariableSchema_To_v1beta1_VariableSchema(&in.Schema, &out.Schema, s); err != nil { return err } return nil } -// Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable is an autogenerated conversion function. -func Convert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(in *v1beta2.ClusterClassVariable, out *ClusterClassVariable, s conversion.Scope) error { - return autoConvert_v1beta2_ClusterClassVariable_To_v1beta1_ClusterClassVariable(in, out, s) -} - func autoConvert_v1beta1_ClusterClassVariableMetadata_To_v1beta2_ClusterClassVariableMetadata(in *ClusterClassVariableMetadata, out *v1beta2.ClusterClassVariableMetadata, s conversion.Scope) error { out.Labels = *(*map[string]string)(unsafe.Pointer(&in.Labels)) out.Annotations = *(*map[string]string)(unsafe.Pointer(&in.Annotations)) diff --git a/api/core/v1beta2/clusterclass_types.go b/api/core/v1beta2/clusterclass_types.go index fecf110b961c..e35cf8b25cdb 100644 --- a/api/core/v1beta2/clusterclass_types.go +++ b/api/core/v1beta2/clusterclass_types.go @@ -542,14 +542,14 @@ type ClusterClassVariable struct { // +required Required bool `json:"required"` - // metadata is the metadata of a variable. + // deprecatedV1Beta1Metadata is the metadata of a variable. // It can be used to add additional data for higher level tools to // a ClusterClassVariable. // - // Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please use XMetadata in JSONSchemaProps instead. + // Deprecated: This field is deprecated and will be removed when support for v1beta1 will be dropped. Please use XMetadata in JSONSchemaProps instead. // // +optional - Metadata ClusterClassVariableMetadata `json:"metadata,omitempty"` + DeprecatedV1Beta1Metadata ClusterClassVariableMetadata `json:"deprecatedV1Beta1Metadata,omitempty"` // schema defines the schema of the variable. // +required @@ -1219,14 +1219,14 @@ type ClusterClassStatusVariableDefinition struct { // +required Required bool `json:"required"` - // metadata is the metadata of a variable. + // deprecatedV1Beta1Metadata is the metadata of a variable. // It can be used to add additional data for higher level tools to // a ClusterClassVariable. // - // Deprecated: This field is deprecated and is going to be removed in the next apiVersion. + // Deprecated: This field is deprecated and will be removed when support for v1beta1 will be dropped. Please use XMetadata in JSONSchemaProps instead. // // +optional - Metadata ClusterClassVariableMetadata `json:"metadata,omitempty"` + DeprecatedV1Beta1Metadata ClusterClassVariableMetadata `json:"deprecatedV1Beta1Metadata,omitempty"` // schema defines the schema of the variable. // +required diff --git a/api/core/v1beta2/zz_generated.deepcopy.go b/api/core/v1beta2/zz_generated.deepcopy.go index 4b712e9ba7ee..5eeb401660e8 100644 --- a/api/core/v1beta2/zz_generated.deepcopy.go +++ b/api/core/v1beta2/zz_generated.deepcopy.go @@ -333,7 +333,7 @@ func (in *ClusterClassStatusVariable) DeepCopy() *ClusterClassStatusVariable { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterClassStatusVariableDefinition) DeepCopyInto(out *ClusterClassStatusVariableDefinition) { *out = *in - in.Metadata.DeepCopyInto(&out.Metadata) + in.DeprecatedV1Beta1Metadata.DeepCopyInto(&out.DeprecatedV1Beta1Metadata) in.Schema.DeepCopyInto(&out.Schema) } @@ -372,7 +372,7 @@ func (in *ClusterClassV1Beta1DeprecatedStatus) DeepCopy() *ClusterClassV1Beta1De // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterClassVariable) DeepCopyInto(out *ClusterClassVariable) { *out = *in - in.Metadata.DeepCopyInto(&out.Metadata) + in.DeprecatedV1Beta1Metadata.DeepCopyInto(&out.DeprecatedV1Beta1Metadata) in.Schema.DeepCopyInto(&out.Schema) } diff --git a/api/core/v1beta2/zz_generated.openapi.go b/api/core/v1beta2/zz_generated.openapi.go index db99ee179bee..5167f1a525c6 100644 --- a/api/core/v1beta2/zz_generated.openapi.go +++ b/api/core/v1beta2/zz_generated.openapi.go @@ -707,9 +707,9 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassStatusVariableDefinition(re Format: "", }, }, - "metadata": { + "deprecatedV1Beta1Metadata": { SchemaProps: spec.SchemaProps{ - Description: "metadata is the metadata of a variable. It can be used to add additional data for higher level tools to a ClusterClassVariable.\n\nDeprecated: This field is deprecated and is going to be removed in the next apiVersion.", + Description: "deprecatedV1Beta1Metadata is the metadata of a variable. It can be used to add additional data for higher level tools to a ClusterClassVariable.\n\nDeprecated: This field is deprecated and will be removed when support for v1beta1 will be dropped. Please use XMetadata in JSONSchemaProps instead.", Default: map[string]interface{}{}, Ref: ref("sigs.k8s.io/cluster-api/api/core/v1beta2.ClusterClassVariableMetadata"), }, @@ -782,9 +782,9 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassVariable(ref common.Referen Format: "", }, }, - "metadata": { + "deprecatedV1Beta1Metadata": { SchemaProps: spec.SchemaProps{ - Description: "metadata is the metadata of a variable. It can be used to add additional data for higher level tools to a ClusterClassVariable.\n\nDeprecated: This field is deprecated and is going to be removed in the next apiVersion. Please use XMetadata in JSONSchemaProps instead.", + Description: "deprecatedV1Beta1Metadata is the metadata of a variable. It can be used to add additional data for higher level tools to a ClusterClassVariable.\n\nDeprecated: This field is deprecated and will be removed when support for v1beta1 will be dropped. Please use XMetadata in JSONSchemaProps instead.", Default: map[string]interface{}{}, Ref: ref("sigs.k8s.io/cluster-api/api/core/v1beta2.ClusterClassVariableMetadata"), }, diff --git a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml index dcf58e288eb8..007ca4039339 100644 --- a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml +++ b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml @@ -3521,13 +3521,13 @@ spec: ClusterClassVariable defines a variable which can be configured in the Cluster topology and used in patches. properties: - metadata: + deprecatedV1Beta1Metadata: description: |- - metadata is the metadata of a variable. + deprecatedV1Beta1Metadata is the metadata of a variable. It can be used to add additional data for higher level tools to a ClusterClassVariable. - Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please use XMetadata in JSONSchemaProps instead. + Deprecated: This field is deprecated and will be removed when support for v1beta1 will be dropped. Please use XMetadata in JSONSchemaProps instead. properties: annotations: additionalProperties: @@ -4785,21 +4785,13 @@ spec: description: ClusterClassStatusVariableDefinition defines a variable which appears in the status of a ClusterClass. properties: - from: - description: |- - from specifies the origin of the variable definition. - This will be `inline` for variables defined in the ClusterClass or the name of a patch defined in the ClusterClass - for variables discovered from a DiscoverVariables runtime extensions. - maxLength: 256 - minLength: 1 - type: string - metadata: + deprecatedV1Beta1Metadata: description: |- - metadata is the metadata of a variable. + deprecatedV1Beta1Metadata is the metadata of a variable. It can be used to add additional data for higher level tools to a ClusterClassVariable. - Deprecated: This field is deprecated and is going to be removed in the next apiVersion. + Deprecated: This field is deprecated and will be removed when support for v1beta1 will be dropped. Please use XMetadata in JSONSchemaProps instead. properties: annotations: additionalProperties: @@ -4817,6 +4809,14 @@ spec: (scope and select) variables. type: object type: object + from: + description: |- + from specifies the origin of the variable definition. + This will be `inline` for variables defined in the ClusterClass or the name of a patch defined in the ClusterClass + for variables discovered from a DiscoverVariables runtime extensions. + maxLength: 256 + minLength: 1 + type: string required: description: |- required specifies if the variable is required. 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 8492f2ecd1f8..d7e2ada612af 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 @@ -166,6 +166,10 @@ proposal because most of the changes described below are a consequence of the wo - The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct: - `spec.controlPlane.machineHealthCheck` - `spec.workers.machineDeployments[].machineHealthCheck` +- The `spec.variables[].metadata` and `.status.variables[].definitions[].metadata` fields have been renamed + to `spec.variables[].deprecatedV1Beta1Metadata` and `.status.variables[].definitions[].deprecatedV1Beta1Metadata` + - These fields are deprecated and will be removed when support for v1beta1 will be dropped. + - Please use `XMetadata` in `JSONSchemaProps` instead. - The `builtin.cluster.classRef.Name` and `builtin.cluster.classRef.Namespace` variables have been added - The `builtin.cluster.class` and `builtin.cluster.classNamespace` are deprecated and will be removed with the next apiVersion. - The `builtin.cluster.network.ipFamily` variable has been removed and it cannot be used anymore in patches diff --git a/internal/controllers/clusterclass/clusterclass_controller.go b/internal/controllers/clusterclass/clusterclass_controller.go index 84f27ff962c0..a087e17fc015 100644 --- a/internal/controllers/clusterclass/clusterclass_controller.go +++ b/internal/controllers/clusterclass/clusterclass_controller.go @@ -401,10 +401,10 @@ func addNewStatusVariable(variable clusterv1.ClusterClassVariable, from string) DefinitionsConflict: false, Definitions: []clusterv1.ClusterClassStatusVariableDefinition{ { - From: from, - Required: variable.Required, - Metadata: variable.Metadata, - Schema: variable.Schema, + From: from, + Required: variable.Required, + DeprecatedV1Beta1Metadata: variable.DeprecatedV1Beta1Metadata, + Schema: variable.Schema, }, }} } @@ -412,10 +412,10 @@ func addNewStatusVariable(variable clusterv1.ClusterClassVariable, from string) func addDefinitionToExistingStatusVariable(variable clusterv1.ClusterClassVariable, from string, existingVariable *clusterv1.ClusterClassStatusVariable) *clusterv1.ClusterClassStatusVariable { combinedVariable := existingVariable.DeepCopy() newVariableDefinition := clusterv1.ClusterClassStatusVariableDefinition{ - From: from, - Required: variable.Required, - Metadata: variable.Metadata, - Schema: variable.Schema, + From: from, + Required: variable.Required, + DeprecatedV1Beta1Metadata: variable.DeprecatedV1Beta1Metadata, + Schema: variable.Schema, } combinedVariable.Definitions = append(existingVariable.Definitions, newVariableDefinition) @@ -423,7 +423,7 @@ func addDefinitionToExistingStatusVariable(variable clusterv1.ClusterClassVariab // If definitions already conflict, no need to check. if !combinedVariable.DefinitionsConflict { currentDefinition := combinedVariable.Definitions[0] - if currentDefinition.Required != newVariableDefinition.Required || !reflect.DeepEqual(currentDefinition.Schema, newVariableDefinition.Schema) || !reflect.DeepEqual(currentDefinition.Metadata, newVariableDefinition.Metadata) { + if currentDefinition.Required != newVariableDefinition.Required || !reflect.DeepEqual(currentDefinition.Schema, newVariableDefinition.Schema) || !reflect.DeepEqual(currentDefinition.DeprecatedV1Beta1Metadata, newVariableDefinition.DeprecatedV1Beta1Metadata) { combinedVariable.DefinitionsConflict = true } } diff --git a/internal/controllers/clusterclass/clusterclass_controller_test.go b/internal/controllers/clusterclass/clusterclass_controller_test.go index a1160bdca0af..8a7f06f68631 100644 --- a/internal/controllers/clusterclass/clusterclass_controller_test.go +++ b/internal/controllers/clusterclass/clusterclass_controller_test.go @@ -131,7 +131,7 @@ func TestClusterClassReconciler_reconcile(t *testing.T) { }, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, @@ -205,8 +205,8 @@ func assertStatusVariables(actualClusterClass *clusterv1.ClusterClass) error { if !cmp.Equal(specVar.Schema, statusVarDefinition.Schema) { return errors.Errorf("ClusterClass status variable %s schema does not match. Expected %v. Got %v", specVar.Name, specVar.Schema, statusVarDefinition.Schema) } - if !cmp.Equal(specVar.Metadata, statusVarDefinition.Metadata) { - return errors.Errorf("ClusterClass status variable %s metadata does not match. Expected %v. Got %v", specVar.Name, specVar.Metadata, statusVarDefinition.Metadata) + if !cmp.Equal(specVar.DeprecatedV1Beta1Metadata, statusVarDefinition.DeprecatedV1Beta1Metadata) { + return errors.Errorf("ClusterClass status variable %s metadata does not match. Expected %v. Got %v", specVar.Name, specVar.DeprecatedV1Beta1Metadata, statusVarDefinition.DeprecatedV1Beta1Metadata) } } if !found { @@ -441,7 +441,7 @@ func TestReconciler_reconcileVariables(t *testing.T) { }}, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, @@ -499,7 +499,7 @@ func TestReconciler_reconcileVariables(t *testing.T) { }}, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, @@ -639,7 +639,7 @@ func TestReconciler_reconcileVariables(t *testing.T) { }}, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, @@ -668,7 +668,7 @@ func TestReconciler_reconcileVariables(t *testing.T) { }}, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, @@ -698,7 +698,7 @@ func TestReconciler_reconcileVariables(t *testing.T) { }, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, @@ -911,7 +911,7 @@ func TestReconciler_reconcileVariables(t *testing.T) { }, }, }, - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "some-label": "some-label-value", }, diff --git a/internal/topology/variables/clusterclass_variable_validation.go b/internal/topology/variables/clusterclass_variable_validation.go index a1af19e42c7a..5f8e87c5571f 100644 --- a/internal/topology/variables/clusterclass_variable_validation.go +++ b/internal/topology/variables/clusterclass_variable_validation.go @@ -108,7 +108,7 @@ func validateClusterClassVariable(ctx context.Context, oldVariable, variable *cl allErrs = append(allErrs, validateClusterClassVariableName(variable.Name, fldPath.Child("name"))...) // Validate variable metadata. - allErrs = append(allErrs, validateClusterClassVariableMetadata(variable.Metadata, fldPath.Child("metadata"))...) + allErrs = append(allErrs, validateClusterClassVariableMetadata(variable.DeprecatedV1Beta1Metadata, fldPath.Child("deprecatedV1Beta1Metadata"))...) // Validate variable XMetadata. allErrs = append(allErrs, validateClusterClassXVariableMetadata(&variable.Schema.OpenAPIV3Schema, fldPath.Child("schema", "openAPIV3Schema"))...) diff --git a/internal/topology/variables/clusterclass_variable_validation_test.go b/internal/topology/variables/clusterclass_variable_validation_test.go index e8931fb0266a..9484665d609d 100644 --- a/internal/topology/variables/clusterclass_variable_validation_test.go +++ b/internal/topology/variables/clusterclass_variable_validation_test.go @@ -451,7 +451,7 @@ func Test_ValidateClusterClassVariable(t *testing.T) { name: "Valid variable metadata", clusterClassVariable: &clusterv1.ClusterClassVariable{ Name: "validVariable", - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ "label-key": "label-value", }, @@ -471,7 +471,7 @@ func Test_ValidateClusterClassVariable(t *testing.T) { name: "fail on invalid variable label: key does not start with alphanumeric character", clusterClassVariable: &clusterv1.ClusterClassVariable{ Name: "variable", - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Labels: map[string]string{ ".label-key": "label-value", }, @@ -485,14 +485,14 @@ func Test_ValidateClusterClassVariable(t *testing.T) { }, wantErrs: []validationMatch{ invalid("\".label-key\": name part must consist of alphanumeric characters", - "spec.variables[variable].metadata.labels"), + "spec.variables[variable].deprecatedV1Beta1Metadata.labels"), }, }, { name: "fail on invalid variable annotation: key does not start with alphanumeric character", clusterClassVariable: &clusterv1.ClusterClassVariable{ Name: "variable", - Metadata: clusterv1.ClusterClassVariableMetadata{ + DeprecatedV1Beta1Metadata: clusterv1.ClusterClassVariableMetadata{ Annotations: map[string]string{ ".annotation-key": "annotation-value", }, @@ -506,7 +506,7 @@ func Test_ValidateClusterClassVariable(t *testing.T) { }, wantErrs: []validationMatch{ invalid("\".annotation-key\": name part must consist of alphanumeric characters", - "spec.variables[variable].metadata.annotations"), + "spec.variables[variable].deprecatedV1Beta1Metadata.annotations"), }, }, // Defaults