()
| 267 | } |
| 268 | |
| 269 | func (d *diffCmd) runHelm3() error { |
| 270 | if err := compatibleHelm3Version(); err != nil { |
| 271 | return err |
| 272 | } |
| 273 | |
| 274 | var releaseManifest []byte |
| 275 | |
| 276 | var err error |
| 277 | |
| 278 | if d.takeOwnership { |
| 279 | // We need to do a three way merge between the manifests of the new |
| 280 | // release, the manifests of the old release and what is currently deployed |
| 281 | d.threeWayMerge = true |
| 282 | } |
| 283 | |
| 284 | if d.clusterAccessAllowed() { |
| 285 | releaseManifest, err = getRelease(d.release, d.namespace, d.kubeContext) |
| 286 | } |
| 287 | |
| 288 | var newInstall bool |
| 289 | if err != nil && strings.Contains(err.Error(), "release: not found") { |
| 290 | if d.isAllowUnreleased() { |
| 291 | newInstall = true |
| 292 | err = nil |
| 293 | } else { |
| 294 | fmt.Fprintf(os.Stderr, "********************\n\n\tRelease was not present in Helm. Include the `--allow-unreleased` to perform diff without exiting in error.\n\n********************\n") |
| 295 | return err |
| 296 | } |
| 297 | } |
| 298 | if err != nil { |
| 299 | return fmt.Errorf("Failed to get release %s in namespace %s: %w", d.release, d.namespace, err) |
| 300 | } |
| 301 | |
| 302 | installManifest, err := d.template(!newInstall) |
| 303 | if err != nil { |
| 304 | return fmt.Errorf("Failed to render chart: %w", err) |
| 305 | } |
| 306 | |
| 307 | var actionConfig *action.Configuration |
| 308 | if d.threeWayMerge || d.takeOwnership { |
| 309 | actionConfig = new(action.Configuration) |
| 310 | localEnv := prepareEnvSettings(d.kubeContext) |
| 311 | if err := actionConfig.Init(localEnv.RESTClientGetter(), localEnv.Namespace(), os.Getenv("HELM_DRIVER")); err != nil { |
| 312 | log.Fatalf("%+v", err) |
| 313 | } |
| 314 | if err := actionConfig.KubeClient.IsReachable(); err != nil { |
| 315 | return err |
| 316 | } |
| 317 | } |
| 318 | |
| 319 | if d.threeWayMerge { |
| 320 | releaseManifest, installManifest, err = manifest.Generate(actionConfig, releaseManifest, installManifest) |
| 321 | if err != nil { |
| 322 | return fmt.Errorf("unable to generate manifests: %w", err) |
| 323 | } |
| 324 | } |
| 325 | |
| 326 | currentSpecs := make(map[string]*manifest.MappingResult) |
no test coverage detected