github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/vm-control/listHypervisors.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "sort" 6 "strings" 7 8 "github.com/Cloud-Foundations/Dominator/lib/errors" 9 "github.com/Cloud-Foundations/Dominator/lib/log" 10 proto "github.com/Cloud-Foundations/Dominator/proto/fleetmanager" 11 ) 12 13 func listHypervisorsSubcommand(args []string, logger log.DebugLogger) error { 14 if err := listHypervisors(logger); err != nil { 15 return fmt.Errorf("Error listing Hypervisors: %s", err) 16 } 17 return nil 18 } 19 20 func listHypervisors(logger log.DebugLogger) error { 21 fleetManager := fmt.Sprintf("%s:%d", 22 *fleetManagerHostname, *fleetManagerPortNum) 23 client, err := dialFleetManager(fleetManager) 24 if err != nil { 25 return err 26 } 27 defer client.Close() 28 request := proto.ListHypervisorsInLocationRequest{ 29 IncludeUnhealthy: *includeUnhealthy, 30 Location: *location, 31 SubnetId: *subnetId, 32 } 33 var reply proto.ListHypervisorsInLocationResponse 34 err = client.RequestReply("FleetManager.ListHypervisorsInLocation", 35 request, &reply) 36 if err != nil { 37 return err 38 } 39 if err := errors.New(reply.Error); err != nil { 40 return err 41 } 42 hypervisors := make([]string, 0, len(reply.HypervisorAddresses)) 43 for _, address := range reply.HypervisorAddresses { 44 hypervisors = append(hypervisors, strings.Split(address, ":")[0]) 45 } 46 sort.Strings(hypervisors) 47 for _, hypervisor := range hypervisors { 48 if _, err := fmt.Println(hypervisor); err != nil { 49 return err 50 } 51 } 52 return nil 53 }