AutoScale. Tested and corrected AutoScale Vm Group creation command passing to NetScaler. Still delete and disable is pending will wait for clean NS build.

This commit is contained in:
Vijay 2012-07-19 21:39:14 +05:30
parent 36f333e014
commit 2c3d0f724d
2 changed files with 105 additions and 75 deletions

View File

@ -12,6 +12,7 @@
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.agent.api.to;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@ -28,7 +29,7 @@ import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
import com.cloud.utils.Pair;
public class LoadBalancerTO {
public class LoadBalancerTO implements Serializable {
Long id;
String srcIp;
int srcPort;
@ -132,7 +133,7 @@ public class LoadBalancerTO {
return this.autoScaleVmGroupTO != null;
}
public static class StickinessPolicyTO {
public static class StickinessPolicyTO implements Serializable{
private final String _methodName;
private final List<Pair<String, String>> _paramsList;
@ -150,7 +151,7 @@ public class LoadBalancerTO {
}
}
public static class DestinationTO {
public static class DestinationTO implements Serializable{
String destIp;
int destPort;
boolean revoked;
@ -183,7 +184,7 @@ public class LoadBalancerTO {
}
}
public static class CounterTO {
public static class CounterTO implements Serializable{
private final String name;
private final String source;
private final String value;
@ -207,7 +208,7 @@ public class LoadBalancerTO {
}
}
public static class ConditionTO {
public static class ConditionTO implements Serializable{
private final long threshold;
private final String relationalOperator;
private final CounterTO counter;
@ -232,7 +233,7 @@ public class LoadBalancerTO {
}
}
public static class AutoScalePolicyTO {
public static class AutoScalePolicyTO implements Serializable{
private final long id;
private final int duration;
private final int quietTime;
@ -274,7 +275,7 @@ public class LoadBalancerTO {
}
}
public static class AutoScaleVmProfileTO {
public static class AutoScaleVmProfileTO implements Serializable{
private final Long zoneId;
private final Long domainId;
private final Long serviceOfferingId;
@ -347,7 +348,7 @@ public class LoadBalancerTO {
}
}
public static class AutoScaleVmGroupTO {
public static class AutoScaleVmGroupTO implements Serializable{
private final int minMembers;
private final int maxMembers;
private final int memberPort;
@ -417,8 +418,9 @@ public class LoadBalancerTO {
}
LbAutoScaleVmProfile lbAutoScaleVmProfile = lbAutoScaleVmGroup.getProfile();
AutoScaleVmProfile autoScaleVmProfile = lbAutoScaleVmProfile.getProfile();
AutoScaleVmProfileTO autoScaleVmProfileTO = new AutoScaleVmProfileTO(autoScaleVmProfile.getZoneId(), autoScaleVmProfile.getDomainId(),
lbAutoScaleVmProfile.getAutoScaleUserApiKey(), lbAutoScaleVmProfile.getAutoScaleUserSecretKey(), lbAutoScaleVmProfile.getCsUrl(),
lbAutoScaleVmProfile.getCsUrl(), lbAutoScaleVmProfile.getAutoScaleUserApiKey(), lbAutoScaleVmProfile.getAutoScaleUserSecretKey(),
autoScaleVmProfile.getServiceOfferingId(), autoScaleVmProfile.getTemplateId(), autoScaleVmProfile.getOtherDeployParams(),
autoScaleVmProfile.getSnmpCommunity(), autoScaleVmProfile.getSnmpPort(), autoScaleVmProfile.getDestroyVmGraceperiod());

View File

@ -12,6 +12,8 @@
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.network.resource;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Formatter;
@ -100,9 +102,9 @@ public class NetscalerResource implements ServerResource {
private String _name;
private String _zoneId;
private String _physicalNetworkId;
private String _ip;
private String _username;
private String _password;
public String _ip;
public String _username;
public String _password;
private String _publicInterface;
private String _privateInterface;
private Integer _numRetries;
@ -473,7 +475,8 @@ public class NetscalerResource implements ServerResource {
}
cur_prirotiy++;
}
return -1;
priorities.add(cur_prirotiy);;
return cur_prirotiy;
}
@SuppressWarnings("static-access")
@ -482,7 +485,7 @@ public class NetscalerResource implements ServerResource {
int srcPort = loadBalancerTO.getSrcPort();
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
String serviceGroupName = generateAutoScaleServiceGroupName(nsVirtualServerName);
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
disableAutoScaleConfig(loadBalancerTO);
@ -532,27 +535,28 @@ public class NetscalerResource implements ServerResource {
int srcPort = loadBalancerTO.getSrcPort();
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
String profileName = generateAutoScaleProfileName(nsVirtualServerName);
String timerName = generateAutoScaleTimerName(nsVirtualServerName);
String scaleDownActionName = generateAutoScaleScaleDownActionName(nsVirtualServerName);
String scaleUpActionName = generateAutoScaleScaleUpActionName(nsVirtualServerName);
String mtName = generateSnmpMetricTableName(nsVirtualServerName);
String monitorName = generateSnmpMonitorName(nsVirtualServerName);
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);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
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() == "snmp")
{
if(counterTO.getSource().equals("snmp")) {
isSnmp = true;
break;
}
}
String policyId = Long.toString(autoScalePolicyTO.getId());
String policyName = generateAutoScalePolicyName(nsVirtualServerName,policyId);
String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
// 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();
@ -617,26 +621,29 @@ public class NetscalerResource implements ServerResource {
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.delete(login_get_service(), monitor);
} catch (Exception e) {
// Ignore Exception
throw e;
if(isSnmp) {
// 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.delete(login_get_service(), monitor);
} catch (Exception e) {
// Ignore Exception
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_metric(mtName);
metricTable.delete(login_get_service(), metricTable);
} catch (Exception e) {
// Ignore Exception
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_metric(mtName);
metricTable.delete(login_get_service(), metricTable);
} catch (Exception e) {
// Ignore Exception
throw e;
}
return true;
}
@ -655,7 +662,7 @@ public class NetscalerResource implements ServerResource {
s_logger.debug("Created load balancing virtual server " + nsVirtualServerName + " on the Netscaler device");
}
String serviceGroupName = generateAutoScaleServiceGroupName(nsVirtualServerName);
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
// add servicegroup lb_autoscaleGroup -autoscale POLICY -memberPort 80
com.citrix.netscaler.nitro.resource.config.basic.servicegroup serviceGroup = new com.citrix.netscaler.nitro.resource.config.basic.servicegroup();
int memberPort = vmGroupTO.getMemberPort();
@ -694,13 +701,13 @@ public class NetscalerResource implements ServerResource {
int srcPort = loadBalancerTO.getSrcPort();
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
String serviceGroupName = generateAutoScaleServiceGroupName(nsVirtualServerName);
String profileName = generateAutoScaleProfileName(nsVirtualServerName);
String timerName = generateAutoScaleTimerName(nsVirtualServerName);
String scaleDownActionName = generateAutoScaleScaleDownActionName(nsVirtualServerName);
String scaleUpActionName = generateAutoScaleScaleUpActionName(nsVirtualServerName);
String mtName = generateSnmpMetricTableName(nsVirtualServerName);
String monitorName = generateSnmpMonitorName(nsVirtualServerName);
String serviceGroupName = generateAutoScaleServiceGroupName(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);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
AutoScaleVmProfileTO profileTO = vmGroupTO.getProfile();
List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
@ -737,12 +744,14 @@ public class NetscalerResource implements ServerResource {
com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
try {
autoscaleProfile.set_name(profileName);
autoscaleProfile.set_type("CLOUDSTACK");
autoscaleProfile.set_apikey(apiKey);
autoscaleProfile.set_sharedsecret(secretKey);
autoscaleProfile.set_url(url);
autoscaleProfile.add(login_get_service(), autoscaleProfile);
} catch (Exception e) {
// Ignore Exception
throw e;
}
@ -764,7 +773,7 @@ public class NetscalerResource implements ServerResource {
if(scaleUpQuietTime == null) {
if(isScaleUpPolicy(autoScalePolicyTO)) {
scaleUpQuietTime = autoScalePolicyTO.getQuietTime();
if(scaleDownQuietTime == null) {
if(scaleDownQuietTime != null) {
break;
}
}
@ -772,7 +781,7 @@ public class NetscalerResource implements ServerResource {
if(scaleDownQuietTime == null) {
if(isScaleDownPolicy(autoScalePolicyTO)) {
scaleDownQuietTime = autoScalePolicyTO.getQuietTime();
if(scaleUpQuietTime == null) {
if(scaleUpQuietTime != null) {
break;
}
}
@ -823,10 +832,10 @@ public class NetscalerResource implements ServerResource {
}
/* Create Counters */
HashMap<String, Integer> snmpMetrics = new HashMap<String, Integer>();
for (AutoScalePolicyTO autoScalePolicyTO : policies) {
boolean isPolicyRevoked = autoScalePolicyTO.isRevoked();
List<ConditionTO> conditions = autoScalePolicyTO.getConditions();
HashMap<String, Integer> snmpMetrics = new HashMap<String, Integer>();
String policyExpression = "";
int snmpCounterNumber = 0;
for (ConditionTO conditionTO : conditions) {
@ -846,7 +855,7 @@ public class NetscalerResource implements ServerResource {
//add lb metricTable lb_metric_table
com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable metricTable = new com.citrix.netscaler.nitro.resource.config.lb.lbmetrictable();
try {
metricTable.set_metric(mtName);
metricTable.set_metrictable(mtName);
metricTable.add(login_get_service(), metricTable);
} catch (Exception e) {
// Ignore Exception
@ -859,6 +868,7 @@ public class NetscalerResource implements ServerResource {
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.set_destport(snmpPort);
monitor.set_snmpcommunity(snmpCommunity);
monitor.set_metrictable(mtName);
@ -907,7 +917,7 @@ public class NetscalerResource implements ServerResource {
// bind lb monitor lb_metric_table_mon -metric cpu -metricThreshold 1
com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_lbmetrictable_binding monitor_metrictable_binding = new com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_lbmetrictable_binding();
try {
monitor_metrictable_binding.set_metrictable(mtName);
monitor_metrictable_binding.set_monitorname(monitorName);
monitor_metrictable_binding.set_metric(counterName);
monitor_metrictable_binding.set_metricthreshold(1); // 1 is a dummy threshold
monitor_metrictable_binding.add(login_get_service(), monitor_metrictable_binding);
@ -918,12 +928,12 @@ public class NetscalerResource implements ServerResource {
}
// SYS.VSERVER("abcd").SNMP_TABLE(0).AVERAGE_VALUE.GT(80)
int counterIndex = snmpMetrics.get(counterName); // TODO: temporary fix. later on counter name will be added as a param to SNMP_TABLE.
formatter.format("SYS.VSERVER(%s).SNMP_TABLE(%d).AVERAGE_VALUE.%s(%d)",nsVirtualServerName, counterIndex, operator, threshold);
formatter.format("SYS.VSERVER(\"%s\").SNMP_TABLE(%d).AVERAGE_VALUE.%s(%d)",nsVirtualServerName, counterIndex, operator, threshold);
}
else if (counterTO.getSource().equals("netscaler"))
{
//SYS.VSERVER("abcd").RESPTIME.GT(10)
formatter.format("SYS.VSERVER(%s).%s.%s(%d)",nsVirtualServerName, counterTO.getValue(), operator, threshold);
formatter.format("SYS.VSERVER(\"%s\").%s.%s(%d)",nsVirtualServerName, counterTO.getValue(), operator, threshold);
}
if(policyExpression.length() != 0) {
policyExpression += " && ";
@ -933,7 +943,7 @@ public class NetscalerResource implements ServerResource {
policyExpression = "(" + policyExpression + ")";
String policyId = Long.toString(autoScalePolicyTO.getId());
String policyName = generateAutoScalePolicyName(nsVirtualServerName,policyId);
String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
if(!isPolicyRevoked) {
// Adding a autoscale policy
// add timer policy lb_policy_scaleUp_cpu_mem -rule - (SYS.CUR_VSERVER.METRIC_TABLE(cpu).AVG_VAL.GT(80)-
@ -961,7 +971,7 @@ public class NetscalerResource implements ServerResource {
timer_policy_binding.set_name(timerName);
timer_policy_binding.set_policyname(policyName);
// timer_policy_binding.set_vserver(nsVirtualServerName);
timer_policy_binding.set_global("GLOBAL_DEFAULT"); // vserver name is present at the expression
timer_policy_binding.set_global("DEFAULT"); // vserver name is present at the expression
timer_policy_binding.set_samplesize(sampleSize);
timer_policy_binding.set_thresholdsize(sampleSize); // We are not exposing this parameter as of now.
// i.e. n(m) is not exposed to CS user. So thresholdSize == sampleSize
@ -977,7 +987,8 @@ public class NetscalerResource implements ServerResource {
return true;
}
private synchronized void applyAutoScaleConfig(LoadBalancerTO loadBalancer) throws Exception, ExecutionException {
public synchronized void applyAutoScaleConfig(LoadBalancerTO loadBalancer) throws Exception, ExecutionException {
AutoScaleVmGroupTO vmGroupTO = loadBalancer.getAutoScaleVmGroupTO();
if(!isAutoScaleSupportedInNetScaler()) {
throw new ExecutionException("AutoScale not supported in this version of NetScaler");
@ -1986,6 +1997,10 @@ public class NetscalerResource implements ServerResource {
if(vmGroupTO != null) {
vserver.set_minautoscalemembers(vmGroupTO.getMinMembers());
vserver.set_maxautoscalemembers(vmGroupTO.getMaxMembers());
vserver.set_mysqlcharacterset(null);
vserver.set_mysqlprotocolversion(null);
vserver.set_mysqlservercapabilities(null);
vserver.set_mssqlserverversion(null);
}
if (vserverExisis) {
@ -2104,36 +2119,36 @@ public class NetscalerResource implements ServerResource {
return genObjectName("Cloud-VirtualServer", srcIp, srcPort);
}
private String generateAutoScaleServiceGroupName(String virtualServerName) {
return genObjectName("Cloud-AutoScaleServiceGroup", virtualServerName);
private String generateAutoScaleServiceGroupName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScaleServiceGroup", srcIp, srcPort);
}
private String generateAutoScaleTimerName(String virtualServerName) {
return genObjectName("Cloud-AutoScale-Timer", virtualServerName);
private String generateAutoScaleTimerName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-Timer", srcIp, srcPort);
}
private String generateAutoScaleProfileName(String virtualServerName) {
return genObjectName("Cloud-AutoScale-Profile", virtualServerName);
private String generateAutoScaleProfileName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-Profile", srcIp, srcPort);
}
private String generateAutoScaleScaleUpActionName(String virtualServerName) {
return genObjectName("Cloud-AutoScale-ScaleUpAction", virtualServerName);
private String generateAutoScaleScaleUpActionName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-ScaleUpAction", srcIp, srcPort);
}
private String generateAutoScaleScaleDownActionName(String virtualServerName) {
return genObjectName("Cloud-AutoScale-ScaleDownAction", virtualServerName);
private String generateAutoScaleScaleDownActionName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-ScaleDownAction", srcIp, srcPort);
}
private String generateAutoScalePolicyName(String virtualServerName, String poilcyId) {
return genObjectName("Cloud-AutoScale-Policy", virtualServerName, poilcyId);
private String generateAutoScalePolicyName(String srcIp, long srcPort, String poilcyId) {
return genObjectName("Cloud-AutoScale-Policy", srcIp, srcPort, poilcyId);
}
private String generateSnmpMetricTableName(String virtualServerName) {
return genObjectName("Cloud-MetricTable", virtualServerName);
private String generateSnmpMetricTableName(String srcIp, long srcPort) {
return genObjectName("Cloud-MTbl", srcIp, srcPort);
}
private String generateSnmpMonitorName(String virtualServerName) {
return genObjectName("Cloud-Monitor", virtualServerName);
private String generateSnmpMonitorName(String srcIp, long srcPort) {
return genObjectName("Cloud-Mon", srcIp, srcPort);
}
private String generateSnmpMetricName(String counterName) {
@ -2198,4 +2213,17 @@ public class NetscalerResource implements ServerResource {
public void disconnected() {
return;
}
public static void main(String args[]) throws Exception {
NetscalerResource res = new NetscalerResource();
res._ip = "10.102.31.86";
res._username = "nsroot";
res._password = "nsroot";
// Deserialize a string and date from a file.
FileInputStream in = new FileInputStream("c:\\temp\\lbto.obj");
ObjectInputStream s1 = new ObjectInputStream(in);
LoadBalancerTO loadBalancer = (LoadBalancerTO)s1.readObject();
res.applyAutoScaleConfig(loadBalancer);
}
}