From 763a6b0e000da9d78b01662dece08cd379ba7240 Mon Sep 17 00:00:00 2001 From: Jayson Wang Date: Tue, 6 Feb 2024 07:56:21 +0800 Subject: [PATCH] adding the f command to pf extender view (#2511) --- internal/view/dp_test.go | 2 +- internal/view/ds_test.go | 2 +- internal/view/pf_extender.go | 38 ++++++++++++++++++++++++++++++++++++ internal/view/pod.go | 28 -------------------------- internal/view/sts_test.go | 2 +- internal/view/svc_test.go | 2 +- 6 files changed, 42 insertions(+), 32 deletions(-) diff --git a/internal/view/dp_test.go b/internal/view/dp_test.go index 5434db4bfc..aa2935c164 100644 --- a/internal/view/dp_test.go +++ b/internal/view/dp_test.go @@ -16,5 +16,5 @@ func TestDeploy(t *testing.T) { assert.Nil(t, v.Init(makeCtx())) assert.Equal(t, "Deployments", v.Name()) - assert.Equal(t, 14, len(v.Hints())) + assert.Equal(t, 15, len(v.Hints())) } diff --git a/internal/view/ds_test.go b/internal/view/ds_test.go index 17e8ed9dce..2a73445d5d 100644 --- a/internal/view/ds_test.go +++ b/internal/view/ds_test.go @@ -16,5 +16,5 @@ func TestDaemonSet(t *testing.T) { assert.Nil(t, v.Init(makeCtx())) assert.Equal(t, "DaemonSets", v.Name()) - assert.Equal(t, 15, len(v.Hints())) + assert.Equal(t, 16, len(v.Hints())) } diff --git a/internal/view/pf_extender.go b/internal/view/pf_extender.go index 7a5506bea8..627395f76e 100644 --- a/internal/view/pf_extender.go +++ b/internal/view/pf_extender.go @@ -4,9 +4,12 @@ package view import ( + "context" "fmt" "strings" + "github.com/derailed/k9s/internal" + "github.com/derailed/k9s/internal/client" "github.com/derailed/k9s/internal/dao" "github.com/derailed/k9s/internal/port" "github.com/derailed/k9s/internal/ui" @@ -35,6 +38,7 @@ func NewPortForwardExtender(r ResourceViewer) ResourceViewer { func (p *PortForwardExtender) bindKeys(aa ui.KeyActions) { aa.Add(ui.KeyActions{ + ui.KeyF: ui.NewKeyAction("Show PortForward", p.showPFCmd, true), ui.KeyShiftF: ui.NewKeyAction("Port-Forward", p.portFwdCmd, true), }) } @@ -61,6 +65,32 @@ func (p *PortForwardExtender) portFwdCmd(evt *tcell.EventKey) *tcell.EventKey { return nil } +func (p *PortForwardExtender) showPFCmd(evt *tcell.EventKey) *tcell.EventKey { + path := p.GetTable().GetSelectedItem() + if path == "" { + return evt + } + + podName, err := p.fetchPodName(path) + if err != nil { + p.App().Flash().Err(err) + return nil + } + + if !p.App().factory.Forwarders().IsPodForwarded(podName) { + p.App().Flash().Errf("no port-forward defined") + return nil + } + + pf := NewPortForward(client.NewGVR("portforwards")) + pf.SetContextFn(p.portForwardContext) + if err := p.App().inject(pf, false); err != nil { + p.App().Flash().Err(err) + } + + return nil +} + func (p *PortForwardExtender) fetchPodName(path string) (string, error) { res, err := dao.AccessorFor(p.App().factory, p.GVR()) if err != nil { @@ -74,6 +104,14 @@ func (p *PortForwardExtender) fetchPodName(path string) (string, error) { return ctrl.Pod(path) } +func (p *PortForwardExtender) portForwardContext(ctx context.Context) context.Context { + if bc := p.App().BenchFile; bc != "" { + ctx = context.WithValue(ctx, internal.KeyBenchCfg, p.App().BenchFile) + } + + return context.WithValue(ctx, internal.KeyPath, p.GetTable().GetSelectedItem()) +} + // ---------------------------------------------------------------------------- // Helpers... diff --git a/internal/view/pod.go b/internal/view/pod.go index 6278691cea..bb5959b47a 100644 --- a/internal/view/pod.go +++ b/internal/view/pod.go @@ -117,7 +117,6 @@ func (p *Pod) bindKeys(aa ui.KeyActions) { aa.Add(ui.KeyActions{ ui.KeyN: ui.NewKeyAction("Show Node", p.showNode, true), - ui.KeyF: ui.NewKeyAction("Show PortForward", p.showPFCmd, true), ui.KeyShiftR: ui.NewKeyAction("Sort Ready", p.GetTable().SortColCmd(readyCol, true), false), ui.KeyShiftT: ui.NewKeyAction("Sort Restart", p.GetTable().SortColCmd("RESTARTS", false), false), ui.KeyShiftS: ui.NewKeyAction("Sort Status", p.GetTable().SortColCmd(statusCol, true), false), @@ -196,33 +195,6 @@ func (p *Pod) showNode(evt *tcell.EventKey) *tcell.EventKey { return nil } -func (p *Pod) showPFCmd(evt *tcell.EventKey) *tcell.EventKey { - path := p.GetTable().GetSelectedItem() - if path == "" { - return evt - } - - if !p.App().factory.Forwarders().IsPodForwarded(path) { - p.App().Flash().Errf("no port-forward defined") - return nil - } - pf := NewPortForward(client.NewGVR("portforwards")) - pf.SetContextFn(p.portForwardContext) - if err := p.App().inject(pf, false); err != nil { - p.App().Flash().Err(err) - } - - return nil -} - -func (p *Pod) portForwardContext(ctx context.Context) context.Context { - if bc := p.App().BenchFile; bc != "" { - ctx = context.WithValue(ctx, internal.KeyBenchCfg, p.App().BenchFile) - } - - return context.WithValue(ctx, internal.KeyPath, p.GetTable().GetSelectedItem()) -} - func (p *Pod) killCmd(evt *tcell.EventKey) *tcell.EventKey { selections := p.GetTable().GetSelectedItems() if len(selections) == 0 { diff --git a/internal/view/sts_test.go b/internal/view/sts_test.go index 889b025fda..5651fd38df 100644 --- a/internal/view/sts_test.go +++ b/internal/view/sts_test.go @@ -16,5 +16,5 @@ func TestStatefulSetNew(t *testing.T) { assert.Nil(t, s.Init(makeCtx())) assert.Equal(t, "StatefulSets", s.Name()) - assert.Equal(t, 12, len(s.Hints())) + assert.Equal(t, 13, len(s.Hints())) } diff --git a/internal/view/svc_test.go b/internal/view/svc_test.go index babf102ac5..cc50f92fe7 100644 --- a/internal/view/svc_test.go +++ b/internal/view/svc_test.go @@ -173,5 +173,5 @@ func TestServiceNew(t *testing.T) { assert.Nil(t, s.Init(makeCtx())) assert.Equal(t, "Services", s.Name()) - assert.Equal(t, 10, len(s.Hints())) + assert.Equal(t, 11, len(s.Hints())) }