Skip to content
This repository has been archived by the owner on Jan 19, 2023. It is now read-only.

errors - explictly check for AccessErrors for CRDs and Events #2587

Merged
merged 3 commits into from
Jul 12, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
errors - explictly check for AccessErrors for CRDs and Events
Signed-off-by: Wayne Witzel III <[email protected]>
  • Loading branch information
wwitzel3 committed Jul 12, 2021
commit 8ad310a8ee79af17c35ba413680df59339e8bd0e
2 changes: 1 addition & 1 deletion internal/describer/describer.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func LoadObjects(ctx context.Context, objectStore store.Store, errorStore oerror
found := errorStore.Add(ae)
if !found {
logger := log.From(ctx)
logger.WithErr(ae).Errorf("load object")
logger.WithErr(ae).Errorf("LoadObjects")
}
return &unstructured.UnstructuredList{}, nil
}
Expand Down
4 changes: 3 additions & 1 deletion internal/objectstore/dynamic_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
sigyaml "sigs.k8s.io/yaml"

"github.com/vmware-tanzu/octant/internal/cluster"
oerrors "github.com/vmware-tanzu/octant/internal/errors"
"github.com/vmware-tanzu/octant/internal/log"
"github.com/vmware-tanzu/octant/pkg/store"
)
Expand Down Expand Up @@ -420,7 +421,8 @@ func (d *DynamicCache) listerForResource(ctx context.Context, key store.Key) (li
)

if d.isUnwatched(ctx, gvr) {
return nil, fmt.Errorf("unable to get Lister for %s, watcher was unable to start", gvr)
err = fmt.Errorf("unable to get Lister for %s, watcher was unable to start", gvr)
return nil, oerrors.NewAccessError(key, "List", err)
}

ii := d.forResource(ctx, gvr, nil)
Expand Down
19 changes: 18 additions & 1 deletion internal/printer/customresourcedefinition.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/discovery"

"github.com/pkg/errors"

"github.com/vmware-tanzu/octant/internal/cluster"
oerrors "github.com/vmware-tanzu/octant/internal/errors"
"github.com/vmware-tanzu/octant/internal/gvk"
"github.com/vmware-tanzu/octant/internal/log"
"github.com/vmware-tanzu/octant/internal/octant"
Expand Down Expand Up @@ -141,6 +144,20 @@ func CustomResourceDefinitionVersionList(
return list, nil
}

func printErrorCard(name, version string, err error) (component.Component, error) {
errStr := fmt.Sprintf("%s", err)
title := fmt.Sprintf("%s/%s", name, version)

var ae *oerrors.AccessError
if errors.As(err, &ae) {
errStr = fmt.Sprintf("Access Error, failed to %s: %s", ae.Verb(), ae.Key())
}

c := component.NewCard(component.TitleFromString(title))
c.SetBody(component.NewText(errStr))
return c, nil
}

func genViewForCRDVersion(
ctx context.Context,
crd *unstructured.Unstructured,
Expand All @@ -158,7 +175,7 @@ func genViewForCRDVersion(

customResources, _, err := objectStore.List(ctx, key)
if err != nil {
return nil, err
return printErrorCard(crd.GetName(), crd.GetAPIVersion(), err)
}

lister := NewCustomResourceLister()
Expand Down
28 changes: 26 additions & 2 deletions internal/printer/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"

oerrors "github.com/vmware-tanzu/octant/internal/errors"
"github.com/vmware-tanzu/octant/pkg/store"
"github.com/vmware-tanzu/octant/pkg/view/component"
"github.com/vmware-tanzu/octant/pkg/view/flexlayout"
Expand Down Expand Up @@ -159,6 +160,21 @@ func EventHandler(ctx context.Context, event *corev1.Event, opts Options) (compo
return fl.ToComponent("Event"), nil
}

// PrintError prints the events table with the error
func PrintError(err error) (component.Component, error) {
errStr := fmt.Sprintf("%s", err)

var ae *oerrors.AccessError
if errors.As(err, &ae) {
errStr = fmt.Sprintf("Access Error, failed to %s: %s", ae.Verb(), ae.Key())
}

c := component.NewCard(component.TitleFromString("Events"))
c.SetBody(component.NewText(errStr))

return c, nil
}

// PrintEvents collects events for a resource
func PrintEvents(list *corev1.EventList, opts Options) (component.Component, error) {
if list == nil {
Expand Down Expand Up @@ -228,7 +244,15 @@ func createEventsForObject(ctx context.Context, fl *flexlayout.FlexLayout, objec
objectStore := opts.DashConfig.ObjectStore()
eventList, err := store.EventsForObject(ctx, object, objectStore)
if err != nil {
return errors.Wrap(err, "list events for object")
eventError, err := PrintError(err)
if err != nil {
return fmt.Errorf("create event list error: %w", err)
}
eventSection := fl.AddSection()
if err := eventSection.Add(eventError, component.WidthFull); err != nil {
return fmt.Errorf("add event error to layout: %w", err)
}
return nil
}

if len(eventList.Items) > 0 {
Expand All @@ -238,7 +262,7 @@ func createEventsForObject(ctx context.Context, fl *flexlayout.FlexLayout, objec
}

eventsSection := fl.AddSection()
if err := eventsSection.Add(eventTable, 24); err != nil {
if err := eventsSection.Add(eventTable, component.WidthFull); err != nil {
return errors.Wrap(err, "add event table to layout")
}
}
Expand Down
12 changes: 7 additions & 5 deletions pkg/navigation/navigation.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package navigation

import (
"context"
"errors"
"fmt"
"path"
"sort"
Expand All @@ -15,7 +16,6 @@ import (

"github.com/vmware-tanzu/octant/internal/util/json"

"github.com/pkg/errors"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/labels"
Expand Down Expand Up @@ -85,7 +85,7 @@ func CRDEntries(ctx context.Context, prefix, namespace string, objectStore store

crds, _, err := CustomResourceDefinitions(ctx, objectStore)
if err != nil {
return nil, false, errors.Wrap(err, "retrieving CRDs")
return nil, false, fmt.Errorf("retrieving CRDs: %w", err)
}

for i := range crds {
Expand Down Expand Up @@ -144,12 +144,12 @@ func CustomResourceDefinitions(ctx context.Context, o store.Store) ([]*apiextv1.
// See https://github.com/kubernetes/kubernetes/issues/87675
crdObj, err := json.Marshal(rawList.Items[i].UnstructuredContent())
if err != nil {
logger.Errorf("%v", errors.Wrapf(errors.Wrapf(err, "marshaling unstructured object to custom resource definition"), rawList.Items[i].GetName()))
logger.Errorf("%v", fmt.Errorf("marshaling unstructured object to custom resource definition: %s, %w", rawList.Items[i].GetName(), err))
continue
}

if err != json.Unmarshal(crdObj, &crd) {
logger.Errorf("%v", errors.Wrapf(errors.Wrapf(err, "unmarshaling unstructured object to custom resource definition"), rawList.Items[i].GetName()))
logger.Errorf("%v", fmt.Errorf("unmarshaling unstructured object to custom resource definition: %s, %w", rawList.Items[i].GetName(), err))
continue
}
list = append(list, crd)
Expand Down Expand Up @@ -199,7 +199,9 @@ func ListCustomResources(

objects, _, err := o.List(ctx, key)
if err != nil {
return nil, false, errors.Wrapf(err, "listing custom resources for %q", crd.Name)
logger := log.From(ctx)
logger.Errorf("listing custom resources for %q, %w", crd.Name, err)
continue
}

list.Items = append(list.Items, objects.Items...)
Expand Down