From 90161d6e39c0cdfd89eb0a48458e1c158a2f1699 Mon Sep 17 00:00:00 2001 From: derailed Date: Wed, 30 Oct 2019 16:27:35 -0600 Subject: [PATCH] describe resource fix #393 --- go.sum | 1 + internal/k8s/mapper.go | 18 ++++++++++++------ internal/resource/base.go | 17 +++++++++++++++-- internal/views/no.go | 3 +-- internal/views/resource.go | 4 ++++ 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/go.sum b/go.sum index 06be8caa..71bb79d7 100644 --- a/go.sum +++ b/go.sum @@ -130,6 +130,7 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= diff --git a/internal/k8s/mapper.go b/internal/k8s/mapper.go index 7d825560..09be277e 100644 --- a/internal/k8s/mapper.go +++ b/internal/k8s/mapper.go @@ -6,6 +6,7 @@ import ( "regexp" "strings" + "github.com/rs/zerolog/log" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/restmapper" @@ -48,12 +49,12 @@ func mustHomeDir() string { // ResourceFor produces a rest mapping from a given resource. // Support full res name ie deployment.v1.apps. -func (r *RestMapper) ResourceFor(resourceArg string) (*meta.RESTMapping, error) { +func (r *RestMapper) ResourceFor(resourceArg, kind string) (*meta.RESTMapping, error) { res, err := r.resourceFor(resourceArg) if err != nil { return nil, err } - return r.toRESTMapping(res, resourceArg), nil + return r.toRESTMapping(res, kind), nil } func (r *RestMapper) resourceFor(resourceArg string) (schema.GroupVersionResource, error) { @@ -72,6 +73,7 @@ func (r *RestMapper) resourceFor(resourceArg string) (schema.GroupVersionResourc } fullGVR, gr := schema.ParseResourceArg(strings.ToLower(resourceArg)) + log.Debug().Msgf("GVR %#v -- %#v", fullGVR, gr) if fullGVR != nil { return mapper.ResourceFor(*fullGVR) } @@ -86,11 +88,15 @@ func (r *RestMapper) resourceFor(resourceArg string) (schema.GroupVersionResourc return gvr, nil } -func (*RestMapper) toRESTMapping(gvr schema.GroupVersionResource, res string) *meta.RESTMapping { +func (*RestMapper) toRESTMapping(gvr schema.GroupVersionResource, kind string) *meta.RESTMapping { return &meta.RESTMapping{ - Resource: gvr, - GroupVersionKind: schema.GroupVersionKind{Group: gvr.Group, Version: gvr.Version, Kind: res}, - Scope: RestMapping, + Resource: gvr, + GroupVersionKind: schema.GroupVersionKind{ + Group: gvr.Group, + Version: gvr.Version, + Kind: kind, + }, + Scope: RestMapping, } } diff --git a/internal/resource/base.go b/internal/resource/base.go index 995fd7a2..f271b2ab 100644 --- a/internal/resource/base.go +++ b/internal/resource/base.go @@ -14,7 +14,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" genericprinters "k8s.io/cli-runtime/pkg/printers" "k8s.io/kubectl/pkg/describe" - versioned "k8s.io/kubectl/pkg/describe/versioned" + "k8s.io/kubectl/pkg/describe/versioned" mv1beta1 "k8s.io/metrics/pkg/apis/metrics/v1beta1" ) @@ -139,7 +139,20 @@ func (b *Base) List(ns string) (Columnars, error) { // Describe a given resource. func (b *Base) Describe(gvr, pa string) (string, error) { mapper := k8s.RestMapper{Connection: b.Connection} - mapping, err := mapper.ResourceFor(k8s.GVR(gvr).ResName()) + m, err := mapper.ToRESTMapper() + if err != nil { + log.Error().Err(err).Msgf("No REST mapper for resource %s", gvr) + return "", err + } + + GVR := k8s.GVR(gvr) + gvk, err := m.KindFor(GVR.AsGVR()) + if err != nil { + log.Error().Err(err).Msgf("No GVK for resource %s", gvr) + return "", err + } + + mapping, err := mapper.ResourceFor(GVR.ResName(), gvk.Kind) if err != nil { log.Error().Err(err).Msgf("Unable to find mapper for %s %s", gvr, pa) return "", err diff --git a/internal/views/no.go b/internal/views/no.go index 01981c2a..fda110ed 100644 --- a/internal/views/no.go +++ b/internal/views/no.go @@ -36,7 +36,7 @@ func (v *nodeView) sortColCmd(col int, asc bool) func(evt *tcell.EventKey) *tcel } func (v *nodeView) showPods(app *appView, _, _, sel string) { - showPods(app, app.Config.ActiveNamespace(), "", "spec.nodeName="+sel, v.backCmd) + showPods(app, "", "", "spec.nodeName="+sel, v.backCmd) } func (v *nodeView) backCmd(evt *tcell.EventKey) *tcell.EventKey { @@ -54,7 +54,6 @@ func showPods(app *appView, ns, labelSel, fieldSel string, a ui.ActionHandler) { pv := newPodView("Pod", "v1/pods", app, list) pv.setColorerFn(podColorer) - // pv.setExtraActionsFn(func(aa ui.KeyActions) { pv.masterPage().SetActions(ui.KeyActions{ tcell.KeyEsc: ui.NewKeyAction("Back", a, true), }) diff --git a/internal/views/resource.go b/internal/views/resource.go index c1da42c0..5aa2a45c 100644 --- a/internal/views/resource.go +++ b/internal/views/resource.go @@ -224,6 +224,7 @@ func (v *resourceView) defaultEnter(app *appView, ns, _, selection string) { return } + log.Debug().Msgf("!!!!!! NAME %s", v.list.GetName()) yaml, err := v.list.Resource().Describe(v.gvr, selection) if err != nil { v.app.Flash().Errf("Describe command failed: %s", err) @@ -236,6 +237,7 @@ func (v *resourceView) defaultEnter(app *appView, ns, _, selection string) { details.SetTextColor(v.app.Styles.FgColor()) details.SetText(colorizeYAML(v.app.Styles.Views().Yaml, yaml)) details.ScrollToBeginning() + v.app.SetHints(details.hints()) v.switchPage("details") } @@ -266,6 +268,8 @@ func (v *resourceView) viewCmd(evt *tcell.EventKey) *tcell.EventKey { details.SetTextColor(v.app.Styles.FgColor()) details.SetText(colorizeYAML(v.app.Styles.Views().Yaml, raw)) details.ScrollToBeginning() + v.app.SetHints(details.hints()) + v.switchPage("details") return nil