/** * Remove the transport zone for a given network system. This typically means to dis-associated it * unless this is the last network system associated with the transport zone. In this case, the * transport zone will be deleted if: * * <ul> * <li>It was discovered * <li>It does not have any user-created ports * <li>It does not have any registered ports * </ul> * * @param tzone * @param uri * @throws IOException */ public List<String> removeNetworkSystemTransportZone(Network tzone, String uri) throws IOException { tzone.removeNetworkSystems(Collections.singletonList(uri)); // dis-associate // list of end points getting deleted ArrayList<String> toRemove = new ArrayList<String>(); if (tzone.getNetworkSystems().isEmpty()) { // if this is the last network system List<String> userCreatedEndPoints = TransportZoneReconciler.getUserCreatedEndPoints(tzone); if (userCreatedEndPoints.isEmpty() && !tzone.assignedToVarray()) { // delete only if not modified by a user _log.info("Removing network {}", tzone.getLabel()); toRemove.addAll(tzone.retrieveEndpoints()); NetworkAssociationHelper.handleEndpointsRemoved(tzone, toRemove, dbClient, _coordinator); dbClient.markForDeletion(tzone); recordTransportZoneEvent( tzone, OperationTypeEnum.DELETE_NETWORK.getEvType(true), OperationTypeEnum.DELETE_NETWORK.getDescription()); } else { _log.info( "Network {} is changed by the user and will " + "not be removed. Discovered end points will be removed.", tzone.getLabel()); for (String pt : tzone.retrieveEndpoints()) { if (!userCreatedEndPoints.contains(pt)) { toRemove.add(pt); } } tzone.removeEndpoints(toRemove); NetworkAssociationHelper.handleEndpointsRemoved(tzone, toRemove, dbClient, _coordinator); _log.info("Discovered endpoints removed {}", toRemove.toArray()); dbClient.persistObject(tzone); recordTransportZoneEvent( tzone, OperationTypeEnum.UPDATE_NETWORK.getEvType(true), OperationTypeEnum.UPDATE_NETWORK.getDescription()); } } else { _log.info("Removing network {} from network system {}", tzone.getLabel(), uri); dbClient.persistObject(tzone); recordTransportZoneEvent( tzone, OperationTypeEnum.UPDATE_NETWORK.getEvType(true), OperationTypeEnum.UPDATE_NETWORK.getDescription()); } return toRemove; }
private void saveTransportZone(Network network, boolean newTransportZone) throws IOException { if (newTransportZone) { dbClient.createObject(network); _log.info("Added networks {}", network.getLabel()); recordTransportZoneEvent( network, OperationTypeEnum.CREATE_NETWORK.getEvType(true), OperationTypeEnum.CREATE_NETWORK.getDescription()); } else { dbClient.updateAndReindexObject(network); _log.info("Updated transport zone {}", network.getLabel()); recordTransportZoneEvent( network, OperationTypeEnum.UPDATE_NETWORK.getEvType(true), OperationTypeEnum.UPDATE_NETWORK.getDescription()); } }