You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mu...@apache.org on 2013/12/10 01:51:32 UTC

git commit: updated refs/heads/master to be67f5d

Updated Branches:
  refs/heads/master e79350d25 -> be67f5d17


CLOUDSTACK-5428: support NetScaler to be configured exclusively for GSLB
service and not used for LB

Fix adds a boolean flag to addNetscalerLoadBalancer api, which
will mark added NetScaler for exclusive GSLB service. A netscaler marked
as exclusive gslb service provider is not picked for any guest network's
lb provider.


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

Branch: refs/heads/master
Commit: be67f5d17afd65e99759eb8f538016004b529588
Parents: e79350d
Author: Murali Reddy <mu...@gmail.com>
Authored: Tue Dec 10 06:19:00 2013 +0530
Committer: Murali Reddy <mu...@gmail.com>
Committed: Tue Dec 10 06:20:58 2013 +0530

----------------------------------------------------------------------
 .../org/apache/cloudstack/api/ApiConstants.java |  1 +
 .../dao/ExternalLoadBalancerDeviceDaoImpl.java  |  2 ++
 .../dao/ExternalLoadBalancerDeviceVO.java       | 11 ++++++++++
 .../element/F5ExternalLoadBalancerElement.java  |  6 ++++--
 .../commands/AddNetscalerLoadBalancerCmd.java   | 22 ++++++++++++++++++--
 .../response/NetscalerLoadBalancerResponse.java |  8 +++++++
 .../cloud/network/element/NetscalerElement.java |  8 ++++++-
 .../ExternalLoadBalancerDeviceManager.java      |  2 +-
 .../ExternalLoadBalancerDeviceManagerImpl.java  |  6 ++++--
 setup/db/db/schema-421to430.sql                 |  2 ++
 10 files changed, 60 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/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 745a722..a132e54 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -502,6 +502,7 @@ 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 EXCLUSIVE_GSLB_PROVIDER = "isexclusivegslbprovider";
     public static final String GSLB_PROVIDER_PUBLIC_IP = "gslbproviderpublicip";
     public static final String GSLB_PROVIDER_PRIVATE_IP = "gslbproviderprivateip";
     public static final String VM_SNAPSHOT_DESCRIPTION = "description";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java b/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
index f12d063..432b4a2 100644
--- a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceDaoImpl.java
@@ -57,6 +57,7 @@ public class ExternalLoadBalancerDeviceDaoImpl extends GenericDaoBase<ExternalLo
         allocationStateSearch.and("physicalNetworkId", allocationStateSearch.entity().getPhysicalNetworkId(), Op.EQ);
         allocationStateSearch.and("providerName", allocationStateSearch.entity().getProviderName(), Op.EQ);
         allocationStateSearch.and("allocationState", allocationStateSearch.entity().getAllocationState(), Op.EQ);
+        allocationStateSearch.and("exclusiveGslbProvider", allocationStateSearch.entity().getExclusiveGslbProvider(), Op.EQ);
         allocationStateSearch.done();
 
         deviceStatusSearch = createSearchBuilder();
@@ -99,6 +100,7 @@ public class ExternalLoadBalancerDeviceDaoImpl extends GenericDaoBase<ExternalLo
         sc.setParameters("physicalNetworkId", physicalNetworkId);
         sc.setParameters("providerName", provider_name);
         sc.setParameters("allocationState", state);
+        sc.setParameters("exclusiveGslbProvider", false);
         return search(sc, null);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java b/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
index 8cc13fd..d82d537 100644
--- a/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
+++ b/engine/schema/src/com/cloud/network/dao/ExternalLoadBalancerDeviceVO.java
@@ -76,6 +76,9 @@ public class ExternalLoadBalancerDeviceVO implements InternalIdentity, Identity
     @Column(name = "is_gslb_provider")
     private boolean gslbProvider;
 
+    @Column(name = "is_exclusive_gslb_provider")
+    private boolean exclusiveGslbProvider;
+
     @Column(name = "gslb_site_publicip")
     private String gslbSitePublicIP;
 
@@ -209,6 +212,14 @@ public class ExternalLoadBalancerDeviceVO implements InternalIdentity, Identity
         this.gslbProvider = gslbProvider;
     }
 
+    public boolean getExclusiveGslbProvider() {
+        return exclusiveGslbProvider;
+    }
+
+    public void setExclusiveGslbProvider(boolean exclusiveGslbProvider) {
+        this.exclusiveGslbProvider = exclusiveGslbProvider;
+    }
+
     public void setGslbSitePublicIP(String gslbSitePublicIP) {
         this.gslbSitePublicIP = gslbSitePublicIP;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/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 daabf36..1a591e1 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
@@ -321,7 +321,8 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan
         pNetwork = physicalNetworks.get(0);
 
         String deviceType = NetworkDevice.F5BigIpLoadBalancer.getName();
-        lbDeviceVO = addExternalLoadBalancer(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceType, new F5BigIpResource(), false, null, null);
+        lbDeviceVO = addExternalLoadBalancer(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(),
+                deviceType, new F5BigIpResource(), false, false, null, null);
 
         if (lbDeviceVO != null) {
             lbHost = _hostDao.findById(lbDeviceVO.getHostId());
@@ -374,7 +375,8 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan
             throw new InvalidParameterValueException("Invalid F5 load balancer device type");
         }
 
-        return addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceName, new F5BigIpResource(), false, null,
+        return addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(),
+                deviceName, new F5BigIpResource(), false, false, null,
             null);
 
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/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 9188f3a..1237e7f 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
@@ -77,7 +77,7 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd {
                type = CommandType.BOOLEAN,
                required = false,
                description = "true if NetScaler device being added is for providing GSLB service")
-    private boolean isGslbProvider;
+    private Boolean isGslbProvider;
 
     @Parameter(name = ApiConstants.GSLB_PROVIDER_PUBLIC_IP, type = CommandType.STRING, required = false, description = "public IP of the site")
     private String gslbSitePublicIp;
@@ -85,6 +85,12 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd {
     @Parameter(name = ApiConstants.GSLB_PROVIDER_PRIVATE_IP, type = CommandType.STRING, required = false, description = "public IP of the site")
     private String gslbSitePrivateIp;
 
+    @Parameter(name = ApiConstants.EXCLUSIVE_GSLB_PROVIDER,
+            type = CommandType.BOOLEAN,
+            required = false,
+            description = "true if NetScaler device being added is for providing GSLB service exclusively and can not be used for LB")
+    private Boolean isExclusiveGslbProvider;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -110,7 +116,19 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd {
     }
 
     public boolean isGslbProvider() {
-        return isGslbProvider;
+        if (isGslbProvider != null) {
+            return isGslbProvider;
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isExclusiveGslbProvider() {
+        if (isExclusiveGslbProvider != null) {
+            return isExclusiveGslbProvider;
+        } else {
+            return false;
+        }
     }
 
     public String getSitePublicIp() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java
index 63de361..8b942f4 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java
@@ -75,6 +75,10 @@ public class NetscalerLoadBalancerResponse extends BaseResponse {
     @Param(description = "true if NetScaler device is provisioned to be a GSLB service provider")
     private Boolean isGslbProvider;
 
+    @SerializedName(ApiConstants.EXCLUSIVE_GSLB_PROVIDER)
+    @Param(description = "true if NetScaler device is provisioned exclusively to be a GSLB service provider")
+    private Boolean isExclusiveGslbProvider;
+
     @SerializedName(ApiConstants.GSLB_PROVIDER_PUBLIC_IP)
     @Param(description = "public IP of the NetScaler representing GSLB site")
     private String gslbSitePublicIp;
@@ -137,6 +141,10 @@ public class NetscalerLoadBalancerResponse extends BaseResponse {
         this.isGslbProvider = isGslbProvider;
     }
 
+    public void setExclusiveGslbProvider(boolean isExclusiveGslbProvider) {
+        this.isExclusiveGslbProvider = isExclusiveGslbProvider;
+    }
+
     public void setGslbSitePublicIp(String publicIP) {
         this.gslbSitePublicIp = publicIP;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/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 7e68f4e..a2bda90 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
@@ -381,9 +381,14 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
 
         }
 
+        if (cmd.isExclusiveGslbProvider() && !cmd.isGslbProvider()) {
+            throw new InvalidParameterValueException("NetScaler can be provisioned to be exclusive GSLB service provider" +
+                    " only if its being configured as GSLB service provider also.");
+        }
+
         ExternalLoadBalancerDeviceVO lbDeviceVO =
             addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceName, new NetscalerResource(),
-                cmd.isGslbProvider(), cmd.getSitePublicIp(), cmd.getSitePrivateIp());
+                cmd.isGslbProvider(), cmd.isExclusiveGslbProvider(), cmd.getSitePublicIp(), cmd.getSitePrivateIp());
 
         return lbDeviceVO;
     }
@@ -605,6 +610,7 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
         response.setObjectName("netscalerloadbalancer");
 
         response.setGslbProvider(lbDeviceVO.getGslbProvider());
+        response.setExclusiveGslbProvider(lbDeviceVO.getExclusiveGslbProvider());
         response.setGslbSitePublicIp(lbDeviceVO.getGslbSitePublicIP());
         response.setGslbSitePrivateIp(lbDeviceVO.getGslbSitePrivateIP());
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/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 9f13c2a..850d0d7 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java
@@ -47,7 +47,7 @@ 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 gslbSitePublicIp, String gslbSitePrivateIp);
+        ServerResource resource, boolean gslbProvider, boolean exclusiveGslbProvider, String gslbSitePublicIp, String gslbSitePrivateIp);
 
     /**
      * deletes load balancer device added in to a physical network

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be67f5d1/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 ea23b8a..2a22ac2 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
@@ -198,7 +198,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
     @Override
     @DB
     public ExternalLoadBalancerDeviceVO addExternalLoadBalancer(long physicalNetworkId, String url, String username, String password, final String deviceName,
-        ServerResource resource, final boolean gslbProvider, final String gslbSitePublicIp, final String gslbSitePrivateIp) {
+        ServerResource resource, final boolean gslbProvider, final boolean exclusiveGslbProivider,
+        final String gslbSitePublicIp, final String gslbSitePrivateIp) {
 
         PhysicalNetworkVO pNetwork = null;
         final NetworkDevice ntwkDevice = NetworkDevice.getNetworkDevice(deviceName);
@@ -285,6 +286,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                         if (gslbProvider) {
                             lbDeviceVO.setGslbSitePublicIP(gslbSitePublicIp);
                             lbDeviceVO.setGslbSitePrivateIP(gslbSitePrivateIp);
+                            lbDeviceVO.setExclusiveGslbProvider(exclusiveGslbProivider);
                         }
                         _externalLoadBalancerDeviceDao.persist(lbDeviceVO);
                         DetailVO hostDetail = new DetailVO(host.getId(), ApiConstants.LOAD_BALANCER_DEVICE_ID, String.valueOf(lbDeviceVO.getId()));
@@ -528,7 +530,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                             try {
                                 lbAppliance =
                                     addExternalLoadBalancer(physicalNetworkId, url, username, password, createLbAnswer.getDeviceName(),
-                                        createLbAnswer.getServerResource(), false, null, null);
+                                        createLbAnswer.getServerResource(), false, 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/cloudstack/blob/be67f5d1/setup/db/db/schema-421to430.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql
index cf6f596..5f81050 100644
--- a/setup/db/db/schema-421to430.sql
+++ b/setup/db/db/schema-421to430.sql
@@ -804,3 +804,5 @@ CREATE TABLE `cloud`.`network_acl_item_details` (
 ALTER TABLE `cloud`.`alert` ADD COLUMN `name` varchar(255) DEFAULT NULL COMMENT 'name of the alert';
 
 UPDATE `cloud`.`hypervisor_capabilities` SET `max_data_volumes_limit`=13 WHERE `hypervisor_type`='Vmware';
+
+ALTER TABLE `cloud`.`external_load_balancer_devices` ADD COLUMN `is_exclusive_gslb_provider` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if load balancer appliance is acting exclusively as gslb service provider in the zone and can not be used for LB';