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

     1  package rpcd
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  
     7  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
     8  	proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor"
     9  )
    10  
    11  func (t *srpcType) GetVmUserData(conn *srpc.Conn) error {
    12  	var request proto.GetVmUserDataRequest
    13  	if err := conn.Decode(&request); err != nil {
    14  		return err
    15  	}
    16  	rc, length, err := t.manager.GetVmUserDataRPC(request.IpAddress,
    17  		conn.GetAuthInformation(), request.AccessToken)
    18  	if err != nil {
    19  		if os.IsNotExist(err) {
    20  			return conn.Encode(proto.GetVmUserDataResponse{})
    21  		}
    22  		return conn.Encode(proto.GetVmUserDataResponse{Error: err.Error()})
    23  	}
    24  	response := proto.GetVmUserDataResponse{Length: length}
    25  	if err := conn.Encode(response); err != nil {
    26  		return err
    27  	}
    28  	_, err = io.CopyN(conn, rc, int64(length))
    29  	return err
    30  }