mirror of https://github.com/helm/helm.git
Add release labels to the release Metadata
Signed-off-by: Yuriy Losev <yuriy.losev@flant.com>
This commit is contained in:
parent
968ebc3a15
commit
46b1a41631
|
@ -34,11 +34,14 @@ type GetMetadata struct {
|
|||
}
|
||||
|
||||
type Metadata struct {
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Chart string `json:"chart" yaml:"chart"`
|
||||
Version string `json:"version" yaml:"version"`
|
||||
AppVersion string `json:"appVersion" yaml:"appVersion"`
|
||||
Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Chart string `json:"chart" yaml:"chart"`
|
||||
Version string `json:"version" yaml:"version"`
|
||||
AppVersion string `json:"appVersion" yaml:"appVersion"`
|
||||
// Annotations are fetched from the Chart.yaml file
|
||||
Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"`
|
||||
// Labels of the release which are stored in driver metadata fields storage
|
||||
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
||||
Dependencies []*chart.Dependency `json:"dependencies,omitempty" yaml:"dependencies,omitempty"`
|
||||
Namespace string `json:"namespace" yaml:"namespace"`
|
||||
Revision int `json:"revision" yaml:"revision"`
|
||||
|
@ -71,6 +74,7 @@ func (g *GetMetadata) Run(name string) (*Metadata, error) {
|
|||
AppVersion: rel.Chart.Metadata.AppVersion,
|
||||
Dependencies: rel.Chart.Metadata.Dependencies,
|
||||
Annotations: rel.Chart.Metadata.Annotations,
|
||||
Labels: rel.Labels,
|
||||
Namespace: rel.Namespace,
|
||||
Revision: rel.Version,
|
||||
Status: rel.Info.Status.String(),
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
Copyright The Helm Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package action
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
release "helm.sh/helm/v4/pkg/release/v1"
|
||||
)
|
||||
|
||||
func TestGetMetadata_Labels(t *testing.T) {
|
||||
rel := releaseStub()
|
||||
rel.Info.Status = release.StatusDeployed
|
||||
customLabels := map[string]string{"key1": "value1", "key2": "value2"}
|
||||
rel.Labels = customLabels
|
||||
|
||||
metaGetter := NewGetMetadata(actionConfigFixture(t))
|
||||
err := metaGetter.cfg.Releases.Create(rel)
|
||||
assert.NoError(t, err)
|
||||
|
||||
metadata, err := metaGetter.Run(rel.Name)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, metadata.Name, rel.Name)
|
||||
assert.Equal(t, metadata.Labels, customLabels)
|
||||
}
|
|
@ -80,6 +80,7 @@ func (w metadataWriter) WriteTable(out io.Writer) error {
|
|||
_, _ = fmt.Fprintf(out, "VERSION: %v\n", w.metadata.Version)
|
||||
_, _ = fmt.Fprintf(out, "APP_VERSION: %v\n", w.metadata.AppVersion)
|
||||
_, _ = fmt.Fprintf(out, "ANNOTATIONS: %v\n", k8sLabels.Set(w.metadata.Annotations).String())
|
||||
_, _ = fmt.Fprintf(out, "LABELS: %v\n", k8sLabels.Set(w.metadata.Labels).String())
|
||||
_, _ = fmt.Fprintf(out, "DEPENDENCIES: %v\n", w.metadata.FormattedDepNames())
|
||||
_, _ = fmt.Fprintf(out, "NAMESPACE: %v\n", w.metadata.Namespace)
|
||||
_, _ = fmt.Fprintf(out, "REVISION: %v\n", w.metadata.Revision)
|
||||
|
|
|
@ -27,23 +27,23 @@ func TestGetMetadataCmd(t *testing.T) {
|
|||
name: "get metadata with a release",
|
||||
cmd: "get metadata thomas-guide",
|
||||
golden: "output/get-metadata.txt",
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
|
||||
}, {
|
||||
name: "get metadata requires release name arg",
|
||||
cmd: "get metadata",
|
||||
golden: "output/get-metadata-args.txt",
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
|
||||
wantError: true,
|
||||
}, {
|
||||
name: "get metadata to json",
|
||||
cmd: "get metadata thomas-guide --output json",
|
||||
golden: "output/get-metadata.json",
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
|
||||
}, {
|
||||
name: "get metadata to yaml",
|
||||
cmd: "get metadata thomas-guide --output yaml",
|
||||
golden: "output/get-metadata.yaml",
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
|
||||
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide", Labels: map[string]string{"key1": "value1"}})},
|
||||
}}
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
{"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"}
|
||||
|
|
|
@ -3,6 +3,7 @@ CHART: foo
|
|||
VERSION: 0.1.0-beta.1
|
||||
APP_VERSION: 1.0
|
||||
ANNOTATIONS: category=web-apps,supported=true
|
||||
LABELS: key1=value1
|
||||
DEPENDENCIES: cool-plugin,crds
|
||||
NAMESPACE: default
|
||||
REVISION: 1
|
||||
|
|
|
@ -14,6 +14,8 @@ dependencies:
|
|||
repository: ""
|
||||
version: 2.7.1
|
||||
deployedAt: "1977-09-02T22:04:05Z"
|
||||
labels:
|
||||
key1: value1
|
||||
name: thomas-guide
|
||||
namespace: default
|
||||
revision: 1
|
||||
|
|
|
@ -46,6 +46,7 @@ type MockReleaseOptions struct {
|
|||
Chart *chart.Chart
|
||||
Status Status
|
||||
Namespace string
|
||||
Labels map[string]string
|
||||
}
|
||||
|
||||
// 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 {
|
|||
if namespace == "" {
|
||||
namespace = "default"
|
||||
}
|
||||
var labels map[string]string
|
||||
if len(opts.Labels) > 0 {
|
||||
labels = opts.Labels
|
||||
}
|
||||
|
||||
ch := opts.Chart
|
||||
if opts.Chart == nil {
|
||||
|
@ -130,5 +135,6 @@ func Mock(opts *MockReleaseOptions) *Release {
|
|||
},
|
||||
},
|
||||
Manifest: MockManifest,
|
||||
Labels: labels,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue