in controllers/policyendpoints_controller.go [169:217]
func (r *PolicyEndpointsReconciler) cleanUpPolicyEndpoint(ctx context.Context, req ctrl.Request) error {
r.log.Info("Clean Up PolicyEndpoint resources for", "name:", req.NamespacedName.Name)
policyEndpointIdentifier := utils.GetPolicyEndpointIdentifier(req.NamespacedName.Name,
req.NamespacedName.Namespace)
start := time.Now()
// Get all podIdentifiers since we need to decide if pinpath has to be deleted on local node
parentNP := utils.GetParentNPNameFromPEName(req.NamespacedName.Name)
resourceName := req.NamespacedName.Name
resourceNamespace := req.NamespacedName.Namespace
targetPods, podIdentifiers, podsToBeCleanedUp := r.deriveTargetPodsForParentNP(ctx, parentNP, resourceNamespace, resourceName)
r.policyEndpointSelectorMap.Delete(policyEndpointIdentifier)
r.log.Info("cleanUpPolicyEndpoint: ", "Pods to cleanup - ", len(podsToBeCleanedUp), "and Pods to be updated - ", len(targetPods))
// targetPods are pods which would need map update
if len(targetPods) > 0 {
r.log.Info("Updating active pods...")
err := r.updatePolicyEnforcementStatusForPods(ctx, req.NamespacedName.Name, targetPods, podIdentifiers, false)
if err != nil {
r.log.Info("failed to update bpf probes for ", "policy endpoint ", req.NamespacedName.Name)
return err
}
duration := msSince(start)
policyTearDownLatency.WithLabelValues(req.NamespacedName.Name, req.NamespacedName.Namespace).Observe(duration)
}
// podsToBeCleanedUp - pods which are no longer selected by this policy
if len(podsToBeCleanedUp) > 0 {
r.log.Info("Cleaning up current policy against below pods..")
err := r.updatePolicyEnforcementStatusForPods(ctx, req.NamespacedName.Name, podsToBeCleanedUp, podIdentifiers, true)
if err != nil {
r.log.Info("failed to clean up bpf probes for ", "policy endpoint ", req.NamespacedName.Name)
return err
}
duration := msSince(start)
policyTearDownLatency.WithLabelValues(req.NamespacedName.Name, req.NamespacedName.Namespace).Observe(duration)
}
for _, podToBeCleanedUp := range podsToBeCleanedUp {
podIdentifier := utils.GetPodIdentifier(podToBeCleanedUp.Name, podToBeCleanedUp.Namespace, r.log)
//Delete this policyendpoint resource against the current PodIdentifier
r.deletePolicyEndpointFromPodIdentifierMap(ctx, podIdentifier, req.NamespacedName.Name)
}
return nil
}