// EndpointGroupDelete deletes end point group func (ac *APIController) EndpointGroupDelete(endpointGroup *contivModel.EndpointGroup) error { log.Infof("Received EndpointGroupDelete: %+v", endpointGroup) // delete the endpoint group state err := master.DeleteEndpointGroup(endpointGroup.EndpointGroupID) if err != nil { log.Errorf("Error creating endpoing group %+v. Err: %v", endpointGroup, err) } // Detach the endpoint group from the Policies for _, policyName := range endpointGroup.Policies { policyKey := endpointGroup.TenantName + ":" + policyName // find the policy policy := contivModel.FindPolicy(policyKey) if policy == nil { log.Errorf("Could not find policy %s", policyName) continue } // detach policy to epg err := master.PolicyDetach(endpointGroup, policy) if err != nil && err != master.EpgPolicyExists { log.Errorf("Error detaching policy %s from epg %s", policyName, endpointGroup.Key) } // Remove links modeldb.RemoveLinkSet(&policy.LinkSets.EndpointGroups, endpointGroup) modeldb.RemoveLinkSet(&endpointGroup.LinkSets.Policies, policy) policy.Write() } return nil }
// Cleans up state off endpointGroup and related objects. func endpointGroupCleanup(endpointGroup *contivModel.EndpointGroup) { // delete the endpoint group state err := master.DeleteEndpointGroup(endpointGroup.TenantName, endpointGroup.GroupName) if err != nil { log.Errorf("Error deleting endpoint group %+v. Err: %v", endpointGroup, err) } // Detach the endpoint group from the Policies for _, policyName := range endpointGroup.Policies { policyKey := endpointGroup.TenantName + ":" + policyName // find the policy policy := contivModel.FindPolicy(policyKey) if policy == nil { log.Errorf("Could not find policy %s", policyName) continue } // detach policy to epg err := master.PolicyDetach(endpointGroup, policy) if err != nil && err != master.EpgPolicyExists { log.Errorf("Error detaching policy %s from epg %s", policyName, endpointGroup.Key) } // Remove links modeldb.RemoveLinkSet(&policy.LinkSets.EndpointGroups, endpointGroup) modeldb.RemoveLinkSet(&endpointGroup.LinkSets.Policies, policy) policy.Write() } // Cleanup any external contracts err = cleanupExternalContracts(endpointGroup) if err != nil { log.Errorf("Error cleaning up external contracts for epg %s", endpointGroup.Key) } // Remove the endpoint group from network and tenant link sets. nwObjKey := endpointGroup.TenantName + ":" + endpointGroup.NetworkName network := contivModel.FindNetwork(nwObjKey) if network != nil { modeldb.RemoveLinkSet(&network.LinkSets.EndpointGroups, endpointGroup) network.Write() } tenant := contivModel.FindTenant(endpointGroup.TenantName) if tenant != nil { modeldb.RemoveLinkSet(&tenant.LinkSets.EndpointGroups, endpointGroup) tenant.Write() } }