Skip to content

Commit 24ca1ae

Browse files
committed
Add release labels to the release Metadata
Signed-off-by: Yuriy Losev <yuriy.losev@flant.com>
1 parent 7780dce commit 24ca1ae

8 files changed

Lines changed: 65 additions & 10 deletions

File tree

pkg/action/get_metadata.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,14 @@ type GetMetadata struct {
3434
}
3535

3636
type Metadata struct {
37-
Name string `json:"name" yaml:"name"`
38-
Chart string `json:"chart" yaml:"chart"`
39-
Version string `json:"version" yaml:"version"`
40-
AppVersion string `json:"appVersion" yaml:"appVersion"`
41-
Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
37+
Name string `json:"name" yaml:"name"`
38+
Chart string `json:"chart" yaml:"chart"`
39+
Version string `json:"version" yaml:"version"`
40+
AppVersion string `json:"appVersion" yaml:"appVersion"`
41+
// Annotations are fetched from the Chart.yaml file
42+
Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
43+
// Labels of the release which are stored in driver metadata fields storage
44+
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
4245
Dependencies []*chart.Dependency `json:"dependencies,omitempty" yaml:"dependencies,omitempty"`
4346
Namespace string `json:"namespace" yaml:"namespace"`
4447
Revision int `json:"revision" yaml:"revision"`
@@ -71,6 +74,7 @@ func (g *GetMetadata) Run(name string) (*Metadata, error) {
7174
AppVersion: rel.Chart.Metadata.AppVersion,
7275
Dependencies: rel.Chart.Metadata.Dependencies,
7376
Annotations: rel.Chart.Metadata.Annotations,
77+
Labels: rel.Labels,
7478
Namespace: rel.Namespace,
7579
Revision: rel.Version,
7680
Status: rel.Info.Status.String(),

pkg/action/get_metadata_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
Copyright The Helm Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package action
18+
19+
import (
20+
"testing"
21+
22+
"github.com/stretchr/testify/assert"
23+
release "helm.sh/helm/v4/pkg/release/v1"
24+
)
25+
26+
func TestGetMetadata_Labels(t *testing.T) {
27+
rel := releaseStub()
28+
rel.Info.Status = release.StatusDeployed
29+
customLabels := map[string]string{"key1": "value1", "key2": "value2"}
30+
rel.Labels = customLabels
31+
32+
metaGetter := NewGetMetadata(actionConfigFixture(t))
33+
err := metaGetter.cfg.Releases.Create(rel)
34+
assert.NoError(t, err)
35+
36+
metadata, err := metaGetter.Run(rel.Name)
37+
assert.NoError(t, err)
38+
39+
assert.Equal(t, metadata.Name, rel.Name)
40+
assert.Equal(t, metadata.Labels, customLabels)
41+
}

pkg/cmd/get_metadata.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func (w metadataWriter) WriteTable(out io.Writer) error {
8080
_, _ = fmt.Fprintf(out, "VERSION: %v\n", w.metadata.Version)
8181
_, _ = fmt.Fprintf(out, "APP_VERSION: %v\n", w.metadata.AppVersion)
8282
_, _ = fmt.Fprintf(out, "ANNOTATIONS: %v\n", k8sLabels.Set(w.metadata.Annotations).String())
83+
_, _ = fmt.Fprintf(out, "LABELS: %v\n", k8sLabels.Set(w.metadata.Labels).String())
8384
_, _ = fmt.Fprintf(out, "DEPENDENCIES: %v\n", w.metadata.FormattedDepNames())
8485
_, _ = fmt.Fprintf(out, "NAMESPACE: %v\n", w.metadata.Namespace)
8586
_, _ = fmt.Fprintf(out, "REVISION: %v\n", w.metadata.Revision)

pkg/cmd/get_metadata_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,23 @@ func TestGetMetadataCmd(t *testing.T) {
2727
name: "get metadata with a release",
2828
cmd: "get metadata thomas-guide",
2929
golden: "output/get-metadata.txt",
30-
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
30+
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
3131
}, {
3232
name: "get metadata requires release name arg",
3333
cmd: "get metadata",
3434
golden: "output/get-metadata-args.txt",
35-
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
35+
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
3636
wantError: true,
3737
}, {
3838
name: "get metadata to json",
3939
cmd: "get metadata thomas-guide --output json",
4040
golden: "output/get-metadata.json",
41-
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
41+
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
4242
}, {
4343
name: "get metadata to yaml",
4444
cmd: "get metadata thomas-guide --output yaml",
4545
golden: "output/get-metadata.yaml",
46-
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
46+
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
4747
}}
4848
runTestCmd(t, tests)
4949
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"name":"thomas-guide","chart":"foo","version":"0.1.0-beta.1","appVersion":"1.0","annotations":{"category":"web-apps","supported":"true"},"dependencies":[{"name":"cool-plugin","version":"1.0.0","repository":"https://coolplugin.io/charts","condition":"coolPlugin.enabled","enabled":true},{"name":"crds","version":"2.7.1","repository":"","condition":"crds.enabled"}],"namespace":"default","revision":1,"status":"deployed","deployedAt":"1977-09-02T22:04:05Z"}
1+
{"name":"thomas-guide","chart":"foo","version":"0.1.0-beta.1","appVersion":"1.0","annotations":{"category":"web-apps","supported":"true"},"labels":{"key1":"value1"},"dependencies":[{"name":"cool-plugin","version":"1.0.0","repository":"https://coolplugin.io/charts","condition":"coolPlugin.enabled","enabled":true},{"name":"crds","version":"2.7.1","repository":"","condition":"crds.enabled"}],"namespace":"default","revision":1,"status":"deployed","deployedAt":"1977-09-02T22:04:05Z"}

pkg/cmd/testdata/output/get-metadata.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ CHART: foo
33
VERSION: 0.1.0-beta.1
44
APP_VERSION: 1.0
55
ANNOTATIONS: category=web-apps,supported=true
6+
LABELS: key1=value1
67
DEPENDENCIES: cool-plugin,crds
78
NAMESPACE: default
89
REVISION: 1

pkg/cmd/testdata/output/get-metadata.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ dependencies:
1414
repository: ""
1515
version: 2.7.1
1616
deployedAt: "1977-09-02T22:04:05Z"
17+
labels:
18+
key1: value1
1719
name: thomas-guide
1820
namespace: default
1921
revision: 1

pkg/release/v1/mock.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ type MockReleaseOptions struct {
4646
Chart *chart.Chart
4747
Status Status
4848
Namespace string
49+
Labels map[string]string
4950
}
5051

5152
// Mock creates a mock release object based on options set by MockReleaseOptions. This function should typically not be used outside of testing.
@@ -66,6 +67,10 @@ func Mock(opts *MockReleaseOptions) *Release {
6667
if namespace == "" {
6768
namespace = "default"
6869
}
70+
var labels map[string]string
71+
if len(opts.Labels) > 0 {
72+
labels = opts.Labels
73+
}
6974

7075
ch := opts.Chart
7176
if opts.Chart == nil {
@@ -130,5 +135,6 @@ func Mock(opts *MockReleaseOptions) *Release {
130135
},
131136
},
132137
Manifest: MockManifest,
138+
Labels: labels,
133139
}
134140
}

0 commit comments

Comments
 (0)