MCPcopy
hub / github.com/operator-framework/operator-sdk / CleanupRelease

Method CleanupRelease

internal/helm/release/manager.go:409–452  ·  view source on GitHub ↗

CleanupRelease deletes resources if they are not deleted already. Return true if all the resources are deleted, false otherwise.

(manifest string)

Source from the content-addressed store, hash-verified

407// CleanupRelease deletes resources if they are not deleted already.
408// Return true if all the resources are deleted, false otherwise.
409func (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}

Callers

nothing calls this directly

Calls 6

FilterManifestsToKeepFunction · 0.92
ToDiscoveryClientMethod · 0.80
BuildMethod · 0.45
StringMethod · 0.45
GetMethod · 0.45
DeleteMethod · 0.45

Tested by

no test coverage detected