in operator/pkg/install/installer.go [188:249]
func (i Installer) prune(manifests []manifest.ManifestSet) error {
if i.DryRun {
return nil
}
i.ProgressInfo.SetState(progress.StatePruning)
// Build up a map of component->resources, so we know what to keep around
excluded := map[component.Name]sets.String{}
// Include all components in case we disabled some.
for _, c := range component.AllComponents {
excluded[c.UserFacingName] = sets.New[string]()
}
for _, mfs := range manifests {
for _, m := range mfs.Manifests {
excluded[mfs.Components].Insert(m.Hash())
}
}
coreLabels := getOwnerLabels(i.Values, "")
selector := klabels.Set(coreLabels).AsSelectorPreValidated()
compReq, err := klabels.NewRequirement(manifest.DubboComponentLabel, selection.Exists, nil)
if err != nil {
return err
}
selector = selector.Add(*compReq)
var errs util.Errors
resources := uninstall.PrunedResourcesSchemas()
for _, gvk := range resources {
dc, err := i.Kube.DynamicClientFor(gvk, nil, "")
if err != nil {
return err
}
objs, err := dc.List(context.Background(), metav1.ListOptions{
LabelSelector: selector.String(),
})
if objs == nil {
continue
}
for comp, excluded := range excluded {
compLabels := klabels.SelectorFromSet(getOwnerLabels(i.Values, string(comp)))
for _, obj := range objs.Items {
if excluded.Contains(manifest.ObjectHash(&obj)) {
continue
}
if obj.GetLabels()[manifest.OwningResourceNotPruned] == "true" {
continue
}
// Label mismatch. Provided objects don't select against the component, so this likely means the object
// is for another component.
if !compLabels.Matches(klabels.Set(obj.GetLabels())) {
continue
}
if err := uninstall.DeleteResource(i.Kube, i.DryRun, i.Logger, &obj); err != nil {
errs = append(errs, err)
}
}
}
}
return errs.ToError()
}