github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/vm-control/listLocations.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/Cloud-Foundations/Dominator/lib/errors" 7 "github.com/Cloud-Foundations/Dominator/lib/log" 8 proto "github.com/Cloud-Foundations/Dominator/proto/fleetmanager" 9 ) 10 11 func listLocationsSubcommand(args []string, logger log.DebugLogger) error { 12 var topLocation string 13 if len(args) > 0 { 14 topLocation = args[0] 15 } 16 if err := listLocations(topLocation, logger); err != nil { 17 return fmt.Errorf("Error listing locations: %s", err) 18 } 19 return nil 20 } 21 22 func listLocations(topLocation string, logger log.DebugLogger) error { 23 fleetManager := fmt.Sprintf("%s:%d", 24 *fleetManagerHostname, *fleetManagerPortNum) 25 client, err := dialFleetManager(fleetManager) 26 if err != nil { 27 return err 28 } 29 defer client.Close() 30 request := proto.ListHypervisorLocationsRequest{topLocation} 31 var reply proto.ListHypervisorLocationsResponse 32 err = client.RequestReply("FleetManager.ListHypervisorLocations", 33 request, &reply) 34 if err != nil { 35 return err 36 } 37 if err := errors.New(reply.Error); err != nil { 38 return err 39 } 40 for _, location := range reply.Locations { 41 if _, err := fmt.Println(location); err != nil { 42 return err 43 } 44 } 45 return nil 46 }