feat: add namespace info in syncRelease and diffRelease (#1609)

This commit is contained in:
yxxhero 2024-07-16 09:47:00 +08:00 committed by GitHub
parent 45e7681b1e
commit 56dad58180
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 47 additions and 43 deletions

View File

@ -2513,10 +2513,10 @@ func (helm *mockHelmExec) UpdateRepo() error {
func (helm *mockHelmExec) RegistryLogin(name, username, password, caFile, certFile, keyFile string, skipTLSVerify bool) error { func (helm *mockHelmExec) RegistryLogin(name, username, password, caFile, certFile, keyFile string, skipTLSVerify bool) error {
return nil return nil
} }
func (helm *mockHelmExec) SyncRelease(context helmexec.HelmContext, name, chart string, flags ...string) error { func (helm *mockHelmExec) SyncRelease(context helmexec.HelmContext, name, chart, namespace string, flags ...string) error {
return nil return nil
} }
func (helm *mockHelmExec) DiffRelease(context helmexec.HelmContext, name, chart string, suppressDiff bool, flags ...string) error { func (helm *mockHelmExec) DiffRelease(context helmexec.HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string) error {
return nil return nil
} }
func (helm *mockHelmExec) ReleaseStatus(context helmexec.HelmContext, release string, flags ...string) error { func (helm *mockHelmExec) ReleaseStatus(context helmexec.HelmContext, release string, flags ...string) error {

View File

@ -104,7 +104,7 @@ func (helm *Helm) UpdateRepo() error {
func (helm *Helm) RegistryLogin(name, username, password, caFile, certFile, keyFile string, skipTLSVerify bool) error { func (helm *Helm) RegistryLogin(name, username, password, caFile, certFile, keyFile string, skipTLSVerify bool) error {
return nil return nil
} }
func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart string, flags ...string) error { func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart, namespace string, flags ...string) error {
if strings.Contains(name, "error") { if strings.Contains(name, "error") {
return errors.New("error") return errors.New("error")
} }
@ -117,7 +117,7 @@ func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart string,
return nil return nil
} }
func (helm *Helm) DiffRelease(context helmexec.HelmContext, name, chart string, suppressDiff bool, flags ...string) error { func (helm *Helm) DiffRelease(context helmexec.HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string) error {
if helm.DiffMutex != nil { if helm.DiffMutex != nil {
helm.DiffMutex.Lock() helm.DiffMutex.Lock()
} }

View File

@ -271,8 +271,8 @@ func (helm *execer) UpdateDeps(chart string) error {
return err return err
} }
func (helm *execer) SyncRelease(context HelmContext, name, chart string, flags ...string) error { func (helm *execer) SyncRelease(context HelmContext, name, chart, namespace string, flags ...string) error {
helm.logger.Infof("Upgrading release=%v, chart=%v", name, redactedURL(chart)) helm.logger.Infof("Upgrading release=%v, chart=%v, namespace=%v", name, redactedURL(chart), namespace)
preArgs := make([]string, 0) preArgs := make([]string, 0)
env := make(map[string]string) env := make(map[string]string)
@ -450,11 +450,12 @@ func (helm *execer) TemplateRelease(name string, chart string, flags ...string)
return err return err
} }
func (helm *execer) DiffRelease(context HelmContext, name, chart string, suppressDiff bool, flags ...string) error { func (helm *execer) DiffRelease(context HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string) error {
diffMsg := fmt.Sprintf("Comparing release=%v, chart=%v, namespace=%v\n", name, redactedURL(chart), namespace)
if context.Writer != nil && !suppressDiff { if context.Writer != nil && !suppressDiff {
fmt.Fprintf(context.Writer, "Comparing release=%v, chart=%v\n", name, redactedURL(chart)) fmt.Fprint(context.Writer, diffMsg)
} else { } else {
helm.logger.Infof("Comparing release=%v, chart=%v", name, redactedURL(chart)) helm.logger.Info(diffMsg)
} }
preArgs := make([]string, 0) preArgs := make([]string, 0)
env := make(map[string]string) env := make(map[string]string)

View File

@ -327,8 +327,8 @@ func Test_SyncRelease(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
logger := NewLogger(&buffer, "debug") logger := NewLogger(&buffer, "debug")
helm := MockExecer(logger, "config", "dev") helm := MockExecer(logger, "config", "dev")
err := helm.SyncRelease(HelmContext{}, "release", "chart", "--timeout 10", "--wait", "--wait-for-jobs") err := helm.SyncRelease(HelmContext{}, "release", "chart", "default", "--timeout 10", "--wait", "--wait-for-jobs")
expected := `Upgrading release=release, chart=chart expected := `Upgrading release=release, chart=chart, namespace=default
exec: helm --kubeconfig config --kube-context dev upgrade --install release chart --timeout 10 --wait --wait-for-jobs --history-max 0 exec: helm --kubeconfig config --kube-context dev upgrade --install release chart --timeout 10 --wait --wait-for-jobs --history-max 0
` `
if err != nil { if err != nil {
@ -339,8 +339,8 @@ exec: helm --kubeconfig config --kube-context dev upgrade --install release char
} }
buffer.Reset() buffer.Reset()
err = helm.SyncRelease(HelmContext{}, "release", "chart") err = helm.SyncRelease(HelmContext{}, "release", "chart", "default")
expected = `Upgrading release=release, chart=chart expected = `Upgrading release=release, chart=chart, namespace=default
exec: helm --kubeconfig config --kube-context dev upgrade --install release chart --history-max 0 exec: helm --kubeconfig config --kube-context dev upgrade --install release chart --history-max 0
` `
if err != nil { if err != nil {
@ -351,8 +351,8 @@ exec: helm --kubeconfig config --kube-context dev upgrade --install release char
} }
buffer.Reset() buffer.Reset()
err = helm.SyncRelease(HelmContext{}, "release", "https://example_user:example_password@repo.example.com/chart.tgz") err = helm.SyncRelease(HelmContext{}, "release", "https://example_user:example_password@repo.example.com/chart.tgz", "default")
expected = `Upgrading release=release, chart=https://example_user:xxxxx@repo.example.com/chart.tgz expected = `Upgrading release=release, chart=https://example_user:xxxxx@repo.example.com/chart.tgz, namespace=default
exec: helm --kubeconfig config --kube-context dev upgrade --install release https://example_user:example_password@repo.example.com/chart.tgz --history-max 0 exec: helm --kubeconfig config --kube-context dev upgrade --install release https://example_user:example_password@repo.example.com/chart.tgz --history-max 0
` `
if err != nil { if err != nil {
@ -547,8 +547,9 @@ func Test_DiffRelease(t *testing.T) {
var buffer bytes.Buffer var buffer bytes.Buffer
logger := NewLogger(&buffer, "debug") logger := NewLogger(&buffer, "debug")
helm := MockExecer(logger, "config", "dev") helm := MockExecer(logger, "config", "dev")
err := helm.DiffRelease(HelmContext{}, "release", "chart", false, "--timeout 10", "--wait", "--wait-for-jobs") err := helm.DiffRelease(HelmContext{}, "release", "chart", "default", false, "--timeout 10", "--wait", "--wait-for-jobs")
expected := `Comparing release=release, chart=chart expected := `Comparing release=release, chart=chart, namespace=default
exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unreleased release chart --timeout 10 --wait --wait-for-jobs exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unreleased release chart --timeout 10 --wait --wait-for-jobs
` `
if err != nil { if err != nil {
@ -559,8 +560,9 @@ exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unrelease
} }
buffer.Reset() buffer.Reset()
err = helm.DiffRelease(HelmContext{}, "release", "chart", false) err = helm.DiffRelease(HelmContext{}, "release", "chart", "default", false)
expected = `Comparing release=release, chart=chart expected = `Comparing release=release, chart=chart, namespace=default
exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unreleased release chart exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unreleased release chart
` `
if err != nil { if err != nil {
@ -571,8 +573,9 @@ exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unrelease
} }
buffer.Reset() buffer.Reset()
err = helm.DiffRelease(HelmContext{}, "release", "https://example_user:example_password@repo.example.com/chart.tgz", false) err = helm.DiffRelease(HelmContext{}, "release", "https://example_user:example_password@repo.example.com/chart.tgz", "default", false)
expected = `Comparing release=release, chart=https://example_user:xxxxx@repo.example.com/chart.tgz expected = `Comparing release=release, chart=https://example_user:xxxxx@repo.example.com/chart.tgz, namespace=default
exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unreleased release https://example_user:example_password@repo.example.com/chart.tgz exec: helm --kubeconfig config --kube-context dev diff upgrade --allow-unreleased release https://example_user:example_password@repo.example.com/chart.tgz
` `
if err != nil { if err != nil {

View File

@ -21,8 +21,8 @@ type Interface interface {
RegistryLogin(name, username, password, caFile, certFile, keyFile string, skipTLSVerify bool) error RegistryLogin(name, username, password, caFile, certFile, keyFile string, skipTLSVerify bool) error
BuildDeps(name, chart string, flags ...string) error BuildDeps(name, chart string, flags ...string) error
UpdateDeps(chart string) error UpdateDeps(chart string) error
SyncRelease(context HelmContext, name, chart string, flags ...string) error SyncRelease(context HelmContext, name, chart, namespace string, flags ...string) error
DiffRelease(context HelmContext, name, chart string, suppressDiff bool, flags ...string) error DiffRelease(context HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string) error
TemplateRelease(name, chart string, flags ...string) error TemplateRelease(name, chart string, flags ...string) error
Fetch(chart string, flags ...string) error Fetch(chart string, flags ...string) error
ChartPull(chart string, path string, flags ...string) error ChartPull(chart string, path string, flags ...string) error

View File

@ -972,7 +972,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme
} }
m.Unlock() m.Unlock()
} }
} else if err := helm.SyncRelease(context, release.Name, chart, flags...); err != nil { } else if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil {
m.Lock() m.Lock()
affectedReleases.Failed = append(affectedReleases.Failed, release) affectedReleases.Failed = append(affectedReleases.Failed, release)
m.Unlock() m.Unlock()
@ -2036,7 +2036,7 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st
if prep.upgradeDueToSkippedDiff { if prep.upgradeDueToSkippedDiff {
results <- diffResult{release, &ReleaseError{ReleaseSpec: release, err: nil, Code: HelmDiffExitCodeChanged}, buf} results <- diffResult{release, &ReleaseError{ReleaseSpec: release, err: nil, Code: HelmDiffExitCodeChanged}, buf}
} else if err := helm.DiffRelease(st.createHelmContextWithWriter(release, buf), release.Name, normalizeChart(st.basePath, release.ChartPathOrName()), releaseSuppressDiff, flags...); err != nil { } else if err := helm.DiffRelease(st.createHelmContextWithWriter(release, buf), release.Name, normalizeChart(st.basePath, release.ChartPathOrName()), release.Namespace, releaseSuppressDiff, flags...); err != nil {
switch e := err.(type) { switch e := err.(type) {
case helmexec.ExitError: case helmexec.ExitError:
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood // Propagate any non-zero exit status from the external command like `helm` that is failed under the hood

View File

@ -89,11 +89,11 @@ func (helm *noCallHelmExec) RegistryLogin(name, username, password, caFile, cert
helm.doPanic() helm.doPanic()
return nil return nil
} }
func (helm *noCallHelmExec) SyncRelease(context helmexec.HelmContext, name, chart string, flags ...string) error { func (helm *noCallHelmExec) SyncRelease(context helmexec.HelmContext, name, chart, namespace string, flags ...string) error {
helm.doPanic() helm.doPanic()
return nil return nil
} }
func (helm *noCallHelmExec) DiffRelease(context helmexec.HelmContext, name, chart string, suppressDiff bool, flags ...string) error { func (helm *noCallHelmExec) DiffRelease(context helmexec.HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string) error {
helm.doPanic() helm.doPanic()
return nil return nil
} }

View File

@ -19,7 +19,7 @@ helmfile-tests, managed-csi, StorageClass (storage.k8s.io) has been added:
+ volumeBindingMode: Immediate + volumeBindingMode: Immediate
+ allowVolumeExpansion: true + allowVolumeExpansion: true
Comparing release=azuredisk-csi-driver, chart=azuredisk-csi-driver/azuredisk-csi-driver Comparing release=azuredisk-csi-driver, chart=azuredisk-csi-driver/azuredisk-csi-driver, namespace=helmfile-tests
******************** ********************
Release was not present in Helm. Diff will show entire contents as new. Release was not present in Helm. Diff will show entire contents as new.

View File

@ -958,4 +958,4 @@ helmfile-tests, disk.csi.azure.com, CSIDriver (storage.k8s.io) has been added:
+ attachRequired: true + attachRequired: true
+ podInfoOnMount: false + podInfoOnMount: false
+ fsGroupPolicy: File + fsGroupPolicy: File
Comparing release=azuredisk-csi-driver, chart=azuredisk-csi-driver/azuredisk-csi-driver Comparing release=azuredisk-csi-driver, chart=azuredisk-csi-driver/azuredisk-csi-driver, namespace=helmfile-tests

View File

@ -1,4 +1,4 @@
Comparing release=installed, chart=../../../charts/httpbin Comparing release=installed, chart=../../../charts/httpbin, namespace=helmfile-tests
******************** ********************
Release was not present in Helm. Diff will show entire contents as new. Release was not present in Helm. Diff will show entire contents as new.

View File

@ -67,7 +67,7 @@ helmfile-tests, installed-httpbin, Service (v1) has been added:
+ type: LoadBalancer + type: LoadBalancer
Error: identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled) Error: identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled)
Error: plugin "diff" exited with error Error: plugin "diff" exited with error
Comparing release=installed, chart=../../../charts/httpbin Comparing release=installed, chart=../../../charts/httpbin, namespace=helmfile-tests
Release "installed" does not exist. Installing it now. Release "installed" does not exist. Installing it now.
NAME: installed NAME: installed
NAMESPACE: helmfile-tests NAMESPACE: helmfile-tests

View File

@ -1,7 +1,7 @@
Live output is enabled Live output is enabled
Building dependency release=installed, chart=../../../charts/httpbin Building dependency release=installed, chart=../../../charts/httpbin
Listing releases matching ^uninstalled$ Listing releases matching ^uninstalled$
Upgrading release=installed, chart=../../../charts/httpbin Upgrading release=installed, chart=../../../charts/httpbin, namespace=helmfile-tests
Listing releases matching ^installed$ Listing releases matching ^installed$

View File

@ -1,6 +1,6 @@
Building dependency release=installed, chart=../../../charts/httpbin Building dependency release=installed, chart=../../../charts/httpbin
Listing releases matching ^uninstalled$ Listing releases matching ^uninstalled$
Upgrading release=installed, chart=../../../charts/httpbin Upgrading release=installed, chart=../../../charts/httpbin, namespace=helmfile-tests
Release "installed" does not exist. Installing it now. Release "installed" does not exist. Installing it now.
NAME: installed NAME: installed
NAMESPACE: helmfile-tests NAMESPACE: helmfile-tests

View File

@ -1,4 +1,4 @@
Comparing release=installed, chart=../../../charts/httpbin Comparing release=installed, chart=../../../charts/httpbin, namespace=helmfile-tests
******************** ********************
Release was not present in Helm. Diff will show entire contents as new. Release was not present in Helm. Diff will show entire contents as new.

View File

@ -65,4 +65,4 @@ helmfile-tests, installed-httpbin, Service (v1) has been added:
+ app: httpbin + app: httpbin
+ release: installed + release: installed
+ type: LoadBalancer + type: LoadBalancer
Comparing release=installed, chart=../../../charts/httpbin Comparing release=installed, chart=../../../charts/httpbin, namespace=helmfile-tests

View File

@ -1,6 +1,6 @@
Building dependency release=foo, chart=../../../charts/raw Building dependency release=foo, chart=../../../charts/raw
Building dependency release=baz, chart=../../../charts/raw Building dependency release=baz, chart=../../../charts/raw
Comparing release=foo, chart=../../../charts/raw Comparing release=foo, chart=../../../charts/raw, namespace=helmfile-tests
******************** ********************
Release was not present in Helm. Diff will show entire contents as new. Release was not present in Helm. Diff will show entire contents as new.
@ -25,7 +25,7 @@ helmfile-tests, foo-1, ConfigMap (v1) has been added:
+ data: + data:
+ foo: FOO + foo: FOO
Comparing release=baz, chart=../../../charts/raw Comparing release=baz, chart=../../../charts/raw, namespace=helmfile-tests
******************** ********************
Release was not present in Helm. Diff will show entire contents as new. Release was not present in Helm. Diff will show entire contents as new.

View File

@ -47,5 +47,5 @@ helmfile-tests, cm1, ConfigMap (v1) has been added:
+ name: cm1 + name: cm1
+ metadata: + metadata:
+ name: cm1 + name: cm1
Comparing release=foo, chart=../../../charts/raw Comparing release=foo, chart=../../../charts/raw, namespace=helmfile-tests
Comparing release=baz, chart=../../../charts/raw Comparing release=baz, chart=../../../charts/raw, namespace=helmfile-tests

View File

@ -1,4 +1,4 @@
Comparing release=baz, chart=../../../charts/raw Comparing release=baz, chart=../../../charts/raw, namespace=helmfile-tests
******************** ********************
Release was not present in Helm. Diff will show entire contents as new. Release was not present in Helm. Diff will show entire contents as new.

View File

@ -13,4 +13,4 @@ helmfile-tests, baz-2, ConfigMap (v1) has been added:
+ namespace: helmfile-tests + namespace: helmfile-tests
+ data: + data:
+ baz: BAZ + baz: BAZ
Comparing release=baz, chart=../../../charts/raw Comparing release=baz, chart=../../../charts/raw, namespace=helmfile-tests

View File

@ -1,4 +1,4 @@
Comparing release=ingress-nginx, chart=ingress-nginx/ingress-nginx Comparing release=ingress-nginx, chart=ingress-nginx/ingress-nginx, namespace=helmfile-tests
helmfile-tests, ingress-nginx, ClusterRole (rbac.authorization.k8s.io) has changed: helmfile-tests, ingress-nginx, ClusterRole (rbac.authorization.k8s.io) has changed:
helmfile-tests, ingress-nginx, ClusterRoleBinding (rbac.authorization.k8s.io) has changed: helmfile-tests, ingress-nginx, ClusterRoleBinding (rbac.authorization.k8s.io) has changed:
# Source: ingress-nginx/templates/clusterrolebinding.yaml # Source: ingress-nginx/templates/clusterrolebinding.yaml

View File

@ -527,4 +527,4 @@ helmfile-tests, ingress-nginx-admission, NetworkPolicy (networking.k8s.io) has b
- egress: - egress:
- - {} - - {}
+ +
Comparing release=ingress-nginx, chart=ingress-nginx/ingress-nginx Comparing release=ingress-nginx, chart=ingress-nginx/ingress-nginx, namespace=helmfile-tests