github.com/Cloud-Foundations/Dominator@v0.3.4/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 HypervisorTagsToMatch: hypervisorTagsToMatch, 30 IncludeUnhealthy: *includeUnhealthy, 31 Location: *location, 32 SubnetId: *subnetId, 33 } 34 var reply proto.ListHypervisorsInLocationResponse 35 err = client.RequestReply("FleetManager.ListHypervisorsInLocation", 36 request, &reply) 37 if err != nil { 38 return err 39 } 40 if err := errors.New(reply.Error); err != nil { 41 return err 42 } 43 hypervisors := make([]string, 0, len(reply.HypervisorAddresses)) 44 for _, address := range reply.HypervisorAddresses { 45 hypervisors = append(hypervisors, strings.Split(address, ":")[0]) 46 } 47 sort.Strings(hypervisors) 48 for _, hypervisor := range hypervisors { 49 if _, err := fmt.Println(hypervisor); err != nil { 50 return err 51 } 52 } 53 return nil 54 }