CleanupRelease deletes resources if they are not deleted already. Return true if all the resources are deleted, false otherwise.
(manifest string)
| 407 | // CleanupRelease deletes resources if they are not deleted already. |
| 408 | // Return true if all the resources are deleted, false otherwise. |
| 409 | func (m manager) CleanupRelease(manifest string) (bool, error) { |
| 410 | dc, err := m.actionConfig.RESTClientGetter.ToDiscoveryClient() |
| 411 | if err != nil { |
| 412 | return false, fmt.Errorf("failed to get Kubernetes discovery client: %w", err) |
| 413 | } |
| 414 | apiVersions, err := action.GetVersionSet(dc) |
| 415 | if err != nil && !discovery.IsGroupDiscoveryFailedError(err) { |
| 416 | return false, fmt.Errorf("failed to get apiVersions from Kubernetes: %w", err) |
| 417 | } |
| 418 | manifests := releaseutil.SplitManifests(manifest) |
| 419 | _, files, err := releaseutil.SortManifests(manifests, apiVersions, releaseutil.UninstallOrder) |
| 420 | if err != nil { |
| 421 | return false, fmt.Errorf("failed to sort manifests: %w", err) |
| 422 | } |
| 423 | // do not delete resources that are annotated with the Helm resource policy 'keep' |
| 424 | _, filesToDelete := manifestutil.FilterManifestsToKeep(files) |
| 425 | var builder strings.Builder |
| 426 | for _, file := range filesToDelete { |
| 427 | builder.WriteString("\n---\n" + file.Content) |
| 428 | } |
| 429 | resources, err := m.kubeClient.Build(strings.NewReader(builder.String()), false) |
| 430 | if err != nil { |
| 431 | return false, fmt.Errorf("failed to build resources from manifests: %w", err) |
| 432 | } |
| 433 | if len(resources) <= 0 { |
| 434 | return true, nil |
| 435 | } |
| 436 | for _, resource := range resources { |
| 437 | err = resource.Get() |
| 438 | if err != nil { |
| 439 | if apierrors.IsNotFound(err) { |
| 440 | continue // resource is already delete, check the next one. |
| 441 | } |
| 442 | return false, fmt.Errorf("failed to get resource: %w", err) |
| 443 | } |
| 444 | // found at least one resource that is not deleted so just delete everything again. |
| 445 | _, errs := m.kubeClient.Delete(resources) |
| 446 | if len(errs) > 0 { |
| 447 | return false, fmt.Errorf("failed to delete resources: %v", apiutilerrors.NewAggregate(errs)) |
| 448 | } |
| 449 | return false, nil |
| 450 | } |
| 451 | return true, nil |
| 452 | } |
nothing calls this directly
no test coverage detected