in controllers/helpers.go [65:101]
func (r *EtcdadmClusterReconciler) cloneConfigsAndGenerateMachine(ctx context.Context, ec *etcdv1.EtcdadmCluster, cluster *clusterv1.Cluster, failureDomain *string) (ctrl.Result, error) {
// Since the cloned resource should eventually have a controller ref for the Machine, we create an
// OwnerReference here without the Controller field set
infraCloneOwner := &metav1.OwnerReference{
APIVersion: etcdv1.GroupVersion.String(),
Kind: "EtcdadmCluster",
Name: ec.Name,
UID: ec.UID,
}
// Clone the infrastructure template
infraRef, err := external.CreateFromTemplate(ctx, &external.CreateFromTemplateInput{
Client: r.Client,
TemplateRef: &ec.Spec.InfrastructureTemplate,
Namespace: ec.Namespace,
OwnerRef: infraCloneOwner,
ClusterName: cluster.Name,
Labels: EtcdLabelsForCluster(cluster.Name, ec.Name),
})
if err != nil {
return ctrl.Result{}, fmt.Errorf("error cloning infrastructure template for etcd machine: %v", err)
}
if infraRef == nil {
return ctrl.Result{}, fmt.Errorf("infrastructure template could not be cloned for etcd machine")
}
bootstrapRef, err := r.generateEtcdadmConfig(ctx, ec, cluster)
if err != nil {
return ctrl.Result{}, err
}
if err := r.generateMachine(ctx, ec, cluster, infraRef, bootstrapRef, failureDomain); err != nil {
r.Log.Error(err, "Failed to create initial etcd machine")
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}