From ef5d4e652c7ac142a53bab332fafd1874bcb4155 Mon Sep 17 00:00:00 2001 From: Jeff Knurek Date: Tue, 1 Oct 2019 13:51:53 +0200 Subject: [PATCH] change GetPodLogs to return io.Reader instead of string well, more specifically returns an io.ReadCloser (giving the consumer more capabilities) Signed-off-by: Jeff Knurek --- pkg/kube/client.go | 19 ++++++------------- pkg/releasetesting/environment.go | 8 +++++++- pkg/tiller/environment/environment.go | 6 +++--- pkg/tiller/environment/environment_test.go | 4 ++-- pkg/tiller/release_server_test.go | 4 ++-- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 433aae14c..6064f42ef 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -31,7 +31,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" - "github.com/evanphx/json-patch" + jsonpatch "github.com/evanphx/json-patch" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta2 "k8s.io/api/apps/v1beta2" @@ -948,24 +948,17 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf } // GetPodLogs takes pod name and namespace and returns the current logs (streaming is NOT enabled). -func (c *Client) GetPodLogs(name, ns string) (string, error) { +func (c *Client) GetPodLogs(name, ns string) (io.ReadCloser, error) { client, err := c.KubernetesClientSet() if err != nil { - return "", err + return nil, err } req := client.CoreV1().Pods(ns).GetLogs(name, &v1.PodLogOptions{}) - podLogs, err := req.Stream() - if err != nil { - return "", fmt.Errorf("error in opening log stream, got: %s", err) - } - defer podLogs.Close() - - buf := new(bytes.Buffer) - _, err = io.Copy(buf, podLogs) + logReader, err := req.Stream() if err != nil { - return "", fmt.Errorf("error in copy information from log stream to buf, got: %s", err) + return nil, fmt.Errorf("error in opening log stream, got: %s", err) } - return buf.String(), nil + return logReader, nil } func isPodComplete(event watch.Event) (bool, error) { diff --git a/pkg/releasetesting/environment.go b/pkg/releasetesting/environment.go index 0d5bde6f6..4f2adf11b 100644 --- a/pkg/releasetesting/environment.go +++ b/pkg/releasetesting/environment.go @@ -19,6 +19,7 @@ package releasetesting import ( "bytes" "fmt" + "io/ioutil" "log" "sync" "time" @@ -140,7 +141,12 @@ func (env *Environment) GetLogs(testManifests []string) { continue } podName := infos[0].Object.(*v1.Pod).Name - logs, err := env.KubeClient.GetPodLogs(podName, env.Namespace) + lr, err := env.KubeClient.GetPodLogs(podName, env.Namespace) + if err != nil { + env.streamError(err.Error()) + continue + } + logs, err := ioutil.ReadAll(lr) if err != nil { env.streamError(err.Error()) continue diff --git a/pkg/tiller/environment/environment.go b/pkg/tiller/environment/environment.go index 8ce2119c8..ee557c464 100644 --- a/pkg/tiller/environment/environment.go +++ b/pkg/tiller/environment/environment.go @@ -175,7 +175,7 @@ type KubeClient interface { // and returns said phase (PodSucceeded or PodFailed qualify). WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, timeout time.Duration) (v1.PodPhase, error) - GetPodLogs(name, namespace string) (string, error) + GetPodLogs(name, namespace string) (io.ReadCloser, error) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error } @@ -258,8 +258,8 @@ func (p *PrintingKubeClient) WaitAndGetCompletedPodPhase(namespace string, reade } // GetPodLogs implements KubeClient GetPodLogs. -func (p *PrintingKubeClient) GetPodLogs(name, ns string) (string, error) { - return "", nil +func (p *PrintingKubeClient) GetPodLogs(name, ns string) (io.ReadCloser, error) { + return nil, nil } // WaitUntilCRDEstablished implements KubeClient WaitUntilCRDEstablished. diff --git a/pkg/tiller/environment/environment_test.go b/pkg/tiller/environment/environment_test.go index f8f87b6aa..bace300c1 100644 --- a/pkg/tiller/environment/environment_test.go +++ b/pkg/tiller/environment/environment_test.go @@ -78,8 +78,8 @@ func (k *mockKubeClient) WaitAndGetCompletedPodStatus(namespace string, reader i return "", nil } -func (k *mockKubeClient) GetPodLogs(name, namespace string) (string, error) { - return "", nil +func (k *mockKubeClient) GetPodLogs(name, namespace string) (io.ReadCloser, error) { + return nil, nil } func (k *mockKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error { diff --git a/pkg/tiller/release_server_test.go b/pkg/tiller/release_server_test.go index 056fba646..144850d22 100644 --- a/pkg/tiller/release_server_test.go +++ b/pkg/tiller/release_server_test.go @@ -679,8 +679,8 @@ func (kc *mockHooksKubeClient) Validate(ns string, reader io.Reader) error { func (kc *mockHooksKubeClient) WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, timeout time.Duration) (v1.PodPhase, error) { return v1.PodUnknown, nil } -func (kc *mockHooksKubeClient) GetPodLogs(name, namespace string) (string, error) { - return "", nil +func (kc *mockHooksKubeClient) GetPodLogs(name, namespace string) (io.ReadCloser, error) { + return nil, nil } func (kc *mockHooksKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error {