Skip to content

Commit 09af150

Browse files
author
Murali Reddy
committed
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
1 parent e7f4bfe commit 09af150

1 file changed

Lines changed: 60 additions & 4 deletions

File tree

plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,18 @@ private static void createService(nitro_service client, String serviceName, Stri
12111211
try {
12121212
gslbservice service;
12131213
service = getServiceObject(client, serviceName);
1214+
String gslbServerName = generateGslbServerName(serviceIp);
1215+
1216+
if (!gslbServerExists(client, gslbServerName)) {
1217+
base_response apiCallResult;
1218+
com.citrix.netscaler.nitro.resource.config.basic.server nsServer = new com.citrix.netscaler.nitro.resource.config.basic.server();
1219+
nsServer.set_name(gslbServerName);
1220+
nsServer.set_ipaddress(serviceIp);
1221+
apiCallResult = com.citrix.netscaler.nitro.resource.config.basic.server.add(client, nsServer);
1222+
if ((apiCallResult.errorcode != 0) && (apiCallResult.errorcode != NitroError.NS_RESOURCE_EXISTS)) {
1223+
throw new ExecutionException("Failed to add server " + gslbServerName + " due to" + apiCallResult.message);
1224+
}
1225+
}
12141226

12151227
boolean isUpdateSite = false;
12161228
if (service == null) {
@@ -1220,7 +1232,7 @@ private static void createService(nitro_service client, String serviceName, Stri
12201232
}
12211233

12221234
service.set_sitename(siteName);
1223-
service.set_servername(serviceIp);
1235+
service.set_servername(gslbServerName);
12241236
int port = Integer.parseInt(servicePort);
12251237
service.set_port(port);
12261238
service.set_servicename(serviceName);
@@ -1236,7 +1248,7 @@ private static void createService(nitro_service client, String serviceName, Stri
12361248
s_logger.debug("Successfully created service: " + serviceName + " at site: " + siteName);
12371249
}
12381250
} catch (Exception e) {
1239-
String errMsg = "Failed to created service: " + serviceName + " at site: " + siteName;
1251+
String errMsg = "Failed to created service: " + serviceName + " at site: " + siteName + " due to " + e.getMessage();
12401252
if (s_logger.isDebugEnabled()) {
12411253
s_logger.debug(errMsg);
12421254
}
@@ -1284,7 +1296,7 @@ private static void updateService(nitro_service client, String serviceName, Stri
12841296
}
12851297
}
12861298
} catch (Exception e) {
1287-
String errMsg = "Failed to update service: " + serviceName + " at site: " + siteName;
1299+
String errMsg = "Failed to update service: " + serviceName + " at site: " + siteName + "due to " + e.getMessage();
12881300
if (s_logger.isDebugEnabled()) {
12891301
s_logger.debug(errMsg);
12901302
}
@@ -1294,6 +1306,7 @@ private static void updateService(nitro_service client, String serviceName, Stri
12941306

12951307
private static void createVserverServiceBinding(nitro_service client, String serviceName, String vserverName)
12961308
throws ExecutionException {
1309+
String errMsg;
12971310
try {
12981311
gslbvserver_gslbservice_binding binding = new gslbvserver_gslbservice_binding();
12991312
binding.set_name(vserverName);
@@ -1303,8 +1316,18 @@ private static void createVserverServiceBinding(nitro_service client, String ser
13031316
s_logger.debug("Successfully created service: " + serviceName + " and virtual server: "
13041317
+ vserverName + " binding");
13051318
}
1319+
} catch (nitro_exception ne) {
1320+
if (ne.getErrorCode() == 273) {
1321+
return;
1322+
}
1323+
errMsg = "Failed to create service: " + serviceName + " and virtual server: "
1324+
+ vserverName + " binding due to " + ne.getMessage();
1325+
if (s_logger.isDebugEnabled()) {
1326+
s_logger.debug(errMsg);
1327+
}
1328+
throw new ExecutionException(errMsg);
13061329
} catch (Exception e) {
1307-
String errMsg = "Failed to create service: " + serviceName + " and virtual server: "
1330+
errMsg = "Failed to create service: " + serviceName + " and virtual server: "
13081331
+ vserverName + " binding due to " + e.getMessage();
13091332
if (s_logger.isDebugEnabled()) {
13101333
s_logger.debug(errMsg);
@@ -1437,6 +1460,39 @@ private static String generateVirtualServerName(String domainName) {
14371460
private static String generateUniqueServiceName(String siteName, String publicIp, String publicPort) {
14381461
return "cloud-gslb-service-" + siteName + "-" + publicIp + "-" + publicPort;
14391462
}
1463+
1464+
private static boolean gslbServerExists(nitro_service client, String serverName) throws ExecutionException {
1465+
try {
1466+
if (com.citrix.netscaler.nitro.resource.config.basic.server.get(client, serverName) != null) {
1467+
return true;
1468+
} else {
1469+
return false;
1470+
}
1471+
} catch (nitro_exception e) {
1472+
if (e.getErrorCode() == NitroError.NS_RESOURCE_NOT_EXISTS) {
1473+
return false;
1474+
} else {
1475+
throw new ExecutionException("Failed to verify Server " + serverName + " exists on the NetScaler device due to " + e.getMessage());
1476+
}
1477+
} catch (Exception e) {
1478+
throw new ExecutionException("Failed to verify Server " + serverName + " exists on the NetScaler device due to " + e.getMessage());
1479+
}
1480+
}
1481+
1482+
private static String generateGslbServerName(String serverIP) {
1483+
return genGslbObjectName("Cloud-Server-", serverIP);
1484+
}
1485+
1486+
private static String genGslbObjectName(Object... args) {
1487+
String objectName = "";
1488+
for (int i = 0; i < args.length; i++) {
1489+
objectName += args[i];
1490+
if (i != args.length -1) {
1491+
objectName += "-";
1492+
}
1493+
}
1494+
return objectName;
1495+
}
14401496
}
14411497

14421498

0 commit comments

Comments
 (0)