@@ -48,6 +48,7 @@ import (
4848 awsv1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
4949 ibmpowervsv1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
5050 openstackv1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
51+ vspherev1 "sigs.k8s.io/cluster-api-provider-vsphere/apis/v1beta1"
5152 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
5253 "sigs.k8s.io/cluster-api/util/annotations"
5354 ctrl "sigs.k8s.io/controller-runtime"
8081 // errAssertingCAPIOpenStackMachineTemplate is returned when we encounter an issue asserting a client.Object into a OpenStackMachineTemplate.
8182 errAssertingCAPIOpenStackMachineTemplate = errors .New ("error asserting the CAPI OpenStackMachineTemplate object" )
8283
84+ // errAssertingCAPIVSphereMachineTemplate is returned when we encounter an issue asserting a client.Object into a VSphereMachineTemplate.
85+ errAssertingCAPIVSphereMachineTemplate = errors .New ("error asserting the CAPI VSphereMachineTemplate object" )
86+
8387 // errUnsuportedOwnerKindForConversion is returned when the owner kind is not supported for conversion.
8488 errUnsuportedOwnerKindForConversion = errors .New ("unsupported owner kind for conversion" )
8589
@@ -714,6 +718,20 @@ func (r *MachineSetSyncReconciler) convertCAPIToMAPIMachineSet(capiMachineSet *c
714718 return capi2mapi .FromMachineSetAndPowerVSMachineTemplateAndPowerVSCluster ( //nolint: wrapcheck
715719 capiMachineSet , machineTemplate , cluster ,
716720 ).ToMachineSet ()
721+ case configv1 .VSpherePlatformType :
722+ machineTemplate , ok := infraMachineTemplate .(* vspherev1.VSphereMachineTemplate )
723+ if ! ok {
724+ return nil , nil , fmt .Errorf ("%w, expected VSphereMachineTemplate, got %T" , errUnexpectedInfraMachineTemplateType , infraMachineTemplate )
725+ }
726+
727+ cluster , ok := infraCluster .(* vspherev1.VSphereCluster )
728+ if ! ok {
729+ return nil , nil , fmt .Errorf ("%w, expected VSphereCluster, got %T" , errUnexpectedInfraClusterType , infraCluster )
730+ }
731+
732+ return capi2mapi .FromMachineSetAndVSphereMachineTemplateAndVSphereCluster ( //nolint: wrapcheck
733+ capiMachineSet , machineTemplate , cluster ,
734+ ).ToMachineSet ()
717735 default :
718736 return nil , nil , fmt .Errorf ("%w: %s" , errPlatformNotSupported , r .Platform )
719737 }
@@ -728,6 +746,8 @@ func (r *MachineSetSyncReconciler) convertMAPIToCAPIMachineSet(mapiMachineSet *m
728746 return mapi2capi .FromOpenStackMachineSetAndInfra (mapiMachineSet , r .Infra ).ToMachineSetAndMachineTemplate () //nolint:wrapcheck
729747 case configv1 .PowerVSPlatformType :
730748 return mapi2capi .FromPowerVSMachineSetAndInfra (mapiMachineSet , r .Infra ).ToMachineSetAndMachineTemplate () //nolint:wrapcheck
749+ case configv1 .VSpherePlatformType :
750+ return mapi2capi .FromVSphereMachineSetAndInfra (mapiMachineSet , r .Infra ).ToMachineSetAndMachineTemplate () //nolint:wrapcheck
731751 default :
732752 return nil , nil , nil , fmt .Errorf ("%w: %s" , errPlatformNotSupported , r .Platform )
733753 }
@@ -1071,6 +1091,8 @@ func initInfraMachineTemplateListAndInfraClusterListFromProvider(platform config
10711091 return & openstackv1.OpenStackMachineTemplateList {}, & openstackv1.OpenStackClusterList {}, nil
10721092 case configv1 .PowerVSPlatformType :
10731093 return & ibmpowervsv1.IBMPowerVSMachineTemplateList {}, & ibmpowervsv1.IBMPowerVSClusterList {}, nil
1094+ case configv1 .VSpherePlatformType :
1095+ return & vspherev1.VSphereMachineTemplateList {}, & vspherev1.VSphereClusterList {}, nil
10741096 default :
10751097 return nil , nil , fmt .Errorf ("%w: %s" , errPlatformNotSupported , platform )
10761098 }
@@ -1146,6 +1168,28 @@ func compareCAPIInfraMachineTemplates(platform configv1.PlatformType, infraMachi
11461168 diff [".metadata" ] = diffObjectMeta
11471169 }
11481170
1171+ return diff , nil
1172+ case configv1 .VSpherePlatformType :
1173+ typedInfraMachineTemplate1 , ok := infraMachineTemplate1 .(* vspherev1.VSphereMachineTemplate )
1174+ if ! ok {
1175+ return nil , errAssertingCAPIVSphereMachineTemplate
1176+ }
1177+
1178+ typedinfraMachineTemplate2 , ok := infraMachineTemplate2 .(* vspherev1.VSphereMachineTemplate )
1179+ if ! ok {
1180+ return nil , errAssertingCAPIVSphereMachineTemplate
1181+ }
1182+
1183+ diff := make (map [string ]any )
1184+
1185+ if diffSpec := deep .Equal (typedInfraMachineTemplate1 .Spec , typedinfraMachineTemplate2 .Spec ); len (diffSpec ) > 0 {
1186+ diff [".spec" ] = diffSpec
1187+ }
1188+
1189+ if diffObjectMeta := util .ObjectMetaEqual (typedInfraMachineTemplate1 .ObjectMeta , typedinfraMachineTemplate2 .ObjectMeta ); len (diffObjectMeta ) > 0 {
1190+ diff [".metadata" ] = diffObjectMeta
1191+ }
1192+
11491193 return diff , nil
11501194 default :
11511195 return nil , fmt .Errorf ("%w: %s" , errPlatformNotSupported , platform )
0 commit comments