github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/vm-control/restoreVmFromSnapshot.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net" 6 7 "github.com/Cloud-Foundations/Dominator/lib/errors" 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 10 ) 11 12 func restoreVmFromSnapshotSubcommand(args []string, 13 logger log.DebugLogger) error { 14 if err := restoreVmFromSnapshot(args[0], logger); err != nil { 15 return fmt.Errorf("Error restoring VM from snapshot: %s", err) 16 } 17 return nil 18 } 19 20 func restoreVmFromSnapshot(vmHostname string, logger log.DebugLogger) error { 21 if vmIP, hypervisor, err := lookupVmAndHypervisor(vmHostname); err != nil { 22 return err 23 } else { 24 return restoreVmFromSnapshotOnHypervisor(hypervisor, vmIP, logger) 25 } 26 } 27 28 func restoreVmFromSnapshotOnHypervisor(hypervisor string, ipAddr net.IP, 29 logger log.DebugLogger) error { 30 request := proto.RestoreVmFromSnapshotRequest{ipAddr, *forceIfNotStopped} 31 client, err := dialHypervisor(hypervisor) 32 if err != nil { 33 return err 34 } 35 defer client.Close() 36 var reply proto.RestoreVmFromSnapshotResponse 37 err = client.RequestReply("Hypervisor.RestoreVmFromSnapshot", request, 38 &reply) 39 if err != nil { 40 return err 41 } 42 return errors.New(reply.Error) 43 }