| 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 moveCmd = &cobra.Command{ | 
 | 	Use:   "move [source] [target]", | 
 | 	Short: "Move all reserved hardware from one to another project", | 
 | 	Args:  cobra.ExactArgs(2), | 
 | 	Run:   doMove, | 
 | } | 
 |  | 
 | func init() { | 
 | 	rootCmd.AddCommand(moveCmd) | 
 | } | 
 |  | 
 | func doMove(cmd *cobra.Command, args []string) { | 
 | 	ctx := clicontext.WithInterrupt(context.Background()) | 
 | 	api := wrapngo.New(&c) | 
 |  | 
 | 	klog.Infof("Listing reservations for %q", args[0]) | 
 | 	reservations, err := api.ListReservations(ctx, args[0]) | 
 | 	if err != nil { | 
 | 		klog.Exitf("failed listing reservations: %v", err) | 
 | 	} | 
 |  | 
 | 	klog.Infof("Got %d reservations. Moving machines", len(reservations)) | 
 | 	for _, r := range reservations { | 
 | 		_, err := api.MoveReservation(ctx, r.ID, args[1]) | 
 | 		if err != nil { | 
 | 			klog.Errorf("failed moving reservation: %v", err) | 
 | 			continue | 
 | 		} | 
 | 		klog.Infof("Moved Device %s", r.ID) | 
 | 	} | 
 | } |