Skip to content

Commit 9835a2b

Browse files
committed
add namespace to deduplication tuple
helm charts can deploy to multiple namespaces at once, so compare on (namespace, name, kind, version) instead of just (name, kind, version). If no namespace is parsed from the manifest, the helm release namespace is used instead.
1 parent 242ab78 commit 9835a2b

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

cmd/revision.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,11 @@ func (d *revision) differentiate() error {
8989
return prettyError(err)
9090
}
9191

92-
diff.DiffManifests(manifest.Parse(revisionResponse.Release.Manifest), manifest.Parse(releaseResponse.Release.Manifest), d.suppressedKinds, os.Stdout)
92+
diff.DiffManifests(
93+
manifest.Parse(revisionResponse.Release.Manifest, revisionResponse.Release.Namespace),
94+
manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace),
95+
d.suppressedKinds,
96+
os.Stdout)
9397

9498
case 2:
9599
revision1, _ := strconv.Atoi(d.revisions[0])
@@ -108,7 +112,11 @@ func (d *revision) differentiate() error {
108112
return prettyError(err)
109113
}
110114

111-
diff.DiffManifests(manifest.Parse(revisionResponse1.Release.Manifest), manifest.Parse(revisionResponse2.Release.Manifest), d.suppressedKinds, os.Stdout)
115+
diff.DiffManifests(
116+
manifest.Parse(revisionResponse1.Release.Manifest, revisionResponse1.Release.Namespace),
117+
manifest.Parse(revisionResponse2.Release.Manifest, revisionResponse2.Release.Namespace),
118+
d.suppressedKinds,
119+
os.Stdout)
112120

113121
default:
114122
return errors.New("Invalid Arguments")

cmd/rollback.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ func (d *rollback) backcast() error {
8080
}
8181

8282
// create a diff between the current manifest and the version of the manifest that a user is intended to rollback
83-
diff.DiffManifests(manifest.Parse(releaseResponse.Release.Manifest), manifest.Parse(revisionResponse.Release.Manifest), d.suppressedKinds, os.Stdout)
83+
diff.DiffManifests(
84+
manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace),
85+
manifest.Parse(revisionResponse.Release.Manifest, revisionResponse.Release.Namespace),
86+
d.suppressedKinds,
87+
os.Stdout)
8488

8589
return nil
8690
}

cmd/upgrade.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ func (d *diffCmd) run() error {
101101
return prettyError(err)
102102
}
103103

104-
currentSpecs := manifest.Parse(releaseResponse.Release.Manifest)
105-
newSpecs := manifest.Parse(upgradeResponse.Release.Manifest)
104+
currentSpecs := manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace)
105+
newSpecs := manifest.Parse(upgradeResponse.Release.Manifest, upgradeResponse.Release.Namespace)
106106

107107
diff.DiffManifests(currentSpecs, newSpecs, d.suppressedKinds, os.Stdout)
108108

manifest/parse.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ type metadata struct {
2222
ApiVersion string `yaml:"apiVersion"`
2323
Kind string
2424
Metadata struct {
25-
Name string
25+
Namespace string
26+
Name string
2627
}
2728
}
2829

2930
func (m metadata) String() string {
30-
return fmt.Sprintf("%s, %s (%s)", m.Metadata.Name, m.Kind, m.ApiVersion)
31+
return fmt.Sprintf("%s, %s, %s (%s)", m.Metadata.Namespace, m.Metadata.Name, m.Kind, m.ApiVersion)
3132
}
3233

3334
func scanYamlSpecs(data []byte, atEOF bool) (advance int, token []byte, err error) {
@@ -53,7 +54,7 @@ func splitSpec(token string) (string, string) {
5354
return "", ""
5455
}
5556

56-
func Parse(manifest string) map[string]*MappingResult {
57+
func Parse(manifest string, defaultNamespace string) map[string]*MappingResult {
5758
scanner := bufio.NewScanner(strings.NewReader(manifest))
5859
scanner.Split(scanYamlSpecs)
5960
//Allow for tokens (specs) up to 1M in size
@@ -72,6 +73,9 @@ func Parse(manifest string) map[string]*MappingResult {
7273
if err := yaml.Unmarshal([]byte(content), &metadata); err != nil {
7374
log.Fatalf("YAML unmarshal error: %s\nCan't unmarshal %s", err, content)
7475
}
76+
if metadata.Metadata.Namespace == "" {
77+
metadata.Metadata.Namespace = defaultNamespace
78+
}
7579
name := metadata.String()
7680
if _, ok := result[name]; ok {
7781
log.Printf("Error: Found duplicate key %#v in manifest", name)

0 commit comments

Comments
 (0)