Skip to content

Commit 1d455c1

Browse files
authored
Merge pull request #12881 from sbueringer/pr-refactor-ms-creation
2 parents 8e2b1ba + 7a09cad commit 1d455c1

File tree

1 file changed

+116
-47
lines changed

1 file changed

+116
-47
lines changed

internal/controllers/machineset/machineset_controller.go

Lines changed: 116 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)