private List<String> getRulesForPool(final LoadBalancerTO lbTO, final boolean keepAliveEnabled) { StringBuilder sb = new StringBuilder(); final String poolName = sb.append(lbTO.getSrcIp().replace(".", "_")).append('-').append(lbTO.getSrcPort()).toString(); final String publicIP = lbTO.getSrcIp(); final int publicPort = lbTO.getSrcPort(); final String algorithm = lbTO.getAlgorithm(); final List<String> dstSubRule = new ArrayList<String>(); final List<String> dstWithCookieSubRule = new ArrayList<String>(); for (final DestinationTO dest : lbTO.getDestinations()) { .append(dest.getDestPort()) .append(" check"); if(lbTO.getLbProtocol() != null && lbTO.getLbProtocol().equals("tcp-proxy")) { sb.append(" send-proxy"); for (final StickinessPolicyTO stickinessPolicy : lbTO.getStickinessPolicies()) { if (stickinessPolicy == null) { continue; s_logger.warn("Haproxy stickiness policy for lb rule: " + lbTO.getSrcIp() + ":" + lbTO.getSrcPort() + ": Not Applied, cause: backends are unavailable");
sb.append(lbTO.getSrcIp()).append(":"); sb.append(lbTO.getSrcPort()).append(":"); final String lbRuleEntry = sb.toString(); if (!lbTO.isRevoked()) { toAdd.add(lbRuleEntry); } else {
private String generateAutoScaleVmGroupIdentifier(final LoadBalancerTO lbTO) { return lbTO.getSrcIp() + "-" + lbTO.getSrcPort(); }
private String getNetScalerProtocol(LoadBalancerTO loadBalancer) throws ExecutionException { String port = Integer.toString(loadBalancer.getSrcPort()); String lbProtocol = loadBalancer.getLbProtocol(); StickinessPolicyTO[] stickyPolicies = loadBalancer.getStickinessPolicies(); String nsProtocol = "TCP"; if (lbProtocol == null) lbProtocol = loadBalancer.getProtocol(); if ((stickyPolicies != null) && (stickyPolicies.length > 0) && (stickyPolicies[0] != null)) { StickinessPolicyTO stickinessPolicy = stickyPolicies[0]; if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName()) || (StickinessMethodType.AppCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName()))) { nsProtocol = "HTTP"; return nsProtocol; } } if (lbProtocol.equalsIgnoreCase(NetUtils.SSL_PROTO) || lbProtocol.equalsIgnoreCase(NetUtils.HTTP_PROTO)) return lbProtocol.toUpperCase(); if (port.equals(NetUtils.HTTP_PORT)) { nsProtocol = "HTTP"; } else if (NetUtils.TCP_PROTO.equalsIgnoreCase(lbProtocol)) { nsProtocol = "TCP"; } else if (NetUtils.UDP_PROTO.equalsIgnoreCase(lbProtocol)) { nsProtocol = "UDP"; } return nsProtocol; }
final String srcIp = loadBalancer.getSrcIp(); final int srcPort = loadBalancer.getSrcPort(); final String lbProtocol = getNetScalerProtocol(loadBalancer); final String lbAlgorithm = loadBalancer.getAlgorithm(); final String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort); final String nsMonitorName = generateNSMonitorName(srcIp, srcPort); final LbSslCert sslCert = loadBalancer.getSslCert(); if (loadBalancer.isAutoScaleVmGroupTO()) { applyAutoScaleConfig(loadBalancer); boolean destinationsToAdd = false; boolean deleteCert = false; for (final DestinationTO destination : loadBalancer.getDestinations()) { if (!destination.isRevoked()) { destinationsToAdd = true; if (!loadBalancer.isRevoked() && destinationsToAdd) { addLBVirtualServer(nsVirtualServerName, srcIp, srcPort, lbAlgorithm, lbProtocol, loadBalancer.getStickinessPolicies(), null); if (s_logger.isDebugEnabled()) { s_logger.debug("Created load balancing virtual server " + nsVirtualServerName + " on the Netscaler device"); final HealthCheckPolicyTO[] healthCheckPolicies = loadBalancer.getHealthCheckPolicies(); if (healthCheckPolicies != null && healthCheckPolicies.length > 0 && healthCheckPolicies[0] != null) { for (final DestinationTO destination : loadBalancer.getDestinations()) {
boolean inline = _networkMgr.isNetworkInlineMode(network); LoadBalancerTO loadBalancer = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, rule.getStickinessPolicies(), rule.getHealthCheckPolicies(), rule.getLbSslCert(), rule.getLbProtocol()); loadBalancer.setNetworkId(network.getId()); loadBalancer.setSrcIpVlan(srcIpVlan); loadBalancer.setSrcIpNetmask(srcIpNetmask); loadBalancer.setSrcIpGateway(srcIpGateway); if (rule.isAutoScaleConfig()) { loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup()); if (externalLoadBalancerIsInline) { s_logger.error("Rollbacking static nat operation of inline mode load balancing due to error on applying LB rules!"); String existedGuestIp = loadBalancersToApply.get(0).getSrcIp();
private synchronized boolean createAutoScaleConfig(final LoadBalancerTO loadBalancerTO) throws ExecutionException, Exception { final String srcIp = loadBalancerTO.getSrcIp(); final int srcPort = loadBalancerTO.getSrcPort(); final String lbProtocol = getNetScalerProtocol(loadBalancerTO); final String lbAlgorithm = loadBalancerTO.getAlgorithm(); generateAutoScaleVmGroupIdentifier(loadBalancerTO); final String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort); final AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO(); if (s_logger.isDebugEnabled()) { s_logger.debug("Created load balancing virtual server " + nsVirtualServerName + " on the Netscaler device"); addLBVirtualServer(nsVirtualServerName, srcIp, srcPort, lbAlgorithm, lbProtocol, loadBalancerTO.getStickinessPolicies(), vmGroupTO); if (!loadBalancerTO.getAutoScaleVmGroupTO().getState().equals("disabled")) { } else if (loadBalancerTO.getAutoScaleVmGroupTO().getState().equals("disabled")) { disableAutoScaleConfig(loadBalancerTO, false);
final HealthCheckPolicyTO[] healthCheckPolicies = loadBalancer.getHealthCheckPolicies(); if (healthCheckPolicies != null && healthCheckPolicies.length > 0 && healthCheckPolicies[0] != null) { final String nsVirtualServerName = generateNSVirtualServerName(loadBalancer.getSrcIp(), loadBalancer.getSrcPort()); for (final DestinationTO destination : loadBalancer.getDestinations()) { final String nsServiceName = generateNSServiceName(destination.getDestIp(), destination.getDestPort()); for (final com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding binding : serviceBindings) {
loadBalancer = new LoadBalancerTO(lbstat.getString("lb_uuid"),listDestTo); hcLB.add(loadBalancer);
private synchronized boolean enableAutoScaleConfig(final LoadBalancerTO loadBalancerTO, final boolean isCleanUp) throws Exception { final String vmGroupIdentifier = generateAutoScaleVmGroupIdentifier(loadBalancerTO); final String srcIp = loadBalancerTO.getSrcIp(); final int srcPort = loadBalancerTO.getSrcPort(); final String mtName = generateSnmpMetricTableName(vmGroupIdentifier); final String monitorName = generateSnmpMonitorName(vmGroupIdentifier); final AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO(); final AutoScaleVmProfileTO profileTO = vmGroupTO.getProfile(); final List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies(); profileTO.getServiceOfferingId() + "&" + ApiConstants.TEMPLATE_ID + "=" + profileTO.getTemplateId() + "&" + ApiConstants.DISPLAY_NAME + "=" + profileTO.getVmName() + "&" + (profileTO.getNetworkId() == null ? "" : ApiConstants.NETWORK_IDS + "=" + profileTO.getNetworkId() + "&") + (profileTO.getOtherDeployParams() == null ? "" : profileTO.getOtherDeployParams() + "&") + "lbruleid=" + loadBalancerTO.getUuid(); scaleUpAction.set_parameters(scaleUpParameters); autoscaleaction.add(_netscalerService, scaleUpAction); final String scaleDownParameters = "command=destroyVirtualMachine" + "&" + "lbruleid=" + loadBalancerTO.getUuid(); scaleDownAction.set_parameters(scaleDownParameters); scaleDownAction.set_vmdestroygraceperiod(destroyVmGracePeriod);
private String getLbSubRuleForStickiness(final LoadBalancerTO lbTO) { int i = 0; if (lbTO.getStickinessPolicies() == null) { return null; for (final StickinessPolicyTO stickinessPolicy : lbTO.getStickinessPolicies()) { if (stickinessPolicy == null) { continue; String srcip = lbTO.getSrcIp(); if (srcip == null) { srcip = "TESTCOOKIE"; tempSb.append("lbcooki_").append(srcip.hashCode()).append("_").append(lbTO.getSrcPort()); cookieName = tempSb.toString(); String srcip = lbTO.getSrcIp(); if (srcip == null) { srcip = "TESTCOOKIE"; tempSb.append("appcookie_").append(srcip.hashCode()).append("_").append(lbTO.getSrcPort()); cookieName = tempSb.toString(); s_logger.warn("Haproxy stickiness policy for lb rule: " + lbTO.getSrcIp() + ":" + lbTO.getSrcPort() + ": Not Applied, cause:invalid method "); return null;
private synchronized boolean removeAutoScaleConfig(final LoadBalancerTO loadBalancerTO) throws Exception, ExecutionException { final String srcIp = loadBalancerTO.getSrcIp(); final int srcPort = loadBalancerTO.getSrcPort(); generateAutoScaleVmGroupIdentifier(loadBalancerTO); final String serviceGroupName = generateAutoScaleServiceGroupName(loadBalancerTO); if (loadBalancerTO.getAutoScaleVmGroupTO().getCurrentState().equals("enabled")) { disableAutoScaleConfig(loadBalancerTO, false);
LoadBalancerTO loadBalancer = new LoadBalancerTO(lbUuid, srcIp, srcPort, protocol, algorithm, revoked, false, false, destinations, rule.getStickinessPolicies(), rule.getHealthCheckPolicies(), rule.getLbSslCert(), rule.getLbProtocol()); if (rule.isAutoScaleConfig()) { loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup());
if (stateRules != null && stateRules.size() > 0) { for (LoadBalancerTO lbto : stateRules) { LoadBalancerVO ulb = _lbDao.findByUuid(lbto.getUuid()); List<LoadBalancerVMMapVO> lbVmMaps = _lb2VmMapDao.listByLoadBalancerId(ulb.getId()); for (LoadBalancerVMMapVO lbVmMap : lbVmMaps) { String dstIp = lbVmMap.getInstanceIp() == null ? nic.getIPv4Address(): lbVmMap.getInstanceIp(); for (int i = 0; i < lbto.getDestinations().length; i++) { LoadBalancerTO.DestinationTO des = lbto.getDestinations()[i]; if (dstIp.equalsIgnoreCase(lbto.getDestinations()[i].getDestIp())) { lbVmMap.setState(des.getMonitorState()); _lb2VmMapDao.persist(lbVmMap);
final List<LbDestination> destinations = rule.getDestinations(); final List<LbStickinessPolicy> stickinessPolicies = rule.getStickinessPolicies(); final LoadBalancerTO lb = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, stickinessPolicies); lb.setLbProtocol(lb_protocol); lbs[i++] = lb;
public synchronized void applyAutoScaleConfig(final LoadBalancerTO loadBalancer) throws Exception, ExecutionException { final AutoScaleVmGroupTO vmGroupTO = loadBalancer.getAutoScaleVmGroupTO(); if (!isAutoScaleSupportedInNetScaler()) { throw new ExecutionException("AutoScale not supported in this version of NetScaler"); } if (loadBalancer.isRevoked() || vmGroupTO.getState().equals("revoke")) { removeAutoScaleConfig(loadBalancer); } else { createAutoScaleConfig(loadBalancer); } // AutoScale APIs are successful executed, now save the configuration. saveConfiguration(); if (s_logger.isInfoEnabled()) { s_logger.info("Successfully executed resource AutoScaleConfig"); } }
boolean has_listener = false; for (final LoadBalancerTO lbTO : lbCmd.getLoadBalancers()) { if (lbTO.isRevoked()) { continue;
private String getNetScalerProtocol(final LoadBalancerTO loadBalancer) throws ExecutionException { final int port = loadBalancer.getSrcPort(); String lbProtocol = loadBalancer.getLbProtocol(); final StickinessPolicyTO[] stickyPolicies = loadBalancer.getStickinessPolicies(); String nsProtocol = "TCP"; if (lbProtocol == null) { lbProtocol = loadBalancer.getProtocol(); } if (stickyPolicies != null && stickyPolicies.length > 0 && stickyPolicies[0] != null) { final StickinessPolicyTO stickinessPolicy = stickyPolicies[0]; if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName()) || StickinessMethodType.AppCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName())) { nsProtocol = "HTTP"; return nsProtocol; } } if (lbProtocol.equalsIgnoreCase(NetUtils.SSL_PROTO) || lbProtocol.equalsIgnoreCase(NetUtils.HTTP_PROTO)) { return lbProtocol.toUpperCase(); } if (port == NetUtils.HTTP_PORT) { nsProtocol = "HTTP"; } else if (NetUtils.TCP_PROTO.equalsIgnoreCase(lbProtocol)) { nsProtocol = "TCP"; } else if (NetUtils.UDP_PROTO.equalsIgnoreCase(lbProtocol)) { nsProtocol = "UDP"; } return nsProtocol; }
LoadBalancerTO loadBalancer = new LoadBalancerTO(lbUuid, srcIp, srcPort, protocol, algorithm, revoked, false, false, destinations, null, rule.getHealthCheckPolicies(), rule.getLbSslCert(), rule.getLbProtocol());
boolean inline = _networkMgr.isNetworkInlineMode(network); LoadBalancerTO loadBalancer = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, rule.getStickinessPolicies(), rule.getHealthCheckPolicies(), rule.getLbSslCert(), rule.getLbProtocol()); loadBalancersToApply.add(loadBalancer);