From 95361add0fce30193b49232caf87ecf45a9fedce Mon Sep 17 00:00:00 2001 From: Bulat Shakirzyanov <83289+avalanche123@users.noreply.github.com> Date: Tue, 12 Dec 2023 10:09:22 -0500 Subject: [PATCH] skip resource refs that don't exist Signed-off-by: Bulat Shakirzyanov <83289+avalanche123@users.noreply.github.com> --- internal/graph/resolvers/composite.go | 4 ++- internal/graph/resolvers/composite_test.go | 29 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/internal/graph/resolvers/composite.go b/internal/graph/resolvers/composite.go index 0cc4825..fd3b4c6 100644 --- a/internal/graph/resolvers/composite.go +++ b/internal/graph/resolvers/composite.go @@ -215,7 +215,9 @@ func (r *compositeResourceSpec) Resources(ctx context.Context, obj *model.Compos xrc.SetKind(ref.Kind) nn := types.NamespacedName{Namespace: ref.Namespace, Name: ref.Name} if err := c.Get(ctx, nn, xrc); err != nil { - graphql.AddError(ctx, errors.Wrap(err, errGetComposed)) + if !apierrors.IsNotFound(err) { + graphql.AddError(ctx, errors.Wrap(err, errGetComposed)) + } return } diff --git a/internal/graph/resolvers/composite_test.go b/internal/graph/resolvers/composite_test.go index 253af3d..8fedabf 100644 --- a/internal/graph/resolvers/composite_test.go +++ b/internal/graph/resolvers/composite_test.go @@ -668,6 +668,35 @@ func TestCompositeResourceSpecResources(t *testing.T) { }, }, }, + "IgnoreMissingResources": { + reason: "If the resource is not found, skip it.", + clients: ClientCacheFn(func(_ auth.Credentials, _ ...clients.GetOption) (client.Client, error) { + return &test.MockClient{ + MockGet: func(ctx context.Context, key client.ObjectKey, obj client.Object) error { + if key.Name == "not-existing" { + return apierrors.NewNotFound(schema.GroupResource{}, key.Name) + } + return nil + }, + }, nil + }), + args: args{ + ctx: graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover), + obj: &model.CompositeResourceSpec{ + ResourceReferences: []corev1.ObjectReference{ + {Kind: kra.GetKind(), Name: "an-a"}, + {Kind: krc.GetKind(), Name: "not-existing"}, + {Kind: krb.GetKind(), Name: "a-b"}, + }, + }, + }, + want: want{ + krc: model.KubernetesResourceConnection{ + TotalCount: 2, + Nodes: []model.KubernetesResource{gkra, gkrb}, + }, + }, + }, "Success": { reason: "If we can get and model composed resources we should return them.", clients: ClientCacheFn(func(_ auth.Credentials, _ ...clients.GetOption) (client.Client, error) {