From c3b565e339595e201d5ef41b097809dd8e94a4ff Mon Sep 17 00:00:00 2001 From: Martin Hickey Date: Wed, 25 Sep 2019 10:03:21 +0100 Subject: [PATCH] Change release storage name to prefix helm storage type Signed-off-by: Martin Hickey --- pkg/storage/driver/memory.go | 6 ++++-- pkg/storage/driver/secrets.go | 2 +- pkg/storage/storage.go | 11 ++++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pkg/storage/driver/memory.go b/pkg/storage/driver/memory.go index 1fd059655..5d91767a2 100644 --- a/pkg/storage/driver/memory.go +++ b/pkg/storage/driver/memory.go @@ -49,7 +49,8 @@ func (mem *Memory) Name() string { func (mem *Memory) Get(key string) (*rspb.Release, error) { defer unlock(mem.rlock()) - switch elems := strings.Split(key, ".v"); len(elems) { + keyWithoutPrefix := strings.TrimPrefix(key, "sh.helm.release.v1.") + switch elems := strings.Split(keyWithoutPrefix, ".v"); len(elems) { case 2: name, ver := elems[0], elems[1] if _, err := strconv.Atoi(ver); err != nil { @@ -138,7 +139,8 @@ func (mem *Memory) Update(key string, rls *rspb.Release) error { func (mem *Memory) Delete(key string) (*rspb.Release, error) { defer unlock(mem.wlock()) - elems := strings.Split(key, ".v") + keyWithoutPrefix := strings.TrimPrefix(key, "sh.helm.release.v1.") + elems := strings.Split(keyWithoutPrefix, ".v") if len(elems) != 2 { return nil, ErrInvalidKey diff --git a/pkg/storage/driver/secrets.go b/pkg/storage/driver/secrets.go index 65c995dbe..88e307cb3 100644 --- a/pkg/storage/driver/secrets.go +++ b/pkg/storage/driver/secrets.go @@ -234,7 +234,7 @@ func newSecretsObject(key string, rls *rspb.Release, lbs labels) (*v1.Secret, er Name: key, Labels: lbs.toMap(), }, - Type: "helm.sh/release", + Type: "helm.sh/release.v1", Data: map[string][]byte{"release": []byte(s)}, }, nil } diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 7e2c1b6fc..753b462e5 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -27,6 +27,8 @@ import ( "helm.sh/helm/pkg/storage/driver" ) +const HelmStorageType = "sh.helm.release.v1" + // Storage represents a storage engine for a Release. type Storage struct { driver.Driver @@ -205,11 +207,14 @@ func (s *Storage) Last(name string) (*rspb.Release, error) { return h[0], nil } -// makeKey concatenates a release name and version into -// a string with format ```#v```. +// makeKey concatenates the helm type, a release name and version into a +// string with format:```..v```. +// The Helm type is prepended to keep name uniqueness between different +// release storage types. An example of clash when not using the type: +// https://github.com/helm/helm/issues/6435. // This key is used to uniquely identify storage objects. func makeKey(rlsname string, version int) string { - return fmt.Sprintf("%s.v%d", rlsname, version) + return fmt.Sprintf("%s.%s.v%d", HelmStorageType, rlsname, version) } // Init initializes a new storage backend with the driver d.