@@ -714,29 +714,7 @@ func (r *Reconciler) syncReplicas(ctx context.Context, s *scope) (ctrl.Result, e
714714
715715 // Create the BootstrapConfig if necessary.
716716 if ms .Spec .Template .Spec .Bootstrap .ConfigRef .IsDefined () {
717- apiVersion , err := contract .GetAPIVersion (ctx , r .Client , ms .Spec .Template .Spec .Bootstrap .ConfigRef .GroupKind ())
718- if err == nil {
719- bootstrapConfig , bootstrapRef , err = external .CreateFromTemplate (ctx , & external.CreateFromTemplateInput {
720- Client : r .Client ,
721- TemplateRef : & corev1.ObjectReference {
722- APIVersion : apiVersion ,
723- Kind : ms .Spec .Template .Spec .Bootstrap .ConfigRef .Kind ,
724- Namespace : ms .Namespace ,
725- Name : ms .Spec .Template .Spec .Bootstrap .ConfigRef .Name ,
726- },
727- Namespace : machine .Namespace ,
728- Name : machine .Name ,
729- ClusterName : machine .Spec .ClusterName ,
730- Labels : machine .Labels ,
731- Annotations : machine .Annotations ,
732- OwnerRef : & metav1.OwnerReference {
733- APIVersion : clusterv1 .GroupVersion .String (),
734- Kind : "MachineSet" ,
735- Name : ms .Name ,
736- UID : ms .UID ,
737- },
738- })
739- }
717+ bootstrapConfig , bootstrapRef , err = r .createBootstrapConfig (ctx , ms , machine )
740718 if err != nil {
741719 v1beta1conditions .MarkFalse (ms , clusterv1 .MachinesCreatedV1Beta1Condition , clusterv1 .BootstrapTemplateCloningFailedV1Beta1Reason , clusterv1 .ConditionSeverityError , "%s" , err .Error ())
742720 return ctrl.Result {}, errors .Wrapf (err , "failed to clone bootstrap configuration from %s %s while creating a Machine" ,
@@ -748,30 +726,7 @@ func (r *Reconciler) syncReplicas(ctx context.Context, s *scope) (ctrl.Result, e
748726 }
749727
750728 // Create the InfraMachine.
751- apiVersion , err := contract .GetAPIVersion (ctx , r .Client , ms .Spec .Template .Spec .InfrastructureRef .GroupKind ())
752- if err == nil {
753- infraMachine , infraRef , err = external .CreateFromTemplate (ctx , & external.CreateFromTemplateInput {
754- Client : r .Client ,
755- TemplateRef : & corev1.ObjectReference {
756- APIVersion : apiVersion ,
757- Kind : ms .Spec .Template .Spec .InfrastructureRef .Kind ,
758- Namespace : ms .Namespace ,
759- Name : ms .Spec .Template .Spec .InfrastructureRef .Name ,
760- },
761-
762- Namespace : machine .Namespace ,
763- Name : machine .Name ,
764- ClusterName : machine .Spec .ClusterName ,
765- Labels : machine .Labels ,
766- Annotations : machine .Annotations ,
767- OwnerRef : & metav1.OwnerReference {
768- APIVersion : clusterv1 .GroupVersion .String (),
769- Kind : "MachineSet" ,
770- Name : ms .Name ,
771- UID : ms .UID ,
772- },
773- })
774- }
729+ infraMachine , infraRef , err = r .createInfraMachine (ctx , ms , machine )
775730 if err != nil {
776731 var deleteErr error
777732 if bootstrapRef .IsDefined () {
@@ -1593,6 +1548,120 @@ func (r *Reconciler) reconcileExternalTemplateReference(ctx context.Context, clu
15931548 return false , patchHelper .Patch (ctx , obj )
15941549}
15951550
1551+ func (r * Reconciler ) createBootstrapConfig (ctx context.Context , ms * clusterv1.MachineSet , machine * clusterv1.Machine ) (* unstructured.Unstructured , clusterv1.ContractVersionedObjectReference , error ) {
1552+ bootstrapConfig , err := r .computeDesiredBootstrapConfig (ctx , ms , machine )
1553+ if err != nil {
1554+ return nil , clusterv1.ContractVersionedObjectReference {}, errors .Wrapf (err , "failed to create BootstrapConfig" )
1555+ }
1556+
1557+ if err := r .Client .Create (ctx , bootstrapConfig ); err != nil {
1558+ return nil , clusterv1.ContractVersionedObjectReference {}, errors .Wrapf (err , "failed to create BootstrapConfig" )
1559+ }
1560+
1561+ return bootstrapConfig , clusterv1.ContractVersionedObjectReference {
1562+ APIGroup : bootstrapConfig .GroupVersionKind ().Group ,
1563+ Kind : bootstrapConfig .GetKind (),
1564+ Name : bootstrapConfig .GetName (),
1565+ }, nil
1566+ }
1567+
1568+ func (r * Reconciler ) computeDesiredBootstrapConfig (ctx context.Context , ms * clusterv1.MachineSet , machine * clusterv1.Machine ) (* unstructured.Unstructured , error ) {
1569+ ownerReference := & metav1.OwnerReference {
1570+ APIVersion : clusterv1 .GroupVersion .String (),
1571+ Kind : "MachineSet" ,
1572+ Name : ms .Name ,
1573+ UID : ms .UID ,
1574+ }
1575+
1576+ apiVersion , err := contract .GetAPIVersion (ctx , r .Client , ms .Spec .Template .Spec .Bootstrap .ConfigRef .GroupKind ())
1577+ if err != nil {
1578+ return nil , errors .Wrap (err , "failed to compute desired BootstrapConfig" )
1579+ }
1580+ templateRef := & corev1.ObjectReference {
1581+ APIVersion : apiVersion ,
1582+ Kind : ms .Spec .Template .Spec .Bootstrap .ConfigRef .Kind ,
1583+ Namespace : ms .Namespace ,
1584+ Name : ms .Spec .Template .Spec .Bootstrap .ConfigRef .Name ,
1585+ }
1586+
1587+ template , err := external .Get (ctx , r .Client , templateRef )
1588+ if err != nil {
1589+ return nil , errors .Wrap (err , "failed to compute desired BootstrapConfig" )
1590+ }
1591+ generateTemplateInput := & external.GenerateTemplateInput {
1592+ Template : template ,
1593+ TemplateRef : templateRef ,
1594+ Namespace : machine .Namespace ,
1595+ Name : machine .Name ,
1596+ ClusterName : machine .Spec .ClusterName ,
1597+ OwnerRef : ownerReference ,
1598+ Labels : machine .Labels ,
1599+ Annotations : machine .Annotations ,
1600+ }
1601+ bootstrapConfig , err := external .GenerateTemplate (generateTemplateInput )
1602+ if err != nil {
1603+ return nil , errors .Wrap (err , "failed to compute desired BootstrapConfig" )
1604+ }
1605+ return bootstrapConfig , nil
1606+ }
1607+
1608+ func (r * Reconciler ) createInfraMachine (ctx context.Context , ms * clusterv1.MachineSet , machine * clusterv1.Machine ) (* unstructured.Unstructured , clusterv1.ContractVersionedObjectReference , error ) {
1609+ infraMachine , err := r .computeDesiredInfraMachine (ctx , ms , machine )
1610+ if err != nil {
1611+ return nil , clusterv1.ContractVersionedObjectReference {}, errors .Wrapf (err , "failed to create InfraMachine" )
1612+ }
1613+
1614+ if err := r .Client .Create (ctx , infraMachine ); err != nil {
1615+ return nil , clusterv1.ContractVersionedObjectReference {}, errors .Wrapf (err , "failed to create InfraMachine" )
1616+ }
1617+
1618+ return infraMachine , clusterv1.ContractVersionedObjectReference {
1619+ APIGroup : infraMachine .GroupVersionKind ().Group ,
1620+ Kind : infraMachine .GetKind (),
1621+ Name : infraMachine .GetName (),
1622+ }, nil
1623+ }
1624+
1625+ func (r * Reconciler ) computeDesiredInfraMachine (ctx context.Context , ms * clusterv1.MachineSet , machine * clusterv1.Machine ) (* unstructured.Unstructured , error ) {
1626+ ownerReference := & metav1.OwnerReference {
1627+ APIVersion : clusterv1 .GroupVersion .String (),
1628+ Kind : "MachineSet" ,
1629+ Name : ms .Name ,
1630+ UID : ms .UID ,
1631+ }
1632+
1633+ apiVersion , err := contract .GetAPIVersion (ctx , r .Client , ms .Spec .Template .Spec .InfrastructureRef .GroupKind ())
1634+ if err != nil {
1635+ return nil , errors .Wrap (err , "failed to compute desired InfraMachine" )
1636+ }
1637+ templateRef := & corev1.ObjectReference {
1638+ APIVersion : apiVersion ,
1639+ Kind : ms .Spec .Template .Spec .InfrastructureRef .Kind ,
1640+ Namespace : ms .Namespace ,
1641+ Name : ms .Spec .Template .Spec .InfrastructureRef .Name ,
1642+ }
1643+
1644+ template , err := external .Get (ctx , r .Client , templateRef )
1645+ if err != nil {
1646+ return nil , errors .Wrap (err , "failed to compute desired InfraMachine" )
1647+ }
1648+ generateTemplateInput := & external.GenerateTemplateInput {
1649+ Template : template ,
1650+ TemplateRef : templateRef ,
1651+ Namespace : machine .Namespace ,
1652+ Name : machine .Name ,
1653+ ClusterName : machine .Spec .ClusterName ,
1654+ OwnerRef : ownerReference ,
1655+ Labels : machine .Labels ,
1656+ Annotations : machine .Annotations ,
1657+ }
1658+ infraMachine , err := external .GenerateTemplate (generateTemplateInput )
1659+ if err != nil {
1660+ return nil , errors .Wrap (err , "failed to compute desired InfraMachine" )
1661+ }
1662+ return infraMachine , nil
1663+ }
1664+
15961665// Returns the machines to be remediated in the following order
15971666// - Machines with RemediateMachineAnnotation annotation if any,
15981667// - Machines failing to come up first because
0 commit comments