From 8fbb85ff3abc053827e3c06a43b12e34f888b756 Mon Sep 17 00:00:00 2001 From: Ramon Quitales Date: Sat, 29 Jan 2022 01:09:58 +0000 Subject: [PATCH 1/2] fix: report NotFound status for deleted KCC resources The current custom StatusReader for Config Connector resources will report Unknown status when a Config Connector resource is not found (aka deleted). This causes the `kpt live destroy` reconcile loop to run forever since it expects a NotFound status to end. This commit ensures that deleted resources report a NotFound status instead. --- pkg/status/configconnector.go | 4 ++++ pkg/status/configconnector_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/pkg/status/configconnector.go b/pkg/status/configconnector.go index e01895f87b..068661fd1d 100644 --- a/pkg/status/configconnector.go +++ b/pkg/status/configconnector.go @@ -20,6 +20,7 @@ import ( "strings" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -58,6 +59,9 @@ func (c *ConfigConnectorStatusReader) ReadStatus(ctx context.Context, reader eng u.SetGroupVersionKind(gvk) err = reader.Get(ctx, key, &u) if err != nil { + if errors.IsNotFound(err) { + return newResourceStatus(id, status.NotFoundStatus, &u, "Resource not found") + } return newUnknownResourceStatus(id, nil, err) } diff --git a/pkg/status/configconnector_test.go b/pkg/status/configconnector_test.go index 4d9a9452a5..cbfccb36e0 100644 --- a/pkg/status/configconnector_test.go +++ b/pkg/status/configconnector_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/cli-utils/pkg/kstatus/polling/testutil" "sigs.k8s.io/cli-utils/pkg/kstatus/status" @@ -53,6 +54,7 @@ func TestReadStatus(t *testing.T) { resource string gvk schema.GroupVersionKind expectedStatus status.Status + deleted bool }{ "Resource with deletionTimestap is Terminating": { resource: ` @@ -117,6 +119,22 @@ status: }, expectedStatus: status.FailedStatus, }, + + "Resource has been deleted": { + resource: ` +apiVersion: storage.cnrm.cloud.google.com/v1beta1 +kind: StorageBucket +metadata: + name: fake-bucket +`, + gvk: schema.GroupVersionKind{ + Group: "storage.cnrm.cloud.google.com", + Version: "v1beta1", + Kind: "StorageBucket", + }, + expectedStatus: status.NotFoundStatus, + deleted: true, + }, } for tn, tc := range testCases { @@ -126,6 +144,12 @@ status: fakeClusterReader := &fakeClusterReader{ getResource: obj, } + // Return not found error if we want the resource to be deleted. + if tc.deleted { + fakeClusterReader.getResource = nil + fakeClusterReader.getErr = errors.NewNotFound(schema.GroupResource{tc.gvk.Group, tc.gvk.Kind}, "fake-name") + } + fakeMapper := fakemapper.NewFakeRESTMapper(tc.gvk) statusReader := &ConfigConnectorStatusReader{ Mapper: fakeMapper, From c3e28bcf98fb363a48ab4f234e6773f17c91460c Mon Sep 17 00:00:00 2001 From: Ramon Quitales Date: Sat, 29 Jan 2022 01:33:03 +0000 Subject: [PATCH 2/2] refactor: Fix linting issue for unkeyed fields in composite literal --- pkg/status/configconnector_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/status/configconnector_test.go b/pkg/status/configconnector_test.go index cbfccb36e0..4a91383c00 100644 --- a/pkg/status/configconnector_test.go +++ b/pkg/status/configconnector_test.go @@ -147,7 +147,7 @@ metadata: // Return not found error if we want the resource to be deleted. if tc.deleted { fakeClusterReader.getResource = nil - fakeClusterReader.getErr = errors.NewNotFound(schema.GroupResource{tc.gvk.Group, tc.gvk.Kind}, "fake-name") + fakeClusterReader.getErr = errors.NewNotFound(schema.GroupResource{Group: tc.gvk.Group, Resource: tc.gvk.Kind}, "fake-name") } fakeMapper := fakemapper.NewFakeRESTMapper(tc.gvk)