github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/hyper-control/getUpdates.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/Cloud-Foundations/Dominator/lib/errors" 8 "github.com/Cloud-Foundations/Dominator/lib/json" 9 "github.com/Cloud-Foundations/Dominator/lib/log" 10 "github.com/Cloud-Foundations/Dominator/lib/srpc" 11 fm_proto "github.com/Cloud-Foundations/Dominator/proto/fleetmanager" 12 hyper_proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 13 ) 14 15 func getUpdatesSubcommand(args []string, logger log.DebugLogger) error { 16 if err := getUpdates(logger); err != nil { 17 return fmt.Errorf("Error getting updates: %s", err) 18 } 19 return nil 20 } 21 22 func getUpdates(logger log.DebugLogger) error { 23 if *hypervisorHostname != "" { 24 return getUpdatesOnHypervisor( 25 fmt.Sprintf("%s:%d", *hypervisorHostname, *hypervisorPortNum), 26 logger) 27 } else if *fleetManagerHostname != "" { 28 return getUpdatesOnFleetManager( 29 fmt.Sprintf("%s:%d", *fleetManagerHostname, *fleetManagerPortNum), 30 logger) 31 } else { 32 return getUpdatesOnHypervisor(fmt.Sprintf(":%d", *hypervisorPortNum), 33 logger) 34 } 35 36 } 37 38 func getUpdatesOnFleetManager(fleetManager string, 39 logger log.DebugLogger) error { 40 client, err := srpc.DialHTTPWithDialer("tcp", fleetManager, rrDialer) 41 if err != nil { 42 return err 43 } 44 defer client.Close() 45 conn, err := client.Call("FleetManager.GetUpdates") 46 if err != nil { 47 return err 48 } 49 defer conn.Close() 50 request := fm_proto.GetUpdatesRequest{Location: *location} 51 if err := conn.Encode(request); err != nil { 52 return err 53 } 54 if err := conn.Flush(); err != nil { 55 return err 56 } 57 for { 58 var update fm_proto.Update 59 if err := conn.Decode(&update); err != nil { 60 return err 61 } 62 if err := errors.New(update.Error); err != nil { 63 return err 64 } 65 if err := json.WriteWithIndent(os.Stdout, " ", update); err != nil { 66 return err 67 } 68 } 69 } 70 71 func getUpdatesOnHypervisor(hypervisor string, logger log.DebugLogger) error { 72 client, err := srpc.DialHTTP("tcp", hypervisor, 0) 73 if err != nil { 74 return err 75 } 76 defer client.Close() 77 conn, err := client.Call("Hypervisor.GetUpdates") 78 if err != nil { 79 return err 80 } 81 defer conn.Close() 82 for { 83 var update hyper_proto.Update 84 if err := conn.Decode(&update); err != nil { 85 return err 86 } 87 if err := json.WriteWithIndent(os.Stdout, " ", update); err != nil { 88 return err 89 } 90 } 91 }