mirror of https://github.com/apache/cloudstack.git
NetScaler server reource code changes to interpret
GlobalLoadBalancerConfigCommand and set up appropriate 'gslbvserver', 'gslbsite', 'gslbservice', 'gslb_vserver_service_binding', gslb_vserver_domain_binding objects on NetScaler device
This commit is contained in:
parent
44e3e5ebe0
commit
e0ded1aa2b
|
|
@ -20,7 +20,7 @@ import com.cloud.agent.api.Answer;
|
|||
|
||||
public class GlobalLoadBalancerConfigAnswer extends Answer{
|
||||
|
||||
protected GlobalLoadBalancerConfigAnswer() {
|
||||
public GlobalLoadBalancerConfigAnswer() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,9 +17,134 @@
|
|||
|
||||
package com.cloud.agent.api.routing;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
/**
|
||||
* GlobalLoadBalancerConfigCommand used for sending the GSLB configuration to GSLB service provider
|
||||
*/
|
||||
public class GlobalLoadBalancerConfigCommand extends NetworkElementCommand {
|
||||
public class GlobalLoadBalancerConfigCommand extends Command {
|
||||
|
||||
// FQDN that represents the globally load balanced service
|
||||
String domainName;
|
||||
|
||||
// type of the globally load balanced service
|
||||
String serviceType;
|
||||
|
||||
// load balancing method to distribute traffic across the sites participating in global service load balancing
|
||||
String lbMethod;
|
||||
|
||||
// session persistence type
|
||||
String persistenceType;
|
||||
|
||||
// true if global load balancer rule is being deleted
|
||||
boolean revoked;
|
||||
|
||||
// list of the site details that are participating in the GSLB service
|
||||
SiteLoadBalancer[] siteLoadBalancers;
|
||||
|
||||
public void GlobalLoadBalancerConfigCommand(SiteLoadBalancer[] slbs,
|
||||
String domainName,
|
||||
String lbMethod,
|
||||
String persistenceType,
|
||||
String serviceType,
|
||||
boolean revoked) {
|
||||
this.domainName = domainName;
|
||||
this.serviceType = serviceType;
|
||||
this.lbMethod = lbMethod;
|
||||
this.persistenceType = persistenceType;
|
||||
this.revoked = revoked;
|
||||
this.siteLoadBalancers = slbs;
|
||||
}
|
||||
|
||||
public SiteLoadBalancer[] getSiteDetails() {
|
||||
return siteLoadBalancers;
|
||||
}
|
||||
|
||||
public String getServiceType() {
|
||||
return serviceType;
|
||||
}
|
||||
|
||||
public String getLoadBalancerMethod() {
|
||||
return lbMethod;
|
||||
}
|
||||
|
||||
public String getPersistenceType() {
|
||||
return persistenceType;
|
||||
}
|
||||
|
||||
public String getDomainName() {
|
||||
return domainName;
|
||||
}
|
||||
|
||||
public boolean isForRevoke() {
|
||||
return revoked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// details of site participating in the GLSB service
|
||||
public class SiteLoadBalancer {
|
||||
// true if the site is local (GSLB provider receiving GlobalLoadBalancerConfigCommand is in same site)
|
||||
boolean local;
|
||||
|
||||
// true if the sire needs to be removed from GSLB service
|
||||
boolean revoked;
|
||||
|
||||
// service type of the 'site load balanced' service
|
||||
String serviceType;
|
||||
|
||||
// public IP corresponding to the site load balanced service
|
||||
String servicePublicIp;
|
||||
|
||||
// port corresponding to the site load balanced service
|
||||
String port;
|
||||
|
||||
// IP corresponding to the GSLB service provider in the site.
|
||||
String gslbProviderIp;
|
||||
|
||||
// Public IP corresponding to the GSLB service provider in the site.
|
||||
String gslbProviderPublicIp;
|
||||
|
||||
public void SiteLoadBalancer(String gslbProviderIp, String gslbProviderPublicIP, boolean local, boolean revoked,
|
||||
String serviceType, String servicePublicIp, String port) {
|
||||
this.gslbProviderIp = gslbProviderIp;
|
||||
this.gslbProviderPublicIp = gslbProviderPublicIP;
|
||||
this.local = local;
|
||||
this.revoked = revoked;
|
||||
this.serviceType = serviceType;
|
||||
this.servicePublicIp = servicePublicIp;
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public String getServiceType() {
|
||||
return serviceType;
|
||||
}
|
||||
|
||||
public String getServicePublicIp() {
|
||||
return servicePublicIp;
|
||||
}
|
||||
|
||||
public String getPublicPort() {
|
||||
return port;
|
||||
}
|
||||
|
||||
public String getGslbProviderPrivateIp() {
|
||||
return gslbProviderIp;
|
||||
}
|
||||
|
||||
public String getGslbProviderPublicIp() {
|
||||
return gslbProviderPublicIp;
|
||||
}
|
||||
|
||||
public boolean isLocal() {
|
||||
return local;
|
||||
}
|
||||
|
||||
public boolean forRevoke() {
|
||||
return revoked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,16 +17,6 @@
|
|||
|
||||
package com.cloud.network.resource;
|
||||
|
||||
import java.util.Formatter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.citrix.netscaler.nitro.exception.nitro_exception;
|
||||
import com.citrix.netscaler.nitro.resource.base.base_response;
|
||||
import com.citrix.netscaler.nitro.resource.config.autoscale.autoscalepolicy;
|
||||
|
|
@ -34,23 +24,10 @@ import com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile;
|
|||
import com.citrix.netscaler.nitro.resource.config.basic.server_service_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.basic.servicegroup;
|
||||
import com.citrix.netscaler.nitro.resource.config.basic.servicegroup_lbmonitor_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable_metric_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbmonitor;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_metric_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbvserver;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.network.Interface;
|
||||
import com.citrix.netscaler.nitro.resource.config.network.inat;
|
||||
import com.citrix.netscaler.nitro.resource.config.network.vlan;
|
||||
import com.citrix.netscaler.nitro.resource.config.network.vlan_interface_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.network.vlan_nsip_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.ns.nsconfig;
|
||||
import com.citrix.netscaler.nitro.resource.config.ns.nshardware;
|
||||
import com.citrix.netscaler.nitro.resource.config.ns.nsip;
|
||||
import com.citrix.netscaler.nitro.resource.config.ns.nstimer;
|
||||
import com.citrix.netscaler.nitro.resource.config.ns.nstimer_autoscalepolicy_binding;
|
||||
import com.citrix.netscaler.nitro.resource.config.gslb.*;
|
||||
import com.citrix.netscaler.nitro.resource.config.lb.*;
|
||||
import com.citrix.netscaler.nitro.resource.config.network.*;
|
||||
import com.citrix.netscaler.nitro.resource.config.ns.*;
|
||||
import com.citrix.netscaler.nitro.resource.stat.lb.lbvserver_stats;
|
||||
import com.citrix.netscaler.nitro.service.nitro_service;
|
||||
import com.citrix.netscaler.nitro.util.filtervalue;
|
||||
|
|
@ -59,35 +36,12 @@ import com.citrix.sdx.nitro.resource.config.mps;
|
|||
import com.citrix.sdx.nitro.resource.config.ns;
|
||||
import com.citrix.sdx.nitro.resource.config.xen_vpx_image;
|
||||
import com.cloud.agent.IAgentControl;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.ExternalNetworkResourceUsageAnswer;
|
||||
import com.cloud.agent.api.ExternalNetworkResourceUsageCommand;
|
||||
import com.cloud.agent.api.MaintainAnswer;
|
||||
import com.cloud.agent.api.MaintainCommand;
|
||||
import com.cloud.agent.api.PingCommand;
|
||||
import com.cloud.agent.api.ReadyAnswer;
|
||||
import com.cloud.agent.api.ReadyCommand;
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
import com.cloud.agent.api.StartupExternalLoadBalancerCommand;
|
||||
import com.cloud.agent.api.routing.CreateLoadBalancerApplianceCommand;
|
||||
import com.cloud.agent.api.routing.DestroyLoadBalancerApplianceCommand;
|
||||
import com.cloud.agent.api.routing.IpAssocAnswer;
|
||||
import com.cloud.agent.api.routing.IpAssocCommand;
|
||||
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
|
||||
import com.cloud.agent.api.routing.SetStaticNatRulesAnswer;
|
||||
import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
|
||||
import com.cloud.agent.api.*;
|
||||
import com.cloud.agent.api.routing.*;
|
||||
import com.cloud.agent.api.to.IpAddressTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.AutoScalePolicyTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.AutoScaleVmGroupTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.AutoScaleVmProfileTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.ConditionTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.CounterTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.DestinationTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.StickinessPolicyTO;
|
||||
import com.cloud.agent.api.to.LoadBalancerTO.*;
|
||||
import com.cloud.agent.api.to.StaticNatRuleTO;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import com.cloud.host.Host;
|
||||
import com.cloud.host.Host.Type;
|
||||
import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
|
||||
|
|
@ -98,6 +52,11 @@ import com.cloud.utils.Pair;
|
|||
import com.cloud.utils.exception.ExecutionException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.util.*;
|
||||
|
||||
class NitroError {
|
||||
static final int NS_RESOURCE_EXISTS = 273;
|
||||
|
|
@ -790,97 +749,515 @@ public class NetscalerResource implements ServerResource {
|
|||
}
|
||||
}
|
||||
|
||||
private void execute(GlobalLoadBalancerConfigCommand cmd, numRetries) {
|
||||
/*
|
||||
* 1. domain name for which NetScale will act as authoritative DNS server
|
||||
* 2. DNS record type
|
||||
* 3. service type, virtual server name
|
||||
* 4. Configure GSLB method
|
||||
* 5. Configure Persistence
|
||||
* 6.
|
||||
*/
|
||||
private Answer execute(GlobalLoadBalancerConfigCommand gslbCmd, int numRetries) {
|
||||
|
||||
String lbMethod = gslbCmd.getLoadBalancerMethod();
|
||||
String persistenceType = gslbCmd.getPersistenceType();
|
||||
String serviceType = gslbCmd.getServiceType();
|
||||
boolean forRevoke = gslbCmd.isForRevoke();
|
||||
GlobalLoadBalancerConfigCommand.SiteLoadBalancer[] sites = gslbCmd.getSiteDetails();
|
||||
|
||||
String domainName = gslbCmd.getDomainName();
|
||||
String vserverName = GSLB.generateVirtualServerName(domainName);
|
||||
|
||||
try {
|
||||
|
||||
if (!forRevoke) { //check if the global load balancer rule is being added
|
||||
|
||||
// Add a GSLB virtual server
|
||||
GSLB.createVirtualServer(_netscalerService, vserverName, lbMethod, persistenceType, serviceType);
|
||||
|
||||
if (sites != null) { // check if there are any sites that are participating in global load balancing
|
||||
for (GlobalLoadBalancerConfigCommand.SiteLoadBalancer site : sites) {
|
||||
|
||||
String sitePrivateIP = site.getGslbProviderPrivateIp();
|
||||
String sitePublicIP = site.getGslbProviderPublicIp();
|
||||
String sitePublicPort = site.getPublicPort();
|
||||
String siteName = GSLB.generateUniqueSiteName(sitePrivateIP, sitePublicIP);
|
||||
|
||||
// Add/Delete GSLB local and remote sites that are part of GSLB virtual server
|
||||
if (!site.forRevoke()) {
|
||||
String siteType = (site.isLocal()) ? "LOCAL" : "REMOTE";
|
||||
if (GSLB.getSiteObject(_netscalerService, siteName) != null) {
|
||||
GSLB.updateSite(_netscalerService, siteType, siteName, site.getGslbProviderPrivateIp(),
|
||||
site.getGslbProviderPublicIp());
|
||||
} else {
|
||||
GSLB.createSite(_netscalerService, siteType, siteName, site.getGslbProviderPrivateIp(),
|
||||
site.getGslbProviderPublicIp());
|
||||
}
|
||||
}
|
||||
|
||||
// Add/Delete GSLB service corresponding the service running on each site
|
||||
String serviceName = GSLB.generateUniqueServiceName(siteName, sitePublicIP, sitePublicPort);
|
||||
if (!site.forRevoke()) {
|
||||
// create a 'gslbservice' object
|
||||
GSLB.createService(_netscalerService, serviceName, site.getServiceType(),
|
||||
sitePublicIP, sitePublicPort, siteName);
|
||||
|
||||
// Bind 'gslbservice' service object to GSLB virtual server
|
||||
GSLB.createVserverServiceBinding(_netscalerService, serviceName, vserverName);
|
||||
|
||||
} else {
|
||||
// Unbind GSLB service with GSLB virtual server
|
||||
GSLB.deleteVserverServiceBinding(_netscalerService, serviceName, vserverName);
|
||||
|
||||
// delete 'gslbservice' object
|
||||
gslbservice service = GSLB.getServiceObject(_netscalerService, serviceName);
|
||||
GSLB.deleteService(_netscalerService, serviceName);
|
||||
}
|
||||
|
||||
if (site.forRevoke()) { // delete the site if its for revoke
|
||||
//TODO: check if any services are bound to side before deleting
|
||||
GSLB.deleteSite(_netscalerService, siteName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Bind GSLB vserver to domain
|
||||
GSLB.createVserverDomainBinding(_netscalerService, vserverName, domainName);
|
||||
|
||||
} else { // global load balancer rule is being deleted, so clean up all objects created
|
||||
|
||||
// remove binding between virtual server and the domain name
|
||||
GSLB.createVserverDomainBinding(_netscalerService, vserverName, domainName);
|
||||
|
||||
if (sites != null) {
|
||||
for (GlobalLoadBalancerConfigCommand.SiteLoadBalancer site : sites) {
|
||||
|
||||
String sitePrivateIP = site.getGslbProviderPrivateIp();
|
||||
String sitePublicIP = site.getGslbProviderPublicIp();
|
||||
String sitePublicPort = site.getPublicPort();
|
||||
String siteName = GSLB.generateUniqueSiteName(sitePrivateIP, sitePublicIP);
|
||||
|
||||
// remove binding between virtual server and services
|
||||
String serviceName = GSLB.generateUniqueServiceName(siteName, sitePublicIP, sitePublicPort);
|
||||
GSLB.deleteVserverServiceBinding(_netscalerService, serviceName, vserverName);
|
||||
|
||||
// delete service object
|
||||
GSLB.deleteService(_netscalerService, serviceName);
|
||||
|
||||
// delete GSLB site object
|
||||
//TODO: check if any services are bound to side before deleting
|
||||
GSLB.deleteSite(_netscalerService, siteName);
|
||||
}
|
||||
}
|
||||
|
||||
// delete GSLB virtual server
|
||||
GSLB.deleteVirtualServer(_netscalerService, vserverName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (shouldRetry(numRetries)) {
|
||||
return retry(gslbCmd, numRetries);
|
||||
}
|
||||
}
|
||||
|
||||
return new GlobalLoadBalancerConfigAnswer();
|
||||
}
|
||||
|
||||
/*
|
||||
* convineance class for GSLB functionality that includes methods to
|
||||
* - create, delete, update, get the GSLB sites
|
||||
* - create, delete, update, get the GSLB services
|
||||
* - create, delete, update, get the GSLB virtual servers
|
||||
* - create, delete GSLB virtual server and GSLB service bindings
|
||||
* convenience class to create/update/delete/get the GSLB specific NetScaler objects
|
||||
* gslbsite, gslbvserver, gslbservice, vserver-service binding, vserver-domain bindings
|
||||
*/
|
||||
private static class GSLB {
|
||||
|
||||
private void createSite() {
|
||||
// create a 'gslbsite' object representing a site
|
||||
private static void createSite(nitro_service client, String siteName,
|
||||
String siteType, String siteIP, String sitePublicIP) {
|
||||
try {
|
||||
gslbsite site;
|
||||
site = getSiteObject(client, siteName);
|
||||
|
||||
boolean isUpdateSite = false;
|
||||
if (site == null) {
|
||||
site = new gslbsite();
|
||||
} else {
|
||||
isUpdateSite = true;
|
||||
}
|
||||
|
||||
assert("LOCAL".equalsIgnoreCase(siteType) || "REMOTE".equalsIgnoreCase(siteType));
|
||||
site.set_sitetype(siteType);
|
||||
site.set_sitename(siteName);
|
||||
site.set_siteipaddress(siteIP);
|
||||
site.set_publicip(sitePublicIP);
|
||||
site.set_metricexchange("ENABLED");
|
||||
site.set_nwmetricexchange("ENABLED");
|
||||
site.set_sessionexchange("ENABLED");
|
||||
if (isUpdateSite) {
|
||||
gslbsite.update(client, site);
|
||||
} else {
|
||||
gslbsite.add(client, site);
|
||||
}
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully created GSLB site: " + siteName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to create GSLB site: " + siteName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteSite() {
|
||||
|
||||
// delete 'gslbsite' object representing a site
|
||||
private static void deleteSite(nitro_service client, String siteName) {
|
||||
try {
|
||||
gslbsite site = getSiteObject(client, siteName);
|
||||
if (site != null) {
|
||||
gslbsite.delete(client, siteName);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully deleted GSLB site: " + siteName);
|
||||
}
|
||||
} else {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.warn("Ignoring delete request for non existing GSLB site: " + siteName);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to delete GSLB site: " + siteName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private gslbsite getSite() {
|
||||
// update 'gslbsite' object representing a site
|
||||
private static void updateSite(nitro_service client, String siteType, String siteName,
|
||||
String siteIP, String sitePublicIP) {
|
||||
try {
|
||||
gslbsite site;
|
||||
site = getSiteObject(client, siteName);
|
||||
if (site == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.warn("Ignoring update request for non existing GSLB site: " + siteName);
|
||||
}
|
||||
return;
|
||||
}
|
||||
assert ("LOCAL".equalsIgnoreCase(siteType) || "REMOTE".equalsIgnoreCase(siteType));
|
||||
site.set_sitetype(siteType);
|
||||
site.set_sitename(siteName);
|
||||
site.set_siteipaddress(siteIP);
|
||||
site.set_publicip(sitePublicIP);
|
||||
site.set_metricexchange("ENABLED");
|
||||
site.set_nwmetricexchange("ENABLED");
|
||||
site.set_sessionexchange("ENABLED");
|
||||
gslbsite.update(client, site);
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully updated GSLB site: " + siteName);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to update GSLB site: " + siteName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkSiteExists() {
|
||||
return true;
|
||||
// create a 'gslbvserver' object representing a globally load balanced service
|
||||
private static void createVirtualServer(nitro_service client, String vserverName, String lbMethod,
|
||||
String persistenceType, String serviceType) {
|
||||
try {
|
||||
gslbvserver vserver;
|
||||
vserver = getVserverObject(client, vserverName);
|
||||
|
||||
boolean isUpdateSite = false;
|
||||
if (vserver == null) {
|
||||
vserver = new gslbvserver();
|
||||
} else {
|
||||
isUpdateSite = true;
|
||||
}
|
||||
|
||||
vserver.set_name(vserverName);
|
||||
vserver.set_lbmethod(lbMethod);
|
||||
vserver.set_persistencetype(persistenceType);
|
||||
vserver.set_servicetype(serviceType);
|
||||
if (isUpdateSite) {
|
||||
gslbvserver.update(client, vserver);
|
||||
} else {
|
||||
gslbvserver.add(client, vserver);
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully added GSLB virtual server: " + vserverName);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to add GSLB virtual server: " + vserverName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createService() {
|
||||
|
||||
// delete 'gslbvserver' object representing a globally load balanced service
|
||||
private static void deleteVirtualServer(nitro_service client, String vserverName) {
|
||||
try {
|
||||
gslbvserver vserver = getVserverObject(client, vserverName);
|
||||
if (vserver != null) {
|
||||
gslbvserver.delete(client, vserver);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully deleted GSLB virtual server: " + vserverName);
|
||||
}
|
||||
} else {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.warn("Ignoring delete request for non existing GSLB virtual server: " + vserverName);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to delete GSLB virtual server: " + vserverName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteService() {
|
||||
|
||||
// enable 'gslbvserver' object representing a globally load balanced service
|
||||
private static void enableVirtualServer(nitro_service client, String vserverName) {
|
||||
try {
|
||||
gslbvserver vserver = getVserverObject(client, vserverName);
|
||||
if (vserver != null) {
|
||||
gslbvserver.enable(client, vserver);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to enable GSLB virtual server: " + vserverName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getService() {
|
||||
|
||||
// disable 'gslbvserver' object representing a globally load balanced service
|
||||
private static void disableVirtualServer(nitro_service client, String vserverName) {
|
||||
try {
|
||||
gslbvserver vserver = getVserverObject(client, vserverName);
|
||||
if (vserver != null) {
|
||||
gslbvserver.disable(client, vserver);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to disable GSLB virtual server: " + vserverName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkServiceExists() {
|
||||
return true;
|
||||
// update 'gslbvserver' object representing a globally load balanced service
|
||||
private static void updateVirtualServer(nitro_service client, String vserverName, String lbMethod,
|
||||
String persistenceType, String serviceType) {
|
||||
try {
|
||||
gslbvserver vServer = getVserverObject(client, vserverName);
|
||||
if (vServer != null) {
|
||||
vServer.set_lbmethod(lbMethod);
|
||||
vServer.set_persistencetype(persistenceType);
|
||||
vServer.set_servicetype(serviceType);
|
||||
gslbvserver.update(client, vServer);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully updated GSLB virtual server: " + vserverName);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to update GSLB virtual server: " + vserverName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createVirtualServer() {
|
||||
// create, delete, update, get the GSLB services
|
||||
private static void createService(nitro_service client, String serviceName, String serviceType, String publicIp,
|
||||
String publicPort, String siteName) {
|
||||
try {
|
||||
gslbservice service;
|
||||
service = getServiceObject(client, serviceName);
|
||||
|
||||
boolean isUpdateSite = false;
|
||||
if (service == null) {
|
||||
service = new gslbservice();
|
||||
} else {
|
||||
isUpdateSite = true;
|
||||
}
|
||||
|
||||
service.set_sitename(siteName);
|
||||
service.set_publicip(publicIp);
|
||||
service.set_publicport(Integer.getInteger(publicPort));
|
||||
service.set_servicename(serviceName);
|
||||
service.set_servicetype(serviceType);
|
||||
if (isUpdateSite) {
|
||||
gslbservice.update(client, service);
|
||||
} else {
|
||||
gslbservice.add(client, service);
|
||||
}
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully created service: " + serviceName + " at site: " + siteName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to created service: " + serviceName + " at site: " + siteName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteVirtualServer() {
|
||||
|
||||
private static void deleteService(nitro_service client, String serviceName) {
|
||||
try {
|
||||
gslbservice service = getServiceObject(client, serviceName);
|
||||
if (service != null) {
|
||||
gslbservice.delete(client, serviceName);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully deleted service: " + serviceName);
|
||||
}
|
||||
} else {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.warn("Ignoring delete request for non existing service: " + serviceName);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to delete service: " + serviceName + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void enableVirtualServer() {
|
||||
private static void updateService(nitro_service client, String serviceName, String serviceType, String publicIp,
|
||||
String publicPort, String siteName) {
|
||||
try {
|
||||
gslbservice service;
|
||||
service = getServiceObject(client, serviceName);
|
||||
|
||||
if (service != null) {
|
||||
service.set_sitename(siteName);
|
||||
service.set_publicip(publicIp);
|
||||
service.set_publicport(Integer.getInteger(publicPort));
|
||||
service.set_servicename(serviceName);
|
||||
service.set_servicetype(serviceType);
|
||||
gslbservice.update(client, service);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully updated service: " + serviceName + " at site: " + siteName);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to update service: " + serviceName + " at site: " + siteName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void disableVirtualServer() {
|
||||
|
||||
private static void createVserverServiceBinding(nitro_service client, String serviceName, String vserverName) {
|
||||
try {
|
||||
gslbvserver_gslbservice_binding binding = new gslbvserver_gslbservice_binding();
|
||||
binding.set_name(vserverName);
|
||||
binding.set_servicename(serviceName);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully created service: " + serviceName + " and virtual server: "
|
||||
+ vserverName + " binding");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to create service: " + serviceName + " and virtual server: "
|
||||
+ vserverName + " binding due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createVserverServiceBinding() {
|
||||
|
||||
private static void deleteVserverServiceBinding(nitro_service client, String serviceName, String vserverName) {
|
||||
try {
|
||||
gslbvserver_gslbservice_binding[] bindings = gslbvserver_gslbservice_binding.get(client, serviceName);
|
||||
if (bindings != null) {
|
||||
for (gslbvserver_gslbservice_binding binding: bindings) {
|
||||
if (binding.get_servicename().equalsIgnoreCase(serviceName) &&
|
||||
binding.get_name().equals(vserverName)) {
|
||||
gslbvserver_gslbservice_binding.delete(client, binding);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully deleted service: " + serviceName + " and virtual server: "
|
||||
+ vserverName + " binding");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to create service: " + serviceName + " and virtual server: "
|
||||
+ vserverName + " binding due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteVserverServiceBinding() {
|
||||
|
||||
// create, delete GSLB virtual server and domain bindings
|
||||
private static void createVserverDomainBinding(nitro_service client, String vserverName, String domainName) {
|
||||
try {
|
||||
gslbvserver_domain_binding binding = new gslbvserver_domain_binding();
|
||||
binding.set_domainname(domainName);
|
||||
binding.set_name(vserverName);
|
||||
gslbvserver_domain_binding.add(client, binding);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully added virtual server: "
|
||||
+ vserverName + " domain name: " + domainName + " binding");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to create virtual server: "
|
||||
+ vserverName + " domain name: " + domainName + " binding");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateVserverServiceBinding() {
|
||||
|
||||
private static void deleteVserverDomainBinding(nitro_service client, String vserverName, String domainName) {
|
||||
try {
|
||||
gslbvserver_domain_binding[] bindings = gslbvserver_domain_binding.get(client, vserverName);
|
||||
if (bindings != null) {
|
||||
for (gslbvserver_domain_binding binding: bindings) {
|
||||
if (binding.get_domainname().equalsIgnoreCase(domainName)) {
|
||||
gslbvserver_domain_binding.delete(client, binding);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully deleted virtual server: " + vserverName + " and "
|
||||
+ " domain: " + domainName + " binding");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Failed to delete virtual server: "
|
||||
+ vserverName + " and domain " + domainName +" binding due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createVserverDomainBinding() {
|
||||
// get 'gslbsite' object corresponding to a site name
|
||||
private static gslbsite getSiteObject(nitro_service client, String siteName) {
|
||||
try {
|
||||
gslbsite site = gslbsite.get(client, siteName);
|
||||
if (site != null) {
|
||||
return site;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void deleteVserverDomainBinding() {
|
||||
|
||||
private static gslbvserver getVserverObject(nitro_service client, String vserverName) {
|
||||
try {
|
||||
gslbvserver vserver = gslbvserver.get(client, vserverName);
|
||||
return vserver;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateVserverDomainBinding() {
|
||||
private static gslbservice getServiceObject(nitro_service client, String serviceName) {
|
||||
try {
|
||||
gslbservice service = gslbservice.get(client, serviceName);
|
||||
return service;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static String generateUniqueSiteName(String sitePrivateIp, String sitePublicIP) {
|
||||
return "cloud-site-" + sitePrivateIp + "-" + sitePublicIP;
|
||||
}
|
||||
|
||||
private static String generateVirtualServerName(String domainName) {
|
||||
return "cloud-gslb-vserver-" + domainName;
|
||||
}
|
||||
|
||||
private static String generateUniqueServiceName(String siteName, String publicIp, String publicPort) {
|
||||
return "cloud-gslb-service-" + siteName + "-" + publicIp + "-" + publicPort;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue