blob: 0f7f317dbda1e6f54ccadab98a899d82dc788113 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
2// SPDX-License-Identifier: Apache-2.0
3
Tim Windelschmidt886c3862023-05-23 16:47:41 +02004package main
5
6import (
7 "context"
Tim Windelschmidtb765f242024-05-08 01:40:02 +02008 "os"
9 "os/signal"
Tim Windelschmidt886c3862023-05-23 16:47:41 +020010
11 "github.com/spf13/cobra"
12 "k8s.io/klog/v2"
13
Tim Windelschmidtb6308cd2023-10-10 21:19:03 +020014 "source.monogon.dev/cloud/equinix/wrapngo"
Tim Windelschmidt886c3862023-05-23 16:47:41 +020015)
16
17var rebootCmd = &cobra.Command{
18 Use: "reboot [project] [id]",
19 Short: "Reboots all or one specific node",
20 Args: cobra.MaximumNArgs(1),
21 Run: doReboot,
22}
23
24func init() {
25 rootCmd.AddCommand(rebootCmd)
26}
27
28func doReboot(cmd *cobra.Command, args []string) {
Tim Windelschmidtb765f242024-05-08 01:40:02 +020029 ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
Tim Windelschmidt886c3862023-05-23 16:47:41 +020030 api := wrapngo.New(&c)
31
32 klog.Infof("Requesting device list...")
33 devices, err := api.ListDevices(ctx, args[0])
34 if err != nil {
35 klog.Fatal(err)
36 }
37
38 for _, d := range devices {
39 if len(args) == 2 && args[1] != d.ID {
40 continue
41 }
42
43 err := api.RebootDevice(ctx, d.ID)
44 if err != nil {
45 klog.Error(err)
46 continue
47 }
48 klog.Infof("rebooted %s", d.ID)
49 }
50}