diff --git a/_proto/hapi/services/tiller.proto b/_proto/hapi/services/tiller.proto index 1fb6a86e9..222af3c43 100644 --- a/_proto/hapi/services/tiller.proto +++ b/_proto/hapi/services/tiller.proto @@ -61,7 +61,7 @@ service ReleaseService { } // InstallRelease requests installation of a chart as a new release. - rpc InstallRelease(InstallReleaseRequest) returns (InstallReleaseResponse) { + rpc InstallRelease(InstallReleaseRequest) returns (stream InstallReleaseResponse) { } // UninstallRelease requests deletion of a named release. @@ -273,9 +273,23 @@ message InstallReleaseRequest { bool wait = 9; } +message LogItem { + enum Level { + INFO = 0; + ERROR = 1; + } + + Level level = 1; + string message = 2; +} + // InstallReleaseResponse is the response from a release installation. message InstallReleaseResponse { - hapi.release.Release release = 1; + // One of the following will be filled in. + oneof response { + hapi.release.Release release = 1; + LogItem logItem = 2; + } } // UninstallReleaseRequest represents a request to uninstall a named release. diff --git a/cmd/helm/helm.go b/cmd/helm/helm.go index 3810cfb8e..478e6120d 100644 --- a/cmd/helm/helm.go +++ b/cmd/helm/helm.go @@ -266,6 +266,9 @@ func ensureHelmClient(h helm.Interface) helm.Interface { func newClient() helm.Interface { options := []helm.Option{helm.Host(settings.TillerHost)} + logger := new(helm.ConsoleLogger) + options = append(options, helm.WithLogger(logger)) + if tlsVerify || tlsEnable { if tlsCaCertFile == "" { tlsCaCertFile = settings.Home.TLSCaCert() diff --git a/pkg/helm/client.go b/pkg/helm/client.go index 33d56e88d..da57df2ef 100644 --- a/pkg/helm/client.go +++ b/pkg/helm/client.go @@ -334,7 +334,34 @@ func (h *Client) install(ctx context.Context, req *rls.InstallReleaseRequest) (* defer c.Close() rlc := rls.NewReleaseServiceClient(c) - return rlc.InstallRelease(ctx, req) + client, err := rlc.InstallRelease(ctx, req) + + if err != nil { + return nil, err + } + + var releaseResponse *rls.InstallReleaseResponse + + for { + result, err := client.Recv() + + if err == io.EOF { + return releaseResponse, nil + } + + if err != nil { + return nil, err + } + + switch x := result.Response.(type) { + case *rls.InstallReleaseResponse_Release: + releaseResponse = result + break + case *rls.InstallReleaseResponse_LogItem: + h.opts.logger.Log(x.LogItem.Level, x.LogItem.Message) + break + } + } } // Executes tiller.UninstallRelease RPC. diff --git a/pkg/helm/fake.go b/pkg/helm/fake.go index 8d809f658..4b47682ee 100644 --- a/pkg/helm/fake.go +++ b/pkg/helm/fake.go @@ -80,7 +80,9 @@ func (c *FakeClient) InstallReleaseFromChart(chart *chart.Chart, ns string, opts c.Rels = append(c.Rels, release) return &rls.InstallReleaseResponse{ - Release: release, + Response: &rls.InstallReleaseResponse_Release { + Release: release, + }, }, nil } diff --git a/pkg/helm/fake_test.go b/pkg/helm/fake_test.go index 9c0a53759..f1a8528f0 100644 --- a/pkg/helm/fake_test.go +++ b/pkg/helm/fake_test.go @@ -143,7 +143,9 @@ func TestFakeClient_InstallReleaseFromChart(t *testing.T) { opts: []InstallOption{ReleaseName("new-release")}, }, want: &rls.InstallReleaseResponse{ - Release: ReleaseMock(&MockReleaseOptions{Name: "new-release"}), + Response: &rls.InstallReleaseResponse_Release{ + Release: ReleaseMock(&MockReleaseOptions{Name: "new-release"}), + }, }, relsAfter: []*release.Release{ ReleaseMock(&MockReleaseOptions{Name: "new-release"}), diff --git a/pkg/helm/logger.go b/pkg/helm/logger.go new file mode 100644 index 000000000..f937f988d --- /dev/null +++ b/pkg/helm/logger.go @@ -0,0 +1,23 @@ +package helm + +import ( + "fmt" + rls "k8s.io/helm/pkg/proto/hapi/services" +) + +type TillerOutputLogger interface { + Log(level rls.LogItem_Level, message string) +} + +type ConsoleLogger struct {} + +func (logger *ConsoleLogger) Log(level rls.LogItem_Level, message string) { + switch level { + case rls.LogItem_INFO: + fmt.Println(message) + break + case rls.LogItem_ERROR: + fmt.Println(fmt.Sprintf("Error: %s", message)) + break + } +} diff --git a/pkg/helm/option.go b/pkg/helm/option.go index 4f6924db2..cb6134365 100644 --- a/pkg/helm/option.go +++ b/pkg/helm/option.go @@ -78,6 +78,8 @@ type options struct { reuseValues bool // release test options are applied directly to the test release history request testReq rls.TestReleaseRequest + // logger for tiller output messages + logger TillerOutputLogger } // Host specifies the host address of the Tiller release server, (default = ":44134"). @@ -87,6 +89,12 @@ func Host(host string) Option { } } +func WithLogger(logger TillerOutputLogger) Option { + return func(opts *options) { + opts.logger = logger + } +} + // WithTLS specifies the tls configuration if the helm client is enabled to use TLS. func WithTLS(cfg *tls.Config) Option { return func(opts *options) { diff --git a/pkg/proto/hapi/services/tiller.pb.go b/pkg/proto/hapi/services/tiller.pb.go index 023749c4f..84952dcad 100644 --- a/pkg/proto/hapi/services/tiller.pb.go +++ b/pkg/proto/hapi/services/tiller.pb.go @@ -1,5 +1,6 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. +// Code generated by protoc-gen-go. // source: hapi/services/tiller.proto +// DO NOT EDIT! /* Package services is a generated protocol buffer package. @@ -20,6 +21,7 @@ It has these top-level messages: RollbackReleaseRequest RollbackReleaseResponse InstallReleaseRequest + LogItem InstallReleaseResponse UninstallReleaseRequest UninstallReleaseResponse @@ -106,6 +108,27 @@ func (x ListSort_SortOrder) String() string { } func (ListSort_SortOrder) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 1} } +type LogItem_Level int32 + +const ( + LogItem_INFO LogItem_Level = 0 + LogItem_ERROR LogItem_Level = 1 +) + +var LogItem_Level_name = map[int32]string{ + 0: "INFO", + 1: "ERROR", +} +var LogItem_Level_value = map[string]int32{ + "INFO": 0, + "ERROR": 1, +} + +func (x LogItem_Level) String() string { + return proto.EnumName(LogItem_Level_name, int32(x)) +} +func (LogItem_Level) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 0} } + // ListReleasesRequest requests a list of releases. // // Releases can be retrieved in chunks by setting limit and offset. @@ -138,55 +161,6 @@ func (m *ListReleasesRequest) String() string { return proto.CompactT func (*ListReleasesRequest) ProtoMessage() {} func (*ListReleasesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } -func (m *ListReleasesRequest) GetLimit() int64 { - if m != nil { - return m.Limit - } - return 0 -} - -func (m *ListReleasesRequest) GetOffset() string { - if m != nil { - return m.Offset - } - return "" -} - -func (m *ListReleasesRequest) GetSortBy() ListSort_SortBy { - if m != nil { - return m.SortBy - } - return ListSort_UNKNOWN -} - -func (m *ListReleasesRequest) GetFilter() string { - if m != nil { - return m.Filter - } - return "" -} - -func (m *ListReleasesRequest) GetSortOrder() ListSort_SortOrder { - if m != nil { - return m.SortOrder - } - return ListSort_ASC -} - -func (m *ListReleasesRequest) GetStatusCodes() []hapi_release3.Status_Code { - if m != nil { - return m.StatusCodes - } - return nil -} - -func (m *ListReleasesRequest) GetNamespace() string { - if m != nil { - return m.Namespace - } - return "" -} - // ListSort defines sorting fields on a release list. type ListSort struct { } @@ -214,27 +188,6 @@ func (m *ListReleasesResponse) String() string { return proto.Compact func (*ListReleasesResponse) ProtoMessage() {} func (*ListReleasesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } -func (m *ListReleasesResponse) GetCount() int64 { - if m != nil { - return m.Count - } - return 0 -} - -func (m *ListReleasesResponse) GetNext() string { - if m != nil { - return m.Next - } - return "" -} - -func (m *ListReleasesResponse) GetTotal() int64 { - if m != nil { - return m.Total - } - return 0 -} - func (m *ListReleasesResponse) GetReleases() []*hapi_release5.Release { if m != nil { return m.Releases @@ -255,20 +208,6 @@ func (m *GetReleaseStatusRequest) String() string { return proto.Comp func (*GetReleaseStatusRequest) ProtoMessage() {} func (*GetReleaseStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } -func (m *GetReleaseStatusRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *GetReleaseStatusRequest) GetVersion() int32 { - if m != nil { - return m.Version - } - return 0 -} - // GetReleaseStatusResponse is the response indicating the status of the named release. type GetReleaseStatusResponse struct { // Name is the name of the release. @@ -284,13 +223,6 @@ func (m *GetReleaseStatusResponse) String() string { return proto.Com func (*GetReleaseStatusResponse) ProtoMessage() {} func (*GetReleaseStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } -func (m *GetReleaseStatusResponse) GetName() string { - if m != nil { - return m.Name - } - return "" -} - func (m *GetReleaseStatusResponse) GetInfo() *hapi_release4.Info { if m != nil { return m.Info @@ -298,13 +230,6 @@ func (m *GetReleaseStatusResponse) GetInfo() *hapi_release4.Info { return nil } -func (m *GetReleaseStatusResponse) GetNamespace() string { - if m != nil { - return m.Namespace - } - return "" -} - // GetReleaseContentRequest is a request to get the contents of a release. type GetReleaseContentRequest struct { // The name of the release @@ -318,20 +243,6 @@ func (m *GetReleaseContentRequest) String() string { return proto.Com func (*GetReleaseContentRequest) ProtoMessage() {} func (*GetReleaseContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } -func (m *GetReleaseContentRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *GetReleaseContentRequest) GetVersion() int32 { - if m != nil { - return m.Version - } - return 0 -} - // GetReleaseContentResponse is a response containing the contents of a release. type GetReleaseContentResponse struct { // The release content @@ -383,13 +294,6 @@ func (m *UpdateReleaseRequest) String() string { return proto.Compact func (*UpdateReleaseRequest) ProtoMessage() {} func (*UpdateReleaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } -func (m *UpdateReleaseRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - func (m *UpdateReleaseRequest) GetChart() *hapi_chart3.Chart { if m != nil { return m.Chart @@ -404,62 +308,6 @@ func (m *UpdateReleaseRequest) GetValues() *hapi_chart.Config { return nil } -func (m *UpdateReleaseRequest) GetDryRun() bool { - if m != nil { - return m.DryRun - } - return false -} - -func (m *UpdateReleaseRequest) GetDisableHooks() bool { - if m != nil { - return m.DisableHooks - } - return false -} - -func (m *UpdateReleaseRequest) GetRecreate() bool { - if m != nil { - return m.Recreate - } - return false -} - -func (m *UpdateReleaseRequest) GetTimeout() int64 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *UpdateReleaseRequest) GetResetValues() bool { - if m != nil { - return m.ResetValues - } - return false -} - -func (m *UpdateReleaseRequest) GetWait() bool { - if m != nil { - return m.Wait - } - return false -} - -func (m *UpdateReleaseRequest) GetReuseValues() bool { - if m != nil { - return m.ReuseValues - } - return false -} - -func (m *UpdateReleaseRequest) GetForce() bool { - if m != nil { - return m.Force - } - return false -} - // UpdateReleaseResponse is the response to an update request. type UpdateReleaseResponse struct { Release *hapi_release5.Release `protobuf:"bytes,1,opt,name=release" json:"release,omitempty"` @@ -502,62 +350,6 @@ func (m *RollbackReleaseRequest) String() string { return proto.Compa func (*RollbackReleaseRequest) ProtoMessage() {} func (*RollbackReleaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } -func (m *RollbackReleaseRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *RollbackReleaseRequest) GetDryRun() bool { - if m != nil { - return m.DryRun - } - return false -} - -func (m *RollbackReleaseRequest) GetDisableHooks() bool { - if m != nil { - return m.DisableHooks - } - return false -} - -func (m *RollbackReleaseRequest) GetVersion() int32 { - if m != nil { - return m.Version - } - return 0 -} - -func (m *RollbackReleaseRequest) GetRecreate() bool { - if m != nil { - return m.Recreate - } - return false -} - -func (m *RollbackReleaseRequest) GetTimeout() int64 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *RollbackReleaseRequest) GetWait() bool { - if m != nil { - return m.Wait - } - return false -} - -func (m *RollbackReleaseRequest) GetForce() bool { - if m != nil { - return m.Force - } - return false -} - // RollbackReleaseResponse is the response to an update request. type RollbackReleaseResponse struct { Release *hapi_release5.Release `protobuf:"bytes,1,opt,name=release" json:"release,omitempty"` @@ -621,72 +413,140 @@ func (m *InstallReleaseRequest) GetValues() *hapi_chart.Config { return nil } -func (m *InstallReleaseRequest) GetDryRun() bool { - if m != nil { - return m.DryRun - } - return false +type LogItem struct { + Level LogItem_Level `protobuf:"varint,1,opt,name=level,enum=hapi.services.tiller.LogItem_Level" json:"level,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` } -func (m *InstallReleaseRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} +func (m *LogItem) Reset() { *m = LogItem{} } +func (m *LogItem) String() string { return proto.CompactTextString(m) } +func (*LogItem) ProtoMessage() {} +func (*LogItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } -func (m *InstallReleaseRequest) GetDisableHooks() bool { - if m != nil { - return m.DisableHooks - } - return false +// InstallReleaseResponse is the response from a release installation. +type InstallReleaseResponse struct { + // One of the following will be filled in. + // + // Types that are valid to be assigned to Response: + // *InstallReleaseResponse_Release + // *InstallReleaseResponse_LogItem + Response isInstallReleaseResponse_Response `protobuf_oneof:"response"` } -func (m *InstallReleaseRequest) GetNamespace() string { - if m != nil { - return m.Namespace - } - return "" +func (m *InstallReleaseResponse) Reset() { *m = InstallReleaseResponse{} } +func (m *InstallReleaseResponse) String() string { return proto.CompactTextString(m) } +func (*InstallReleaseResponse) ProtoMessage() {} +func (*InstallReleaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +type isInstallReleaseResponse_Response interface { + isInstallReleaseResponse_Response() } -func (m *InstallReleaseRequest) GetReuseName() bool { - if m != nil { - return m.ReuseName - } - return false +type InstallReleaseResponse_Release struct { + Release *hapi_release5.Release `protobuf:"bytes,1,opt,name=release,oneof"` +} +type InstallReleaseResponse_LogItem struct { + LogItem *LogItem `protobuf:"bytes,2,opt,name=logItem,oneof"` } -func (m *InstallReleaseRequest) GetTimeout() int64 { +func (*InstallReleaseResponse_Release) isInstallReleaseResponse_Response() {} +func (*InstallReleaseResponse_LogItem) isInstallReleaseResponse_Response() {} + +func (m *InstallReleaseResponse) GetResponse() isInstallReleaseResponse_Response { if m != nil { - return m.Timeout + return m.Response } - return 0 + return nil } -func (m *InstallReleaseRequest) GetWait() bool { - if m != nil { - return m.Wait +func (m *InstallReleaseResponse) GetRelease() *hapi_release5.Release { + if x, ok := m.GetResponse().(*InstallReleaseResponse_Release); ok { + return x.Release } - return false + return nil } -// InstallReleaseResponse is the response from a release installation. -type InstallReleaseResponse struct { - Release *hapi_release5.Release `protobuf:"bytes,1,opt,name=release" json:"release,omitempty"` +func (m *InstallReleaseResponse) GetLogItem() *LogItem { + if x, ok := m.GetResponse().(*InstallReleaseResponse_LogItem); ok { + return x.LogItem + } + return nil } -func (m *InstallReleaseResponse) Reset() { *m = InstallReleaseResponse{} } -func (m *InstallReleaseResponse) String() string { return proto.CompactTextString(m) } -func (*InstallReleaseResponse) ProtoMessage() {} -func (*InstallReleaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } - -func (m *InstallReleaseResponse) GetRelease() *hapi_release5.Release { - if m != nil { - return m.Release +// XXX_OneofFuncs is for the internal use of the proto package. +func (*InstallReleaseResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _InstallReleaseResponse_OneofMarshaler, _InstallReleaseResponse_OneofUnmarshaler, _InstallReleaseResponse_OneofSizer, []interface{}{ + (*InstallReleaseResponse_Release)(nil), + (*InstallReleaseResponse_LogItem)(nil), + } +} + +func _InstallReleaseResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*InstallReleaseResponse) + // response + switch x := m.Response.(type) { + case *InstallReleaseResponse_Release: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Release); err != nil { + return err + } + case *InstallReleaseResponse_LogItem: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LogItem); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("InstallReleaseResponse.Response has unexpected type %T", x) } return nil } +func _InstallReleaseResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*InstallReleaseResponse) + switch tag { + case 1: // response.release + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(hapi_release5.Release) + err := b.DecodeMessage(msg) + m.Response = &InstallReleaseResponse_Release{msg} + return true, err + case 2: // response.logItem + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(LogItem) + err := b.DecodeMessage(msg) + m.Response = &InstallReleaseResponse_LogItem{msg} + return true, err + default: + return false, nil + } +} + +func _InstallReleaseResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*InstallReleaseResponse) + // response + switch x := m.Response.(type) { + case *InstallReleaseResponse_Release: + s := proto.Size(x.Release) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *InstallReleaseResponse_LogItem: + s := proto.Size(x.LogItem) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + // UninstallReleaseRequest represents a request to uninstall a named release. type UninstallReleaseRequest struct { // Name is the name of the release to delete. @@ -702,35 +562,7 @@ type UninstallReleaseRequest struct { func (m *UninstallReleaseRequest) Reset() { *m = UninstallReleaseRequest{} } func (m *UninstallReleaseRequest) String() string { return proto.CompactTextString(m) } func (*UninstallReleaseRequest) ProtoMessage() {} -func (*UninstallReleaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } - -func (m *UninstallReleaseRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *UninstallReleaseRequest) GetDisableHooks() bool { - if m != nil { - return m.DisableHooks - } - return false -} - -func (m *UninstallReleaseRequest) GetPurge() bool { - if m != nil { - return m.Purge - } - return false -} - -func (m *UninstallReleaseRequest) GetTimeout() int64 { - if m != nil { - return m.Timeout - } - return 0 -} +func (*UninstallReleaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } // UninstallReleaseResponse represents a successful response to an uninstall request. type UninstallReleaseResponse struct { @@ -743,7 +575,7 @@ type UninstallReleaseResponse struct { func (m *UninstallReleaseResponse) Reset() { *m = UninstallReleaseResponse{} } func (m *UninstallReleaseResponse) String() string { return proto.CompactTextString(m) } func (*UninstallReleaseResponse) ProtoMessage() {} -func (*UninstallReleaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*UninstallReleaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *UninstallReleaseResponse) GetRelease() *hapi_release5.Release { if m != nil { @@ -752,13 +584,6 @@ func (m *UninstallReleaseResponse) GetRelease() *hapi_release5.Release { return nil } -func (m *UninstallReleaseResponse) GetInfo() string { - if m != nil { - return m.Info - } - return "" -} - // GetVersionRequest requests for version information. type GetVersionRequest struct { } @@ -766,7 +591,7 @@ type GetVersionRequest struct { func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} } func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) } func (*GetVersionRequest) ProtoMessage() {} -func (*GetVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*GetVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } type GetVersionResponse struct { Version *hapi_version.Version `protobuf:"bytes,1,opt,name=Version" json:"Version,omitempty"` @@ -775,7 +600,7 @@ type GetVersionResponse struct { func (m *GetVersionResponse) Reset() { *m = GetVersionResponse{} } func (m *GetVersionResponse) String() string { return proto.CompactTextString(m) } func (*GetVersionResponse) ProtoMessage() {} -func (*GetVersionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*GetVersionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *GetVersionResponse) GetVersion() *hapi_version.Version { if m != nil { @@ -795,21 +620,7 @@ type GetHistoryRequest struct { func (m *GetHistoryRequest) Reset() { *m = GetHistoryRequest{} } func (m *GetHistoryRequest) String() string { return proto.CompactTextString(m) } func (*GetHistoryRequest) ProtoMessage() {} -func (*GetHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } - -func (m *GetHistoryRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *GetHistoryRequest) GetMax() int32 { - if m != nil { - return m.Max - } - return 0 -} +func (*GetHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } // GetHistoryResponse is received in response to a GetHistory rpc. type GetHistoryResponse struct { @@ -819,7 +630,7 @@ type GetHistoryResponse struct { func (m *GetHistoryResponse) Reset() { *m = GetHistoryResponse{} } func (m *GetHistoryResponse) String() string { return proto.CompactTextString(m) } func (*GetHistoryResponse) ProtoMessage() {} -func (*GetHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*GetHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *GetHistoryResponse) GetReleases() []*hapi_release5.Release { if m != nil { @@ -841,28 +652,7 @@ type TestReleaseRequest struct { func (m *TestReleaseRequest) Reset() { *m = TestReleaseRequest{} } func (m *TestReleaseRequest) String() string { return proto.CompactTextString(m) } func (*TestReleaseRequest) ProtoMessage() {} -func (*TestReleaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } - -func (m *TestReleaseRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *TestReleaseRequest) GetTimeout() int64 { - if m != nil { - return m.Timeout - } - return 0 -} - -func (m *TestReleaseRequest) GetCleanup() bool { - if m != nil { - return m.Cleanup - } - return false -} +func (*TestReleaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } // TestReleaseResponse represents a message from executing a test type TestReleaseResponse struct { @@ -873,21 +663,7 @@ type TestReleaseResponse struct { func (m *TestReleaseResponse) Reset() { *m = TestReleaseResponse{} } func (m *TestReleaseResponse) String() string { return proto.CompactTextString(m) } func (*TestReleaseResponse) ProtoMessage() {} -func (*TestReleaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } - -func (m *TestReleaseResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *TestReleaseResponse) GetStatus() hapi_release1.TestRun_Status { - if m != nil { - return m.Status - } - return hapi_release1.TestRun_UNKNOWN -} +func (*TestReleaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func init() { proto.RegisterType((*ListReleasesRequest)(nil), "hapi.services.tiller.ListReleasesRequest") @@ -902,6 +678,7 @@ func init() { proto.RegisterType((*RollbackReleaseRequest)(nil), "hapi.services.tiller.RollbackReleaseRequest") proto.RegisterType((*RollbackReleaseResponse)(nil), "hapi.services.tiller.RollbackReleaseResponse") proto.RegisterType((*InstallReleaseRequest)(nil), "hapi.services.tiller.InstallReleaseRequest") + proto.RegisterType((*LogItem)(nil), "hapi.services.tiller.LogItem") proto.RegisterType((*InstallReleaseResponse)(nil), "hapi.services.tiller.InstallReleaseResponse") proto.RegisterType((*UninstallReleaseRequest)(nil), "hapi.services.tiller.UninstallReleaseRequest") proto.RegisterType((*UninstallReleaseResponse)(nil), "hapi.services.tiller.UninstallReleaseResponse") @@ -913,6 +690,7 @@ func init() { proto.RegisterType((*TestReleaseResponse)(nil), "hapi.services.tiller.TestReleaseResponse") proto.RegisterEnum("hapi.services.tiller.ListSort_SortBy", ListSort_SortBy_name, ListSort_SortBy_value) proto.RegisterEnum("hapi.services.tiller.ListSort_SortOrder", ListSort_SortOrder_name, ListSort_SortOrder_value) + proto.RegisterEnum("hapi.services.tiller.LogItem_Level", LogItem_Level_name, LogItem_Level_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -938,7 +716,7 @@ type ReleaseServiceClient interface { // UpdateRelease updates release content. UpdateRelease(ctx context.Context, in *UpdateReleaseRequest, opts ...grpc.CallOption) (*UpdateReleaseResponse, error) // InstallRelease requests installation of a chart as a new release. - InstallRelease(ctx context.Context, in *InstallReleaseRequest, opts ...grpc.CallOption) (*InstallReleaseResponse, error) + InstallRelease(ctx context.Context, in *InstallReleaseRequest, opts ...grpc.CallOption) (ReleaseService_InstallReleaseClient, error) // UninstallRelease requests deletion of a named release. UninstallRelease(ctx context.Context, in *UninstallReleaseRequest, opts ...grpc.CallOption) (*UninstallReleaseResponse, error) // GetVersion returns the current version of the server. @@ -1018,13 +796,36 @@ func (c *releaseServiceClient) UpdateRelease(ctx context.Context, in *UpdateRele return out, nil } -func (c *releaseServiceClient) InstallRelease(ctx context.Context, in *InstallReleaseRequest, opts ...grpc.CallOption) (*InstallReleaseResponse, error) { - out := new(InstallReleaseResponse) - err := grpc.Invoke(ctx, "/hapi.services.tiller.ReleaseService/InstallRelease", in, out, c.cc, opts...) +func (c *releaseServiceClient) InstallRelease(ctx context.Context, in *InstallReleaseRequest, opts ...grpc.CallOption) (ReleaseService_InstallReleaseClient, error) { + stream, err := grpc.NewClientStream(ctx, &_ReleaseService_serviceDesc.Streams[1], c.cc, "/hapi.services.tiller.ReleaseService/InstallRelease", opts...) if err != nil { return nil, err } - return out, nil + x := &releaseServiceInstallReleaseClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ReleaseService_InstallReleaseClient interface { + Recv() (*InstallReleaseResponse, error) + grpc.ClientStream +} + +type releaseServiceInstallReleaseClient struct { + grpc.ClientStream +} + +func (x *releaseServiceInstallReleaseClient) Recv() (*InstallReleaseResponse, error) { + m := new(InstallReleaseResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil } func (c *releaseServiceClient) UninstallRelease(ctx context.Context, in *UninstallReleaseRequest, opts ...grpc.CallOption) (*UninstallReleaseResponse, error) { @@ -1064,7 +865,7 @@ func (c *releaseServiceClient) GetHistory(ctx context.Context, in *GetHistoryReq } func (c *releaseServiceClient) RunReleaseTest(ctx context.Context, in *TestReleaseRequest, opts ...grpc.CallOption) (ReleaseService_RunReleaseTestClient, error) { - stream, err := grpc.NewClientStream(ctx, &_ReleaseService_serviceDesc.Streams[1], c.cc, "/hapi.services.tiller.ReleaseService/RunReleaseTest", opts...) + stream, err := grpc.NewClientStream(ctx, &_ReleaseService_serviceDesc.Streams[2], c.cc, "/hapi.services.tiller.ReleaseService/RunReleaseTest", opts...) if err != nil { return nil, err } @@ -1110,7 +911,7 @@ type ReleaseServiceServer interface { // UpdateRelease updates release content. UpdateRelease(context.Context, *UpdateReleaseRequest) (*UpdateReleaseResponse, error) // InstallRelease requests installation of a chart as a new release. - InstallRelease(context.Context, *InstallReleaseRequest) (*InstallReleaseResponse, error) + InstallRelease(*InstallReleaseRequest, ReleaseService_InstallReleaseServer) error // UninstallRelease requests deletion of a named release. UninstallRelease(context.Context, *UninstallReleaseRequest) (*UninstallReleaseResponse, error) // GetVersion returns the current version of the server. @@ -1202,22 +1003,25 @@ func _ReleaseService_UpdateRelease_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _ReleaseService_InstallRelease_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(InstallReleaseRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ReleaseServiceServer).InstallRelease(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/hapi.services.tiller.ReleaseService/InstallRelease", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ReleaseServiceServer).InstallRelease(ctx, req.(*InstallReleaseRequest)) +func _ReleaseService_InstallRelease_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(InstallReleaseRequest) + if err := stream.RecvMsg(m); err != nil { + return err } - return interceptor(ctx, in, info, handler) + return srv.(ReleaseServiceServer).InstallRelease(m, &releaseServiceInstallReleaseServer{stream}) +} + +type ReleaseService_InstallReleaseServer interface { + Send(*InstallReleaseResponse) error + grpc.ServerStream +} + +type releaseServiceInstallReleaseServer struct { + grpc.ServerStream +} + +func (x *releaseServiceInstallReleaseServer) Send(m *InstallReleaseResponse) error { + return x.ServerStream.SendMsg(m) } func _ReleaseService_UninstallRelease_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -1329,10 +1133,6 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateRelease", Handler: _ReleaseService_UpdateRelease_Handler, }, - { - MethodName: "InstallRelease", - Handler: _ReleaseService_InstallRelease_Handler, - }, { MethodName: "UninstallRelease", Handler: _ReleaseService_UninstallRelease_Handler, @@ -1356,6 +1156,11 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ Handler: _ReleaseService_ListReleases_Handler, ServerStreams: true, }, + { + StreamName: "InstallRelease", + Handler: _ReleaseService_InstallRelease_Handler, + ServerStreams: true, + }, { StreamName: "RunReleaseTest", Handler: _ReleaseService_RunReleaseTest_Handler, @@ -1368,82 +1173,87 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("hapi/services/tiller.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1217 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdd, 0x6e, 0xe3, 0xc4, - 0x17, 0xaf, 0xf3, 0x9d, 0x93, 0x36, 0xff, 0x74, 0x9a, 0xb6, 0xae, 0xff, 0x0b, 0x2a, 0x46, 0xb0, - 0xd9, 0x85, 0x4d, 0x21, 0x70, 0x83, 0x84, 0x90, 0xba, 0xdd, 0xa8, 0x2d, 0x94, 0xae, 0xe4, 0x6c, - 0x17, 0x09, 0x01, 0x91, 0x9b, 0x4c, 0x5a, 0xb3, 0x8e, 0x27, 0x78, 0xc6, 0x65, 0x7b, 0xcb, 0x1d, - 0x8f, 0xc2, 0x5b, 0xf0, 0x1e, 0x5c, 0xc2, 0x83, 0x20, 0xcf, 0x87, 0xeb, 0x49, 0xed, 0xd6, 0xf4, - 0x26, 0x9e, 0x99, 0xf3, 0xfd, 0x3b, 0x67, 0xce, 0x9c, 0x80, 0x75, 0xe9, 0x2e, 0xbc, 0x3d, 0x8a, - 0xc3, 0x2b, 0x6f, 0x82, 0xe9, 0x1e, 0xf3, 0x7c, 0x1f, 0x87, 0xfd, 0x45, 0x48, 0x18, 0x41, 0xdd, - 0x98, 0xd6, 0x57, 0xb4, 0xbe, 0xa0, 0x59, 0x5b, 0x5c, 0x62, 0x72, 0xe9, 0x86, 0x4c, 0xfc, 0x0a, - 0x6e, 0x6b, 0x3b, 0x7d, 0x4e, 0x82, 0x99, 0x77, 0x21, 0x09, 0xc2, 0x44, 0x88, 0x7d, 0xec, 0x52, - 0xac, 0xbe, 0x9a, 0x90, 0xa2, 0x79, 0xc1, 0x8c, 0x48, 0xc2, 0xff, 0x35, 0x02, 0xc3, 0x94, 0x8d, - 0xc3, 0x28, 0x90, 0xc4, 0x1d, 0x8d, 0x48, 0x99, 0xcb, 0x22, 0xaa, 0x19, 0xbb, 0xc2, 0x21, 0xf5, - 0x48, 0xa0, 0xbe, 0x82, 0x66, 0xff, 0x59, 0x82, 0x8d, 0x13, 0x8f, 0x32, 0x47, 0x08, 0x52, 0x07, - 0xff, 0x12, 0x61, 0xca, 0x50, 0x17, 0xaa, 0xbe, 0x37, 0xf7, 0x98, 0x69, 0xec, 0x1a, 0xbd, 0xb2, - 0x23, 0x36, 0x68, 0x0b, 0x6a, 0x64, 0x36, 0xa3, 0x98, 0x99, 0xa5, 0x5d, 0xa3, 0xd7, 0x74, 0xe4, - 0x0e, 0x7d, 0x05, 0x75, 0x4a, 0x42, 0x36, 0x3e, 0xbf, 0x36, 0xcb, 0xbb, 0x46, 0xaf, 0x3d, 0xf8, - 0xa0, 0x9f, 0x85, 0x53, 0x3f, 0xb6, 0x34, 0x22, 0x21, 0xeb, 0xc7, 0x3f, 0xcf, 0xaf, 0x9d, 0x1a, - 0xe5, 0xdf, 0x58, 0xef, 0xcc, 0xf3, 0x19, 0x0e, 0xcd, 0x8a, 0xd0, 0x2b, 0x76, 0xe8, 0x10, 0x80, - 0xeb, 0x25, 0xe1, 0x14, 0x87, 0x66, 0x95, 0xab, 0xee, 0x15, 0x50, 0xfd, 0x32, 0xe6, 0x77, 0x9a, - 0x54, 0x2d, 0xd1, 0x97, 0xb0, 0x2a, 0x20, 0x19, 0x4f, 0xc8, 0x14, 0x53, 0xb3, 0xb6, 0x5b, 0xee, - 0xb5, 0x07, 0x3b, 0x42, 0x95, 0x82, 0x7f, 0x24, 0x40, 0x3b, 0x20, 0x53, 0xec, 0xb4, 0x04, 0x7b, - 0xbc, 0xa6, 0xe8, 0x11, 0x34, 0x03, 0x77, 0x8e, 0xe9, 0xc2, 0x9d, 0x60, 0xb3, 0xce, 0x3d, 0xbc, - 0x39, 0xb0, 0x7f, 0x82, 0x86, 0x32, 0x6e, 0x0f, 0xa0, 0x26, 0x42, 0x43, 0x2d, 0xa8, 0x9f, 0x9d, - 0x7e, 0x73, 0xfa, 0xf2, 0xbb, 0xd3, 0xce, 0x0a, 0x6a, 0x40, 0xe5, 0x74, 0xff, 0xdb, 0x61, 0xc7, - 0x40, 0xeb, 0xb0, 0x76, 0xb2, 0x3f, 0x7a, 0x35, 0x76, 0x86, 0x27, 0xc3, 0xfd, 0xd1, 0xf0, 0x45, - 0xa7, 0x64, 0xbf, 0x0b, 0xcd, 0xc4, 0x67, 0x54, 0x87, 0xf2, 0xfe, 0xe8, 0x40, 0x88, 0xbc, 0x18, - 0x8e, 0x0e, 0x3a, 0x86, 0xfd, 0xbb, 0x01, 0x5d, 0x3d, 0x45, 0x74, 0x41, 0x02, 0x8a, 0xe3, 0x1c, - 0x4d, 0x48, 0x14, 0x24, 0x39, 0xe2, 0x1b, 0x84, 0xa0, 0x12, 0xe0, 0xb7, 0x2a, 0x43, 0x7c, 0x1d, - 0x73, 0x32, 0xc2, 0x5c, 0x9f, 0x67, 0xa7, 0xec, 0x88, 0x0d, 0xfa, 0x14, 0x1a, 0x32, 0x74, 0x6a, - 0x56, 0x76, 0xcb, 0xbd, 0xd6, 0x60, 0x53, 0x07, 0x44, 0x5a, 0x74, 0x12, 0x36, 0xfb, 0x10, 0xb6, - 0x0f, 0xb1, 0xf2, 0x44, 0xe0, 0xa5, 0x2a, 0x26, 0xb6, 0xeb, 0xce, 0x31, 0x77, 0x26, 0xb6, 0xeb, - 0xce, 0x31, 0x32, 0xa1, 0x2e, 0xcb, 0x8d, 0xbb, 0x53, 0x75, 0xd4, 0xd6, 0x66, 0x60, 0xde, 0x56, - 0x24, 0xe3, 0xca, 0xd2, 0xf4, 0x21, 0x54, 0xe2, 0x9b, 0xc0, 0xd5, 0xb4, 0x06, 0x48, 0xf7, 0xf3, - 0x38, 0x98, 0x11, 0x87, 0xd3, 0xf5, 0x54, 0x95, 0x97, 0x53, 0x75, 0x94, 0xb6, 0x7a, 0x40, 0x02, - 0x86, 0x03, 0xf6, 0x30, 0xff, 0x4f, 0x60, 0x27, 0x43, 0x93, 0x0c, 0x60, 0x0f, 0xea, 0xd2, 0x35, - 0xae, 0x2d, 0x17, 0x57, 0xc5, 0x65, 0xff, 0x5d, 0x82, 0xee, 0xd9, 0x62, 0xea, 0x32, 0xac, 0x48, - 0x77, 0x38, 0xf5, 0x18, 0xaa, 0xbc, 0xa3, 0x48, 0x2c, 0xd6, 0x85, 0x6e, 0xd1, 0x76, 0x0e, 0xe2, - 0x5f, 0x47, 0xd0, 0xd1, 0x53, 0xa8, 0x5d, 0xb9, 0x7e, 0x84, 0x29, 0x07, 0x22, 0x41, 0x4d, 0x72, - 0xf2, 0x76, 0xe4, 0x48, 0x0e, 0xb4, 0x0d, 0xf5, 0x69, 0x78, 0x1d, 0xf7, 0x13, 0x7e, 0x05, 0x1b, - 0x4e, 0x6d, 0x1a, 0x5e, 0x3b, 0x51, 0x80, 0xde, 0x87, 0xb5, 0xa9, 0x47, 0xdd, 0x73, 0x1f, 0x8f, - 0x2f, 0x09, 0x79, 0x43, 0xf9, 0x2d, 0x6c, 0x38, 0xab, 0xf2, 0xf0, 0x28, 0x3e, 0x43, 0x56, 0x5c, - 0x49, 0x93, 0x10, 0xbb, 0x0c, 0x9b, 0x35, 0x4e, 0x4f, 0xf6, 0x31, 0x86, 0xcc, 0x9b, 0x63, 0x12, - 0x31, 0x7e, 0x75, 0xca, 0x8e, 0xda, 0xa2, 0xf7, 0x60, 0x35, 0xc4, 0x14, 0xb3, 0xb1, 0xf4, 0xb2, - 0xc1, 0x25, 0x5b, 0xfc, 0xec, 0xb5, 0x70, 0x0b, 0x41, 0xe5, 0x57, 0xd7, 0x63, 0x66, 0x93, 0x93, - 0xf8, 0x5a, 0x88, 0x45, 0x14, 0x2b, 0x31, 0x50, 0x62, 0x11, 0xc5, 0x52, 0xac, 0x0b, 0xd5, 0x19, - 0x09, 0x27, 0xd8, 0x6c, 0x71, 0x9a, 0xd8, 0xd8, 0x47, 0xb0, 0xb9, 0x04, 0xf2, 0x43, 0xf3, 0xf5, - 0x8f, 0x01, 0x5b, 0x0e, 0xf1, 0xfd, 0x73, 0x77, 0xf2, 0xa6, 0x40, 0xc6, 0x52, 0xe0, 0x96, 0xee, - 0x06, 0xb7, 0x9c, 0x01, 0x6e, 0xaa, 0x08, 0x2b, 0x5a, 0x11, 0x6a, 0xb0, 0x57, 0xf3, 0x61, 0xaf, - 0xe9, 0xb0, 0x2b, 0x4c, 0xeb, 0x29, 0x4c, 0x13, 0xc0, 0x1a, 0x69, 0xc0, 0xbe, 0x86, 0xed, 0x5b, - 0x51, 0x3e, 0x14, 0xb2, 0x3f, 0x4a, 0xb0, 0x79, 0x1c, 0x50, 0xe6, 0xfa, 0xfe, 0x12, 0x62, 0x49, - 0x3d, 0x1b, 0x85, 0xeb, 0xb9, 0xf4, 0x5f, 0xea, 0xb9, 0xac, 0x41, 0xae, 0xf2, 0x53, 0x49, 0xe5, - 0xa7, 0x50, 0x8d, 0x6b, 0x9d, 0xa5, 0xb6, 0xd4, 0x59, 0xd0, 0x3b, 0x00, 0xa2, 0x28, 0xb9, 0x72, - 0x01, 0x6d, 0x93, 0x9f, 0x9c, 0xca, 0x46, 0xa2, 0xb2, 0xd1, 0xc8, 0xce, 0x46, 0xaa, 0xc2, 0xed, - 0x63, 0xd8, 0x5a, 0x86, 0xea, 0xa1, 0xb0, 0xff, 0x66, 0xc0, 0xf6, 0x59, 0xe0, 0x65, 0x02, 0x9f, - 0x55, 0xaa, 0xb7, 0xa0, 0x28, 0x65, 0x40, 0xd1, 0x85, 0xea, 0x22, 0x0a, 0x2f, 0xb0, 0x84, 0x56, - 0x6c, 0xd2, 0x31, 0x56, 0xb4, 0x18, 0xed, 0x31, 0x98, 0xb7, 0x7d, 0x78, 0x60, 0x44, 0xb1, 0xd7, - 0xc9, 0x4b, 0xd0, 0x14, 0x5d, 0xdf, 0xde, 0x80, 0xf5, 0x43, 0xcc, 0x5e, 0x8b, 0x6b, 0x21, 0xc3, - 0xb3, 0x87, 0x80, 0xd2, 0x87, 0x37, 0xf6, 0xe4, 0x91, 0x6e, 0x4f, 0x8d, 0x45, 0x8a, 0x5f, 0x71, - 0xd9, 0x5f, 0x70, 0xdd, 0x47, 0x1e, 0x65, 0x24, 0xbc, 0xbe, 0x0b, 0xba, 0x0e, 0x94, 0xe7, 0xee, - 0x5b, 0xf9, 0x50, 0xc4, 0x4b, 0xfb, 0x90, 0x7b, 0x90, 0x88, 0x4a, 0x0f, 0xd2, 0xcf, 0xae, 0x51, - 0xec, 0xd9, 0xfd, 0x01, 0xd0, 0x2b, 0x9c, 0x4c, 0x00, 0xf7, 0xbc, 0x58, 0x2a, 0x09, 0x25, 0xbd, - 0xd0, 0x4c, 0xa8, 0x4f, 0x7c, 0xec, 0x06, 0xd1, 0x42, 0xa6, 0x4d, 0x6d, 0xed, 0x1f, 0x61, 0x43, - 0xd3, 0x2e, 0xfd, 0x8c, 0xe3, 0xa1, 0x17, 0x52, 0x7b, 0xbc, 0x44, 0x9f, 0x43, 0x4d, 0x8c, 0x45, - 0x5c, 0x77, 0x7b, 0xf0, 0x48, 0xf7, 0x9b, 0x2b, 0x89, 0x02, 0x39, 0x47, 0x39, 0x92, 0x77, 0xf0, - 0x57, 0x03, 0xda, 0xea, 0xa1, 0x17, 0x43, 0x1b, 0xf2, 0x60, 0x35, 0x3d, 0xd1, 0xa0, 0x27, 0xf9, - 0x33, 0xdd, 0xd2, 0x60, 0x6a, 0x3d, 0x2d, 0xc2, 0x2a, 0x22, 0xb0, 0x57, 0x3e, 0x31, 0x10, 0x85, - 0xce, 0xf2, 0xa0, 0x81, 0x9e, 0x65, 0xeb, 0xc8, 0x99, 0x6c, 0xac, 0x7e, 0x51, 0x76, 0x65, 0x16, - 0x5d, 0xf1, 0x9a, 0xd1, 0xa7, 0x03, 0x74, 0xaf, 0x1a, 0x7d, 0x20, 0xb1, 0xf6, 0x0a, 0xf3, 0x27, - 0x76, 0x7f, 0x86, 0x35, 0xed, 0x85, 0x43, 0x39, 0x68, 0x65, 0xcd, 0x1a, 0xd6, 0x47, 0x85, 0x78, - 0x13, 0x5b, 0x73, 0x68, 0xeb, 0x4d, 0x0a, 0xe5, 0x28, 0xc8, 0xec, 0xfa, 0xd6, 0xc7, 0xc5, 0x98, - 0x13, 0x73, 0x14, 0x3a, 0xcb, 0x3d, 0x24, 0x2f, 0x8f, 0x39, 0xfd, 0x2e, 0x2f, 0x8f, 0x79, 0xad, - 0xc9, 0x5e, 0x41, 0x2e, 0xc0, 0x4d, 0x0b, 0x41, 0x8f, 0x73, 0x13, 0xa2, 0x77, 0x1e, 0xab, 0x77, - 0x3f, 0x63, 0x62, 0x62, 0x01, 0xff, 0x5b, 0x7a, 0x63, 0x51, 0x0e, 0x34, 0xd9, 0x03, 0x87, 0xf5, - 0xac, 0x20, 0xf7, 0x52, 0x50, 0xb2, 0x2b, 0xdd, 0x11, 0x94, 0xde, 0xf2, 0xee, 0x08, 0x6a, 0xa9, - 0xc1, 0xd9, 0x2b, 0xc8, 0x83, 0xb6, 0x13, 0x05, 0xd2, 0x74, 0xdc, 0x16, 0x50, 0x8e, 0xf4, 0xed, - 0xae, 0x66, 0x3d, 0x29, 0xc0, 0x79, 0x73, 0xbf, 0x9f, 0xc3, 0xf7, 0x0d, 0xc5, 0x7a, 0x5e, 0xe3, - 0xff, 0x69, 0x3f, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x7c, 0x9c, 0x49, 0xc1, 0x0f, 0x00, - 0x00, + // 1312 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdd, 0x6e, 0x1b, 0x45, + 0x14, 0xce, 0xfa, 0xdf, 0x27, 0xa9, 0x71, 0xa7, 0x69, 0xb2, 0x35, 0x2d, 0x0a, 0x5b, 0x41, 0xdd, + 0x42, 0x1d, 0x6a, 0xb8, 0xa9, 0x84, 0x90, 0xd2, 0xd4, 0x24, 0x81, 0x90, 0x48, 0x93, 0xb6, 0x48, + 0x08, 0xb0, 0x36, 0xf6, 0x38, 0x5d, 0xba, 0xde, 0x31, 0x3b, 0xb3, 0xa1, 0x91, 0xb8, 0xe2, 0x8e, + 0x5b, 0xde, 0x82, 0xb7, 0xe0, 0x45, 0xb8, 0x82, 0x07, 0x41, 0xf3, 0xb7, 0xf1, 0x38, 0xbb, 0xc9, + 0x92, 0x9b, 0x78, 0x67, 0xce, 0xef, 0x7c, 0xdf, 0x99, 0x33, 0x27, 0xd0, 0x79, 0xed, 0xcf, 0x82, + 0x4d, 0x46, 0xe2, 0xd3, 0x60, 0x44, 0xd8, 0x26, 0x0f, 0xc2, 0x90, 0xc4, 0xbd, 0x59, 0x4c, 0x39, + 0x45, 0xab, 0x42, 0xd6, 0x33, 0xb2, 0x9e, 0x92, 0x75, 0xd6, 0xa4, 0xc5, 0xe8, 0xb5, 0x1f, 0x73, + 0xf5, 0x57, 0x69, 0x77, 0xd6, 0xe7, 0xf7, 0x69, 0x34, 0x09, 0x4e, 0xb4, 0x40, 0x85, 0x88, 0x49, + 0x48, 0x7c, 0x46, 0xcc, 0xaf, 0x65, 0x64, 0x64, 0x41, 0x34, 0xa1, 0x5a, 0xf0, 0xae, 0x25, 0xe0, + 0x84, 0xf1, 0x61, 0x9c, 0x44, 0x5a, 0x78, 0xc7, 0x12, 0x32, 0xee, 0xf3, 0x84, 0x59, 0xc1, 0x4e, + 0x49, 0xcc, 0x02, 0x1a, 0x99, 0x5f, 0x25, 0xf3, 0xfe, 0x2a, 0xc1, 0xad, 0xfd, 0x80, 0x71, 0xac, + 0x0c, 0x19, 0x26, 0x3f, 0x27, 0x84, 0x71, 0xb4, 0x0a, 0xd5, 0x30, 0x98, 0x06, 0xdc, 0x75, 0x36, + 0x9c, 0x6e, 0x19, 0xab, 0x05, 0x5a, 0x83, 0x1a, 0x9d, 0x4c, 0x18, 0xe1, 0x6e, 0x69, 0xc3, 0xe9, + 0x36, 0xb1, 0x5e, 0xa1, 0x2f, 0xa0, 0xce, 0x68, 0xcc, 0x87, 0xc7, 0x67, 0x6e, 0x79, 0xc3, 0xe9, + 0xb6, 0xfa, 0x1f, 0xf4, 0xb2, 0x70, 0xea, 0x89, 0x48, 0x47, 0x34, 0xe6, 0x3d, 0xf1, 0xe7, 0xd9, + 0x19, 0xae, 0x31, 0xf9, 0x2b, 0xfc, 0x4e, 0x82, 0x90, 0x93, 0xd8, 0xad, 0x28, 0xbf, 0x6a, 0x85, + 0x76, 0x00, 0xa4, 0x5f, 0x1a, 0x8f, 0x49, 0xec, 0x56, 0xa5, 0xeb, 0x6e, 0x01, 0xd7, 0x87, 0x42, + 0x1f, 0x37, 0x99, 0xf9, 0x44, 0x9f, 0xc3, 0x8a, 0x82, 0x64, 0x38, 0xa2, 0x63, 0xc2, 0xdc, 0xda, + 0x46, 0xb9, 0xdb, 0xea, 0xdf, 0x51, 0xae, 0x0c, 0xfc, 0x47, 0x0a, 0xb4, 0x6d, 0x3a, 0x26, 0x78, + 0x59, 0xa9, 0x8b, 0x6f, 0x86, 0xee, 0x42, 0x33, 0xf2, 0xa7, 0x84, 0xcd, 0xfc, 0x11, 0x71, 0xeb, + 0x32, 0xc3, 0xf3, 0x0d, 0xef, 0x47, 0x68, 0x98, 0xe0, 0x5e, 0x1f, 0x6a, 0xea, 0x68, 0x68, 0x19, + 0xea, 0x2f, 0x0f, 0xbe, 0x3e, 0x38, 0xfc, 0xf6, 0xa0, 0xbd, 0x84, 0x1a, 0x50, 0x39, 0xd8, 0xfa, + 0x66, 0xd0, 0x76, 0xd0, 0x4d, 0xb8, 0xb1, 0xbf, 0x75, 0xf4, 0x62, 0x88, 0x07, 0xfb, 0x83, 0xad, + 0xa3, 0xc1, 0xf3, 0x76, 0xc9, 0x7b, 0x0f, 0x9a, 0x69, 0xce, 0xa8, 0x0e, 0xe5, 0xad, 0xa3, 0x6d, + 0x65, 0xf2, 0x7c, 0x70, 0xb4, 0xdd, 0x76, 0xbc, 0xdf, 0x1d, 0x58, 0xb5, 0x29, 0x62, 0x33, 0x1a, + 0x31, 0x22, 0x38, 0x1a, 0xd1, 0x24, 0x4a, 0x39, 0x92, 0x0b, 0x84, 0xa0, 0x12, 0x91, 0xb7, 0x86, + 0x21, 0xf9, 0x2d, 0x34, 0x39, 0xe5, 0x7e, 0x28, 0xd9, 0x29, 0x63, 0xb5, 0x40, 0x4f, 0xa0, 0xa1, + 0x8f, 0xce, 0xdc, 0xca, 0x46, 0xb9, 0xbb, 0xdc, 0xbf, 0x6d, 0x03, 0xa2, 0x23, 0xe2, 0x54, 0xcd, + 0xdb, 0x81, 0xf5, 0x1d, 0x62, 0x32, 0x51, 0x78, 0x99, 0x8a, 0x11, 0x71, 0xfd, 0x29, 0x91, 0xc9, + 0x88, 0xb8, 0xfe, 0x94, 0x20, 0x17, 0xea, 0xba, 0xdc, 0x64, 0x3a, 0x55, 0x6c, 0x96, 0x1e, 0x07, + 0xf7, 0xa2, 0x23, 0x7d, 0xae, 0x2c, 0x4f, 0x1f, 0x42, 0x45, 0xdc, 0x04, 0xe9, 0x66, 0xb9, 0x8f, + 0xec, 0x3c, 0xf7, 0xa2, 0x09, 0xc5, 0x52, 0x6e, 0x53, 0x55, 0x5e, 0xa4, 0x6a, 0x77, 0x3e, 0xea, + 0x36, 0x8d, 0x38, 0x89, 0xf8, 0xf5, 0xf2, 0xdf, 0x87, 0x3b, 0x19, 0x9e, 0xf4, 0x01, 0x36, 0xa1, + 0xae, 0x53, 0x93, 0xde, 0x72, 0x71, 0x35, 0x5a, 0xde, 0x3f, 0x25, 0x58, 0x7d, 0x39, 0x1b, 0xfb, + 0x9c, 0x18, 0xd1, 0x25, 0x49, 0x3d, 0x80, 0xaa, 0xec, 0x28, 0x1a, 0x8b, 0x9b, 0xca, 0xb7, 0x6a, + 0x3b, 0xdb, 0xe2, 0x2f, 0x56, 0x72, 0xf4, 0x08, 0x6a, 0xa7, 0x7e, 0x98, 0x10, 0x26, 0x81, 0x48, + 0x51, 0xd3, 0x9a, 0xb2, 0x1d, 0x61, 0xad, 0x81, 0xd6, 0xa1, 0x3e, 0x8e, 0xcf, 0x44, 0x3f, 0x91, + 0x57, 0xb0, 0x81, 0x6b, 0xe3, 0xf8, 0x0c, 0x27, 0x11, 0xba, 0x0f, 0x37, 0xc6, 0x01, 0xf3, 0x8f, + 0x43, 0x32, 0x7c, 0x4d, 0xe9, 0x1b, 0x26, 0x6f, 0x61, 0x03, 0xaf, 0xe8, 0xcd, 0x5d, 0xb1, 0x87, + 0x3a, 0xa2, 0x92, 0x46, 0x31, 0xf1, 0x39, 0x71, 0x6b, 0x52, 0x9e, 0xae, 0x05, 0x86, 0x3c, 0x98, + 0x12, 0x9a, 0x70, 0x79, 0x75, 0xca, 0xd8, 0x2c, 0xd1, 0xfb, 0xb0, 0x12, 0x13, 0x46, 0xf8, 0x50, + 0x67, 0xd9, 0x90, 0x96, 0xcb, 0x72, 0xef, 0x95, 0x4a, 0x0b, 0x41, 0xe5, 0x17, 0x3f, 0xe0, 0x6e, + 0x53, 0x8a, 0xe4, 0xb7, 0x32, 0x4b, 0x18, 0x31, 0x66, 0x60, 0xcc, 0x12, 0x46, 0xb4, 0xd9, 0x2a, + 0x54, 0x27, 0x34, 0x1e, 0x11, 0x77, 0x59, 0xca, 0xd4, 0xc2, 0xdb, 0x85, 0xdb, 0x0b, 0x20, 0x5f, + 0x97, 0xaf, 0x7f, 0x1d, 0x58, 0xc3, 0x34, 0x0c, 0x8f, 0xfd, 0xd1, 0x9b, 0x02, 0x8c, 0xcd, 0x81, + 0x5b, 0xba, 0x1c, 0xdc, 0x72, 0x06, 0xb8, 0x73, 0x45, 0x58, 0xb1, 0x8a, 0xd0, 0x82, 0xbd, 0x9a, + 0x0f, 0x7b, 0xcd, 0x86, 0xdd, 0x60, 0x5a, 0x9f, 0xc3, 0x34, 0x05, 0xac, 0x31, 0x0f, 0xd8, 0x57, + 0xb0, 0x7e, 0xe1, 0x94, 0xd7, 0x85, 0xec, 0xcf, 0x12, 0xdc, 0xde, 0x8b, 0x18, 0xf7, 0xc3, 0x70, + 0x01, 0xb1, 0xb4, 0x9e, 0x9d, 0xc2, 0xf5, 0x5c, 0xfa, 0x3f, 0xf5, 0x5c, 0xb6, 0x20, 0x37, 0xfc, + 0x54, 0xe6, 0xf8, 0x29, 0x54, 0xe3, 0x56, 0x67, 0xa9, 0x2d, 0x74, 0x16, 0x74, 0x0f, 0x40, 0x15, + 0xa5, 0x74, 0xae, 0xa0, 0x6d, 0xca, 0x9d, 0x03, 0xdd, 0x48, 0x0c, 0x1b, 0x8d, 0x6c, 0x36, 0xe6, + 0x2a, 0xdc, 0xfb, 0x15, 0xea, 0xfb, 0xf4, 0x64, 0x8f, 0x93, 0x29, 0x7a, 0x0a, 0xd5, 0x90, 0x9c, + 0x92, 0x50, 0x82, 0xd3, 0xea, 0xdf, 0xcf, 0x79, 0xfc, 0x94, 0x76, 0x6f, 0x5f, 0xa8, 0x62, 0x65, + 0x21, 0x62, 0x4e, 0x09, 0x63, 0xfe, 0x09, 0xd1, 0x6f, 0x81, 0x59, 0x7a, 0x77, 0xa1, 0x2a, 0x35, + 0xc5, 0x23, 0xb3, 0x77, 0xf0, 0xe5, 0x61, 0x7b, 0x09, 0x35, 0xa1, 0x3a, 0xc0, 0xf8, 0x10, 0xb7, + 0x1d, 0xef, 0x0f, 0x07, 0xd6, 0x16, 0x99, 0xd2, 0xac, 0x3f, 0x29, 0xc6, 0xfa, 0xee, 0x52, 0xca, + 0x3b, 0x7a, 0x0a, 0xf5, 0x50, 0x65, 0xa7, 0x59, 0xbb, 0x77, 0xe9, 0x11, 0x84, 0xa9, 0xd6, 0x7f, + 0x06, 0xa2, 0xbc, 0x55, 0x64, 0xef, 0x37, 0x07, 0xd6, 0x5f, 0x46, 0x41, 0x66, 0x01, 0x65, 0x5d, + 0xb9, 0x0b, 0x94, 0x96, 0x32, 0x28, 0x5d, 0x85, 0xea, 0x2c, 0x89, 0x4f, 0x88, 0x2e, 0x11, 0xb5, + 0x98, 0xe7, 0xaa, 0x62, 0x71, 0xe5, 0x0d, 0xc1, 0xbd, 0x98, 0xc3, 0x35, 0x2f, 0x84, 0xc8, 0x3a, + 0x7d, 0xd1, 0x9a, 0xea, 0xf5, 0xf2, 0x6e, 0xc1, 0xcd, 0x1d, 0xc2, 0x5f, 0xa9, 0xeb, 0xad, 0x8f, + 0xe7, 0x0d, 0x00, 0xcd, 0x6f, 0x9e, 0xc7, 0xd3, 0x5b, 0x76, 0x3c, 0x33, 0xde, 0x19, 0x7d, 0xa3, + 0xe5, 0x3d, 0x95, 0xbe, 0x77, 0x03, 0xc6, 0x69, 0x7c, 0x76, 0x19, 0x74, 0x6d, 0x28, 0x4f, 0xfd, + 0xb7, 0xfa, 0xc1, 0x13, 0x9f, 0xde, 0x8e, 0xcc, 0x20, 0x35, 0x4d, 0x8b, 0xe1, 0x7c, 0x7c, 0x70, + 0x8a, 0x8d, 0x0f, 0xdf, 0x03, 0x7a, 0x41, 0xd2, 0x49, 0xe6, 0x8a, 0x97, 0xd7, 0x90, 0x50, 0xb2, + 0x2f, 0x8c, 0x0b, 0xf5, 0x51, 0x48, 0xfc, 0x28, 0x99, 0x69, 0xda, 0xcc, 0xd2, 0xfb, 0x01, 0x6e, + 0x59, 0xde, 0x75, 0x9e, 0xe2, 0x3c, 0xec, 0x44, 0x7b, 0x17, 0x9f, 0xe8, 0x33, 0xa8, 0xa9, 0xf1, + 0x4e, 0xfa, 0x6e, 0xf5, 0xef, 0xda, 0x79, 0x4b, 0x27, 0x49, 0xa4, 0xe7, 0x41, 0xac, 0x75, 0xfb, + 0x7f, 0x37, 0xa0, 0x65, 0x06, 0x16, 0x55, 0xbc, 0x28, 0x80, 0x95, 0xf9, 0xc9, 0x0c, 0x3d, 0xcc, + 0x9f, 0x4d, 0x17, 0x06, 0xec, 0xce, 0xa3, 0x22, 0xaa, 0xba, 0xf8, 0x97, 0x3e, 0x71, 0x10, 0x83, + 0xf6, 0xe2, 0xc0, 0x84, 0x1e, 0x67, 0xfb, 0xc8, 0x99, 0xd0, 0x3a, 0xbd, 0xa2, 0xea, 0x26, 0x2c, + 0x3a, 0x95, 0x35, 0x63, 0x4f, 0x39, 0xe8, 0x4a, 0x37, 0xf6, 0x60, 0xd5, 0xd9, 0x2c, 0xac, 0x9f, + 0xc6, 0xfd, 0x09, 0x6e, 0x58, 0x2f, 0x35, 0xca, 0x41, 0x2b, 0x6b, 0x66, 0xea, 0x7c, 0x54, 0x48, + 0x37, 0x8d, 0x45, 0xa1, 0x65, 0x77, 0x3b, 0x94, 0xe3, 0x20, 0xf3, 0xf5, 0xea, 0x7c, 0x5c, 0x4c, + 0xd9, 0x66, 0x72, 0xb1, 0x8b, 0xe4, 0x31, 0x99, 0xd3, 0xf1, 0xf2, 0x98, 0xcc, 0x6b, 0x4e, 0xde, + 0x12, 0xf2, 0x01, 0xce, 0x9b, 0x08, 0x7a, 0x90, 0x4b, 0x89, 0xdd, 0x7b, 0x3a, 0xdd, 0xab, 0x15, + 0xd3, 0x10, 0x33, 0x78, 0x67, 0x61, 0x5a, 0x40, 0x39, 0xe0, 0x64, 0x8f, 0x4e, 0x9d, 0xc7, 0x05, + 0xb5, 0x17, 0x0e, 0xa5, 0xfb, 0xd2, 0x25, 0x87, 0xb2, 0x9b, 0xde, 0x25, 0x87, 0x5a, 0x68, 0x71, + 0xde, 0x12, 0x0a, 0xa0, 0x85, 0x93, 0x48, 0x87, 0x16, 0x8d, 0x01, 0xe5, 0x58, 0x5f, 0xec, 0x6b, + 0x9d, 0x87, 0x05, 0x34, 0xcf, 0xeb, 0xe2, 0x19, 0x7c, 0xd7, 0x30, 0xaa, 0xc7, 0x35, 0xf9, 0xdf, + 0xf9, 0xa7, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x67, 0x31, 0x71, 0xbf, 0x8b, 0x10, 0x00, 0x00, } diff --git a/pkg/tiller/release_install.go b/pkg/tiller/release_install.go index 8e7fd3acd..bf2ed4f2d 100644 --- a/pkg/tiller/release_install.go +++ b/pkg/tiller/release_install.go @@ -20,8 +20,6 @@ import ( "fmt" "strings" - ctx "golang.org/x/net/context" - "k8s.io/helm/pkg/chartutil" "k8s.io/helm/pkg/hooks" "k8s.io/helm/pkg/proto/hapi/release" @@ -30,28 +28,71 @@ import ( "k8s.io/helm/pkg/timeconv" ) +type ClientLogger struct { + stream services.ReleaseService_InstallReleaseServer +} + +func (logger *ClientLogger) log(level services.LogItem_Level, message string) (error) { + log := &services.InstallReleaseResponse{ + Response: &services.InstallReleaseResponse_LogItem { + &services.LogItem{ + Level: level, + Message: message, + }, + }, + } + + return logger.stream.Send(log) +} + +func (logger *ClientLogger) Info(message string) (error) { + return logger.log(services.LogItem_INFO, message) +} + +func (logger *ClientLogger) Error(message string) (error) { + return logger.log(services.LogItem_ERROR, message) +} + // InstallRelease installs a release and stores the release record. -func (s *ReleaseServer) InstallRelease(c ctx.Context, req *services.InstallReleaseRequest) (*services.InstallReleaseResponse, error) { +func (s *ReleaseServer) InstallRelease(req *services.InstallReleaseRequest, stream services.ReleaseService_InstallReleaseServer) (error) { + clientLogger := ClientLogger{ + stream: stream, + } + s.Log("preparing install for %s", req.Name) rel, err := s.prepareRelease(req) if err != nil { s.Log("failed install prepare step: %s", err) - res := &services.InstallReleaseResponse{Release: rel} // On dry run, append the manifest contents to a failed release. This is // a stop-gap until we can revisit an error backchannel post-2.0. if req.DryRun && strings.HasPrefix(err.Error(), "YAML parse error") { err = fmt.Errorf("%s\n%s", err, rel.Manifest) } - return res, err + + return err } s.Log("performing install for %s", req.Name) + + err = clientLogger.Info(fmt.Sprintf("performing install for %s", req.Name)) + + if err != nil { + return err + } + res, err := s.performRelease(rel, req) if err != nil { s.Log("failed install perform step: %s", err) } - return res, err + + sendErr := stream.Send(res) + + if sendErr != nil { + return sendErr + } + + return err } // prepareRelease builds a release for an install operation. @@ -133,11 +174,17 @@ func (s *ReleaseServer) prepareRelease(req *services.InstallReleaseRequest) (*re // performRelease runs a release. func (s *ReleaseServer) performRelease(r *release.Release, req *services.InstallReleaseRequest) (*services.InstallReleaseResponse, error) { - res := &services.InstallReleaseResponse{Release: r} + res := &services.InstallReleaseResponse{ + Response: &services.InstallReleaseResponse_Release { + Release: r, + }, + } if req.DryRun { s.Log("dry run for %s", r.Name) - res.Release.Info.Description = "Dry run complete" + + releaseResponse := res.Response.(*services.InstallReleaseResponse_Release) + releaseResponse.Release.Info.Description = "Dry run complete" return res, nil } diff --git a/pkg/tiller/release_install_test.go b/pkg/tiller/release_install_test.go index 481dee01b..3de227fce 100644 --- a/pkg/tiller/release_install_test.go +++ b/pkg/tiller/release_install_test.go @@ -29,7 +29,6 @@ import ( ) func TestInstallRelease(t *testing.T) { - c := helm.NewContext() rs := rsFixture() // TODO: Refactor this into a mock. @@ -43,7 +42,10 @@ func TestInstallRelease(t *testing.T) { }, }, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) + if err != nil { t.Fatalf("Failed install: %s", err) } @@ -93,7 +95,6 @@ func TestInstallRelease(t *testing.T) { } func TestInstallRelease_WithNotes(t *testing.T) { - c := helm.NewContext() rs := rsFixture() // TODO: Refactor this into a mock. @@ -108,7 +109,9 @@ func TestInstallRelease_WithNotes(t *testing.T) { }, }, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err != nil { t.Fatalf("Failed install: %s", err) } @@ -162,7 +165,6 @@ func TestInstallRelease_WithNotes(t *testing.T) { } func TestInstallRelease_WithNotesRendered(t *testing.T) { - c := helm.NewContext() rs := rsFixture() // TODO: Refactor this into a mock. @@ -177,7 +179,9 @@ func TestInstallRelease_WithNotesRendered(t *testing.T) { }, }, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err != nil { t.Fatalf("Failed install: %s", err) } @@ -233,7 +237,6 @@ func TestInstallRelease_WithNotesRendered(t *testing.T) { func TestInstallRelease_TillerVersion(t *testing.T) { version.Version = "2.2.0" - c := helm.NewContext() rs := rsFixture() // TODO: Refactor this into a mock. @@ -247,7 +250,8 @@ func TestInstallRelease_TillerVersion(t *testing.T) { }, }, } - _, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) if err != nil { t.Fatalf("Expected valid range. Got %q", err) } @@ -255,7 +259,6 @@ func TestInstallRelease_TillerVersion(t *testing.T) { func TestInstallRelease_WrongTillerVersion(t *testing.T) { version.Version = "2.2.0" - c := helm.NewContext() rs := rsFixture() // TODO: Refactor this into a mock. @@ -269,7 +272,8 @@ func TestInstallRelease_WrongTillerVersion(t *testing.T) { }, }, } - _, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) if err == nil { t.Fatalf("Expected to fail because of wrong version") } @@ -281,7 +285,6 @@ func TestInstallRelease_WrongTillerVersion(t *testing.T) { } func TestInstallRelease_WithChartAndDependencyNotes(t *testing.T) { - c := helm.NewContext() rs := rsFixture() // TODO: Refactor this into a mock. @@ -307,7 +310,9 @@ func TestInstallRelease_WithChartAndDependencyNotes(t *testing.T) { }, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err != nil { t.Fatalf("Failed install: %s", err) } @@ -332,14 +337,15 @@ func TestInstallRelease_WithChartAndDependencyNotes(t *testing.T) { } func TestInstallRelease_DryRun(t *testing.T) { - c := helm.NewContext() rs := rsFixture() req := &services.InstallReleaseRequest{ Chart: chartStub(), DryRun: true, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err != nil { t.Errorf("Failed install: %s", err) } @@ -385,7 +391,6 @@ func TestInstallRelease_DryRun(t *testing.T) { } func TestInstallRelease_NoHooks(t *testing.T) { - c := helm.NewContext() rs := rsFixture() rs.env.Releases.Create(releaseStub()) @@ -393,7 +398,9 @@ func TestInstallRelease_NoHooks(t *testing.T) { Chart: chartStub(), DisableHooks: true, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err != nil { t.Errorf("Failed install: %s", err) } @@ -404,7 +411,6 @@ func TestInstallRelease_NoHooks(t *testing.T) { } func TestInstallRelease_FailedHooks(t *testing.T) { - c := helm.NewContext() rs := rsFixture() rs.env.Releases.Create(releaseStub()) rs.env.KubeClient = newHookFailingKubeClient() @@ -412,7 +418,9 @@ func TestInstallRelease_FailedHooks(t *testing.T) { req := &services.InstallReleaseRequest{ Chart: chartStub(), } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err == nil { t.Error("Expected failed install") } @@ -434,7 +442,9 @@ func TestInstallRelease_ReuseName(t *testing.T) { ReuseName: true, Name: rel.Name, } - res, err := rs.InstallRelease(c, req) + mrs := &mockInstallServer{} + err := rs.InstallRelease(req, mrs) + res := mrs.val.Response.(*services.InstallReleaseResponse_Release) if err != nil { t.Fatalf("Failed install: %s", err) } diff --git a/pkg/tiller/release_server_test.go b/pkg/tiller/release_server_test.go index b7b14a4f1..c7b7d8624 100644 --- a/pkg/tiller/release_server_test.go +++ b/pkg/tiller/release_server_test.go @@ -340,6 +340,22 @@ func (l *mockListServer) SendHeader(m metadata.MD) error { return nil } func (l *mockListServer) SetTrailer(m metadata.MD) {} func (l *mockListServer) SetHeader(m metadata.MD) error { return nil } +type mockInstallServer struct { + val *services.InstallReleaseResponse +} + +func (l *mockInstallServer) Send(res *services.InstallReleaseResponse) error { + l.val = res + return nil +} + +func (l *mockInstallServer) Context() context.Context { return helm.NewContext() } +func (l *mockInstallServer) SendMsg(v interface{}) error { return nil } +func (l *mockInstallServer) RecvMsg(v interface{}) error { return nil } +func (l *mockInstallServer) SendHeader(m metadata.MD) error { return nil } +func (l *mockInstallServer) SetTrailer(m metadata.MD) {} +func (l *mockInstallServer) SetHeader(m metadata.MD) error { return nil } + type mockRunReleaseTestServer struct { stream grpc.ServerStream }