X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=itm%2Fitm-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fgenius%2Fitm%2Fcli%2FTepCommandHelper.java;h=25f2f5f905d09360f3106c4bf6f19bed80247474;hb=6129907372422ba4904308d2929b2cb16010098c;hp=9862fdab972c374f41d6d874744b88371d5b6f40;hpb=53321a8fb0fdc14f90cc5c52707731c80c0c939c;p=genius.git diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java index 9862fdab9..25f2f5f90 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java @@ -18,6 +18,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.util.SubnetUtils; import org.apache.felix.service.command.CommandSession; import org.opendaylight.controller.md.sal.binding.api.DataBroker; @@ -58,11 +59,14 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig; + @Singleton public class TepCommandHelper { private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class); private final DataBroker dataBroker; + private final ItmConfig itmConfig; static int check = 0; static short flag = 0; /* @@ -79,13 +83,26 @@ public class TepCommandHelper { // ArrayList<>(); @Inject - public TepCommandHelper(final DataBroker dataBroker) { + public TepCommandHelper(final DataBroker dataBroker, final ItmConfig itmConfig) { this.dataBroker = dataBroker; + this.itmConfig = itmConfig; } @PostConstruct - public void start() { - configureTunnelType(ITMConstants.DEFAULT_TRANSPORT_ZONE,ITMConstants.TUNNEL_TYPE_VXLAN); + public void start() throws Exception { + boolean defTzEnabled = itmConfig.isDefTzEnabled(); + if (defTzEnabled) { + String tunnelType = itmConfig.getDefTzTunnelType(); + if (tunnelType == null || tunnelType.isEmpty()) { + tunnelType = ITMConstants.TUNNEL_TYPE_VXLAN; + } + configureTunnelType(ITMConstants.DEFAULT_TRANSPORT_ZONE, tunnelType); + LOG.debug("{} is created with {} tunnel-type.", ITMConstants.DEFAULT_TRANSPORT_ZONE, tunnelType); + } else { + LOG.debug("Removing {} on start-up, def-tz-enabled is false.", ITMConstants.DEFAULT_TRANSPORT_ZONE); + // check if default-TZ already exists, then delete it because flag is OFF now. + ItmUtils.deleteTransportZoneFromConfigDS(ITMConstants.DEFAULT_TRANSPORT_ZONE, dataBroker); + } LOG.info("TepCommandHelper Started"); } @@ -722,22 +739,34 @@ public void showCache(String cacheName) { LOG.debug("configureTunnelType {} for transportZone {}", tunnelType, tZoneName); TransportZone tZoneFromConfigDS = ItmUtils.getTransportZoneFromConfigDS(tZoneName, dataBroker); - validateTunnelType(tZoneName, tunnelType,tZoneFromConfigDS); + Class tunType; + validateTunnelType(tZoneName, tunnelType, tZoneFromConfigDS); if (tZoneFromConfigDS != null) { - LOG.debug("Transport zone {} with tunnel type {} already exists. No action required.", tZoneName, - tunnelType); - return; + if (!tZoneName.equals(ITMConstants.DEFAULT_TRANSPORT_ZONE)) { + LOG.debug( + "Transport zone {} with tunnel type {} already exists. No action required.", + tZoneName, tunnelType); + return; + } else { + tunnelType = StringUtils.upperCase(tunnelType); + tunType = ItmUtils.TUNNEL_TYPE_MAP.get(tunnelType); + if(tZoneFromConfigDS.getTunnelType().equals(tunType)) { + // default-TZ already exists and tunnel-type is not changed during + // controller restart, then nothing to do now. Just return. + return; + } + } } + + // get tunnel-type + tunnelType = StringUtils.upperCase(tunnelType); + tunType = ItmUtils.TUNNEL_TYPE_MAP.get(tunnelType); + TransportZones transportZones = null; List tZoneList = null; InstanceIdentifier path = InstanceIdentifier.builder(TransportZones.class).build(); Optional tZones = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, path, dataBroker); - Class tunType = TunnelTypeVxlan.class; - if( tunnelType.equals(ITMConstants.TUNNEL_TYPE_VXLAN)) - tunType = TunnelTypeVxlan.class ; - else if( tunnelType.equals(ITMConstants.TUNNEL_TYPE_GRE) ) - tunType = TunnelTypeGre.class ; TransportZone tZone = new TransportZoneBuilder().setKey(new TransportZoneKey(tZoneName)) .setTunnelType(tunType).build(); @@ -789,11 +818,19 @@ public void showCache(String cacheName) { // if (tZone != null) { if (tZoneFromConfigDS != null) { if( (!tZoneFromConfigDS.getTunnelType().equals(tunType)) && ItmUtils.isNotEmpty(tZoneFromConfigDS.getSubnets())) { - String errorMsg = "Changing the tunnel type from " + tZoneFromConfigDS.getTunnelType() + - " to " + strTunnelType + - " is not allowed for already configured transport zone [" + tZoneName + - "]."; - Preconditions.checkArgument(false, errorMsg); + // for default-TZ, such error message is not needed to be thrown. + // it needs to be handled in different way, by deleting default-TZ + // with old tunnel-type and then add default-TZ with new tunnel-type + if (!tZoneName.equals(ITMConstants.DEFAULT_TRANSPORT_ZONE)) { + String errorMsg = "Changing the tunnel type from " + tZoneFromConfigDS.getTunnelType() + + " to " + strTunnelType + + " is not allowed for already configured transport zone [" + tZoneName + + "]."; + Preconditions.checkArgument(false, errorMsg); + } else { + // delete already existing default TZ + ItmUtils.deleteTransportZoneFromConfigDS(ITMConstants.DEFAULT_TRANSPORT_ZONE, dataBroker); + } } } }