@@ -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