Skip to content

Commit 84ff7bb

Browse files
committed
wipe and reboot with talos client on removing server
Ref: #1294 #1285 all deleted machine will receive a reset call from talos client Signed-off-by: Anthony ARNAUD <[email protected]>
1 parent ea8e126 commit 84ff7bb

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

app/caps-controller-manager/controllers/metalmachine_controller.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111

1212
"github.com/go-logr/logr"
1313
"github.com/siderolabs/go-pointer"
14+
talosclient "github.com/siderolabs/talos/pkg/machinery/client"
15+
clientconfig "github.com/siderolabs/talos/pkg/machinery/client/config"
1416
corev1 "k8s.io/api/core/v1"
1517
apierrors "k8s.io/apimachinery/pkg/api/errors"
1618
"k8s.io/apimachinery/pkg/fields"
@@ -253,6 +255,9 @@ func (r *MetalMachineReconciler) reconcileDelete(ctx context.Context, metalMachi
253255

254256
err := r.Get(ctx, types.NamespacedName{Namespace: metalMachine.Spec.ServerRef.Namespace, Name: metalMachine.Spec.ServerRef.Name}, &serverBinding)
255257
if err == nil {
258+
if err = r.ResetServer(ctx, metalMachine, &serverBinding); err != nil {
259+
return ctrl.Result{}, err
260+
}
256261
return ctrl.Result{Requeue: true}, r.Delete(ctx, &serverBinding)
257262
}
258263

@@ -467,3 +472,42 @@ func (r *MetalMachineReconciler) fetchServerClass(ctx context.Context, classRef
467472

468473
return serverClassResource, nil
469474
}
475+
476+
func (r *MetalMachineReconciler) ResetServer(ctx context.Context, metalMachine *infrav1.MetalMachine, serverBinding *infrav1.ServerBinding) error {
477+
var talosSecret corev1.Secret
478+
479+
cluster, err := util.GetClusterFromMetadata(ctx, r.Client, metalMachine.ObjectMeta)
480+
if err != nil {
481+
return fmt.Errorf("no cluster label or cluster does not exist")
482+
}
483+
484+
if err = r.Get(ctx, types.NamespacedName{Namespace: cluster.Namespace, Name: fmt.Sprintf("%s-talosconfig", cluster.Name)}, &talosSecret); err != nil {
485+
return err
486+
}
487+
488+
config, ok := talosSecret.Data["talosconfig"]
489+
if !ok {
490+
return fmt.Errorf("failed to find talosconfig data in the talosconfig secret")
491+
}
492+
493+
var clientConfig *clientconfig.Config
494+
clientConfig, err = clientconfig.FromBytes(config)
495+
496+
if err != nil {
497+
return err
498+
}
499+
500+
var talosClient *talosclient.Client
501+
talosClient, err = talosclient.New(ctx,
502+
talosclient.WithConfig(clientConfig),
503+
talosclient.WithEndpoints(serverBinding.Spec.Addresses...),
504+
)
505+
if err != nil {
506+
return err
507+
}
508+
509+
// ignore error if the machine is already reset, reboot, offline
510+
_ = talosClient.Reset(ctx, false, true)
511+
512+
return nil
513+
}

0 commit comments

Comments
 (0)