import java.util.HashSet;
import java.util.Set;
-import java.util.UUID;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.groupbasedpolicy.neutron.gbp.util.NeutronGbpIidFactory;
import org.opendaylight.groupbasedpolicy.neutron.mapper.infrastructure.NetworkClient;
import org.opendaylight.groupbasedpolicy.neutron.mapper.infrastructure.NetworkService;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.group.NeutronSecurityGroupAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronMapperIidFactory;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NetworkUtils;
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
import org.opendaylight.groupbasedpolicy.util.IidFactory;
-import org.opendaylight.neutron.spi.INeutronNetworkAware;
-import org.opendaylight.neutron.spi.NeutronNetwork;
-import org.opendaylight.neutron.spi.NeutronSecurityGroup;
-import org.opendaylight.neutron.spi.NeutronSecurityRule;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.provider.physical.networks.as.l2.flood.domains.ProviderPhysicalNetworkAsL2FloodDomain;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.provider.physical.networks.as.l2.flood.domains.ProviderPhysicalNetworkAsL2FloodDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.network.mappings.NetworkMapping;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.network.mappings.NetworkMappingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.provider.networks.as.l2.flood.domains.ProviderPhysicalNetworkAsL2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.provider.networks.as.l2.flood.domains.ProviderPhysicalNetworkAsL2FloodDomainBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ExternalImplicitGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ExternalImplicitGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
-public class NeutronNetworkAware implements INeutronNetworkAware {
+public class NeutronNetworkAware implements NeutronAware<Network> {
private static final Logger LOG = LoggerFactory.getLogger(NeutronNetworkAware.class);
+ public static final InstanceIdentifier<Network> NETWORK_WILDCARD_IID =
+ InstanceIdentifier.builder(Neutron.class).child(Networks.class).child(Network.class).build();
private final DataBroker dataProvider;
private final Set<TenantId> tenantsWithRouterAndNetworkSeviceEntities = new HashSet<>();
- private final NeutronSecurityGroupAware secGrpAware;
- private final NeutronNetworkDao networkDao;
- public NeutronNetworkAware(DataBroker dataProvider, NeutronSecurityGroupAware secGrpAware, NeutronNetworkDao networkDao) {
+ public NeutronNetworkAware(DataBroker dataProvider) {
this.dataProvider = checkNotNull(dataProvider);
- this.secGrpAware = checkNotNull(secGrpAware);
- this.networkDao = checkNotNull(networkDao);
}
- /**
- * @see org.opendaylight.neutron.spi.INeutronNetworkAware#canCreateNetwork(org.opendaylight.neutron.spi.NeutronNetwork)
- */
@Override
- public int canCreateNetwork(NeutronNetwork network) {
- LOG.trace("canCreateNetwork - {}", network);
- // nothing to consider
- return StatusCode.OK;
- }
-
- /**
- * @see org.opendaylight.neutron.spi.INeutronNetworkAware#neutronNetworkCreated(org.opendaylight.neutron.spi.NeutronNetwork)
- */
- @Override
- public void neutronNetworkCreated(NeutronNetwork network) {
- LOG.trace("neutronNetworkCreated - {}", network);
+ public void onCreated(Network network, Neutron neutron) {
+ LOG.trace("created network - {}", network);
ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
- L2FloodDomainId l2FdId = new L2FloodDomainId(network.getID());
- TenantId tenantId = new TenantId(Utils.normalizeUuid(network.getTenantID()));
+ TenantId tenantId = new TenantId(network.getTenantId().getValue());
Name name = null;
- if (network.getNetworkName() != null) {
+ ContextId ctxId = new ContextId(network.getUuid().getValue());
+ ForwardingContextBuilder fwdCtxBuilder = new ForwardingContextBuilder()
+ .setContextId(ctxId)
+ .setContextType(MappingUtils.L3_CONTEXT);
+ if (!Strings.isNullOrEmpty(network.getName())) {
try {
- name = new Name(network.getNetworkName());
+ name = new Name(network.getName());
+ fwdCtxBuilder.setName(name);
} catch (Exception e) {
name = null;
- LOG.info("Name of Neutron Network '{}' is ignored.", network.getNetworkName());
+ LOG.info("Name of Neutron Network '{}' is ignored.", network.getName());
LOG.debug("Name exception", e);
}
}
- L3ContextId l3ContextId = new L3ContextId(UUID.randomUUID().toString());
- L3Context l3Context = new L3ContextBuilder().setId(l3ContextId).setName(name).build();
- rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l3ContextIid(tenantId, l3ContextId), l3Context, true);
+ ForwardingContext l3Context = fwdCtxBuilder.build();
- L2BridgeDomainId l2BdId = new L2BridgeDomainId(UUID.randomUUID().toString());
- L2BridgeDomain l2Bd = new L2BridgeDomainBuilder().setId(l2BdId).setParent(l3ContextId).setName(name).build();
- rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l2BridgeDomainIid(tenantId, l2BdId), l2Bd, true);
+ fwdCtxBuilder.setContextType(MappingUtils.L2_BRDIGE_DOMAIN)
- L2FloodDomain l2Fd = new L2FloodDomainBuilder().setId(l2FdId).setParent(l2BdId).setName(name).build();
- rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l2FloodDomainIid(tenantId, l2FdId), l2Fd, true);
+ .setParent(MappingUtils.createParent(ctxId, MappingUtils.L3_CONTEXT));
+ ForwardingContext l2Bd = fwdCtxBuilder.build();
- NetworkMapping networkMapping = new NetworkMappingBuilder().setNetworkId(l2FdId)
- .setL2BridgeDomainId(l2BdId)
- .setL3ContextId(l3ContextId)
- .build();
- rwTx.put(LogicalDatastoreType.OPERATIONAL, NeutronMapperIidFactory.networkMappingIid(l2FdId), networkMapping,
- true);
+ fwdCtxBuilder.setContextType(MappingUtils.L2_FLOOD_DOMAIN).setParent(
+ MappingUtils.createParent(ctxId, MappingUtils.L2_BRDIGE_DOMAIN));
+ ForwardingContext l2Fd = fwdCtxBuilder.build();
+
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l3ContextIid(tenantId, ctxId), l3Context, true);
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l2BridgeDomainIid(tenantId, ctxId), l2Bd, true);
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l2FloodDomainIid(tenantId, ctxId), l2Fd, true);
+
+ createTenantNetworkDomains(network, tenantId, rwTx);
if (!tenantsWithRouterAndNetworkSeviceEntities.contains(tenantId)) {
tenantsWithRouterAndNetworkSeviceEntities.add(tenantId);
NetworkClient.writeConsumerNamedSelector(tenantId, NetworkService.DNS_CONTRACT_CONSUMER_SELECTOR, rwTx);
NetworkClient.writeConsumerNamedSelector(tenantId, NetworkService.MGMT_CONTRACT_CONSUMER_SELECTOR, rwTx);
}
- networkDao.addNetwork(network);
- if (network.getRouterExternal() != null && network.getRouterExternal() == true) {
- addEigEpgExternalWithContracts(tenantId, rwTx);
- }
- if (!Strings.isNullOrEmpty(network.getProviderPhysicalNetwork())) {
- String segmentationId = network.getProviderSegmentationID();
- addProviderPhysicalNetworkMapping(tenantId, l2FdId, segmentationId, rwTx);
+ if (!NetworkUtils.getPhysicalNetwork(network).isEmpty() && !NetworkUtils.getSegmentationId(network).isEmpty()) {
+ addProviderPhysicalNetworkMapping(tenantId, ctxId, NetworkUtils.getSegmentationId(network), rwTx);
+ addProviderPhysicalNetworkMapping(tenantId, new L2FloodDomainId(ctxId.getValue()),
+ NetworkUtils.getSegmentationId(network), rwTx);
}
DataStoreHelper.submitToDs(rwTx);
}
- private void addEigEpgExternalWithContracts(TenantId tenantId, ReadWriteTransaction rwTx) {
- Uuid tenantUuid = new Uuid(tenantId.getValue());
- NeutronSecurityRule inIpv4 = new NeutronSecurityRule();
- inIpv4.setID("19b85ad2-bdfc-11e5-9912-ba0be0483c18");
- inIpv4.setSecurityRuleDirection(NeutronUtils.INGRESS);
- inIpv4.setSecurityRuleEthertype(NeutronUtils.IPv4);
- inIpv4.setSecurityRuleGroupID(MappingUtils.EPG_EXTERNAL_ID.getValue());
- inIpv4.setTenantID(tenantUuid);
- NeutronSecurityRule outIpv4 = new NeutronSecurityRule();
- outIpv4.setID("19b85eba-bdfc-11e5-9912-ba0be0483c18");
- outIpv4.setSecurityRuleDirection(NeutronUtils.EGRESS);
- outIpv4.setSecurityRuleEthertype(NeutronUtils.IPv4);
- outIpv4.setSecurityRuleGroupID(MappingUtils.EPG_EXTERNAL_ID.getValue());
- outIpv4.setTenantID(tenantUuid);
- NeutronSecurityRule inIpv6 = new NeutronSecurityRule();
- inIpv6.setID("19b86180-bdfc-11e5-9912-ba0be0483c18");
- inIpv6.setSecurityRuleDirection(NeutronUtils.INGRESS);
- inIpv6.setSecurityRuleEthertype(NeutronUtils.IPv6);
- inIpv6.setSecurityRuleGroupID(MappingUtils.EPG_EXTERNAL_ID.getValue());
- inIpv6.setTenantID(tenantUuid);
- NeutronSecurityRule outIpv6 = new NeutronSecurityRule();
- outIpv6.setID("19b86270-bdfc-11e5-9912-ba0be0483c18");
- outIpv6.setSecurityRuleDirection(NeutronUtils.EGRESS);
- outIpv6.setSecurityRuleEthertype(NeutronUtils.IPv6);
- outIpv6.setSecurityRuleGroupID(MappingUtils.EPG_EXTERNAL_ID.getValue());
- outIpv6.setTenantID(tenantUuid);
- NeutronSecurityGroup externalSecGrp = new NeutronSecurityGroup();
- externalSecGrp.setID(MappingUtils.EPG_EXTERNAL_ID.getValue());
- externalSecGrp.setSecurityGroupName("EXTERNAL_group");
- externalSecGrp.setTenantID(tenantUuid);
- externalSecGrp.setSecurityRules(ImmutableList.of(inIpv4, outIpv4, inIpv6, outIpv6));
- boolean isAddedNeutronSecurityGroup = secGrpAware.addNeutronSecurityGroup(externalSecGrp, rwTx);
- if (!isAddedNeutronSecurityGroup) {
- LOG.error("Problem with adding External Neutron Security Group representing External Implicit Group. {}", externalSecGrp);
- return;
+ @Deprecated
+ private void createTenantNetworkDomains(Network network, TenantId tenantId, ReadWriteTransaction rwTx) {
+ Name name;
+ L3ContextBuilder l3CtxBuilder = new L3ContextBuilder();
+ L2FloodDomainBuilder l2FdBuilder = new L2FloodDomainBuilder();
+ L2BridgeDomainBuilder l2BdBuilder = new L2BridgeDomainBuilder();
+ if (!Strings.isNullOrEmpty(network.getName())) {
+ try {
+ name = new Name(network.getName());
+ l3CtxBuilder.setName(name);
+ l2FdBuilder.setName(name);
+ l2BdBuilder.setName(name);
+ } catch (Exception e) {
+ name = null;
+ LOG.info("Name of Neutron Network '{}' is ignored.", network.getName());
+ LOG.debug("Name exception", e);
+ }
}
- ExternalImplicitGroup eig = new ExternalImplicitGroupBuilder().setId(MappingUtils.EPG_EXTERNAL_ID).build();
- rwTx.put(LogicalDatastoreType.CONFIGURATION,
- IidFactory.externalImplicitGroupIid(tenantId, eig.getId()), eig, true);
+ L2FloodDomainId l2FdId = new L2FloodDomainId(network.getUuid().getValue());
+ L3ContextId l3ContextId = new L3ContextId(l2FdId);
+ L3Context l3Context = l3CtxBuilder.setId(l3ContextId).build();
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l3ContextIid(tenantId, l3Context.getId()), l3Context, true);
+
+ L2BridgeDomainId l2BdId = new L2BridgeDomainId(l2FdId);
+ L2BridgeDomain l2Bd = l2BdBuilder.setId(l2BdId).setParent(l3Context.getId()).build();
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l2BridgeDomainIid(tenantId, l2BdId), l2Bd, true);
+
+ L2FloodDomain l2Fd = l2FdBuilder.setId(l2FdId).setParent(l2BdId).build();
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.l2FloodDomainIid(tenantId, l2FdId), l2Fd, true);
}
- private void addProviderPhysicalNetworkMapping(TenantId tenantId, L2FloodDomainId l2FdId, String segmentationId,
+ private void addProviderPhysicalNetworkMapping(TenantId tenantId, ContextId ctxId, String segmentationId,
WriteTransaction wTx) {
- ProviderPhysicalNetworkAsL2FloodDomain provNetAsL2Fd = new ProviderPhysicalNetworkAsL2FloodDomainBuilder()
- .setTenantId(tenantId).setL2FloodDomainId(l2FdId).setSegmentationId(segmentationId).build();
+ ProviderPhysicalNetworkAsL2FloodDomain provNetAsL2Fd = new ProviderPhysicalNetworkAsL2FloodDomainBuilder().setTenantId(
+ tenantId)
+ .setL2FloodDomainId(ctxId)
+ .setSegmentationId(segmentationId)
+ .build();
wTx.put(LogicalDatastoreType.OPERATIONAL,
- NeutronGbpIidFactory.providerPhysicalNetworkAsL2FloodDomainIid(tenantId, l2FdId), provNetAsL2Fd);
- }
-
- /**
- * @see org.opendaylight.neutron.spi.INeutronNetworkAware#canUpdateNetwork(org.opendaylight.neutron.spi.NeutronNetwork,
- * org.opendaylight.neutron.spi.NeutronNetwork)
- */
- @Override
- public int canUpdateNetwork(NeutronNetwork delta, NeutronNetwork original) {
- LOG.trace("canUpdateNetwork - delta: {} original: {}", delta, original);
- // nothing to consider
- return StatusCode.OK;
+ NeutronGbpIidFactory.providerPhysicalNetworkAsL2FloodDomainIid(tenantId, ctxId), provNetAsL2Fd);
}
- /**
- * @see org.opendaylight.neutron.spi.INeutronNetworkAware#neutronNetworkUpdated(org.opendaylight.neutron.spi.NeutronNetwork)
- */
- @Override
- public void neutronNetworkUpdated(NeutronNetwork network) {
- LOG.trace("neutronNetworkUpdated - {}", network);
- // TODO we could update just name
+ @Deprecated
+ private void addProviderPhysicalNetworkMapping(TenantId tenantId, L2FloodDomainId l2FdId, String segmentationId,
+ WriteTransaction wTx) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.provider.physical.networks.as.l2.flood.domains.ProviderPhysicalNetworkAsL2FloodDomain provNetAsL2Fd = new org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.provider.physical.networks.as.l2.flood.domains.ProviderPhysicalNetworkAsL2FloodDomainBuilder().setTenantId(
+ tenantId)
+ .setL2FloodDomainId(new L2FloodDomainId(l2FdId.getValue()))
+ .setSegmentationId(segmentationId)
+ .build();
+ wTx.put(LogicalDatastoreType.OPERATIONAL,
+ NeutronGbpIidFactory.providerPhysicalNetworkAsL2FloodDomainIid(tenantId, l2FdId), provNetAsL2Fd);
}
- /**
- * @see org.opendaylight.neutron.spi.INeutronNetworkAware#canDeleteNetwork(org.opendaylight.neutron.spi.NeutronNetwork)
- */
@Override
- public int canDeleteNetwork(NeutronNetwork network) {
- LOG.trace("canDeleteNetwork - {}", network);
- // nothing to consider
- return StatusCode.OK;
+ public void onUpdated(Network oldItem, Network newItem, Neutron oldNeutron, Neutron newNeutron) {
+ LOG.trace("updated network - OLD: {} \nNEW: {}", oldItem, newItem);
+ // TODO only name can be updated
}
- /**
- * @see org.opendaylight.neutron.spi.INeutronNetworkAware#neutronNetworkDeleted(org.opendaylight.neutron.spi.NeutronNetwork)
- */
@Override
- public void neutronNetworkDeleted(NeutronNetwork network) {
- LOG.trace("neutronNetworkDeleted - {}", network);
+ public void onDeleted(Network network, Neutron oldNeutron, Neutron newNeutron) {
+ LOG.trace("deleted network - {}", network);
ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
- TenantId tenantId = new TenantId(Utils.normalizeUuid(network.getTenantID()));
- L2FloodDomainId l2FdId = new L2FloodDomainId(network.getID());
- InstanceIdentifier<NetworkMapping> networkMappingIid = NeutronMapperIidFactory.networkMappingIid(l2FdId);
- Optional<NetworkMapping> potentionalNetworkMapping =
- DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, networkMappingIid, rwTx);
- if (!potentionalNetworkMapping.isPresent()) {
- LOG.warn("Illegal state - network-mapping {} does not exist.", l2FdId.getValue());
- rwTx.cancel();
+ TenantId tenantId = new TenantId(network.getTenantId().getValue());
+ ContextId id = new ContextId(network.getUuid().getValue());
+ Optional<ForwardingContext> potentialL2Fd = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
+ IidFactory.l2FloodDomainIid(tenantId, id), rwTx);
+ if (!potentialL2Fd.isPresent()) {
+ LOG.warn("Illegal state - l2-flood-domain {} does not exist.", id.getValue());
return;
}
-
- NetworkMapping networkMapping = potentionalNetworkMapping.get();
- L2BridgeDomainId l2BdId = networkMapping.getL2BridgeDomainId();
- L3ContextId l3ContextId = networkMapping.getL3ContextId();
- if (l2BdId == null || l3ContextId == null) {
- LOG.warn("Illegal state - network-mapping {} is not valid.", networkMapping);
- rwTx.cancel();
+ Optional<ForwardingContext> potentialL2Bd = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
+ IidFactory.l2BridgeDomainIid(tenantId, id), rwTx);
+ if (!potentialL2Bd.isPresent()) {
+ LOG.warn("Illegal state - l2-bridge-domain {} does not exist.", id.getValue());
return;
}
+ Optional<ForwardingContext> potentialL3Ctx = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
+ IidFactory.l3ContextIid(tenantId, id), rwTx);
+ if (!potentialL3Ctx.isPresent()) {
+ LOG.warn("Illegal state - l3-context {} does not exist.", id.getValue());
+ return;
+ }
+ removeTenantNetworkDomains(network, tenantId, rwTx);
+ DataStoreHelper.submitToDs(rwTx);
+ }
+ @Deprecated
+ private void removeTenantNetworkDomains(Network network, TenantId tenantId, ReadWriteTransaction rwTx) {
+ L2FloodDomainId l2FdId = new L2FloodDomainId(network.getUuid().getValue());
Optional<L2FloodDomain> potentialL2Fd = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
IidFactory.l2FloodDomainIid(tenantId, l2FdId), rwTx);
if (!potentialL2Fd.isPresent()) {
LOG.warn("Illegal state - l2-flood-domain {} does not exist.", l2FdId.getValue());
- rwTx.cancel();
return;
}
+ L2BridgeDomainId l2BdId = new L2BridgeDomainId(l2FdId);
Optional<L2BridgeDomain> potentialL2Bd = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
IidFactory.l2BridgeDomainIid(tenantId, l2BdId), rwTx);
if (!potentialL2Bd.isPresent()) {
LOG.warn("Illegal state - l2-bridge-domain {} does not exist.", l2BdId.getValue());
- rwTx.cancel();
return;
}
-
- Optional<L3Context> potentialL3Context = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
- IidFactory.l3ContextIid(tenantId, l3ContextId), rwTx);
- if (!potentialL3Context.isPresent()) {
- LOG.warn("Illegal state - l3-context {} does not exist.", l3ContextId.getValue());
- rwTx.cancel();
+ L3ContextId l3CtxId = new L3ContextId(l2FdId);
+ Optional<L3Context> potentialL3Ctx = DataStoreHelper.removeIfExists(LogicalDatastoreType.CONFIGURATION,
+ IidFactory.l3ContextIid(tenantId, l3CtxId), rwTx);
+ if (!potentialL3Ctx.isPresent()) {
+ LOG.warn("Illegal state - l3-context {} does not exist.", l3CtxId.getValue());
return;
}
-
- rwTx.delete(LogicalDatastoreType.OPERATIONAL, networkMappingIid);
-
- DataStoreHelper.submitToDs(rwTx);
}
}