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 }