github.com/Cloud-Foundations/Dominator@v0.3.4/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{ 51 IgnoreMissingLocalTags: *ignoreMissingLocalTags, 52 Location: *location, 53 MaxUpdates: *maxUpdates, 54 } 55 if err := conn.Encode(request); err != nil { 56 return err 57 } 58 if err := conn.Flush(); err != nil { 59 return err 60 } 61 for count := uint64(0); *maxUpdates < 1 || count < *maxUpdates; count++ { 62 var update fm_proto.Update 63 if err := conn.Decode(&update); err != nil { 64 return err 65 } 66 if err := errors.New(update.Error); err != nil { 67 return err 68 } 69 if err := json.WriteWithIndent(os.Stdout, " ", update); err != nil { 70 return err 71 } 72 } 73 return nil 74 } 75 76 func getUpdatesOnHypervisor(hypervisor string, logger log.DebugLogger) error { 77 client, err := srpc.DialHTTP("tcp", hypervisor, 0) 78 if err != nil { 79 return err 80 } 81 defer client.Close() 82 conn, err := client.Call("Hypervisor.GetUpdates") 83 if err != nil { 84 return err 85 } 86 defer conn.Close() 87 for { 88 var update hyper_proto.Update 89 if err := conn.Decode(&update); err != nil { 90 return err 91 } 92 if err := json.WriteWithIndent(os.Stdout, " ", update); err != nil { 93 return err 94 } 95 } 96 }