|  | package main | 
|  |  | 
|  | import ( | 
|  | "context" | 
|  |  | 
|  | "github.com/spf13/cobra" | 
|  | "k8s.io/klog/v2" | 
|  |  | 
|  | "source.monogon.dev/cloud/equinix/wrapngo" | 
|  | clicontext "source.monogon.dev/metropolis/cli/pkg/context" | 
|  | ) | 
|  |  | 
|  | var rebootCmd = &cobra.Command{ | 
|  | Use:   "reboot [project] [id]", | 
|  | Short: "Reboots all or one specific node", | 
|  | Args:  cobra.MaximumNArgs(1), | 
|  | Run:   doReboot, | 
|  | } | 
|  |  | 
|  | func init() { | 
|  | rootCmd.AddCommand(rebootCmd) | 
|  | } | 
|  |  | 
|  | func doReboot(cmd *cobra.Command, args []string) { | 
|  | ctx := clicontext.WithInterrupt(context.Background()) | 
|  | api := wrapngo.New(&c) | 
|  |  | 
|  | klog.Infof("Requesting device list...") | 
|  | devices, err := api.ListDevices(ctx, args[0]) | 
|  | if err != nil { | 
|  | klog.Fatal(err) | 
|  | } | 
|  |  | 
|  | for _, d := range devices { | 
|  | if len(args) == 2 && args[1] != d.ID { | 
|  | continue | 
|  | } | 
|  |  | 
|  | err := api.RebootDevice(ctx, d.ID) | 
|  | if err != nil { | 
|  | klog.Error(err) | 
|  | continue | 
|  | } | 
|  | klog.Infof("rebooted %s", d.ID) | 
|  | } | 
|  | } |