github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/power.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 fmclient "github.com/Cloud-Foundations/Dominator/fleetmanager/client" 8 hyperclient "github.com/Cloud-Foundations/Dominator/hypervisor/client" 9 "github.com/Cloud-Foundations/Dominator/lib/errors" 10 "github.com/Cloud-Foundations/Dominator/lib/log" 11 "github.com/Cloud-Foundations/Dominator/lib/srpc" 12 ) 13 14 func powerOffSubcommand(args []string, logger log.DebugLogger) error { 15 err := powerOff(logger) 16 if err != nil { 17 return fmt.Errorf("Error powering down: %s", err) 18 } 19 return nil 20 } 21 22 func powerOff(logger log.DebugLogger) error { 23 if *hypervisorHostname == "" { 24 return errors.New("cannot power down myself") 25 } 26 if hostname, err := os.Hostname(); err != nil { 27 return err 28 } else if *hypervisorHostname == hostname { 29 return errors.New("cannot power down myself") 30 } 31 clientName := fmt.Sprintf("%s:%d", *hypervisorHostname, *hypervisorPortNum) 32 client, err := srpc.DialHTTP("tcp", clientName, 0) 33 if err != nil { 34 return err 35 } 36 defer client.Close() 37 return hyperclient.PowerOff(client, false) 38 } 39 40 func powerOnSubcommand(args []string, logger log.DebugLogger) error { 41 err := powerOn(logger) 42 if err != nil { 43 return fmt.Errorf("Error powering up: %s", err) 44 } 45 return nil 46 } 47 48 func powerOn(logger log.DebugLogger) error { 49 if *hypervisorHostname == "" { 50 return errors.New("unspecified Hypervisor") 51 } 52 if *fleetManagerHostname == "" { 53 return errors.New("unspecified Fleet Manager") 54 } 55 clientName := fmt.Sprintf("%s:%d", *fleetManagerHostname, 56 *fleetManagerPortNum) 57 client, err := srpc.DialHTTP("tcp", clientName, 0) 58 if err != nil { 59 return err 60 } 61 defer client.Close() 62 return fmclient.PowerOnMachine(client, *hypervisorHostname) 63 }