Skip to content

Commit c5e5f19

Browse files
Fix for databus23#430 With Helm 3 the release names are namespace scoped, thus it should be possible to helm diff release of two release with same name in different namespaces (databus23#431)
* . * Fix databus23#430 With Helm 3 the release names are namespace scoped, thus it should be possible to helm diff release of two release with same name in different namespaces * Fix syntax errors. * Fix syntax error. * Use strings library * Use correct namespace
1 parent e8c2ba4 commit c5e5f19

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

cmd/release.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"fmt"
66
"os"
7+
"strings"
78

89
"github.com/spf13/cobra"
910
"k8s.io/helm/pkg/helm"
@@ -22,14 +23,16 @@ type release struct {
2223
}
2324

2425
const releaseCmdLongUsage = `
25-
This command compares the manifests details of a different releases created from the same chart
26+
This command compares the manifests details of a different releases created from the same chart.
27+
The release name may be specified using namespace/release syntax.
2628
2729
It can be used to compare the manifests of
2830
2931
- release1 with release2
3032
$ helm diff release [flags] release1 release2
3133
Example:
3234
$ helm diff release my-prod my-stage
35+
$ helm diff release prod/my-prod stage/my-stage
3336
`
3437

3538
func releaseCmd() *cobra.Command {
@@ -83,33 +86,45 @@ func releaseCmd() *cobra.Command {
8386
}
8487

8588
func (d *release) differentiateHelm3() error {
86-
namespace := os.Getenv("HELM_NAMESPACE")
8789
excludes := []string{helm3TestHook, helm2TestSuccessHook}
8890
if d.includeTests {
8991
excludes = []string{}
9092
}
91-
releaseResponse1, err := getRelease(d.releases[0], namespace)
93+
94+
namespace1 := os.Getenv("HELM_NAMESPACE")
95+
release1 := d.releases[0];
96+
if strings.Contains(release1, "/") {
97+
namespace1 = strings.Split(release1, "/")[0]
98+
release1 = strings.Split(release1, "/")[1]
99+
}
100+
releaseResponse1, err := getRelease(release1, namespace1)
92101
if err != nil {
93102
return err
94103
}
95-
releaseChart1, err := getChart(d.releases[0], namespace)
104+
releaseChart1, err := getChart(release1, namespace1)
96105
if err != nil {
97106
return err
98107
}
99108

100-
releaseResponse2, err := getRelease(d.releases[1], namespace)
109+
namespace2 := os.Getenv("HELM_NAMESPACE")
110+
release2 := d.releases[1];
111+
if strings.Contains(release2, "/") {
112+
namespace2 = strings.Split(release2, "/")[0]
113+
release2 = strings.Split(release2, "/")[1]
114+
}
115+
releaseResponse2, err := getRelease(release2, namespace2)
101116
if err != nil {
102117
return err
103118
}
104-
releaseChart2, err := getChart(d.releases[1], namespace)
119+
releaseChart2, err := getChart(release2, namespace2)
105120
if err != nil {
106121
return err
107122
}
108123

109124
if releaseChart1 == releaseChart2 {
110125
seenAnyChanges := diff.Releases(
111-
manifest.Parse(string(releaseResponse1), namespace, d.normalizeManifests, excludes...),
112-
manifest.Parse(string(releaseResponse2), namespace, d.normalizeManifests, excludes...),
126+
manifest.Parse(string(releaseResponse1), namespace1, d.normalizeManifests, excludes...),
127+
manifest.Parse(string(releaseResponse2), namespace2, d.normalizeManifests, excludes...),
113128
&d.Options,
114129
os.Stdout)
115130

0 commit comments

Comments
 (0)