blob: e788f01fbd79959ff57fa95aa3c60ed9656e97ce [file] [log] [blame]
Tim Windelschmidt886c3862023-05-23 16:47:41 +02001package main
2
3import (
4 "context"
Tim Windelschmidtb765f242024-05-08 01:40:02 +02005 "os"
6 "os/signal"
Tim Windelschmidt886c3862023-05-23 16:47:41 +02007
8 "github.com/spf13/cobra"
9 "k8s.io/klog/v2"
10
Tim Windelschmidtb6308cd2023-10-10 21:19:03 +020011 "source.monogon.dev/cloud/equinix/wrapngo"
Tim Windelschmidt886c3862023-05-23 16:47:41 +020012)
13
14var rebootCmd = &cobra.Command{
15 Use: "reboot [project] [id]",
16 Short: "Reboots all or one specific node",
17 Args: cobra.MaximumNArgs(1),
18 Run: doReboot,
19}
20
21func init() {
22 rootCmd.AddCommand(rebootCmd)
23}
24
25func doReboot(cmd *cobra.Command, args []string) {
Tim Windelschmidtb765f242024-05-08 01:40:02 +020026 ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
Tim Windelschmidt886c3862023-05-23 16:47:41 +020027 api := wrapngo.New(&c)
28
29 klog.Infof("Requesting device list...")
30 devices, err := api.ListDevices(ctx, args[0])
31 if err != nil {
32 klog.Fatal(err)
33 }
34
35 for _, d := range devices {
36 if len(args) == 2 && args[1] != d.ID {
37 continue
38 }
39
40 err := api.RebootDevice(ctx, d.ID)
41 if err != nil {
42 klog.Error(err)
43 continue
44 }
45 klog.Infof("rebooted %s", d.ID)
46 }
47}