Merge pull request #12447 from dm3ch/allow-filtering-using-system-labels

Allow using label selectors for system labels for secrets and configmap
pull/9318/head
Matt Farina 8 months ago committed by GitHub
commit dae8783177
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -107,7 +107,7 @@ func (cfgmaps *ConfigMaps) List(filter func(*rspb.Release) bool) ([]*rspb.Releas
continue continue
} }
rls.Labels = filterSystemLabels(item.ObjectMeta.Labels) rls.Labels = item.ObjectMeta.Labels
if filter(rls) { if filter(rls) {
results = append(results, rls) results = append(results, rls)
@ -146,7 +146,7 @@ func (cfgmaps *ConfigMaps) Query(labels map[string]string) ([]*rspb.Release, err
cfgmaps.Log("query: failed to decode release: %s", err) cfgmaps.Log("query: failed to decode release: %s", err)
continue continue
} }
rls.Labels = filterSystemLabels(item.ObjectMeta.Labels) rls.Labels = item.ObjectMeta.Labels
results = append(results, rls) results = append(results, rls)
} }
return results, nil return results, nil

@ -128,6 +128,16 @@ func TestConfigMapList(t *testing.T) {
if len(ssd) != 2 { if len(ssd) != 2 {
t.Errorf("Expected 2 superseded, got %d", len(ssd)) t.Errorf("Expected 2 superseded, got %d", len(ssd))
} }
// Check if release having both system and custom labels, this is needed to ensure that selector filtering would work.
rls := ssd[0]
_, ok := rls.Labels["name"]
if !ok {
t.Fatalf("Expected 'name' label in results, actual %v", rls.Labels)
}
_, ok = rls.Labels["key1"]
if !ok {
t.Fatalf("Expected 'key1' label in results, actual %v", rls.Labels)
}
} }
func TestConfigMapQuery(t *testing.T) { func TestConfigMapQuery(t *testing.T) {

@ -99,7 +99,7 @@ func (secrets *Secrets) List(filter func(*rspb.Release) bool) ([]*rspb.Release,
continue continue
} }
rls.Labels = filterSystemLabels(item.ObjectMeta.Labels) rls.Labels = item.ObjectMeta.Labels
if filter(rls) { if filter(rls) {
results = append(results, rls) results = append(results, rls)
@ -137,7 +137,7 @@ func (secrets *Secrets) Query(labels map[string]string) ([]*rspb.Release, error)
secrets.Log("query: failed to decode release: %s", err) secrets.Log("query: failed to decode release: %s", err)
continue continue
} }
rls.Labels = filterSystemLabels(item.ObjectMeta.Labels) rls.Labels = item.ObjectMeta.Labels
results = append(results, rls) results = append(results, rls)
} }
return results, nil return results, nil

@ -128,6 +128,16 @@ func TestSecretList(t *testing.T) {
if len(ssd) != 2 { if len(ssd) != 2 {
t.Errorf("Expected 2 superseded, got %d", len(ssd)) t.Errorf("Expected 2 superseded, got %d", len(ssd))
} }
// Check if release having both system and custom labels, this is needed to ensure that selector filtering would work.
rls := ssd[0]
_, ok := rls.Labels["name"]
if !ok {
t.Fatalf("Expected 'name' label in results, actual %v", rls.Labels)
}
_, ok = rls.Labels["key1"]
if !ok {
t.Fatalf("Expected 'key1' label in results, actual %v", rls.Labels)
}
} }
func TestSecretQuery(t *testing.T) { func TestSecretQuery(t *testing.T) {

@ -19,6 +19,7 @@ package driver // import "helm.sh/helm/v3/pkg/storage/driver"
import ( import (
"fmt" "fmt"
"sort" "sort"
"strconv"
"time" "time"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
@ -368,6 +369,9 @@ func (s *SQL) List(filter func(*rspb.Release) bool) ([]*rspb.Release, error) {
s.Log("failed to get release %s/%s custom labels: %v", record.Namespace, record.Key, err) s.Log("failed to get release %s/%s custom labels: %v", record.Namespace, record.Key, err)
return nil, err return nil, err
} }
for k, v := range getReleaseSystemLabels(release) {
release.Labels[k] = v
}
if filter(release) { if filter(release) {
releases = append(releases, release) releases = append(releases, release)
@ -681,3 +685,13 @@ func (s *SQL) getReleaseCustomLabels(key string, namespace string) (map[string]s
return filterSystemLabels(labelsMap), nil return filterSystemLabels(labelsMap), nil
} }
// Rebuild system labels from release object
func getReleaseSystemLabels(rls *rspb.Release) map[string]string {
return map[string]string{
"name": rls.Name,
"owner": sqlReleaseDefaultOwner,
"status": rls.Info.Status.String(),
"version": strconv.Itoa(rls.Version),
}
}

@ -157,6 +157,17 @@ func TestSQLList(t *testing.T) {
if err := mock.ExpectationsWereMet(); err != nil { if err := mock.ExpectationsWereMet(); err != nil {
t.Errorf("sql expectations weren't met: %v", err) t.Errorf("sql expectations weren't met: %v", err)
} }
// Check if release having both system and custom labels, this is needed to ensure that selector filtering would work.
rls := ssd[0]
_, ok := rls.Labels["name"]
if !ok {
t.Fatalf("Expected 'name' label in results, actual %v", rls.Labels)
}
_, ok = rls.Labels["key1"]
if !ok {
t.Fatalf("Expected 'key1' label in results, actual %v", rls.Labels)
}
} }
func TestSqlCreate(t *testing.T) { func TestSqlCreate(t *testing.T) {

Loading…
Cancel
Save