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

Commit

Permalink
errors - explictly check for AccessErrors for CRDs and Events
Browse files Browse the repository at this point in the history
Signed-off-by: Wayne Witzel III <[email protected]>
  • Loading branch information
wwitzel3 committed Jun 27, 2021
1 parent 3d26f73 commit 1ae53ca
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 10 deletions.
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
11 changes: 6 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,8 @@ func ListCustomResources(

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

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

0 comments on commit 1ae53ca

Please sign in to comment.