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';