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  }