diff --git a/cmd/revision.go b/cmd/revision.go index b0e35d7d..9ec1dddb 100644 --- a/cmd/revision.go +++ b/cmd/revision.go @@ -91,7 +91,12 @@ func (d *revision) differentiate() error { return prettyError(err) } - diff.DiffManifests(manifest.Parse(revisionResponse.Release.Manifest), manifest.Parse(releaseResponse.Release.Manifest), d.suppressedKinds, d.outputContext, os.Stdout) + diff.DiffManifests( + manifest.Parse(revisionResponse.Release.Manifest, revisionResponse.Release.Namespace), + manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace), + d.suppressedKinds, + d.outputContext, + os.Stdout) case 2: revision1, _ := strconv.Atoi(d.revisions[0]) @@ -110,7 +115,12 @@ func (d *revision) differentiate() error { return prettyError(err) } - diff.DiffManifests(manifest.Parse(revisionResponse1.Release.Manifest), manifest.Parse(revisionResponse2.Release.Manifest), d.suppressedKinds, d.outputContext, os.Stdout) + diff.DiffManifests( + manifest.Parse(revisionResponse1.Release.Manifest, revisionResponse1.Release.Namespace), + manifest.Parse(revisionResponse2.Release.Manifest, revisionResponse2.Release.Namespace), + d.suppressedKinds, + d.outputContext, + os.Stdout) default: return errors.New("Invalid Arguments") diff --git a/cmd/rollback.go b/cmd/rollback.go index 0eeb2cc3..1c7b1a2b 100644 --- a/cmd/rollback.go +++ b/cmd/rollback.go @@ -82,7 +82,12 @@ func (d *rollback) backcast() error { } // create a diff between the current manifest and the version of the manifest that a user is intended to rollback - diff.DiffManifests(manifest.Parse(releaseResponse.Release.Manifest), manifest.Parse(revisionResponse.Release.Manifest), d.suppressedKinds, d.outputContext, os.Stdout) + diff.DiffManifests( + manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace), + manifest.Parse(revisionResponse.Release.Manifest, revisionResponse.Release.Namespace), + d.suppressedKinds, + d.outputContext, + os.Stdout) return nil } diff --git a/cmd/upgrade.go b/cmd/upgrade.go index b018cdfc..50b9d156 100644 --- a/cmd/upgrade.go +++ b/cmd/upgrade.go @@ -121,7 +121,7 @@ func (d *diffCmd) run() error { } currentSpecs = make(map[string]*manifest.MappingResult) - newSpecs = manifest.Parse(installResponse.Release.Manifest) + newSpecs = manifest.Parse(installResponse.Release.Manifest, installResponse.Release.Namespace) } else { upgradeResponse, err := d.client.UpdateRelease( d.release, @@ -135,8 +135,8 @@ func (d *diffCmd) run() error { return prettyError(err) } - currentSpecs = manifest.Parse(releaseResponse.Release.Manifest) - newSpecs = manifest.Parse(upgradeResponse.Release.Manifest) + currentSpecs = manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace) + newSpecs = manifest.Parse(upgradeResponse.Release.Manifest, upgradeResponse.Release.Namespace) } diff.DiffManifests(currentSpecs, newSpecs, d.suppressedKinds, d.outputContext, os.Stdout) diff --git a/manifest/parse.go b/manifest/parse.go index 4f99bb58..d60f9f39 100644 --- a/manifest/parse.go +++ b/manifest/parse.go @@ -22,12 +22,13 @@ type metadata struct { ApiVersion string `yaml:"apiVersion"` Kind string Metadata struct { - Name string + Namespace string + Name string } } func (m metadata) String() string { - return fmt.Sprintf("%s, %s (%s)", m.Metadata.Name, m.Kind, m.ApiVersion) + return fmt.Sprintf("%s, %s, %s (%s)", m.Metadata.Namespace, m.Metadata.Name, m.Kind, m.ApiVersion) } func scanYamlSpecs(data []byte, atEOF bool) (advance int, token []byte, err error) { @@ -53,7 +54,7 @@ func splitSpec(token string) (string, string) { return "", "" } -func Parse(manifest string) map[string]*MappingResult { +func Parse(manifest string, defaultNamespace string) map[string]*MappingResult { scanner := bufio.NewScanner(strings.NewReader(manifest)) scanner.Split(scanYamlSpecs) //Allow for tokens (specs) up to 1M in size @@ -72,6 +73,9 @@ func Parse(manifest string) map[string]*MappingResult { if err := yaml.Unmarshal([]byte(content), &metadata); err != nil { log.Fatalf("YAML unmarshal error: %s\nCan't unmarshal %s", err, content) } + if metadata.Metadata.Namespace == "" { + metadata.Metadata.Namespace = defaultNamespace + } name := metadata.String() if _, ok := result[name]; ok { log.Printf("Error: Found duplicate key %#v in manifest", name)