From fe2606992c7cea4792c636f06179d509a542fffc Mon Sep 17 00:00:00 2001 From: Josiah Purtlebaugh Date: Wed, 31 May 2023 12:14:37 +0900 Subject: [PATCH 1/3] Fixes #9995 Obtain the logs for the specified container to avoid scenarios where the logs cannot be obtained because a sidecar exists. Signed-off-by: Josiah Purtlebaugh --- pkg/action/release_testing.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkg/action/release_testing.go b/pkg/action/release_testing.go index 3c10cecf8..fc61a0a94 100644 --- a/pkg/action/release_testing.go +++ b/pkg/action/release_testing.go @@ -25,6 +25,7 @@ import ( "github.com/pkg/errors" v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "helm.sh/helm/v3/pkg/chartutil" "helm.sh/helm/v3/pkg/release" @@ -124,13 +125,24 @@ func (r *ReleaseTesting) GetPodLogs(out io.Writer, rel *release.Release) error { if len(r.Filters[IncludeNameFilter]) > 0 && !contains(r.Filters[IncludeNameFilter], h.Name) { continue } - req := client.CoreV1().Pods(r.Namespace).GetLogs(h.Name, &v1.PodLogOptions{}) + + podLogOptions := &v1.PodLogOptions{} + + pod, err := client.CoreV1().Pods(r.Namespace).Get(context.Background(), h.Name, metav1.GetOptions{}) + if container, ok := pod.Annotations["helm.sh/hook-logs-container"]; ok { + podLogOptions.Container = container + } + + req := client.CoreV1().Pods(r.Namespace).GetLogs(h.Name, podLogOptions) logReader, err := req.Stream(context.Background()) if err != nil { return errors.Wrapf(err, "unable to get pod logs for %s", h.Name) } fmt.Fprintf(out, "POD LOGS: %s\n", h.Name) + if len(podLogOptions.Container) > 0 { + fmt.Fprintf(out, "CONTAINER: %s\n", podLogOptions.Container) + } _, err = io.Copy(out, logReader) fmt.Fprintln(out) if err != nil { From 6f94201e0c78f56c3371949beeb8f567ddeb81e4 Mon Sep 17 00:00:00 2001 From: Purtlebaugh Josiah Date: Thu, 1 Jun 2023 11:11:32 +0900 Subject: [PATCH 2/3] Add error handling when getting pod information Signed-off-by: Purtlebaugh Josiah --- pkg/action/release_testing.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/action/release_testing.go b/pkg/action/release_testing.go index fc61a0a94..7679fdfc7 100644 --- a/pkg/action/release_testing.go +++ b/pkg/action/release_testing.go @@ -129,6 +129,10 @@ func (r *ReleaseTesting) GetPodLogs(out io.Writer, rel *release.Release) error { podLogOptions := &v1.PodLogOptions{} pod, err := client.CoreV1().Pods(r.Namespace).Get(context.Background(), h.Name, metav1.GetOptions{}) + if err != nil { + return errors.Wrapf(err, "unable to get pod info for %s", h.Name) + } + if container, ok := pod.Annotations["helm.sh/hook-logs-container"]; ok { podLogOptions.Container = container } From 312e80e4c229dbc6ddeb86cb8319c41554e43f92 Mon Sep 17 00:00:00 2001 From: Josiah Purtlebaugh Date: Wed, 15 Nov 2023 09:55:24 +0900 Subject: [PATCH 3/3] Use a standard annotation when getting the default container Signed-off-by: Josiah Purtlebaugh --- pkg/action/release_testing.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/action/release_testing.go b/pkg/action/release_testing.go index 7679fdfc7..2c662ff47 100644 --- a/pkg/action/release_testing.go +++ b/pkg/action/release_testing.go @@ -133,7 +133,7 @@ func (r *ReleaseTesting) GetPodLogs(out io.Writer, rel *release.Release) error { return errors.Wrapf(err, "unable to get pod info for %s", h.Name) } - if container, ok := pod.Annotations["helm.sh/hook-logs-container"]; ok { + if container, ok := pod.Annotations["kubectl.kubernetes.io/default-container"]; ok { podLogOptions.Container = container }