in controllers/machines.go [68:99]
func (r *EtcdadmClusterReconciler) checkOwnedMachines(ctx context.Context, log logr.Logger, etcdadmCluster *etcdv1.EtcdadmCluster, cluster *clusterv1.Cluster) (etcdMachines, error) {
ownedMachines, err := r.getCurrentOwnedMachines(ctx, etcdadmCluster, cluster)
if err != nil {
return nil, err
}
machines := make(etcdMachines, len(ownedMachines))
for k, machine := range ownedMachines {
m := etcdMachine{Machine: machine}
endpoint := getMachineEtcdEndpoint(machine)
if endpoint == "" {
machines[k] = m
continue
}
err := r.performEndpointHealthCheck(ctx, cluster, endpoint, true)
// This is not ideal, performEndpointHealthCheck uses an error to signal both a not ready/unhealthy member
// and also transient errors when performing such check.
// Ideally we would separate these 2 so we can abort on error and mark as unhealthy separetly
m.healthError = err
if errors.Is(err, portNotOpenErr) {
log.Info("Machine is not listening yet, this is probably transient, while etcd starts", "endpoint", endpoint)
} else {
m.endpoint = endpoint
m.listening = true
}
machines[k] = m
}
return machines, nil
}