From d34f788d0625e553cc0cc08aaef2639bff695983 Mon Sep 17 00:00:00 2001 From: Levi Blackstone Date: Fri, 14 Jan 2022 11:10:23 -0700 Subject: [PATCH 1/3] Fix replace for named resource using server-side diff --- provider/pkg/await/error.go | 10 ++++++++++ provider/pkg/provider/provider.go | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/provider/pkg/await/error.go b/provider/pkg/await/error.go index 474a0c8dbf..244408feac 100644 --- a/provider/pkg/await/error.go +++ b/provider/pkg/await/error.go @@ -119,3 +119,13 @@ func IsNamespaceNotFoundErr(err error) bool { return errors.IsNotFound(err) && se.Status().Details.Kind == "namespaces" } + +// IsResourceExistsErr returns true if the resource already exists on the k8s cluster. +func IsResourceExistsErr(err error) bool { + _, isStatusError := err.(*errors.StatusError) + if !isStatusError { + return false + } + + return errors.IsAlreadyExists(err) +} diff --git a/provider/pkg/provider/provider.go b/provider/pkg/provider/provider.go index 88c0f65de8..529683d46c 100644 --- a/provider/pkg/provider/provider.go +++ b/provider/pkg/provider/provider.go @@ -1721,7 +1721,11 @@ func (k *kubeProvider) Create( if req.GetPreview() { failedPreview := false _, isPreviewErr := awaitErr.(await.PreviewError) - if k.isDryRunDisabledError(err) || isPreviewErr { + if k.isDryRunDisabledError(awaitErr) || isPreviewErr { + failedPreview = true + } + + if k.enableDryRun && errors.IsAlreadyExists(awaitErr) { failedPreview = true } From fa3cf679c086a49a12e4d173af4a22fbcf663aec Mon Sep 17 00:00:00 2001 From: Levi Blackstone Date: Fri, 14 Jan 2022 11:14:03 -0700 Subject: [PATCH 2/3] test --- tests/sdk/nodejs/dry-run/step1/index.ts | 7 +++++++ tests/sdk/nodejs/dry-run/step2/index.ts | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/tests/sdk/nodejs/dry-run/step1/index.ts b/tests/sdk/nodejs/dry-run/step1/index.ts index 32a28684bd..86e15ebd9e 100644 --- a/tests/sdk/nodejs/dry-run/step1/index.ts +++ b/tests/sdk/nodejs/dry-run/step1/index.ts @@ -43,3 +43,10 @@ const deployment = new k8s.apps.v1.Deployment("nginx", { } }, { provider }); export const name = deployment.metadata.name; + +new k8s.core.v1.ConfigMap("test", { + metadata: { + name: "foo", // Specify the name to force resource replacement on change. + }, + data: {foo: "bar"}, +}, {provider}); diff --git a/tests/sdk/nodejs/dry-run/step2/index.ts b/tests/sdk/nodejs/dry-run/step2/index.ts index 603fe5ac8f..26d151eae0 100644 --- a/tests/sdk/nodejs/dry-run/step2/index.ts +++ b/tests/sdk/nodejs/dry-run/step2/index.ts @@ -43,3 +43,10 @@ const deployment = new k8s.apps.v1.Deployment("nginx", { } }, { provider }); export const name = deployment.metadata.name; + +new k8s.core.v1.ConfigMap("test", { + metadata: { + name: "foo", // Specify the name to force resource replacement on change. + }, + data: {foo: "baz"}, // <-- Updated value +}, {provider}); From 2802acf46691cb40f63205acfb3430511eea5b52 Mon Sep 17 00:00:00 2001 From: Levi Blackstone Date: Fri, 14 Jan 2022 11:14:59 -0700 Subject: [PATCH 3/3] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 223dedb17f..1926c22fea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## HEAD (Unreleased) - Disable last-applied-configuration annotation for replaced CRDs (https://github.com/pulumi/pulumi-kubernetes/pull/1868) +- Fix replace for named resource using server-side diff (https://github.com/pulumi/pulumi-kubernetes/pull/1870) ## 3.14.0 (January 12, 2022)