From c73fd37ab560cd5eaa2784875be40a312d75b15e Mon Sep 17 00:00:00 2001 From: rvarunrathod <123071357+rvarunrathod@users.noreply.github.com> Date: Wed, 24 Jan 2024 23:05:09 +0530 Subject: [PATCH 1/2] Picking up running pod insted of first pod from list --- pkg/forward/kubernetes/forwarder.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/forward/kubernetes/forwarder.go b/pkg/forward/kubernetes/forwarder.go index 1ed18e63..de218822 100644 --- a/pkg/forward/kubernetes/forwarder.go +++ b/pkg/forward/kubernetes/forwarder.go @@ -172,6 +172,10 @@ func (f *Forwarder) Stop(ctx context.Context) error { return nil } +func isPodRunning(pod *apiv1.Pod) bool { + return pod.Status.Phase == apiv1.PodRunning +} + func (f *Forwarder) forwardLocal(ctx context.Context, selector string) error { pods, err := f.clientSet.CoreV1().Pods(f.namespace).List( ctx, @@ -185,9 +189,16 @@ func (f *Forwarder) forwardLocal(ctx context.Context, selector string) error { return fmt.Errorf("No pod available for selector '%s': %v", selector, err) } - pod := pods.Items[0] + var runningPod apiv1.Pod - request := f.restClient.Post().Resource("pods").Namespace(f.namespace).Name(pod.Name).SubResource("portforward") + for _, pod := range pods.Items { + if isPodRunning(&pod) { + runningPod = pod + break + } + } + + request := f.restClient.Post().Resource("pods").Namespace(f.namespace).Name(runningPod.Name).SubResource("portforward") url := url.URL{ Scheme: request.URL().Scheme, @@ -203,8 +214,8 @@ func (f *Forwarder) forwardLocal(ctx context.Context, selector string) error { dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, "POST", &url) - stdoutStream := log.NewStreamer(log.StdOut, pod.Name, f.view) - stderrStream := log.NewStreamer(log.StdErr, pod.Name, f.view) + stdoutStream := log.NewStreamer(log.StdOut, runningPod.Name, f.view) + stderrStream := log.NewStreamer(log.StdErr, runningPod.Name, f.view) fw, err := portforward.New(dialer, f.ports, f.stopChannel, f.readyChannel, stdoutStream, stderrStream) if err != nil { From 847b71034dbbec7bf4443ada04a16d1dab398865 Mon Sep 17 00:00:00 2001 From: rvarunrathod <123071357+rvarunrathod@users.noreply.github.com> Date: Thu, 25 Jan 2024 10:38:07 +0530 Subject: [PATCH 2/2] handled the case when there is no running pod available --- pkg/forward/kubernetes/forwarder.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/forward/kubernetes/forwarder.go b/pkg/forward/kubernetes/forwarder.go index de218822..1aa81c8b 100644 --- a/pkg/forward/kubernetes/forwarder.go +++ b/pkg/forward/kubernetes/forwarder.go @@ -190,13 +190,19 @@ func (f *Forwarder) forwardLocal(ctx context.Context, selector string) error { } var runningPod apiv1.Pod + foundRunningPod := false for _, pod := range pods.Items { if isPodRunning(&pod) { runningPod = pod + foundRunningPod = true break } } + + if !foundRunningPod { + return fmt.Errorf("No runnning pod available for selector '%s'", selector) + } request := f.restClient.Post().Resource("pods").Namespace(f.namespace).Name(runningPod.Name).SubResource("portforward")