diff --git a/api/addons/v1beta1/conversion.go b/api/addons/v1beta1/conversion.go index 6eeb285d99a8..0bc538dddeae 100644 --- a/api/addons/v1beta1/conversion.go +++ b/api/addons/v1beta1/conversion.go @@ -17,6 +17,8 @@ limitations under the License. package v1beta1 import ( + "reflect" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apimachineryconversion "k8s.io/apimachinery/pkg/conversion" "sigs.k8s.io/controller-runtime/pkg/conversion" @@ -105,6 +107,21 @@ func Convert_v1beta1_ClusterResourceSetStatus_To_v1beta2_ClusterResourceSetStatu return nil } +func Convert_Pointer_v1beta1_ResourceSetBinding_To_v1beta2_ResourceSetBinding(in **ResourceSetBinding, out *addonsv1.ResourceSetBinding, s apimachineryconversion.Scope) error { + if in == nil || *in == nil { + return nil + } + return autoConvert_v1beta1_ResourceSetBinding_To_v1beta2_ResourceSetBinding(*in, out, s) +} + +func Convert_v1beta2_ResourceSetBinding_To_Pointer_v1beta1_ResourceSetBinding(in *addonsv1.ResourceSetBinding, out **ResourceSetBinding, s apimachineryconversion.Scope) error { + if in == nil || reflect.DeepEqual(*in, addonsv1.ResourceSetBinding{}) { + return nil + } + *out = &ResourceSetBinding{} + return autoConvert_v1beta2_ResourceSetBinding_To_v1beta1_ResourceSetBinding(in, *out, s) +} + // Implement local conversion func because conversion-gen is not aware of conversion func in other packages (see https://github.com/kubernetes/code-generator/issues/94) func Convert_v1_Condition_To_v1beta1_Condition(in *metav1.Condition, out *clusterv1beta1.Condition, s apimachineryconversion.Scope) error { diff --git a/api/addons/v1beta1/conversion_test.go b/api/addons/v1beta1/conversion_test.go index 2f29e0637a56..db1320b45db1 100644 --- a/api/addons/v1beta1/conversion_test.go +++ b/api/addons/v1beta1/conversion_test.go @@ -39,8 +39,9 @@ func TestFuzzyConversion(t *testing.T) { FuzzerFuncs: []fuzzer.FuzzerFuncs{ClusterResourceSetFuzzFuncs}, })) t.Run("for ClusterResourceSetBinding", utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{ - Hub: &addonsv1.ClusterResourceSetBinding{}, - Spoke: &ClusterResourceSetBinding{}, + Hub: &addonsv1.ClusterResourceSetBinding{}, + Spoke: &ClusterResourceSetBinding{}, + FuzzerFuncs: []fuzzer.FuzzerFuncs{ClusterResourceSetBindingFuzzFuncs}, })) } @@ -70,3 +71,20 @@ func spokeClusterResourceSetStatus(in *ClusterResourceSetStatus, c randfill.Cont } } } + +func ClusterResourceSetBindingFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} { + return []interface{}{ + hubClusterResourceSetStatus, + spokeClusterResourceSetBindingSpec, + } +} + +func spokeClusterResourceSetBindingSpec(in *ClusterResourceSetBindingSpec, c randfill.Continue) { + c.FillNoCustom(in) + + for i, b := range in.Bindings { + if b != nil && reflect.DeepEqual(*b, ResourceSetBinding{}) { + in.Bindings[i] = nil + } + } +} diff --git a/api/addons/v1beta1/zz_generated.conversion.go b/api/addons/v1beta1/zz_generated.conversion.go index bfe815b69f13..cc414b8ccc35 100644 --- a/api/addons/v1beta1/zz_generated.conversion.go +++ b/api/addons/v1beta1/zz_generated.conversion.go @@ -128,6 +128,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((**ResourceSetBinding)(nil), (*v1beta2.ResourceSetBinding)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_Pointer_v1beta1_ResourceSetBinding_To_v1beta2_ResourceSetBinding(a.(**ResourceSetBinding), b.(*v1beta2.ResourceSetBinding), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1.Condition)(nil), (*corev1beta1.Condition)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_Condition_To_v1beta1_Condition(a.(*v1.Condition), b.(*corev1beta1.Condition), scope) }); err != nil { @@ -148,6 +153,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.ResourceSetBinding)(nil), (**ResourceSetBinding)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ResourceSetBinding_To_Pointer_v1beta1_ResourceSetBinding(a.(*v1beta2.ResourceSetBinding), b.(**ResourceSetBinding), scope) + }); err != nil { + return err + } return nil } @@ -211,7 +221,17 @@ func Convert_v1beta2_ClusterResourceSetBinding_To_v1beta1_ClusterResourceSetBind func autoConvert_v1beta1_ClusterResourceSetBindingList_To_v1beta2_ClusterResourceSetBindingList(in *ClusterResourceSetBindingList, out *v1beta2.ClusterResourceSetBindingList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]v1beta2.ClusterResourceSetBinding)(unsafe.Pointer(&in.Items)) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]v1beta2.ClusterResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_v1beta1_ClusterResourceSetBinding_To_v1beta2_ClusterResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } return nil } @@ -222,7 +242,17 @@ func Convert_v1beta1_ClusterResourceSetBindingList_To_v1beta2_ClusterResourceSet func autoConvert_v1beta2_ClusterResourceSetBindingList_To_v1beta1_ClusterResourceSetBindingList(in *v1beta2.ClusterResourceSetBindingList, out *ClusterResourceSetBindingList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]ClusterResourceSetBinding)(unsafe.Pointer(&in.Items)) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ClusterResourceSetBinding_To_v1beta1_ClusterResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } return nil } @@ -232,7 +262,17 @@ func Convert_v1beta2_ClusterResourceSetBindingList_To_v1beta1_ClusterResourceSet } func autoConvert_v1beta1_ClusterResourceSetBindingSpec_To_v1beta2_ClusterResourceSetBindingSpec(in *ClusterResourceSetBindingSpec, out *v1beta2.ClusterResourceSetBindingSpec, s conversion.Scope) error { - out.Bindings = *(*[]*v1beta2.ResourceSetBinding)(unsafe.Pointer(&in.Bindings)) + if in.Bindings != nil { + in, out := &in.Bindings, &out.Bindings + *out = make([]v1beta2.ResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_Pointer_v1beta1_ResourceSetBinding_To_v1beta2_ResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Bindings = nil + } out.ClusterName = in.ClusterName return nil } @@ -243,7 +283,17 @@ func Convert_v1beta1_ClusterResourceSetBindingSpec_To_v1beta2_ClusterResourceSet } func autoConvert_v1beta2_ClusterResourceSetBindingSpec_To_v1beta1_ClusterResourceSetBindingSpec(in *v1beta2.ClusterResourceSetBindingSpec, out *ClusterResourceSetBindingSpec, s conversion.Scope) error { - out.Bindings = *(*[]*ResourceSetBinding)(unsafe.Pointer(&in.Bindings)) + if in.Bindings != nil { + in, out := &in.Bindings, &out.Bindings + *out = make([]*ResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ResourceSetBinding_To_Pointer_v1beta1_ResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Bindings = nil + } out.ClusterName = in.ClusterName return nil } diff --git a/api/addons/v1beta2/clusterresourcesetbinding_types.go b/api/addons/v1beta2/clusterresourcesetbinding_types.go index 43031e40c88b..f6fc63d24e0a 100644 --- a/api/addons/v1beta2/clusterresourcesetbinding_types.go +++ b/api/addons/v1beta2/clusterresourcesetbinding_types.go @@ -92,14 +92,14 @@ func (r *ResourceSetBinding) SetBinding(resourceBinding ResourceBinding) { // GetOrCreateBinding returns the ResourceSetBinding for a given ClusterResourceSet if exists, // otherwise creates one and updates ClusterResourceSet with it. func (c *ClusterResourceSetBinding) GetOrCreateBinding(clusterResourceSet *ClusterResourceSet) *ResourceSetBinding { - for _, binding := range c.Spec.Bindings { - if binding.ClusterResourceSetName == clusterResourceSet.Name { - return binding + for i := range c.Spec.Bindings { + if c.Spec.Bindings[i].ClusterResourceSetName == clusterResourceSet.Name { + return &c.Spec.Bindings[i] } } - binding := &ResourceSetBinding{ClusterResourceSetName: clusterResourceSet.Name, Resources: []ResourceBinding{}} + binding := ResourceSetBinding{ClusterResourceSetName: clusterResourceSet.Name, Resources: []ResourceBinding{}} c.Spec.Bindings = append(c.Spec.Bindings, binding) - return binding + return &c.Spec.Bindings[len(c.Spec.Bindings)-1] } // RemoveBinding removes the ClusterResourceSet from the ClusterResourceSetBinding Bindings list. @@ -138,7 +138,7 @@ type ClusterResourceSetBindingSpec struct { // bindings is a list of ClusterResourceSets and their resources. // +optional // +kubebuilder:validation:MaxItems=100 - Bindings []*ResourceSetBinding `json:"bindings,omitempty"` + Bindings []ResourceSetBinding `json:"bindings,omitempty"` // clusterName is the name of the Cluster this binding applies to. // +required diff --git a/api/addons/v1beta2/zz_generated.deepcopy.go b/api/addons/v1beta2/zz_generated.deepcopy.go index 97b15bb1e6c7..53b2395ec045 100644 --- a/api/addons/v1beta2/zz_generated.deepcopy.go +++ b/api/addons/v1beta2/zz_generated.deepcopy.go @@ -116,13 +116,9 @@ func (in *ClusterResourceSetBindingSpec) DeepCopyInto(out *ClusterResourceSetBin *out = *in if in.Bindings != nil { in, out := &in.Bindings, &out.Bindings - *out = make([]*ResourceSetBinding, len(*in)) + *out = make([]ResourceSetBinding, len(*in)) for i := range *in { - if (*in)[i] != nil { - in, out := &(*in)[i], &(*out)[i] - *out = new(ResourceSetBinding) - (*in).DeepCopyInto(*out) - } + (*in)[i].DeepCopyInto(&(*out)[i]) } } } diff --git a/cmd/clusterctl/internal/test/fake_objects.go b/cmd/clusterctl/internal/test/fake_objects.go index 64513e184446..b7f08c2dce61 100644 --- a/cmd/clusterctl/internal/test/fake_objects.go +++ b/cmd/clusterctl/internal/test/fake_objects.go @@ -1195,7 +1195,7 @@ func (f *FakeClusterResourceSet) Objs() []client.Object { }, Spec: addonsv1.ClusterResourceSetBindingSpec{ ClusterName: cluster.Name, - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ { ClusterResourceSetName: crs.Name, }, @@ -1219,7 +1219,7 @@ func (f *FakeClusterResourceSet) Objs() []client.Object { ClusterResourceSetName: crs.Name, Resources: []addonsv1.ResourceBinding{}, } - binding.Spec.Bindings = append(binding.Spec.Bindings, &resourceSetBinding) + binding.Spec.Bindings = append(binding.Spec.Bindings, resourceSetBinding) // creates map entries for each cluster/resource of type Secret for _, secret := range f.secrets { diff --git a/internal/api/addons/v1alpha3/conversion.go b/internal/api/addons/v1alpha3/conversion.go index 68ce8481ff22..31eb87283f9b 100644 --- a/internal/api/addons/v1alpha3/conversion.go +++ b/internal/api/addons/v1alpha3/conversion.go @@ -17,6 +17,8 @@ limitations under the License. package v1alpha3 import ( + "reflect" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apimachineryconversion "k8s.io/apimachinery/pkg/conversion" "sigs.k8s.io/controller-runtime/pkg/conversion" @@ -119,6 +121,21 @@ func Convert_v1beta2_ClusterResourceSetStatus_To_v1alpha3_ClusterResourceSetStat return autoConvert_v1beta2_ClusterResourceSetStatus_To_v1alpha3_ClusterResourceSetStatus(in, out, s) } +func Convert_Pointer_v1alpha3_ResourceSetBinding_To_v1beta2_ResourceSetBinding(in **ResourceSetBinding, out *addonsv1.ResourceSetBinding, s apimachineryconversion.Scope) error { + if in == nil || *in == nil { + return nil + } + return autoConvert_v1alpha3_ResourceSetBinding_To_v1beta2_ResourceSetBinding(*in, out, s) +} + +func Convert_v1beta2_ResourceSetBinding_To_Pointer_v1alpha3_ResourceSetBinding(in *addonsv1.ResourceSetBinding, out **ResourceSetBinding, s apimachineryconversion.Scope) error { + if in == nil || reflect.DeepEqual(*in, addonsv1.ResourceSetBinding{}) { + return nil + } + *out = &ResourceSetBinding{} + return autoConvert_v1beta2_ResourceSetBinding_To_v1alpha3_ResourceSetBinding(in, *out, s) +} + // Implement local conversion func because conversion-gen is not aware of conversion func in other packages (see https://github.com/kubernetes/code-generator/issues/94) func Convert_v1_Condition_To_v1alpha3_Condition(in *metav1.Condition, out *clusterv1alpha3.Condition, s apimachineryconversion.Scope) error { diff --git a/internal/api/addons/v1alpha3/conversion_test.go b/internal/api/addons/v1alpha3/conversion_test.go index 976330cf371a..5ac1abd3346f 100644 --- a/internal/api/addons/v1alpha3/conversion_test.go +++ b/internal/api/addons/v1alpha3/conversion_test.go @@ -41,6 +41,7 @@ func TestFuzzyConversion(t *testing.T) { t.Run("for ClusterResourceSetBinding", utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{ Hub: &addonsv1.ClusterResourceSetBinding{}, Spoke: &ClusterResourceSetBinding{}, + FuzzerFuncs: []fuzzer.FuzzerFuncs{ClusterResourceSetBindingFuzzFuncs}, })) } @@ -59,3 +60,20 @@ func hubClusterResourceSetStatus(in *addonsv1.ClusterResourceSetStatus, c randfi } } } + +func ClusterResourceSetBindingFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} { + return []interface{}{ + hubClusterResourceSetStatus, + spokeClusterResourceSetBindingSpec, + } +} + +func spokeClusterResourceSetBindingSpec(in *ClusterResourceSetBindingSpec, c randfill.Continue) { + c.FillNoCustom(in) + + for i, b := range in.Bindings { + if b != nil && reflect.DeepEqual(*b, ResourceSetBinding{}) { + in.Bindings[i] = nil + } + } +} diff --git a/internal/api/addons/v1alpha3/zz_generated.conversion.go b/internal/api/addons/v1alpha3/zz_generated.conversion.go index dd08a62ac70a..048b992623bb 100644 --- a/internal/api/addons/v1alpha3/zz_generated.conversion.go +++ b/internal/api/addons/v1alpha3/zz_generated.conversion.go @@ -128,6 +128,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((**ResourceSetBinding)(nil), (*v1beta2.ResourceSetBinding)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_Pointer_v1alpha3_ResourceSetBinding_To_v1beta2_ResourceSetBinding(a.(**ResourceSetBinding), b.(*v1beta2.ResourceSetBinding), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1.Condition)(nil), (*corev1alpha3.Condition)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_Condition_To_v1alpha3_Condition(a.(*v1.Condition), b.(*corev1alpha3.Condition), scope) }); err != nil { @@ -148,6 +153,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.ResourceSetBinding)(nil), (**ResourceSetBinding)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ResourceSetBinding_To_Pointer_v1alpha3_ResourceSetBinding(a.(*v1beta2.ResourceSetBinding), b.(**ResourceSetBinding), scope) + }); err != nil { + return err + } return nil } @@ -252,7 +262,17 @@ func Convert_v1beta2_ClusterResourceSetBindingList_To_v1alpha3_ClusterResourceSe } func autoConvert_v1alpha3_ClusterResourceSetBindingSpec_To_v1beta2_ClusterResourceSetBindingSpec(in *ClusterResourceSetBindingSpec, out *v1beta2.ClusterResourceSetBindingSpec, s conversion.Scope) error { - out.Bindings = *(*[]*v1beta2.ResourceSetBinding)(unsafe.Pointer(&in.Bindings)) + if in.Bindings != nil { + in, out := &in.Bindings, &out.Bindings + *out = make([]v1beta2.ResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_Pointer_v1alpha3_ResourceSetBinding_To_v1beta2_ResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Bindings = nil + } return nil } @@ -262,7 +282,17 @@ func Convert_v1alpha3_ClusterResourceSetBindingSpec_To_v1beta2_ClusterResourceSe } func autoConvert_v1beta2_ClusterResourceSetBindingSpec_To_v1alpha3_ClusterResourceSetBindingSpec(in *v1beta2.ClusterResourceSetBindingSpec, out *ClusterResourceSetBindingSpec, s conversion.Scope) error { - out.Bindings = *(*[]*ResourceSetBinding)(unsafe.Pointer(&in.Bindings)) + if in.Bindings != nil { + in, out := &in.Bindings, &out.Bindings + *out = make([]*ResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ResourceSetBinding_To_Pointer_v1alpha3_ResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Bindings = nil + } // WARNING: in.ClusterName requires manual conversion: does not exist in peer-type return nil } diff --git a/internal/api/addons/v1alpha4/conversion.go b/internal/api/addons/v1alpha4/conversion.go index 9a79760e2db5..da9bf4964dab 100644 --- a/internal/api/addons/v1alpha4/conversion.go +++ b/internal/api/addons/v1alpha4/conversion.go @@ -17,6 +17,8 @@ limitations under the License. package v1alpha4 import ( + "reflect" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apimachineryconversion "k8s.io/apimachinery/pkg/conversion" "sigs.k8s.io/controller-runtime/pkg/conversion" @@ -120,6 +122,21 @@ func Convert_v1beta2_ClusterResourceSetStatus_To_v1alpha4_ClusterResourceSetStat return autoConvert_v1beta2_ClusterResourceSetStatus_To_v1alpha4_ClusterResourceSetStatus(in, out, s) } +func Convert_Pointer_v1alpha4_ResourceSetBinding_To_v1beta2_ResourceSetBinding(in **ResourceSetBinding, out *addonsv1.ResourceSetBinding, s apimachineryconversion.Scope) error { + if in == nil || *in == nil { + return nil + } + return autoConvert_v1alpha4_ResourceSetBinding_To_v1beta2_ResourceSetBinding(*in, out, s) +} + +func Convert_v1beta2_ResourceSetBinding_To_Pointer_v1alpha4_ResourceSetBinding(in *addonsv1.ResourceSetBinding, out **ResourceSetBinding, s apimachineryconversion.Scope) error { + if in == nil || reflect.DeepEqual(*in, addonsv1.ResourceSetBinding{}) { + return nil + } + *out = &ResourceSetBinding{} + return autoConvert_v1beta2_ResourceSetBinding_To_v1alpha4_ResourceSetBinding(in, *out, s) +} + // Implement local conversion func because conversion-gen is not aware of conversion func in other packages (see https://github.com/kubernetes/code-generator/issues/94) func Convert_v1_Condition_To_v1alpha4_Condition(in *metav1.Condition, out *clusterv1alpha4.Condition, s apimachineryconversion.Scope) error { diff --git a/internal/api/addons/v1alpha4/conversion_test.go b/internal/api/addons/v1alpha4/conversion_test.go index 9058ad471b1d..166d746ac6f1 100644 --- a/internal/api/addons/v1alpha4/conversion_test.go +++ b/internal/api/addons/v1alpha4/conversion_test.go @@ -41,6 +41,7 @@ func TestFuzzyConversion(t *testing.T) { t.Run("for ClusterResourceSetBinding", utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{ Hub: &addonsv1.ClusterResourceSetBinding{}, Spoke: &ClusterResourceSetBinding{}, + FuzzerFuncs: []fuzzer.FuzzerFuncs{ClusterResourceSetBindingFuzzFuncs}, })) } @@ -59,3 +60,20 @@ func hubClusterResourceSetStatus(in *addonsv1.ClusterResourceSetStatus, c randfi } } } + +func ClusterResourceSetBindingFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} { + return []interface{}{ + hubClusterResourceSetStatus, + spokeClusterResourceSetBindingSpec, + } +} + +func spokeClusterResourceSetBindingSpec(in *ClusterResourceSetBindingSpec, c randfill.Continue) { + c.FillNoCustom(in) + + for i, b := range in.Bindings { + if b != nil && reflect.DeepEqual(*b, ResourceSetBinding{}) { + in.Bindings[i] = nil + } + } +} diff --git a/internal/api/addons/v1alpha4/zz_generated.conversion.go b/internal/api/addons/v1alpha4/zz_generated.conversion.go index bd8fd56778e4..c059bfb43e38 100644 --- a/internal/api/addons/v1alpha4/zz_generated.conversion.go +++ b/internal/api/addons/v1alpha4/zz_generated.conversion.go @@ -128,6 +128,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((**ResourceSetBinding)(nil), (*v1beta2.ResourceSetBinding)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_Pointer_v1alpha4_ResourceSetBinding_To_v1beta2_ResourceSetBinding(a.(**ResourceSetBinding), b.(*v1beta2.ResourceSetBinding), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1.Condition)(nil), (*corev1alpha4.Condition)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_Condition_To_v1alpha4_Condition(a.(*v1.Condition), b.(*corev1alpha4.Condition), scope) }); err != nil { @@ -148,6 +153,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.ResourceSetBinding)(nil), (**ResourceSetBinding)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ResourceSetBinding_To_Pointer_v1alpha4_ResourceSetBinding(a.(*v1beta2.ResourceSetBinding), b.(**ResourceSetBinding), scope) + }); err != nil { + return err + } return nil } @@ -252,7 +262,17 @@ func Convert_v1beta2_ClusterResourceSetBindingList_To_v1alpha4_ClusterResourceSe } func autoConvert_v1alpha4_ClusterResourceSetBindingSpec_To_v1beta2_ClusterResourceSetBindingSpec(in *ClusterResourceSetBindingSpec, out *v1beta2.ClusterResourceSetBindingSpec, s conversion.Scope) error { - out.Bindings = *(*[]*v1beta2.ResourceSetBinding)(unsafe.Pointer(&in.Bindings)) + if in.Bindings != nil { + in, out := &in.Bindings, &out.Bindings + *out = make([]v1beta2.ResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_Pointer_v1alpha4_ResourceSetBinding_To_v1beta2_ResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Bindings = nil + } return nil } @@ -262,7 +282,17 @@ func Convert_v1alpha4_ClusterResourceSetBindingSpec_To_v1beta2_ClusterResourceSe } func autoConvert_v1beta2_ClusterResourceSetBindingSpec_To_v1alpha4_ClusterResourceSetBindingSpec(in *v1beta2.ClusterResourceSetBindingSpec, out *ClusterResourceSetBindingSpec, s conversion.Scope) error { - out.Bindings = *(*[]*ResourceSetBinding)(unsafe.Pointer(&in.Bindings)) + if in.Bindings != nil { + in, out := &in.Bindings, &out.Bindings + *out = make([]*ResourceSetBinding, len(*in)) + for i := range *in { + if err := Convert_v1beta2_ResourceSetBinding_To_Pointer_v1alpha4_ResourceSetBinding(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Bindings = nil + } // WARNING: in.ClusterName requires manual conversion: does not exist in peer-type return nil } diff --git a/internal/controllers/clusterresourceset/clusterresourceset_helpers_test.go b/internal/controllers/clusterresourceset/clusterresourceset_helpers_test.go index 0d2e5e102512..4cb5ea3766bb 100644 --- a/internal/controllers/clusterresourceset/clusterresourceset_helpers_test.go +++ b/internal/controllers/clusterresourceset/clusterresourceset_helpers_test.go @@ -51,7 +51,7 @@ func TestGetorCreateClusterResourceSetBinding(t *testing.T) { Name: testClusterWithBinding.Name, }, Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ { ClusterResourceSetName: "test-clusterResourceSet", Resources: []addonsv1.ResourceBinding{ diff --git a/test/framework/clusterresourceset_helpers.go b/test/framework/clusterresourceset_helpers.go index e9c98d7f37f1..3c0ec7fcd90e 100644 --- a/test/framework/clusterresourceset_helpers.go +++ b/test/framework/clusterresourceset_helpers.go @@ -169,7 +169,7 @@ func getResourceSetBindingForClusterResourceSet( } for _, binding := range clusterResourceSetBinding.Spec.Bindings { if binding.ClusterResourceSetName == clusterResourceSet.Name { - return binding + return &binding } } return nil diff --git a/test/framework/clusterresourceset_helpers_test.go b/test/framework/clusterresourceset_helpers_test.go index e929a3d46d22..8356a47c22a7 100644 --- a/test/framework/clusterresourceset_helpers_test.go +++ b/test/framework/clusterresourceset_helpers_test.go @@ -51,7 +51,7 @@ func Test_getResourceSetBindingForClusterResourceSet(t *testing.T) { name: "CRSB with no matching bindings", inputCRSB: &addonsv1.ClusterResourceSetBinding{ Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ {ClusterResourceSetName: "bar"}, }, }, @@ -62,7 +62,7 @@ func Test_getResourceSetBindingForClusterResourceSet(t *testing.T) { name: "CRSB with single matching bindings", inputCRSB: &addonsv1.ClusterResourceSetBinding{ Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ {ClusterResourceSetName: "foo"}, }, }, @@ -73,7 +73,7 @@ func Test_getResourceSetBindingForClusterResourceSet(t *testing.T) { name: "CRSB with multiple bindings with match at index 0", inputCRSB: &addonsv1.ClusterResourceSetBinding{ Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ {ClusterResourceSetName: "foo"}, {ClusterResourceSetName: "bar"}, }, @@ -85,7 +85,7 @@ func Test_getResourceSetBindingForClusterResourceSet(t *testing.T) { name: "CRSB with multiple bindings with match at index 1", inputCRSB: &addonsv1.ClusterResourceSetBinding{ Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ {ClusterResourceSetName: "bar"}, {ClusterResourceSetName: "foo"}, }, @@ -97,7 +97,7 @@ func Test_getResourceSetBindingForClusterResourceSet(t *testing.T) { name: "CRSB with multiple bindings with match at middle index", inputCRSB: &addonsv1.ClusterResourceSetBinding{ Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ {ClusterResourceSetName: "bar"}, {ClusterResourceSetName: "foo"}, {ClusterResourceSetName: "baz"}, @@ -110,7 +110,7 @@ func Test_getResourceSetBindingForClusterResourceSet(t *testing.T) { name: "CRSB with multiple bindings with match at last index", inputCRSB: &addonsv1.ClusterResourceSetBinding{ Spec: addonsv1.ClusterResourceSetBindingSpec{ - Bindings: []*addonsv1.ResourceSetBinding{ + Bindings: []addonsv1.ResourceSetBinding{ {ClusterResourceSetName: "bar"}, {ClusterResourceSetName: "baz"}, {ClusterResourceSetName: "foo"},