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/04/30 11:01:11 UTC
git commit: updated refs/heads/master to 09af150
Updated Branches:
refs/heads/master e7f4bfe1b -> 09af15035
CLOUDSTACK-2292: GSLB: server object need to be created when 'zone load
balancer' is configured on different LB service provider
creating a server object before creating GSLB service
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/09af1503
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/09af1503
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/09af1503
Branch: refs/heads/master
Commit: 09af15035b9febe6f55e73a1389f950ab042564f
Parents: e7f4bfe
Author: Murali Reddy <mu...@citrix.com>
Authored: Tue Apr 30 14:13:51 2013 +0530
Committer: Murali Reddy <mu...@citrix.com>
Committed: Tue Apr 30 14:15:54 2013 +0530
----------------------------------------------------------------------
.../cloud/network/resource/NetscalerResource.java | 64 ++++++++++++++-
1 files changed, 60 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/09af1503/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
index b82176b..677bc78 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
@@ -1211,6 +1211,18 @@ public class NetscalerResource implements ServerResource {
try {
gslbservice service;
service = getServiceObject(client, serviceName);
+ String gslbServerName = generateGslbServerName(serviceIp);
+
+ if (!gslbServerExists(client, gslbServerName)) {
+ base_response apiCallResult;
+ com.citrix.netscaler.nitro.resource.config.basic.server nsServer = new com.citrix.netscaler.nitro.resource.config.basic.server();
+ nsServer.set_name(gslbServerName);
+ nsServer.set_ipaddress(serviceIp);
+ apiCallResult = com.citrix.netscaler.nitro.resource.config.basic.server.add(client, nsServer);
+ if ((apiCallResult.errorcode != 0) && (apiCallResult.errorcode != NitroError.NS_RESOURCE_EXISTS)) {
+ throw new ExecutionException("Failed to add server " + gslbServerName + " due to" + apiCallResult.message);
+ }
+ }
boolean isUpdateSite = false;
if (service == null) {
@@ -1220,7 +1232,7 @@ public class NetscalerResource implements ServerResource {
}
service.set_sitename(siteName);
- service.set_servername(serviceIp);
+ service.set_servername(gslbServerName);
int port = Integer.parseInt(servicePort);
service.set_port(port);
service.set_servicename(serviceName);
@@ -1236,7 +1248,7 @@ public class NetscalerResource implements ServerResource {
s_logger.debug("Successfully created service: " + serviceName + " at site: " + siteName);
}
} catch (Exception e) {
- String errMsg = "Failed to created service: " + serviceName + " at site: " + siteName;
+ String errMsg = "Failed to created service: " + serviceName + " at site: " + siteName + " due to " + e.getMessage();
if (s_logger.isDebugEnabled()) {
s_logger.debug(errMsg);
}
@@ -1284,7 +1296,7 @@ public class NetscalerResource implements ServerResource {
}
}
} catch (Exception e) {
- String errMsg = "Failed to update service: " + serviceName + " at site: " + siteName;
+ String errMsg = "Failed to update service: " + serviceName + " at site: " + siteName + "due to " + e.getMessage();
if (s_logger.isDebugEnabled()) {
s_logger.debug(errMsg);
}
@@ -1294,6 +1306,7 @@ public class NetscalerResource implements ServerResource {
private static void createVserverServiceBinding(nitro_service client, String serviceName, String vserverName)
throws ExecutionException {
+ String errMsg;
try {
gslbvserver_gslbservice_binding binding = new gslbvserver_gslbservice_binding();
binding.set_name(vserverName);
@@ -1303,8 +1316,18 @@ public class NetscalerResource implements ServerResource {
s_logger.debug("Successfully created service: " + serviceName + " and virtual server: "
+ vserverName + " binding");
}
+ } catch (nitro_exception ne) {
+ if (ne.getErrorCode() == 273) {
+ return;
+ }
+ errMsg = "Failed to create service: " + serviceName + " and virtual server: "
+ + vserverName + " binding due to " + ne.getMessage();
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug(errMsg);
+ }
+ throw new ExecutionException(errMsg);
} catch (Exception e) {
- String errMsg = "Failed to create service: " + serviceName + " and virtual server: "
+ errMsg = "Failed to create service: " + serviceName + " and virtual server: "
+ vserverName + " binding due to " + e.getMessage();
if (s_logger.isDebugEnabled()) {
s_logger.debug(errMsg);
@@ -1437,6 +1460,39 @@ public class NetscalerResource implements ServerResource {
private static String generateUniqueServiceName(String siteName, String publicIp, String publicPort) {
return "cloud-gslb-service-" + siteName + "-" + publicIp + "-" + publicPort;
}
+
+ private static boolean gslbServerExists(nitro_service client, String serverName) throws ExecutionException {
+ try {
+ if (com.citrix.netscaler.nitro.resource.config.basic.server.get(client, serverName) != null) {
+ return true;
+ } else {
+ return false;
+ }
+ } catch (nitro_exception e) {
+ if (e.getErrorCode() == NitroError.NS_RESOURCE_NOT_EXISTS) {
+ return false;
+ } else {
+ throw new ExecutionException("Failed to verify Server " + serverName + " exists on the NetScaler device due to " + e.getMessage());
+ }
+ } catch (Exception e) {
+ throw new ExecutionException("Failed to verify Server " + serverName + " exists on the NetScaler device due to " + e.getMessage());
+ }
+ }
+
+ private static String generateGslbServerName(String serverIP) {
+ return genGslbObjectName("Cloud-Server-", serverIP);
+ }
+
+ private static String genGslbObjectName(Object... args) {
+ String objectName = "";
+ for (int i = 0; i < args.length; i++) {
+ objectName += args[i];
+ if (i != args.length -1) {
+ objectName += "-";
+ }
+ }
+ return objectName;
+ }
}