github.com/Cloud-Foundations/Dominator@v0.3.4/imagebuilder/client/impl.go (about)

     1  package client
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"time"
     7  
     8  	"github.com/Cloud-Foundations/Dominator/lib/errors"
     9  	"github.com/Cloud-Foundations/Dominator/lib/srpc"
    10  	proto "github.com/Cloud-Foundations/Dominator/proto/imaginator"
    11  )
    12  
    13  func buildImage(client *srpc.Client, request proto.BuildImageRequest,
    14  	response *proto.BuildImageResponse, logWriter io.Writer) error {
    15  	conn, err := client.Call("Imaginator.BuildImage")
    16  	if err != nil {
    17  		return err
    18  	}
    19  	defer conn.Close()
    20  	if err := conn.Encode(request); err != nil {
    21  		return err
    22  	}
    23  	if err := conn.Flush(); err != nil {
    24  		return err
    25  	}
    26  	str, err := conn.ReadString('\n')
    27  	if err != nil {
    28  		return err
    29  	}
    30  	if str != "\n" {
    31  		return errors.New(str[:len(str)-1])
    32  	}
    33  	for {
    34  		var reply proto.BuildImageResponse
    35  		if err := conn.Decode(&reply); err != nil {
    36  			return fmt.Errorf("error reading reply: %s", err)
    37  		}
    38  		if err := errors.New(reply.ErrorString); err != nil {
    39  			return err
    40  		}
    41  		logWriter.Write(reply.BuildLog)
    42  		reply.BuildLog = nil
    43  		if reply.Image != nil || reply.ImageName != "" {
    44  			*response = reply
    45  			return nil
    46  		}
    47  	}
    48  }
    49  
    50  func disableAutoBuilds(client *srpc.Client, disableFor time.Duration) (
    51  	time.Time, error) {
    52  	var reply proto.DisableAutoBuildsResponse
    53  	err := client.RequestReply("Imaginator.DisableAutoBuilds",
    54  		proto.DisableAutoBuildsRequest{
    55  			DisableFor: disableFor,
    56  		}, &reply)
    57  	if err != nil {
    58  		return time.Time{}, err
    59  	}
    60  	err = errors.New(reply.Error)
    61  	if err != nil {
    62  		return time.Time{}, err
    63  	}
    64  	return reply.DisabledUntil, nil
    65  }
    66  
    67  func disableBuildRequests(client *srpc.Client, disableFor time.Duration) (
    68  	time.Time, error) {
    69  	var reply proto.DisableBuildRequestsResponse
    70  	err := client.RequestReply("Imaginator.DisableBuildRequests",
    71  		proto.DisableBuildRequestsRequest{
    72  			DisableFor: disableFor,
    73  		}, &reply)
    74  	if err != nil {
    75  		return time.Time{}, err
    76  	}
    77  	err = errors.New(reply.Error)
    78  	if err != nil {
    79  		return time.Time{}, err
    80  	}
    81  	return reply.DisabledUntil, nil
    82  }
    83  
    84  func getDependencies(client *srpc.Client,
    85  	request proto.GetDependenciesRequest) (
    86  	proto.GetDependenciesResult, error) {
    87  	var zero proto.GetDependenciesResult
    88  	var reply proto.GetDependenciesResponse
    89  	err := client.RequestReply("Imaginator.GetDependencies", request, &reply)
    90  	if err != nil {
    91  		return zero, err
    92  	}
    93  	if reply.Error != "" {
    94  		return zero, errors.New(reply.Error)
    95  	}
    96  	return reply.GetDependenciesResult, nil
    97  }
    98  
    99  func getDirectedGraph(client *srpc.Client,
   100  	request proto.GetDirectedGraphRequest) (
   101  	proto.GetDirectedGraphResult, error) {
   102  	var zero proto.GetDirectedGraphResult
   103  	var reply proto.GetDirectedGraphResponse
   104  	err := client.RequestReply("Imaginator.GetDirectedGraph", request, &reply)
   105  	if err != nil {
   106  		return zero, err
   107  	}
   108  	if reply.Error != "" {
   109  		return zero, errors.New(reply.Error)
   110  	}
   111  	return reply.GetDirectedGraphResult, nil
   112  }
   113  
   114  func replaceIdleSlaves(client *srpc.Client, immediateGetNew bool) error {
   115  	var reply proto.ReplaceIdleSlavesResponse
   116  	err := client.RequestReply("Imaginator.ReplaceIdleSlaves",
   117  		proto.ReplaceIdleSlavesRequest{
   118  			ImmediateGetNew: immediateGetNew,
   119  		}, &reply)
   120  	if err != nil {
   121  		return err
   122  	}
   123  	return errors.New(reply.Error)
   124  }