mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-03 04:12:31 +01:00 
			
		
		
		
	AutoScale. Re-organized NetScalerResource. Bringing autoscale functions in a logical order.
This commit is contained in:
		
							parent
							
								
									eec892dfbc
								
							
						
					
					
						commit
						3ceebc140a
					
				@ -47,7 +47,8 @@ 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.autoscale.*;
 | 
			
		||||
import com.citrix.netscaler.nitro.resource.config.timer.timerpolicy;
 | 
			
		||||
import com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding;
 | 
			
		||||
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;
 | 
			
		||||
@ -1271,7 +1272,7 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean nsServiceGroupExisits(String lbVServerName ) throws ExecutionException {
 | 
			
		||||
    private boolean nsServiceGroupExists(String lbVServerName ) throws ExecutionException {
 | 
			
		||||
        try {
 | 
			
		||||
            return servicegroup.get(_netscalerService, lbVServerName) != null;
 | 
			
		||||
        } catch (nitro_exception e) {
 | 
			
		||||
@ -1460,202 +1461,30 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isScaleUpPolicy(AutoScalePolicyTO autoScalePolicyTO) {
 | 
			
		||||
        return autoScalePolicyTO.getAction().equals("scaleup");
 | 
			
		||||
    }
 | 
			
		||||
    public synchronized void applyAutoScaleConfig(LoadBalancerTO loadBalancer) throws Exception, ExecutionException {
 | 
			
		||||
 | 
			
		||||
    private boolean isScaleDownPolicy(AutoScalePolicyTO autoScalePolicyTO) {
 | 
			
		||||
        return autoScalePolicyTO.getAction().equals("scaledown");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void removeAutoScalePolicy(String timerName, String policyName, boolean isCleanUp) throws Exception {
 | 
			
		||||
        // unbind timer policy
 | 
			
		||||
        // unbbind timer trigger lb_astimer -policyName lb_policy_scaleUp
 | 
			
		||||
        com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding timer_policy_binding = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding();
 | 
			
		||||
        try {
 | 
			
		||||
            timer_policy_binding.set_name(timerName);
 | 
			
		||||
            timer_policy_binding.set_policyname(policyName);
 | 
			
		||||
            timer_policy_binding.set_global("DEFAULT");
 | 
			
		||||
            timer_policy_binding.delete(_netscalerService, timer_policy_binding);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            // Ignore Exception on cleanup
 | 
			
		||||
            if(!isCleanUp) throw e;
 | 
			
		||||
        AutoScaleVmGroupTO vmGroupTO = loadBalancer.getAutoScaleVmGroupTO();
 | 
			
		||||
        if(!isAutoScaleSupportedInNetScaler()) {
 | 
			
		||||
            throw new ExecutionException("AutoScale not supported in this version of NetScaler");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Removing Timer policy
 | 
			
		||||
        // rm timer policy lb_policy_scaleUp_cpu_mem
 | 
			
		||||
        com.citrix.netscaler.nitro.resource.config.timer.timerpolicy timerPolicy = new com.citrix.netscaler.nitro.resource.config.timer.timerpolicy();
 | 
			
		||||
        try {
 | 
			
		||||
            timerPolicy.set_name(policyName);
 | 
			
		||||
            timerPolicy.delete(_netscalerService, timerPolicy);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            // Ignore Exception on cleanup
 | 
			
		||||
            if(!isCleanUp) throw e;
 | 
			
		||||
        if(vmGroupTO.getState().equals("new")) {
 | 
			
		||||
            assert !loadBalancer.isRevoked();
 | 
			
		||||
            createAutoScaleConfig(loadBalancer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("static-access")
 | 
			
		||||
    private synchronized boolean removeAutoScaleConfig(LoadBalancerTO loadBalancerTO) throws Exception, ExecutionException {
 | 
			
		||||
        String srcIp = loadBalancerTO.getSrcIp();
 | 
			
		||||
        int srcPort = loadBalancerTO.getSrcPort();
 | 
			
		||||
 | 
			
		||||
        String nsVirtualServerName  = generateNSVirtualServerName(srcIp, srcPort);
 | 
			
		||||
        String serviceGroupName  = generateAutoScaleServiceGroupName(srcIp, srcPort);
 | 
			
		||||
 | 
			
		||||
        disableAutoScaleConfig(loadBalancerTO, false);
 | 
			
		||||
 | 
			
		||||
        if(isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) {
 | 
			
		||||
            // UnBind autoscale service group
 | 
			
		||||
            // unbind lb vserver lb lb_autoscaleGroup
 | 
			
		||||
            lbvserver_servicegroup_binding vserver_servicegroup_binding = new lbvserver_servicegroup_binding();
 | 
			
		||||
            vserver_servicegroup_binding.set_name(nsVirtualServerName);
 | 
			
		||||
            vserver_servicegroup_binding.set_servicegroupname(serviceGroupName);
 | 
			
		||||
            vserver_servicegroup_binding.delete(_netscalerService, vserver_servicegroup_binding);
 | 
			
		||||
        else if(loadBalancer.isRevoked() || vmGroupTO.getState().equals("revoke")) {
 | 
			
		||||
            removeAutoScaleConfig(loadBalancer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(nsServiceGroupExisits(serviceGroupName)) {
 | 
			
		||||
            // Remove autoscale service group
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.basic.servicegroup serviceGroup = new com.citrix.netscaler.nitro.resource.config.basic.servicegroup();
 | 
			
		||||
            serviceGroup.set_servicegroupname(serviceGroupName);
 | 
			
		||||
            serviceGroup.delete(_netscalerService, serviceGroup);
 | 
			
		||||
        else if(vmGroupTO.getState().equals("enabled")) {
 | 
			
		||||
            assert !loadBalancer.isRevoked();
 | 
			
		||||
            enableAutoScaleConfig(loadBalancer, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        removeLBVirtualServer(nsVirtualServerName);
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("static-access")
 | 
			
		||||
    private synchronized boolean disableAutoScaleConfig(LoadBalancerTO loadBalancerTO, boolean isCleanUp) throws Exception {
 | 
			
		||||
        String srcIp = loadBalancerTO.getSrcIp();
 | 
			
		||||
        int srcPort = loadBalancerTO.getSrcPort();
 | 
			
		||||
 | 
			
		||||
        String nsVirtualServerName  = generateNSVirtualServerName(srcIp, srcPort);
 | 
			
		||||
        String profileName = generateAutoScaleProfileName(srcIp, srcPort);
 | 
			
		||||
        String timerName = generateAutoScaleTimerName(srcIp, srcPort);
 | 
			
		||||
        String scaleDownActionName = generateAutoScaleScaleDownActionName(srcIp, srcPort);
 | 
			
		||||
        String scaleUpActionName = generateAutoScaleScaleUpActionName(srcIp, srcPort);
 | 
			
		||||
        String mtName = generateSnmpMetricTableName(srcIp, srcPort);
 | 
			
		||||
        String monitorName = generateSnmpMonitorName(srcIp, srcPort);
 | 
			
		||||
        String serviceGroupName  = generateAutoScaleServiceGroupName(srcIp, srcPort);
 | 
			
		||||
        AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
 | 
			
		||||
        List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
 | 
			
		||||
        String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
 | 
			
		||||
        String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            /* Delete min/max member policies */
 | 
			
		||||
 | 
			
		||||
            removeAutoScalePolicy(timerName, minMemberPolicyName, isCleanUp);
 | 
			
		||||
 | 
			
		||||
            removeAutoScalePolicy(timerName, maxMemberPolicyName, isCleanUp);
 | 
			
		||||
 | 
			
		||||
            boolean isSnmp = false;
 | 
			
		||||
            /* Create Counters */
 | 
			
		||||
            for (AutoScalePolicyTO autoScalePolicyTO : policies) {
 | 
			
		||||
                List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
 | 
			
		||||
                for (ConditionTO conditionTO : conditions) {
 | 
			
		||||
                    CounterTO counterTO = conditionTO.getCounter();
 | 
			
		||||
                    if(counterTO.getSource().equals("snmp")) {
 | 
			
		||||
                        isSnmp = true;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                String policyId = Long.toString(autoScalePolicyTO.getId());
 | 
			
		||||
                String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
 | 
			
		||||
 | 
			
		||||
                // Removing Timer policy
 | 
			
		||||
                removeAutoScalePolicy(timerName, policyName, isCleanUp);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Delete AutoScale Config */
 | 
			
		||||
            // Delete AutoScale ScaleDown action
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
 | 
			
		||||
            try {
 | 
			
		||||
                scaleDownAction.set_name(scaleDownActionName);
 | 
			
		||||
                scaleDownAction.delete(_netscalerService, scaleDownAction);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Delete AutoScale ScaleUp action
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleUpAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
 | 
			
		||||
            try {
 | 
			
		||||
                scaleUpAction.set_name(scaleUpActionName);
 | 
			
		||||
                scaleUpAction.delete(_netscalerService, scaleUpAction);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Delete Timer
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger();
 | 
			
		||||
            try {
 | 
			
		||||
                timer.set_name(timerName);
 | 
			
		||||
                timer.delete(_netscalerService, timer);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Delete AutoScale Profile
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
 | 
			
		||||
            try {
 | 
			
		||||
                autoscaleProfile.set_name(profileName);
 | 
			
		||||
                autoscaleProfile.delete(_netscalerService, autoscaleProfile);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if(isSnmp) {
 | 
			
		||||
                com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding monitor_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding();
 | 
			
		||||
                try {
 | 
			
		||||
                    monitor_servicegroup_binding.set_monitorname(monitorName);
 | 
			
		||||
                    monitor_servicegroup_binding.set_servicegroupname(serviceGroupName);
 | 
			
		||||
                    monitor_servicegroup_binding.delete(_netscalerService, monitor_servicegroup_binding);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // Ignore Exception on cleanup
 | 
			
		||||
                    if(!isCleanUp) throw e;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Delete Monitor
 | 
			
		||||
                // rm lb monitor lb_metric_table_mon
 | 
			
		||||
                com.citrix.netscaler.nitro.resource.config.lb.lbmonitor monitor = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor();
 | 
			
		||||
                try {
 | 
			
		||||
                    monitor.set_monitorname(monitorName);
 | 
			
		||||
                    monitor.set_type("LOAD");
 | 
			
		||||
                    monitor.delete(_netscalerService, monitor);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // Ignore Exception on cleanup
 | 
			
		||||
                    if(!isCleanUp) throw e;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Delete Metric Table
 | 
			
		||||
                com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable metricTable = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable();
 | 
			
		||||
                try {
 | 
			
		||||
                    metricTable.set_metrictable(mtName);
 | 
			
		||||
                    metricTable.delete(_netscalerService, metricTable);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // Ignore Exception on cleanup
 | 
			
		||||
                    if(!isCleanUp) throw e;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            if(!isCleanUp) {
 | 
			
		||||
                // Normal course, exception has occurred
 | 
			
		||||
                enableAutoScaleConfig(loadBalancerTO, true);
 | 
			
		||||
                throw ex;
 | 
			
		||||
            } else {
 | 
			
		||||
                // Programming error
 | 
			
		||||
                throw ex;
 | 
			
		||||
            }
 | 
			
		||||
        else if(vmGroupTO.getState().equals("disabled")) {
 | 
			
		||||
            assert !loadBalancer.isRevoked();
 | 
			
		||||
            disableAutoScaleConfig(loadBalancer, false);
 | 
			
		||||
        } else {
 | 
			
		||||
            ///// This should never happen
 | 
			
		||||
            throw new ExecutionException("Unknown vmGroup State :" + vmGroupTO.getState());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("static-access")
 | 
			
		||||
@ -1673,7 +1502,7 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
        addLBVirtualServer(nsVirtualServerName, srcIp, srcPort, lbAlgorithm, lbProtocol, loadBalancerTO.getStickinessPolicies(), vmGroupTO);
 | 
			
		||||
 | 
			
		||||
        String serviceGroupName  = generateAutoScaleServiceGroupName(srcIp, srcPort);
 | 
			
		||||
        if(!nsServiceGroupExisits(serviceGroupName)) {
 | 
			
		||||
        if(!nsServiceGroupExists(serviceGroupName)) {
 | 
			
		||||
            // add servicegroup lb_autoscaleGroup -autoscale POLICY -memberPort 80
 | 
			
		||||
            int memberPort = vmGroupTO.getMemberPort();
 | 
			
		||||
            try {
 | 
			
		||||
@ -1707,6 +1536,45 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("static-access")
 | 
			
		||||
    private synchronized boolean removeAutoScaleConfig(LoadBalancerTO loadBalancerTO) throws Exception, ExecutionException {
 | 
			
		||||
        String srcIp = loadBalancerTO.getSrcIp();
 | 
			
		||||
        int srcPort = loadBalancerTO.getSrcPort();
 | 
			
		||||
 | 
			
		||||
        String nsVirtualServerName  = generateNSVirtualServerName(srcIp, srcPort);
 | 
			
		||||
        String serviceGroupName  = generateAutoScaleServiceGroupName(srcIp, srcPort);
 | 
			
		||||
 | 
			
		||||
        disableAutoScaleConfig(loadBalancerTO, false);
 | 
			
		||||
 | 
			
		||||
        if(isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) {
 | 
			
		||||
            // UnBind autoscale service group
 | 
			
		||||
            // unbind lb vserver lb lb_autoscaleGroup
 | 
			
		||||
            lbvserver_servicegroup_binding vserver_servicegroup_binding = new lbvserver_servicegroup_binding();
 | 
			
		||||
            try {
 | 
			
		||||
                vserver_servicegroup_binding.set_name(nsVirtualServerName);
 | 
			
		||||
                vserver_servicegroup_binding.set_servicegroupname(serviceGroupName);
 | 
			
		||||
                vserver_servicegroup_binding.delete(_netscalerService, vserver_servicegroup_binding);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                throw e;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(nsServiceGroupExists(serviceGroupName)) {
 | 
			
		||||
            // Remove autoscale service group
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.basic.servicegroup serviceGroup = new com.citrix.netscaler.nitro.resource.config.basic.servicegroup();
 | 
			
		||||
            try {
 | 
			
		||||
                serviceGroup.set_servicegroupname(serviceGroupName);
 | 
			
		||||
                serviceGroup.delete(_netscalerService, serviceGroup);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                throw e;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        removeLBVirtualServer(nsVirtualServerName);
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("static-access")
 | 
			
		||||
    private synchronized boolean enableAutoScaleConfig(LoadBalancerTO loadBalancerTO, boolean isCleanUp) throws Exception {
 | 
			
		||||
        String srcIp = loadBalancerTO.getSrcIp();
 | 
			
		||||
@ -1996,6 +1864,140 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("static-access")
 | 
			
		||||
    private synchronized boolean disableAutoScaleConfig(LoadBalancerTO loadBalancerTO, boolean isCleanUp) throws Exception {
 | 
			
		||||
        String srcIp = loadBalancerTO.getSrcIp();
 | 
			
		||||
        int srcPort = loadBalancerTO.getSrcPort();
 | 
			
		||||
 | 
			
		||||
        String nsVirtualServerName  = generateNSVirtualServerName(srcIp, srcPort);
 | 
			
		||||
        String profileName = generateAutoScaleProfileName(srcIp, srcPort);
 | 
			
		||||
        String timerName = generateAutoScaleTimerName(srcIp, srcPort);
 | 
			
		||||
        String scaleDownActionName = generateAutoScaleScaleDownActionName(srcIp, srcPort);
 | 
			
		||||
        String scaleUpActionName = generateAutoScaleScaleUpActionName(srcIp, srcPort);
 | 
			
		||||
        String mtName = generateSnmpMetricTableName(srcIp, srcPort);
 | 
			
		||||
        String monitorName = generateSnmpMonitorName(srcIp, srcPort);
 | 
			
		||||
        String serviceGroupName  = generateAutoScaleServiceGroupName(srcIp, srcPort);
 | 
			
		||||
        AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
 | 
			
		||||
        List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
 | 
			
		||||
        String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
 | 
			
		||||
        String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            /* Delete min/max member policies */
 | 
			
		||||
 | 
			
		||||
            removeAutoScalePolicy(timerName, minMemberPolicyName, isCleanUp);
 | 
			
		||||
 | 
			
		||||
            removeAutoScalePolicy(timerName, maxMemberPolicyName, isCleanUp);
 | 
			
		||||
 | 
			
		||||
            boolean isSnmp = false;
 | 
			
		||||
            /* Create Counters */
 | 
			
		||||
            for (AutoScalePolicyTO autoScalePolicyTO : policies) {
 | 
			
		||||
                List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
 | 
			
		||||
                for (ConditionTO conditionTO : conditions) {
 | 
			
		||||
                    CounterTO counterTO = conditionTO.getCounter();
 | 
			
		||||
                    if(counterTO.getSource().equals("snmp")) {
 | 
			
		||||
                        isSnmp = true;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                String policyId = Long.toString(autoScalePolicyTO.getId());
 | 
			
		||||
                String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
 | 
			
		||||
 | 
			
		||||
                // Removing Timer policy
 | 
			
		||||
                removeAutoScalePolicy(timerName, policyName, isCleanUp);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Delete AutoScale Config */
 | 
			
		||||
            // Delete AutoScale ScaleDown action
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
 | 
			
		||||
            try {
 | 
			
		||||
                scaleDownAction.set_name(scaleDownActionName);
 | 
			
		||||
                scaleDownAction.delete(_netscalerService, scaleDownAction);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Delete AutoScale ScaleUp action
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleUpAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
 | 
			
		||||
            try {
 | 
			
		||||
                scaleUpAction.set_name(scaleUpActionName);
 | 
			
		||||
                scaleUpAction.delete(_netscalerService, scaleUpAction);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Delete Timer
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.timer.timertrigger timer = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger();
 | 
			
		||||
            try {
 | 
			
		||||
                timer.set_name(timerName);
 | 
			
		||||
                timer.delete(_netscalerService, timer);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Delete AutoScale Profile
 | 
			
		||||
            com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
 | 
			
		||||
            try {
 | 
			
		||||
                autoscaleProfile.set_name(profileName);
 | 
			
		||||
                autoscaleProfile.delete(_netscalerService, autoscaleProfile);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                // Ignore Exception on cleanup
 | 
			
		||||
                if(!isCleanUp) throw e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if(isSnmp) {
 | 
			
		||||
                com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding monitor_servicegroup_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding();
 | 
			
		||||
                try {
 | 
			
		||||
                    monitor_servicegroup_binding.set_monitorname(monitorName);
 | 
			
		||||
                    monitor_servicegroup_binding.set_servicegroupname(serviceGroupName);
 | 
			
		||||
                    monitor_servicegroup_binding.delete(_netscalerService, monitor_servicegroup_binding);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // Ignore Exception on cleanup
 | 
			
		||||
                    if(!isCleanUp) throw e;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Delete Monitor
 | 
			
		||||
                // rm lb monitor lb_metric_table_mon
 | 
			
		||||
                com.citrix.netscaler.nitro.resource.config.lb.lbmonitor monitor = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor();
 | 
			
		||||
                try {
 | 
			
		||||
                    monitor.set_monitorname(monitorName);
 | 
			
		||||
                    monitor.set_type("LOAD");
 | 
			
		||||
                    monitor.delete(_netscalerService, monitor);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // Ignore Exception on cleanup
 | 
			
		||||
                    if(!isCleanUp) throw e;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Delete Metric Table
 | 
			
		||||
                com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable metricTable = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable();
 | 
			
		||||
                try {
 | 
			
		||||
                    metricTable.set_metrictable(mtName);
 | 
			
		||||
                    metricTable.delete(_netscalerService, metricTable);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // Ignore Exception on cleanup
 | 
			
		||||
                    if(!isCleanUp) throw e;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            if(!isCleanUp) {
 | 
			
		||||
                // Normal course, exception has occurred
 | 
			
		||||
                enableAutoScaleConfig(loadBalancerTO, true);
 | 
			
		||||
                throw ex;
 | 
			
		||||
            } else {
 | 
			
		||||
                // Programming error
 | 
			
		||||
                throw ex;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private synchronized void addAutoScalePolicy(String timerName,String policyName,  long priority, String policyExpression, String action,
 | 
			
		||||
            int duration, int interval, boolean isCleanUp) throws Exception {
 | 
			
		||||
        // Adding a autoscale policy
 | 
			
		||||
@ -2035,32 +2037,34 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized void applyAutoScaleConfig(LoadBalancerTO loadBalancer) throws Exception, ExecutionException {
 | 
			
		||||
    private void removeAutoScalePolicy(String timerName, String policyName, boolean isCleanUp) throws Exception {
 | 
			
		||||
        // unbind timer policy
 | 
			
		||||
        // unbbind timer trigger lb_astimer -policyName lb_policy_scaleUp
 | 
			
		||||
        com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding timer_policy_binding = new com.citrix.netscaler.nitro.resource.config.timer.timertrigger_timerpolicy_binding();
 | 
			
		||||
        try {
 | 
			
		||||
            timer_policy_binding.set_name(timerName);
 | 
			
		||||
            timer_policy_binding.set_policyname(policyName);
 | 
			
		||||
            timer_policy_binding.set_global("DEFAULT");
 | 
			
		||||
            timer_policy_binding.delete(_netscalerService, timer_policy_binding);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            // Ignore Exception on cleanup
 | 
			
		||||
            if(!isCleanUp) throw e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        AutoScaleVmGroupTO vmGroupTO = loadBalancer.getAutoScaleVmGroupTO();
 | 
			
		||||
        if(!isAutoScaleSupportedInNetScaler()) {
 | 
			
		||||
            throw new ExecutionException("AutoScale not supported in this version of NetScaler");
 | 
			
		||||
        }
 | 
			
		||||
        if(vmGroupTO.getState().equals("new")) {
 | 
			
		||||
            assert !loadBalancer.isRevoked();
 | 
			
		||||
            createAutoScaleConfig(loadBalancer);
 | 
			
		||||
        }
 | 
			
		||||
        else if(loadBalancer.isRevoked() || vmGroupTO.getState().equals("revoke")) {
 | 
			
		||||
            removeAutoScaleConfig(loadBalancer);
 | 
			
		||||
        }
 | 
			
		||||
        else if(vmGroupTO.getState().equals("enabled")) {
 | 
			
		||||
            assert !loadBalancer.isRevoked();
 | 
			
		||||
            enableAutoScaleConfig(loadBalancer, false);
 | 
			
		||||
        }
 | 
			
		||||
        else if(vmGroupTO.getState().equals("disabled")) {
 | 
			
		||||
            assert !loadBalancer.isRevoked();
 | 
			
		||||
            disableAutoScaleConfig(loadBalancer, false);
 | 
			
		||||
        } else {
 | 
			
		||||
            ///// This should never happen
 | 
			
		||||
            throw new ExecutionException("Unknown vmGroup State :" + vmGroupTO.getState());
 | 
			
		||||
        // Removing Timer policy
 | 
			
		||||
        // rm timer policy lb_policy_scaleUp_cpu_mem
 | 
			
		||||
        com.citrix.netscaler.nitro.resource.config.timer.timerpolicy timerPolicy = new com.citrix.netscaler.nitro.resource.config.timer.timerpolicy();
 | 
			
		||||
        try {
 | 
			
		||||
            timerPolicy.set_name(policyName);
 | 
			
		||||
            timerPolicy.delete(_netscalerService, timerPolicy);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            // Ignore Exception on cleanup
 | 
			
		||||
            if(!isCleanUp) throw e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private boolean isAutoScaleSupportedInNetScaler() throws ExecutionException {
 | 
			
		||||
        autoscaleprofile autoscaleProfile = new autoscaleprofile();
 | 
			
		||||
        try {
 | 
			
		||||
@ -2076,6 +2080,14 @@ public class NetscalerResource implements ServerResource {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isScaleUpPolicy(AutoScalePolicyTO autoScalePolicyTO) {
 | 
			
		||||
        return autoScalePolicyTO.getAction().equals("scaleup");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isScaleDownPolicy(AutoScalePolicyTO autoScalePolicyTO) {
 | 
			
		||||
        return autoScalePolicyTO.getAction().equals("scaledown");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void saveConfiguration() throws ExecutionException {
 | 
			
		||||
        try {
 | 
			
		||||
            apiCallResult = nsconfig.save(_netscalerService);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user