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  }