github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/fleetmanager/rpcd/listVMsInLocation.go (about)

     1  package rpcd
     2  
     3  import (
     4  	"github.com/Cloud-Foundations/Dominator/lib/errors"
     5  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
     6  	proto "github.com/Cloud-Foundations/Dominator/proto/fleetmanager"
     7  )
     8  
     9  func (t *srpcType) ListVMsInLocation(conn *srpc.Conn) error {
    10  	var request proto.ListVMsInLocationRequest
    11  	if err := conn.Decode(&request); err != nil {
    12  		return err
    13  	}
    14  	addresses, err := t.hypervisorsManager.ListVMsInLocation(
    15  		request.Location)
    16  	if err != nil {
    17  		response := proto.ListVMsInLocationResponse{
    18  			Error: errors.ErrorToString(err),
    19  		}
    20  		if err := conn.Encode(response); err != nil {
    21  			return err
    22  		}
    23  		return nil
    24  	}
    25  	// TODO(rgooch): Chunk the response.
    26  	response := proto.ListVMsInLocationResponse{IpAddresses: addresses}
    27  	if err := conn.Encode(response); err != nil {
    28  		return err
    29  	}
    30  	response.IpAddresses = nil // Send end-of-chunks message.
    31  	return conn.Encode(response)
    32  }