github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/vm-control/changeVmMigrating.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/Cloud-Foundations/Dominator/lib/errors" 7 "github.com/Cloud-Foundations/Dominator/lib/log" 8 proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 9 ) 10 11 func setVmMigratingSubcommand(args []string, logger log.DebugLogger) error { 12 if err := changeVmMigrationState(args[0], true, logger); err != nil { 13 return fmt.Errorf("Error setting VM migration state: %s", err) 14 } 15 return nil 16 } 17 18 func unsetVmMigratingSubcommand(args []string, logger log.DebugLogger) error { 19 if err := changeVmMigrationState(args[0], false, logger); err != nil { 20 return fmt.Errorf("Error clearing VM migration state: %s", err) 21 } 22 return nil 23 } 24 25 func changeVmMigrationState(vmHostname string, enable bool, 26 logger log.DebugLogger) error { 27 ipAddr, err := lookupIP(vmHostname) 28 if err != nil { 29 return err 30 } 31 var hypervisor string 32 if *hypervisorHostname != "" { 33 hypervisor = fmt.Sprintf("%s:%d", 34 *hypervisorHostname, *hypervisorPortNum) 35 } else { 36 hypervisor = fmt.Sprintf("localhost:%d", *hypervisorPortNum) 37 } 38 request := proto.PrepareVmForMigrationRequest{ 39 Enable: enable, 40 IpAddress: ipAddr} 41 client, err := dialHypervisor(hypervisor) 42 if err != nil { 43 return err 44 } 45 defer client.Close() 46 var reply proto.PrepareVmForMigrationResponse 47 err = client.RequestReply("Hypervisor.PrepareVmForMigration", request, 48 &reply) 49 if err != nil { 50 return err 51 } 52 return errors.New(reply.Error) 53 }