in pkg/policyendpoints/manager.go [123:171]
func (m *policyEndpointsManager) computePolicyEndpoints(policy *networking.NetworkPolicy,
existingPolicyEndpoints []policyinfo.PolicyEndpoint, ingressEndpoints []policyinfo.EndpointInfo,
egressEndpoints []policyinfo.EndpointInfo, podSelectorEndpoints []policyinfo.PodEndpoint) ([]policyinfo.PolicyEndpoint,
[]policyinfo.PolicyEndpoint, []policyinfo.PolicyEndpoint, error) {
// Loop through ingressEndpoints, egressEndpoints and podSelectorEndpoints and put in map
// also populate them into policy endpoints
ingressEndpointsMap, egressEndpointsMap, podSelectorEndpointSet, modifiedEndpoints, potentialDeletes := m.processExistingPolicyEndpoints(
policy, existingPolicyEndpoints, ingressEndpoints, egressEndpoints, podSelectorEndpoints,
)
doNotDelete := sets.Set[types.NamespacedName]{}
var createPolicyEndpoints []policyinfo.PolicyEndpoint
var updatePolicyEndpoints []policyinfo.PolicyEndpoint
var deletePolicyEndpoints []policyinfo.PolicyEndpoint
// packing new ingress rules
createPolicyEndpoints, doNotDeleteIngress := m.packingIngressRules(policy, ingressEndpointsMap, createPolicyEndpoints, modifiedEndpoints, potentialDeletes)
// packing new egress rules
createPolicyEndpoints, doNotDeleteEgress := m.packingEgressRules(policy, egressEndpointsMap, createPolicyEndpoints, modifiedEndpoints, potentialDeletes)
// packing new pod selector
createPolicyEndpoints, doNotDeletePs := m.packingPodSelectorEndpoints(policy, podSelectorEndpointSet.UnsortedList(), createPolicyEndpoints, modifiedEndpoints, potentialDeletes)
doNotDelete.Insert(doNotDeleteIngress.UnsortedList()...)
doNotDelete.Insert(doNotDeleteEgress.UnsortedList()...)
doNotDelete.Insert(doNotDeletePs.UnsortedList()...)
for _, ep := range potentialDeletes {
if doNotDelete.Has(k8s.NamespacedName(&ep)) {
updatePolicyEndpoints = append(updatePolicyEndpoints, ep)
} else {
deletePolicyEndpoints = append(deletePolicyEndpoints, ep)
}
}
updatePolicyEndpoints = append(updatePolicyEndpoints, modifiedEndpoints...)
if len(createPolicyEndpoints) == 0 && len(updatePolicyEndpoints) == 0 {
if len(deletePolicyEndpoints) == 0 {
newEP := m.newPolicyEndpoint(policy, nil, nil, nil)
createPolicyEndpoints = append(createPolicyEndpoints, newEP)
} else {
ep := deletePolicyEndpoints[0]
updatePolicyEndpoints = append(updatePolicyEndpoints, ep)
deletePolicyEndpoints = deletePolicyEndpoints[1:]
}
}
return m.processPolicyEndpoints(createPolicyEndpoints), m.processPolicyEndpoints(updatePolicyEndpoints), deletePolicyEndpoints, nil
}