Blueprint XML Config support in ITM.
[genius.git] / itm / itm-impl / src / main / java / org / opendaylight / genius / itm / cli / TepCommandHelper.java
index 9862fdab972c374f41d6d874744b88371d5b6f40..25f2f5f905d09360f3106c4bf6f19bed80247474 100644 (file)
@@ -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<? extends TunnelTypeBase> 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<TransportZone> tZoneList = null;
         InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
         Optional<TransportZones> tZones = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, path, dataBroker);
-        Class<? extends TunnelTypeBase> 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);
+                }
             }
         }
     }