add the ability to add NetScaler device as GSLB provider in a zone

Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/11a7546f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/11a7546f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/11a7546f

Branch: refs/heads/gslb-wip
Commit: 11a7546f1ebca7df9a4779db156d1b8cd7d15671
Parents: 89c33a0
Author: Murali Reddy <murali.re...@citrix.com>
Authored: Mon Mar 11 12:42:51 2013 +0530
Committer: Murali Reddy <murali.re...@citrix.com>
Committed: Mon Mar 11 12:42:51 2013 +0530

----------------------------------------------------------------------
 .../org/apache/cloudstack/api/ApiConstants.java    |    2 +
 .../element/F5ExternalLoadBalancerElement.java     |    4 +-
 .../api/commands/AddNetscalerLoadBalancerCmd.java  |   18 +++++++-
 .../cloud/network/element/NetscalerElement.java    |   34 ++++++++++---
 .../network/ExternalLoadBalancerDeviceManager.java |    3 +-
 .../ExternalLoadBalancerDeviceManagerImpl.java     |   38 ++++++++++----
 .../network/dao/ExternalLoadBalancerDeviceDao.java |   11 ++++-
 .../dao/ExternalLoadBalancerDeviceDaoImpl.java     |   25 ++++++++--
 .../network/dao/ExternalLoadBalancerDeviceVO.java  |   24 +++++++++
 .../cloudstack/region/RegionServiceProvider.java   |    4 +-
 .../gslb/GlobalLoadBalancingRulesServiceImpl.java  |    6 +-
 .../region/gslb/GslbServiceProvider.java           |    4 +-
 setup/db/create-schema.sql                         |    4 +-
 13 files changed, 140 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java 
b/api/src/org/apache/cloudstack/api/ApiConstants.java
index e1cf9a4..e930d86 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -444,6 +444,8 @@ public class ApiConstants {
     public static final String BAREMETAL_DISCOVER_NAME = 
"baremetaldiscovername";
     public static final String UCS_DN = "ucsdn";
     public static final String GSLB_PROVIDER = "gslbprovider";
+    public static final String GSLB_PROVIDER_PUBLIC_IP = 
"gslbproviderpublicip";
+    public static final String GSLB_PROVIDER_PRIVATE_IP = 
"gslbproviderprivateip";
 
     public enum HostDetails {
         all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
 
b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
index f9baad2..640e19a 100644
--- 
a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
+++ 
b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
@@ -264,7 +264,7 @@ public class F5ExternalLoadBalancerElement extends 
ExternalLoadBalancerDeviceMan
 
         String deviceType = NetworkDevice.F5BigIpLoadBalancer.getName();
         lbDeviceVO = addExternalLoadBalancer(pNetwork.getId(), cmd.getUrl(), 
cmd.getUsername(), cmd.getPassword(),
-                deviceType, new F5BigIpResource(), false);
+                deviceType, new F5BigIpResource(), false, null, null);
 
         if (lbDeviceVO != null) {
             lbHost = _hostDao.findById(lbDeviceVO.getHostId());
@@ -318,7 +318,7 @@ public class F5ExternalLoadBalancerElement extends 
ExternalLoadBalancerDeviceMan
         }
 
         return addExternalLoadBalancer(cmd.getPhysicalNetworkId(), 
cmd.getUrl(), cmd.getUsername(), cmd.getPassword(),
-                deviceName, new F5BigIpResource(), false);
+                deviceName, new F5BigIpResource(), false, null, null);
 
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
 
b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
index 9de15d2..e4327b4 100644
--- 
a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
+++ 
b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java
@@ -56,9 +56,17 @@ public class AddNetscalerLoadBalancerCmd extends 
BaseAsyncCmd {
     private String deviceType;
 
     @Parameter(name = ApiConstants.GSLB_PROVIDER, type = CommandType.BOOLEAN, 
required = false,
-            description = "true if NetScaler device bieng added is for 
providing GSLB service")
+            description = "true if NetScaler device being added is for 
providing GSLB service")
     private boolean  isGslbProvider;
 
+    @Parameter(name = ApiConstants.GSLB_PROVIDER_PUBLIC_IP, type = 
CommandType.STRING, required = false,
+            description = "public IP of the site")
+    private String gslbSitePublicIp;
+
+    @Parameter(name = ApiConstants.GSLB_PROVIDER_PRIVATE_IP, type = 
CommandType.STRING, required = false,
+            description = "public IP of the site")
+    private String gslbSitePrivateIp;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -87,6 +95,14 @@ public class AddNetscalerLoadBalancerCmd extends 
BaseAsyncCmd {
         return isGslbProvider;
     }
 
+    public String getSitePublicIp() {
+        return gslbSitePublicIp;
+    }
+
+    public String getSitePrivateIp() {
+        return gslbSitePrivateIp;
+    }
+
     /////////////////////////////////////////////////////
     /////////////// API Implementation///////////////////
     /////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
 
b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
index 4392544..dedaeaf 100644
--- 
a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
+++ 
b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
@@ -80,7 +80,7 @@ import javax.inject.Inject;
 import java.net.URI;
 import java.util.*;
 
-@Local(value = {NetworkElement.class, StaticNatServiceProvider.class, 
LoadBalancingServiceProvider.class})
+@Local(value = {NetworkElement.class, StaticNatServiceProvider.class, 
LoadBalancingServiceProvider.class, GslbServiceProvider.class})
 public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl 
implements LoadBalancingServiceProvider,
         NetscalerLoadBalancerElementService, 
ExternalLoadBalancerDeviceManager, IpDeployer, StaticNatServiceProvider,
         GslbServiceProvider {
@@ -305,8 +305,26 @@ public class NetscalerElement extends 
ExternalLoadBalancerDeviceManagerImpl impl
             throw new InvalidParameterValueException(msg);
         }
 
+        if (cmd.isGslbProvider()) {
+
+            if 
(!deviceName.equals(NetworkDevice.NetscalerVPXLoadBalancer.getName()) &&
+                    
!deviceName.equals(NetworkDevice.NetscalerMPXLoadBalancer.getName())) {
+                String msg = "Only Netscaler VPX or MPX load balancers can be 
specified as GSLB service provider";
+                s_logger.debug(msg);
+                throw new InvalidParameterValueException(msg);
+            }
+
+            if (cmd.getSitePublicIp() == null || cmd.getSitePrivateIp() == 
null) {
+                String msg = "Public and Privae IP needs to provided for 
NetScaler that will be GSLB provider";
+                s_logger.debug(msg);
+                throw new InvalidParameterValueException(msg);
+            }
+        }
+
         ExternalLoadBalancerDeviceVO lbDeviceVO = 
addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(),
-                cmd.getUsername(), cmd.getPassword(), deviceName, new 
NetscalerResource(), cmd.isGslbProvider());
+                cmd.getUsername(), cmd.getPassword(), deviceName, new 
NetscalerResource(), cmd.isGslbProvider(),
+                cmd.getSitePublicIp(), cmd.getSitePrivateIp());
+
         return lbDeviceVO;
     }
 
@@ -791,17 +809,17 @@ public class NetscalerElement extends 
ExternalLoadBalancerDeviceManagerImpl impl
 
     @Override
     public boolean isServiceEnabledInZone(long zoneId) {
-        return false;  //To change body of implemented methods use File | 
Settings | File Templates.
+        return false;
     }
 
     @Override
-    public String getProviderPublicIp(long zoneId) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    public String getZoneGslbProviderPublicIp(long zoneId) {
+        return null;
     }
 
     @Override
-    public String getProviderPrivateIp(long zoneId) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    public String getZoneGslbProviderPrivateIp(long zoneId) {
+        return null;
     }
 
     @Override
@@ -814,6 +832,6 @@ public class NetscalerElement extends 
ExternalLoadBalancerDeviceManagerImpl impl
         if (answer == null) {
 
         }
-        return false;  //To change body of implemented methods use File | 
Settings | File Templates.
+        return false;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java 
b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
index 34f5905..9f55930 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
@@ -47,7 +47,8 @@ public interface ExternalLoadBalancerDeviceManager extends 
Manager{
      * @return Host object for the device added
      */
     public ExternalLoadBalancerDeviceVO addExternalLoadBalancer(long 
physicalNetworkId, String url, String username,
-                String password, String deviceName, ServerResource resource, 
boolean gslbProvider);
+                String password, String deviceName, ServerResource resource, 
boolean gslbProvider,
+                String gslbSitePublicIp, String gslbSitePrivateIp);
 
     /**
      * deletes load balancer device added in to a physical network

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java 
b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
index 33de0ee..0498cc1 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
@@ -158,7 +158,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
     @Override
     @DB
     public ExternalLoadBalancerDeviceVO addExternalLoadBalancer(long 
physicalNetworkId, String url,
-                String username, String password, String deviceName, 
ServerResource resource, boolean gslbProvider) {
+                String username, String password, String deviceName, 
ServerResource resource, boolean gslbProvider,
+                String gslbSitePublicIp, String gslbSitePrivateIp) {
 
         PhysicalNetworkVO pNetwork = null;
         NetworkDevice ntwkDevice = NetworkDevice.getNetworkDevice(deviceName);
@@ -173,15 +174,25 @@ public abstract class 
ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
         if (pNetwork == null) {
             throw new InvalidParameterValueException("Could not find phyical 
network with ID: " + physicalNetworkId);
         }
-        zoneId = pNetwork.getDataCenterId();
 
+        zoneId = pNetwork.getDataCenterId();
         PhysicalNetworkServiceProviderVO ntwkSvcProvider = 
_physicalNetworkServiceProviderDao.findByServiceProvider(pNetwork.getId(), 
ntwkDevice.getNetworkServiceProvder());
-        if (ntwkSvcProvider == null) {
-            throw new CloudRuntimeException("Network Service Provider: " + 
ntwkDevice.getNetworkServiceProvder() +
-                    " is not enabled in the physical network: " + 
physicalNetworkId + "to add this device");
-        } else if (ntwkSvcProvider.getState() == 
PhysicalNetworkServiceProvider.State.Shutdown) {
-            throw new CloudRuntimeException("Network Service Provider: " + 
ntwkSvcProvider.getProviderName() +
-                    " is in shutdown state in the physical network: " + 
physicalNetworkId + "to add this device");
+
+        if (gslbProvider) {
+            ExternalLoadBalancerDeviceVO zoneGslbProvider = 
_externalLoadBalancerDeviceDao.findGslbServiceProvider(
+                    physicalNetworkId, ntwkDevice.getNetworkServiceProvder());
+            if (zoneGslbProvider != null) {
+                throw new CloudRuntimeException("There is a GSLB service 
provider configured in the zone alredy.");
+            }
+        } else {
+            ntwkSvcProvider = 
_physicalNetworkServiceProviderDao.findByServiceProvider(pNetwork.getId(), 
ntwkDevice.getNetworkServiceProvder());
+            if (ntwkSvcProvider == null) {
+                throw new CloudRuntimeException("Network Service Provider: " + 
ntwkDevice.getNetworkServiceProvder() +
+                        " is not enabled in the physical network: " + 
physicalNetworkId + "to add this device");
+            } else if (ntwkSvcProvider.getState() == 
PhysicalNetworkServiceProvider.State.Shutdown) {
+                throw new CloudRuntimeException("Network Service Provider: " + 
ntwkSvcProvider.getProviderName() +
+                        " is in shutdown state in the physical network: " + 
physicalNetworkId + "to add this device");
+            }
         }
 
         URI uri;
@@ -222,11 +233,15 @@ public abstract class 
ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                     capacity = _defaultLbCapacity;
                 }
 
+                ExternalLoadBalancerDeviceVO lbDeviceVO;
                 txn.start();
-                ExternalLoadBalancerDeviceVO lbDeviceVO = new 
ExternalLoadBalancerDeviceVO(host.getId(), pNetwork.getId(), 
ntwkSvcProvider.getProviderName(),
+                lbDeviceVO = new ExternalLoadBalancerDeviceVO(host.getId(), 
pNetwork.getId(), ntwkDevice.getNetworkServiceProvder(),
                         deviceName, capacity, dedicatedUse, gslbProvider);
                 _externalLoadBalancerDeviceDao.persist(lbDeviceVO);
-
+                if (!gslbProvider) {
+                    lbDeviceVO.setGslbSitePrivateIP(gslbSitePublicIp);
+                    lbDeviceVO.setGslbSitePrivateIP(gslbSitePrivateIp);
+                }
                 DetailVO hostDetail = new DetailVO(host.getId(), 
ApiConstants.LOAD_BALANCER_DEVICE_ID, String.valueOf(lbDeviceVO.getId()));
                 _hostDetailDao.persist(hostDetail);
 
@@ -471,7 +486,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                             ExternalLoadBalancerDeviceVO lbAppliance = null;
                             try {
                                 lbAppliance = 
addExternalLoadBalancer(physicalNetworkId, url, username, password,
-                                        createLbAnswer.getDeviceName(), 
createLbAnswer.getServerResource(), false);
+                                        createLbAnswer.getDeviceName(), 
createLbAnswer.getServerResource(), false,
+                                        null, null);
                             } catch (Exception e) {
                                 s_logger.error("Failed to add load balancer 
appliance in to cloudstack due to " + e.getMessage() + ". So provisioned load 
balancer appliance will be destroyed.");
                             }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java 
b/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
index 1bd2107..b7baa7e 100644
--- a/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
+++ b/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDao.java
@@ -16,12 +16,12 @@
 // under the License.
 package com.cloud.network.dao;
 
-import java.util.List;
-
 import 
com.cloud.network.dao.ExternalLoadBalancerDeviceVO.LBDeviceAllocationState;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceVO.LBDeviceState;
 import com.cloud.utils.db.GenericDao;
 
+import java.util.List;
+
 public interface ExternalLoadBalancerDeviceDao extends 
GenericDao<ExternalLoadBalancerDeviceVO, Long> {
 
     /**
@@ -64,4 +64,11 @@ public interface ExternalLoadBalancerDeviceDao extends 
GenericDao<ExternalLoadBa
      * @return list of ExternalLoadBalancerDeviceVO for the devices in to this 
physical network of a managed type
      */
     List<ExternalLoadBalancerDeviceVO> listByProviderAndManagedType(long 
physicalNetworkId, String provider_name, boolean managed);
+
+    /**
+     * Find the external load balancer device that is provisioned as GSLB 
service provider in the pyshical network
+     * @param physicalNetworkId physical Network Id
+     * @return ExternalLoadBalancerDeviceVO for the device acting as GSLB 
provider in the physical network
+     */
+    ExternalLoadBalancerDeviceVO findGslbServiceProvider(long 
physicalNetworkId, String providerName);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java 
b/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
index e559fad..ea6437d 100644
--- a/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
+++ b/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
@@ -16,11 +16,6 @@
 // under the License.
 package com.cloud.network.dao;
 
-import java.util.List;
-import javax.ejb.Local;
-
-import org.springframework.stereotype.Component;
-
 import 
com.cloud.network.dao.ExternalLoadBalancerDeviceVO.LBDeviceAllocationState;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceVO.LBDeviceState;
 import com.cloud.utils.db.DB;
@@ -28,6 +23,10 @@ import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
+import org.springframework.stereotype.Component;
+
+import javax.ejb.Local;
+import java.util.List;
 
 @Component
 @Local(value=ExternalLoadBalancerDeviceDao.class) @DB(txn=false)
@@ -37,6 +36,7 @@ public class ExternalLoadBalancerDeviceDaoImpl extends 
GenericDaoBase<ExternalLo
     final SearchBuilder<ExternalLoadBalancerDeviceVO> allocationStateSearch;
     final SearchBuilder<ExternalLoadBalancerDeviceVO> deviceStatusSearch;
     final SearchBuilder<ExternalLoadBalancerDeviceVO> deviceManagedTypeSearch;
+    final SearchBuilder<ExternalLoadBalancerDeviceVO> gslbProviderSearch;
 
     public ExternalLoadBalancerDeviceDaoImpl() {
         super();
@@ -67,6 +67,12 @@ public class ExternalLoadBalancerDeviceDaoImpl extends 
GenericDaoBase<ExternalLo
         deviceManagedTypeSearch.and("providerName", 
deviceManagedTypeSearch.entity().getProviderName(), Op.EQ);
         deviceManagedTypeSearch.and("managedType", 
deviceManagedTypeSearch.entity().getIsManagedDevice(), Op.EQ);
         deviceManagedTypeSearch.done();
+
+        gslbProviderSearch = createSearchBuilder();
+        gslbProviderSearch.and("physicalNetworkId", 
gslbProviderSearch.entity().getPhysicalNetworkId(), Op.EQ);
+        gslbProviderSearch.and("providerName", 
gslbProviderSearch.entity().getProviderName(), Op.EQ);
+        gslbProviderSearch.and("gslbProvider", 
gslbProviderSearch.entity().getGslbProvider(), Op.EQ);
+
     }
 
     public List<ExternalLoadBalancerDeviceVO> listByPhysicalNetwork(long 
physicalNetworkId) {
@@ -109,4 +115,13 @@ public class ExternalLoadBalancerDeviceDaoImpl extends 
GenericDaoBase<ExternalLo
         sc.setParameters("managedType", managed);
         return search(sc, null);
     }
+
+    @Override
+    public ExternalLoadBalancerDeviceVO findGslbServiceProvider(long 
physicalNetworkId, String providerName) {
+        SearchCriteria<ExternalLoadBalancerDeviceVO> sc = 
gslbProviderSearch.create();
+        sc.setParameters("physicalNetworkId", physicalNetworkId);
+        sc.setParameters("providerName", providerName);
+        sc.setParameters("gslbProvider", true);
+        return findOneBy(sc);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java 
b/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
index a859af1..04714a6 100644
--- a/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
+++ b/server/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
@@ -68,6 +68,12 @@ public class ExternalLoadBalancerDeviceVO implements 
InternalIdentity, Identity
     @Column(name="is_gslb_provider")
     private boolean gslbProvider;
 
+    @Column(name="gslb_site_publicip")
+    private String gslbSitePublicIP;
+
+    @Column(name="gslb_site_privateip")
+    private String gslbSitePrivateIP;
+
     @Column(name = "parent_host_id")
     private long parentHostId;
 
@@ -101,6 +107,8 @@ public class ExternalLoadBalancerDeviceVO implements 
InternalIdentity, Identity
         this.state = LBDeviceState.Enabled;
         this.uuid = UUID.randomUUID().toString();
         this.gslbProvider = gslbProvider;
+        this.gslbSitePublicIP = null;
+        this.gslbSitePrivateIP = null;
         if 
(device_name.equalsIgnoreCase(ExternalNetworkDeviceManager.NetworkDevice.NetscalerSDXLoadBalancer.getName()))
 {
             this.allocationState = LBDeviceAllocationState.Provider;
         }
@@ -193,6 +201,22 @@ public class ExternalLoadBalancerDeviceVO implements 
InternalIdentity, Identity
         gslbProvider = gslbProvider;
     }
 
+    public void setGslbSitePublicIP(String gslbSitePublicIP) {
+        this.gslbSitePublicIP = gslbSitePublicIP;
+    }
+
+    public String getGslbSitePublicIP() {
+        return gslbSitePublicIP;
+    }
+
+    public void setGslbSitePrivateIP(String gslbSitePrivateIP) {
+        this.gslbSitePrivateIP = gslbSitePrivateIP;
+    }
+
+    public String getGslbSitePrivateIP() {
+        return gslbSitePrivateIP;
+    }
+
     public String getUuid() {
         return uuid;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/org/apache/cloudstack/region/RegionServiceProvider.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/RegionServiceProvider.java 
b/server/src/org/apache/cloudstack/region/RegionServiceProvider.java
index 28375a9..ad7e22f 100755
--- a/server/src/org/apache/cloudstack/region/RegionServiceProvider.java
+++ b/server/src/org/apache/cloudstack/region/RegionServiceProvider.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cloudstack.region;
 
-public interface RegionServiceProvider {
+import com.cloud.utils.component.Adapter;
+
+public interface RegionServiceProvider extends Adapter {
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
 
b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
index 7d0bd96..8042b64 100644
--- 
a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
+++ 
b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
@@ -80,7 +80,7 @@ public class GlobalLoadBalancingRulesServiceImpl implements 
GlobalLoadBalancingR
     @Inject
     AgentManager _agentMgr;
     @Inject
-    GslbServiceProvider _gslbProvider;
+    protected GslbServiceProvider _gslbProvider;
 
     @Override
     @DB
@@ -521,8 +521,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements 
GlobalLoadBalancingR
             SiteLoadBalancerConfig siteLb = new 
SiteLoadBalancerConfig(gslbLbMapVo.isRevoke(), serviceType,
                     ip.getAddress().addr(), 
Integer.toString(loadBalancer.getDefaultPortStart()));
 
-            
siteLb.setGslbProviderPublicIp(_gslbProvider.getProviderPublicIp(dataCenterId));
-            
siteLb.setGslbProviderPrivateIp(_gslbProvider.getProviderPrivateIp(dataCenterId));
+            
siteLb.setGslbProviderPublicIp(_gslbProvider.getZoneGslbProviderPublicIp(dataCenterId));
+            
siteLb.setGslbProviderPrivateIp(_gslbProvider.getZoneGslbProviderPrivateIp(dataCenterId));
 
             zoneSiteLoadbalancerMap.put(network.getDataCenterId(), siteLb);
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java 
b/server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
index 416f187..4338d65 100755
--- a/server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GslbServiceProvider.java
@@ -26,9 +26,9 @@ public interface GslbServiceProvider extends 
RegionServiceProvider {
 
     public boolean isServiceEnabledInZone(long zoneId);
 
-    public String getProviderPublicIp(long zoneId);
+    public String getZoneGslbProviderPublicIp(long zoneId);
 
-    public String getProviderPrivateIp(long zoneId);
+    public String getZoneGslbProviderPrivateIp(long zoneId);
 
     public boolean applyGlobalLoadBalancerRule(long zoneId, 
GlobalLoadBalancerConfigCommand gslbConfigCmd)
             throws ResourceUnavailableException;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/11a7546f/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 04fc2dd..c837a44 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2131,7 +2131,9 @@ CREATE TABLE `cloud`.`external_load_balancer_devices` (
   `allocation_state` varchar(32) NOT NULL DEFAULT 'Free' COMMENT 'Allocation 
state (Free/Shared/Dedicated/Provider) of the device',
   `is_dedicated` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if 
device/appliance is provisioned for dedicated use only',
   `is_managed` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if load balancer 
appliance is provisioned and its life cycle is managed by by cloudstack',
-  `is_gslb_provider` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if load 
balancer appliance provides gslb service as well',
+  `is_gslb_provider` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if load 
balancer appliance is acting as gslb service provider in the zone',
+  `gslb_site_publicip` varchar(255)  DEFAULT NULL COMMENT 'GSLB service 
Provider site public ip',
+  `gslb_site_privateip` varchar(255) DEFAULT NULL COMMENT 'GSLB service 
Provider site private ip',
   `host_id` bigint unsigned NOT NULL COMMENT 'host id coresponding to the 
external load balancer device',
   `parent_host_id` bigint unsigned COMMENT 'if the load balancer appliance is 
cloudstack managed, then host id on which this appliance is provisioned',
   PRIMARY KEY (`id`),

Reply via email to