From b4a6ee963c91002bb1dd92c0fc95ad9e7305eae0 Mon Sep 17 00:00:00 2001 From: Paul Meyer <49727155+katexochen@users.noreply.github.com> Date: Tue, 2 May 2023 12:57:24 +0200 Subject: [PATCH] cli: create namespaced folders for upgrade backups (#1702) Resource names are only unique per kind+ns. Without this patch it might happen that there are two resources with the same name in different namespaces. Upgrade might fail in that case. Co-authored-by: Otto Bittner --- cli/internal/helm/backup.go | 6 +++++- cli/internal/helm/backup_test.go | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cli/internal/helm/backup.go b/cli/internal/helm/backup.go index 37197ba70..ad371d74d 100644 --- a/cli/internal/helm/backup.go +++ b/cli/internal/helm/backup.go @@ -63,7 +63,11 @@ func (c *Client) backupCRs(ctx context.Context, crds []apiextensionsv1.CustomRes } for _, cr := range crs { - path := filepath.Join(backupFolder, cr.GetName()+".yaml") + targetFolder := filepath.Join(backupFolder, cr.GetKind(), cr.GetNamespace()) + if err := c.fs.MkdirAll(targetFolder); err != nil { + return fmt.Errorf("creating resource dir: %w", err) + } + path := filepath.Join(targetFolder, cr.GetName()+".yaml") yamlBytes, err := yaml.Marshal(cr.Object) if err != nil { return err diff --git a/cli/internal/helm/backup_test.go b/cli/internal/helm/backup_test.go index d16bd9678..abc2ed06e 100644 --- a/cli/internal/helm/backup_test.go +++ b/cli/internal/helm/backup_test.go @@ -133,7 +133,7 @@ func TestBackupCRs(t *testing.T) { } assert.NoError(err) - data, err := afero.ReadFile(memFs, filepath.Join(backupFolder, tc.resource.GetName()+".yaml")) + data, err := afero.ReadFile(memFs, filepath.Join(backupFolder, tc.resource.GetKind(), tc.resource.GetNamespace(), tc.resource.GetName()+".yaml")) require.NoError(err) assert.YAMLEq(tc.expectedFile, string(data)) })