Ovsdb plugin compatibility layer
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / LBaaSHandler.java
index ec286e68cd13e2fc7bc9dd0d93811668956429fe..01583e98de29addc2f67751525a5ab1a7748eaca 100644 (file)
 
 package org.opendaylight.ovsdb.openstack.netvirt;
 
-import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerAware;
-import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerCRUD;
-import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolCRUD;
-import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
-import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancer;
-import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPool;
-import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPoolMember;
+import org.opendaylight.neutron.spi.INeutronLoadBalancerAware;
+import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
+import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
+import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
+import org.opendaylight.neutron.spi.INeutronPortCRUD;
+import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
+import org.opendaylight.neutron.spi.NeutronLoadBalancer;
+import org.opendaylight.neutron.spi.NeutronLoadBalancerPool;
+import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
 import org.opendaylight.controller.sal.core.Property;
@@ -50,6 +52,8 @@ public class LBaaSHandler extends AbstractHandler
     private volatile INeutronLoadBalancerCRUD neutronLBCache;
     private volatile INeutronLoadBalancerPoolCRUD neutronLBPoolCache;
     private volatile INeutronPortCRUD neutronPortsCache;
+    private volatile INeutronNetworkCRUD neutronNetworkCache;
+    private volatile INeutronSubnetCRUD neutronSubnetCache;
     private volatile LoadBalancerProvider loadBalancerProvider;
     private volatile ISwitchManager switchManager;
 
@@ -79,8 +83,9 @@ public class LBaaSHandler extends AbstractHandler
         } else if (this.switchManager.getNodes().size() == 0) {
             logger.debug("Noop with LB {} creation because no nodes available.", lbConfig.getName());
         } else {
-            for (Node node: this.switchManager.getNodes())
+            for (Node node: this.switchManager.getNodes()) {
                 loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD);
+            }
         }
     }
 
@@ -117,8 +122,9 @@ public class LBaaSHandler extends AbstractHandler
         } else if (this.switchManager.getNodes().size() == 0) {
             logger.debug("Noop with LB {} deletion because no nodes available.", lbConfig.getName());
         } else {
-            for (Node node: this.switchManager.getNodes())
+            for (Node node: this.switchManager.getNodes()) {
                 loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.DELETE);
+            }
         }
     }
 
@@ -165,8 +171,14 @@ public class LBaaSHandler extends AbstractHandler
         String loadBalancerName = neutronLB.getLoadBalancerName();
         String loadBalancerVip = neutronLB.getLoadBalancerVipAddress();
         String loadBalancerSubnetID = neutronLB.getLoadBalancerVipSubnetID();
+
         LoadBalancerConfiguration lbConfig = new LoadBalancerConfiguration(loadBalancerName, loadBalancerVip);
-        lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerVip));
+        Map.Entry<String,String> providerInfo = NeutronCacheUtils.getProviderInformation(neutronNetworkCache, neutronSubnetCache, loadBalancerSubnetID);
+        if (providerInfo != null) {
+            lbConfig.setProviderNetworkType(providerInfo.getKey());
+            lbConfig.setProviderSegmentationId(providerInfo.getValue());
+        }
+        lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerSubnetID, loadBalancerVip));
 
         String memberID, memberIP, memberMAC, memberProtocol, memberSubnetID;
         Integer memberPort;
@@ -175,18 +187,21 @@ public class LBaaSHandler extends AbstractHandler
         for (NeutronLoadBalancerPool neutronLBPool: neutronLBPoolCache.getAllNeutronLoadBalancerPools()) {
             List<NeutronLoadBalancerPoolMember> members = neutronLBPool.getLoadBalancerPoolMembers();
             memberProtocol = neutronLBPool.getLoadBalancerPoolProtocol();
-            if (memberProtocol == null)
+            if (memberProtocol == null) {
                 continue;
+            }
 
             if (!(memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_TCP) ||
                   memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTP) ||
-                  memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTPS)))
+                  memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTPS))) {
                 continue;
+            }
             for (NeutronLoadBalancerPoolMember neutronLBPoolMember: members) {
                 memberAdminStateIsUp = neutronLBPoolMember.getPoolMemberAdminStateIsUp();
                 memberSubnetID = neutronLBPoolMember.getPoolMemberSubnetID();
-                if (memberSubnetID == null || memberAdminStateIsUp == null)
+                if (memberSubnetID == null || memberAdminStateIsUp == null) {
                     continue;
+                }
                 else if (memberSubnetID.equals(loadBalancerSubnetID) && memberAdminStateIsUp.booleanValue()) {
                     memberID = neutronLBPoolMember.getPoolMemberID();
                     memberIP = neutronLBPoolMember.getPoolMemberAddress();
@@ -195,9 +210,10 @@ public class LBaaSHandler extends AbstractHandler
                         logger.debug("Neutron LB pool member details incomplete: {}", neutronLBPoolMember);
                         continue;
                     }
-                    memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberIP);
-                    if (memberMAC == null)
+                    memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberSubnetID, memberIP);
+                    if (memberMAC == null) {
                         continue;
+                    }
                     lbConfig.addMember(memberID, memberIP, memberMAC, memberProtocol, memberPort);
                 }
             }
@@ -217,19 +233,22 @@ public class LBaaSHandler extends AbstractHandler
 
         for (NeutronLoadBalancer neutronLB: neutronLBCache.getAllNeutronLoadBalancers()) {
             LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLB);
-            if (!lbConfig.isValid())
+            if (!lbConfig.isValid()) {
                 logger.debug("Neutron LB configuration invalid for {} ", lbConfig.getName());
-            else {
-               if (type.equals(UpdateType.ADDED))
-                    loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD);
+            else {
+               if (type.equals(UpdateType.ADDED)) {
+                   loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD);
 
                /* When node disappears, we do nothing for now. Making a call to
                 * loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.DELETE)
                 * can lead to TransactionCommitFailedException. Similarly when node is changed,
                 * because of remove followed by add, we do nothing.
                 */
-               else //(type.equals(UpdateType.REMOVED) || type.equals(UpdateType.CHANGED))
-                    continue;
+
+                 //(type.equals(UpdateType.REMOVED) || type.equals(UpdateType.CHANGED))
+               } else {
+                   continue;
+               }
             }
         }
     }