You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2012/10/10 10:45:37 UTC
git commit: Autoscale: Supporting network element independent counter
parameters Reviewed-By:Devdeep
Updated Branches:
refs/heads/autoscale bf155c2c3 -> c65a4201a
Autoscale: Supporting network element independent counter parameters Reviewed-By:Devdeep
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/c65a4201
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/c65a4201
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/c65a4201
Branch: refs/heads/autoscale
Commit: c65a4201a2aae63e2645b9b07e114c09e57a1401
Parents: bf155c2
Author: Vijay Venkatachalam <vi...@citrix.com>
Authored: Wed Oct 10 14:14:42 2012 +0530
Committer: Pranav Saxena <pr...@citrix.com>
Committed: Wed Oct 10 14:14:42 2012 +0530
----------------------------------------------------------------------
api/src/com/cloud/agent/api/to/LoadBalancerTO.java | 20 +--
api/src/com/cloud/api/ApiConstants.java | 19 +--
.../api/commands/CreateAutoScaleVmProfileCmd.java | 16 +--
.../api/commands/UpdateAutoScaleVmProfileCmd.java | 17 +--
.../api/response/AutoScaleVmProfileResponse.java | 30 ++--
api/src/com/cloud/network/as/AutoScaleCounter.java | 122 +++++++++++++++
.../com/cloud/network/as/AutoScaleVmProfile.java | 8 +-
.../cloud/network/element/NetscalerElement.java | 88 ++++++-----
.../cloud/network/resource/NetscalerResource.java | 20 ++-
server/src/com/cloud/api/ApiResponseHelper.java | 3 +-
.../com/cloud/network/as/AutoScaleManagerImpl.java | 81 +++++++----
.../com/cloud/network/as/AutoScaleVmProfileVO.java | 75 ++++++----
.../network/lb/LoadBalancingRulesManagerImpl.java | 24 +--
setup/db/create-schema.sql | 3 +-
utils/src/com/cloud/utils/net/NetUtils.java | 13 +-
15 files changed, 353 insertions(+), 186 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java b/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
index 24ea702..2e19af0 100644
--- a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
+++ b/api/src/com/cloud/agent/api/to/LoadBalancerTO.java
@@ -282,8 +282,7 @@ public class LoadBalancerTO {
private final String serviceOfferingId;
private final String templateId;
private final String otherDeployParams;
- private final String snmpCommunity;
- private final Integer snmpPort;
+ private final List<Pair<String, String>> counterParamList;
private final Integer destroyVmGraceperiod;
private final String cloudStackApiUrl;
private final String autoScaleUserApiKey;
@@ -292,14 +291,13 @@ public class LoadBalancerTO {
private final String networkId;
public AutoScaleVmProfileTO(String zoneId, String domainId, String cloudStackApiUrl, String autoScaleUserApiKey, String autoScaleUserSecretKey, String serviceOfferingId,
- String templateId, String vmName, String networkId, String otherDeployParams, String snmpCommunity, Integer snmpPort, Integer destroyVmGraceperiod) {
+ String templateId, String vmName, String networkId, String otherDeployParams, List<Pair<String, String>> counterParamList, Integer destroyVmGraceperiod) {
this.zoneId = zoneId;
this.domainId = domainId;
this.serviceOfferingId = serviceOfferingId;
this.templateId = templateId;
this.otherDeployParams = otherDeployParams;
- this.snmpCommunity = snmpCommunity;
- this.snmpPort = snmpPort;
+ this.counterParamList = counterParamList;
this.destroyVmGraceperiod = destroyVmGraceperiod;
this.cloudStackApiUrl = cloudStackApiUrl;
this.autoScaleUserApiKey = autoScaleUserApiKey;
@@ -328,12 +326,8 @@ public class LoadBalancerTO {
return otherDeployParams;
}
- public String getSnmpCommunity() {
- return snmpCommunity;
- }
-
- public Integer getSnmpPort() {
- return snmpPort;
+ public List<Pair<String, String>> getCounterParamList() {
+ return counterParamList;
}
public Integer getDestroyVmGraceperiod() {
@@ -447,8 +441,8 @@ public class LoadBalancerTO {
AutoScaleVmProfileTO autoScaleVmProfileTO = new AutoScaleVmProfileTO(lbAutoScaleVmProfile.getZoneId(), lbAutoScaleVmProfile.getDomainId(),
lbAutoScaleVmProfile.getCsUrl(), lbAutoScaleVmProfile.getAutoScaleUserApiKey(), lbAutoScaleVmProfile.getAutoScaleUserSecretKey(),
lbAutoScaleVmProfile.getServiceOfferingId(), lbAutoScaleVmProfile.getTemplateId(), lbAutoScaleVmProfile.getVmName(),
- lbAutoScaleVmProfile.getNetworkId(),autoScaleVmProfile.getOtherDeployParams(), autoScaleVmProfile.getSnmpCommunity(),
- autoScaleVmProfile.getSnmpPort(), autoScaleVmProfile.getDestroyVmGraceperiod());
+ lbAutoScaleVmProfile.getNetworkId(),autoScaleVmProfile.getOtherDeployParams(), autoScaleVmProfile.getCounterParams(),
+ autoScaleVmProfile.getDestroyVmGraceperiod());
AutoScaleVmGroup autoScaleVmGroup = lbAutoScaleVmGroup.getVmGroup();
autoScaleVmGroupTO = new AutoScaleVmGroupTO(autoScaleVmGroup.getUuid(), autoScaleVmGroup.getMinMembers(), autoScaleVmGroup.getMaxMembers(), autoScaleVmGroup.getMemberPort(),
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java
index 4d84f3c..2a95a7b 100755
--- a/api/src/com/cloud/api/ApiConstants.java
+++ b/api/src/com/cloud/api/ApiConstants.java
@@ -242,13 +242,13 @@ public class ApiConstants {
public static final String PRIVATE_NETWORK_ID = "privatenetworkid";
public static final String ALLOCATION_STATE = "allocationstate";
public static final String MANAGED_STATE = "managedstate";
- public static final String STORAGE_ID="storageid";
+ public static final String STORAGE_ID = "storageid";
public static final String PING_STORAGE_SERVER_IP = "pingstorageserverip";
public static final String PING_DIR = "pingdir";
public static final String TFTP_DIR = "tftpdir";
public static final String PING_CIFS_USERNAME = "pingcifsusername";
public static final String PING_CIFS_PASSWORD = "pingcifspassword";
- public static final String CHECKSUM="checksum";
+ public static final String CHECKSUM = "checksum";
public static final String NETWORK_DEVICE_TYPE = "networkdevicetype";
public static final String NETWORK_DEVICE_PARAMETER_LIST = "networkdeviceparameterlist";
public static final String ZONE_TOKEN = "zonetoken";
@@ -264,8 +264,8 @@ public class ApiConstants {
public static final String IP_NETWORK_LIST = "iptonetworklist";
public static final String PARAM_LIST = "param";
public static final String FOR_LOAD_BALANCING = "forloadbalancing";
- public static final String KEYBOARD="keyboard";
- public static final String OPEN_FIREWALL="openfirewall";
+ public static final String KEYBOARD = "keyboard";
+ public static final String OPEN_FIREWALL = "openfirewall";
public static final String TEMPLATE_TAG = "templatetag";
public static final String HYPERVISOR_VERSION = "hypervisorversion";
public static final String MAX_GUESTS_LIMIT = "maxguestslimit";
@@ -301,8 +301,8 @@ public class ApiConstants {
public static final String SERVICE_LIST = "servicelist";
public static final String CAN_ENABLE_INDIVIDUAL_SERVICE = "canenableindividualservice";
public static final String SUPPORTED_SERVICES = "supportedservices";
- public static final String NSP_ID= "nspid";
- public static final String ACL_TYPE= "acltype";
+ public static final String NSP_ID = "nspid";
+ public static final String ACL_TYPE = "acltype";
public static final String SUBDOMAIN_ACCESS = "subdomainaccess";
public static final String LOAD_BALANCER_DEVICE_ID = "lbdeviceid";
public static final String LOAD_BALANCER_DEVICE_NAME = "lbdevicename";
@@ -371,8 +371,6 @@ public class ApiConstants {
public static final String AGGR_VALUE = "aggrvalue";
public static final String THRESHOLD = "threshold";
public static final String RELATIONAL_OPERATOR = "relationaloperator";
- public static final String SNMP_COMMUNITY = "snmpcommunity";
- public static final String SNMP_PORT = "snmpport";
public static final String OTHER_DEPLOY_PARAMS = "otherdeployparams";
public static final String MIN_MEMBERS = "minmembers";
public static final String MAX_MEMBERS = "maxmembers";
@@ -389,6 +387,7 @@ public class ApiConstants {
public static final String ACTION = "action";
public static final String CONDITION_ID = "conditionid";
public static final String CONDITION_IDS = "conditionids";
+ public static final String COUNTERPARAM_LIST = "counterparam";
public static final String AUTOSCALE_USER_ID = "autoscaleuserid";
public enum HostDetails {
@@ -398,12 +397,12 @@ public class ApiConstants {
public enum VMDetails {
all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min;
}
-
+
public enum LDAPParams {
hostname, port, usessl, queryfilter, searchbase, dn, passwd, truststore, truststorepass;
@Override
- public String toString(){
+ public String toString() {
return "ldap." + name();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java b/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java
index f5b21a8..68c85d0 100644
--- a/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java
+++ b/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java
@@ -39,6 +39,7 @@ import com.cloud.user.User;
import com.cloud.user.UserContext;
@Implementation(description = "Creates a profile that contains information about the virtual machine which will be provisioned automatically by autoscale feature.", responseObject = AutoScaleVmProfileResponse.class)
+@SuppressWarnings("rawtypes")
public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd {
public static final Logger s_logger = Logger.getLogger(CreateAutoScaleVmProfileCmd.class.getName());
@@ -66,11 +67,8 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd {
@Parameter(name = ApiConstants.AUTOSCALE_VM_DESTROY_TIME, type = CommandType.INTEGER, description = "the time allowed for existing connections to get closed before a vm is destroyed")
private Integer destroyVmGraceperiod;
- @Parameter(name = ApiConstants.SNMP_COMMUNITY, type = CommandType.STRING, description = "snmp community string to be used to contact a virtual machine deployed by this profile")
- private String snmpCommunity;
-
- @Parameter(name = ApiConstants.SNMP_PORT, type = CommandType.INTEGER, description = "port at which snmp agent is listening in a virtual machine deployed by this profile")
- private Integer snmpPort;
+ @Parameter(name = ApiConstants.COUNTERPARAM_LIST, type = CommandType.MAP, description = "counterparam list. Example: counterparam[0].name=snmpcommunity&counterparam[0].value=public&counterparam[1].name=snmpport&counterparam[1].value=161")
+ private Map counterParamList;
@IdentityMapper(entityTableName = "user")
@Parameter(name = ApiConstants.AUTOSCALE_USER_ID, type = CommandType.LONG, description = "the ID of the user used to launch and destroy the VMs")
@@ -109,12 +107,8 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd {
return templateId;
}
- public Integer getSnmpPort() {
- return snmpPort;
- }
-
- public String getSnmpCommunity() {
- return snmpCommunity;
+ public Map getCounterParamList() {
+ return counterParamList;
}
public String getOtherDeployParams() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java b/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java
index c613a34..c94dad4 100644
--- a/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java
+++ b/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java
@@ -17,6 +17,8 @@
package com.cloud.api.commands;
+import java.util.Map;
+
import org.apache.log4j.Logger;
import com.cloud.api.ApiConstants;
@@ -54,11 +56,8 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd {
@Parameter(name = ApiConstants.AUTOSCALE_VM_DESTROY_TIME, type = CommandType.INTEGER, description = "the time allowed for existing connections to get closed before a vm is destroyed")
private Integer destroyVmGraceperiod;
- @Parameter(name = ApiConstants.SNMP_COMMUNITY, type = CommandType.STRING, description = "snmp community string to be used to contact a virtual machine deployed by this profile")
- private String snmpCommunity;
-
- @Parameter(name = ApiConstants.SNMP_PORT, type = CommandType.INTEGER, description = "port at which snmp agent is listening in a virtual machine deployed by this profile")
- private Integer snmpPort;
+ @Parameter(name = ApiConstants.COUNTERPARAM_LIST, type = CommandType.MAP, description = "counterparam list. Example: counterparam[0].name=snmpcommunity&counterparam[0].value=public&counterparam[1].name=snmpport&counterparam[1].value=161")
+ private Map counterParamList;
@IdentityMapper(entityTableName = "user")
@Parameter(name = ApiConstants.AUTOSCALE_USER_ID, type = CommandType.LONG, description = "the ID of the user used to launch and destroy the VMs")
@@ -93,12 +92,8 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd {
return templateId;
}
- public Integer getSnmpPort() {
- return snmpPort;
- }
-
- public String getSnmpCommunity() {
- return snmpCommunity;
+ public Map getCounterParamList() {
+ return counterParamList;
}
public Long getAutoscaleUserId() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java b/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java
index 842fa3a..08d9526 100644
--- a/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java
+++ b/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java
@@ -16,11 +16,16 @@
// under the License.
package com.cloud.api.response;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import com.cloud.api.ApiConstants;
-import com.cloud.api.Parameter;
import com.cloud.api.BaseCmd.CommandType;
+import com.cloud.api.Parameter;
import com.cloud.serializer.Param;
import com.cloud.utils.IdentityProxy;
+import com.cloud.utils.Pair;
import com.google.gson.annotations.SerializedName;
public class AutoScaleVmProfileResponse extends BaseResponse implements ControlledEntityResponse {
@@ -52,13 +57,9 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll
private Integer destroyVmGraceperiod;
/* Parameters related to a running virtual machine - monitoring aspects */
- @SerializedName(ApiConstants.SNMP_COMMUNITY)
- @Param(description = "snmp community string to be used to contact a virtual machine deployed by this profile")
- private String snmpCommunity;
-
- @SerializedName(ApiConstants.SNMP_PORT)
- @Param(description = "port at which the snmp agent is listening in a virtual machine deployed by this profile")
- private Integer snmpPort;
+ @SerializedName(ApiConstants.COUNTERPARAM_LIST)
+ @Parameter(name = ApiConstants.COUNTERPARAM_LIST, type = CommandType.MAP, description = "counterparam list. Example: counterparam[0].name=snmpcommunity&counterparam[0].value=public&counterparam[1].name=snmpport&counterparam[1].value=161")
+ private Map<String, String> counterParams;
@SerializedName(ApiConstants.AUTOSCALE_USER_ID)
@Param(description = "the ID of the user used to launch and destroy the VMs")
@@ -111,12 +112,13 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll
this.otherDeployParams = otherDeployParams;
}
- public void setSnmpCommunity(String snmpCommunity) {
- this.snmpCommunity = snmpCommunity;
- }
-
- public void setSnmpPort(Integer snmpPort) {
- this.snmpPort = snmpPort;
+ public void setCounterParams(List<Pair<String, String>> counterParams) {
+ this.counterParams = new HashMap<String, String>();
+ for (Pair<String, String> paramKV : counterParams) {
+ String key = paramKV.first();
+ String value = paramKV.second();
+ this.counterParams.put(key, value);
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/network/as/AutoScaleCounter.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/as/AutoScaleCounter.java b/api/src/com/cloud/network/as/AutoScaleCounter.java
new file mode 100644
index 0000000..ca7b65a3
--- /dev/null
+++ b/api/src/com/cloud/network/as/AutoScaleCounter.java
@@ -0,0 +1,122 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.as;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gson.annotations.SerializedName;
+
+public class AutoScaleCounter {
+ public static class AutoScaleCounterType {
+ private String _name;
+
+ public static final AutoScaleCounterType Snmp = new AutoScaleCounterType("snmp");
+ public static final AutoScaleCounterType Netscaler = new AutoScaleCounterType("netscaler");
+
+ public AutoScaleCounterType(String name) {
+ _name = name;
+ }
+
+ public String getName() {
+ return _name;
+ }
+ }
+
+ public class AutoScaleCounterParam {
+ @SerializedName("paramname")
+ private String _paramName;
+
+ @SerializedName("required")
+ private Boolean _required;
+
+ @SerializedName("isflag")
+ private Boolean _isFlag;
+
+ @SerializedName("description")
+ private String _description;
+
+ public AutoScaleCounterParam(String name, Boolean required,
+ String description, Boolean flag) {
+ this._paramName = name;
+ this._required = required;
+ this._description = description;
+ this._isFlag = flag;
+ }
+
+ public String getParamName() {
+ return _paramName;
+ }
+
+ public void setParamName(String paramName) {
+ this._paramName = paramName;
+ }
+
+ public Boolean getIsflag() {
+ return _isFlag;
+ }
+
+ public void setIsflag(Boolean isFlag) {
+ this._isFlag = isFlag;
+ }
+
+ public Boolean getRequired() {
+ return _required;
+ }
+
+ public void setRequired(Boolean required) {
+ this._required = required;
+ }
+
+ public String getDescription() {
+ return _description;
+ }
+
+ public void setDescription(String description) {
+ this._description = description;
+ }
+ }
+
+ @SerializedName("methodname")
+ private String _counterName;
+
+ @SerializedName("paramlist")
+ private List<AutoScaleCounterParam> _paramList;
+
+ public AutoScaleCounter(AutoScaleCounterType methodType) {
+ this._counterName = methodType.getName();
+ this._paramList = new ArrayList<AutoScaleCounterParam>(1);
+ }
+
+ public void addParam(String name, Boolean required, String description, Boolean isFlag) {
+ AutoScaleCounterParam param = new AutoScaleCounterParam(name, required, description, isFlag);
+ _paramList.add(param);
+ return;
+ }
+
+ public String getName() {
+ return _counterName;
+ }
+
+ public List<AutoScaleCounterParam> getParamList() {
+ return _paramList;
+ }
+
+ public void setParamList(List<AutoScaleCounterParam> paramList) {
+ this._paramList = paramList;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/api/src/com/cloud/network/as/AutoScaleVmProfile.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/as/AutoScaleVmProfile.java b/api/src/com/cloud/network/as/AutoScaleVmProfile.java
index 7fc6191..77f5ce4 100644
--- a/api/src/com/cloud/network/as/AutoScaleVmProfile.java
+++ b/api/src/com/cloud/network/as/AutoScaleVmProfile.java
@@ -17,7 +17,10 @@
package com.cloud.network.as;
+import java.util.List;
+
import com.cloud.acl.ControlledEntity;
+import com.cloud.utils.Pair;
/**
* AutoScaleVmProfile
@@ -34,11 +37,10 @@ public interface AutoScaleVmProfile extends ControlledEntity {
public String getOtherDeployParams();
- public String getSnmpCommunity();
-
- public Integer getSnmpPort();
+ List<Pair<String, String>> getCounterParams();
public Integer getDestroyVmGraceperiod();
public long getAutoScaleUserId();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
index 49c3b08..16d071f 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
@@ -74,6 +74,8 @@ import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.PhysicalNetworkVO;
import com.cloud.network.PublicIpAddress;
+import com.cloud.network.as.AutoScaleCounter;
+import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterType;
import com.cloud.network.dao.ExternalLoadBalancerDeviceDao;
import com.cloud.network.dao.NetScalerPodDao;
import com.cloud.network.dao.NetworkDao;
@@ -89,7 +91,6 @@ import com.cloud.network.rules.LbStickinessMethod;
import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
import com.cloud.network.rules.StaticNat;
import com.cloud.offering.NetworkOffering;
-import com.cloud.resource.ServerResource;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.component.Inject;
import com.cloud.utils.db.DB;
@@ -107,6 +108,8 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
StaticNatServiceProvider {
private static final Logger s_logger = Logger.getLogger(NetscalerElement.class);
+ public static final AutoScaleCounterType AutoScaleCounterSnmp = new AutoScaleCounterType("snmp");
+ public static final AutoScaleCounterType AutoScaleCounterNetscaler = new AutoScaleCounterType("netscaler");
@Inject
NetworkManager _networkManager;
@@ -248,8 +251,20 @@ StaticNatServiceProvider {
// Specifies that load balancing rules can only be made with public IPs that aren't source NAT IPs
lbCapabilities.put(Capability.LoadBalancingSupportedIps, "additional");
- // Specifies that load balancing rules can support autoscaling
- lbCapabilities.put(Capability.AutoScaleCounters, "snmp,netscaler");
+ // Specifies that load balancing rules can support autoscaling and the list of counters it supports
+ AutoScaleCounter counter;
+ List<AutoScaleCounter> counterList = new ArrayList<AutoScaleCounter>();
+ counter = new AutoScaleCounter(AutoScaleCounterSnmp);
+ counterList.add(counter);
+ counter.addParam("snmpcommunity", true, "the community string that has to be used to do a SNMP GET on the AutoScaled Vm", false);
+ counter.addParam("snmpport", false, "the port at which SNMP agent is running on the AutoScaled Vm", false);
+
+ counter = new AutoScaleCounter(AutoScaleCounterNetscaler);
+ counterList.add(counter);
+
+ Gson gson = new Gson();
+ String autoScaleCounterList = gson.toJson(counterList);
+ lbCapabilities.put(Capability.AutoScaleCounters, autoScaleCounterList);
LbStickinessMethod method;
List<LbStickinessMethod> methodList = new ArrayList<LbStickinessMethod>();
@@ -265,7 +280,6 @@ StaticNatServiceProvider {
methodList.add(method);
method.addParam("holdtime", false, "time period for which persistence is in effect.", false);
- Gson gson = new Gson();
String stickyMethodList = gson.toJson(methodList);
lbCapabilities.put(Capability.SupportedStickinessMethods, stickyMethodList);
@@ -367,7 +381,7 @@ StaticNatServiceProvider {
HostPodVO pod = _podDao.findById(podId);
if (pod == null) {
throw new InvalidParameterValueException("Can't find pod by id " + podId);
- }
+ }
}
for (Long podId: newPodsConfig) {
@@ -664,7 +678,7 @@ StaticNatServiceProvider {
if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) {
LoadBalancerTO loadBalancer = new LoadBalancerTO(lbUuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies());
- if(rule.isAutoScaleConfig()) {
+ if (rule.isAutoScaleConfig()) {
loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup());
}
loadBalancersToApply.add(loadBalancer);
@@ -700,41 +714,41 @@ StaticNatServiceProvider {
try {
if (!multiNetScalerDeployment) {
- String errMsg;
- ExternalLoadBalancerDeviceVO lbDevice = getExternalLoadBalancerForNetwork(config);
- if (lbDevice == null) {
- try {
- lbDevice = allocateLoadBalancerForNetwork(config);
- } catch (Exception e) {
- errMsg = "Could not allocate a NetSclaer load balancer for configuring static NAT rules due to" + e.getMessage();
- s_logger.error(errMsg);
- throw new ResourceUnavailableException(errMsg, this.getClass(), 0);
- }
- }
+ String errMsg;
+ ExternalLoadBalancerDeviceVO lbDevice = getExternalLoadBalancerForNetwork(config);
+ if (lbDevice == null) {
+ try {
+ lbDevice = allocateLoadBalancerForNetwork(config);
+ } catch (Exception e) {
+ errMsg = "Could not allocate a NetSclaer load balancer for configuring static NAT rules due to" + e.getMessage();
+ s_logger.error(errMsg);
+ throw new ResourceUnavailableException(errMsg, this.getClass(), 0);
+ }
+ }
- if (!isNetscalerDevice(lbDevice.getDeviceName())) {
- errMsg = "There are no NetScaler load balancer assigned for this network. So NetScaler element will not be handling the static nat rules.";
- s_logger.error(errMsg);
- throw new ResourceUnavailableException(errMsg, this.getClass(), 0);
- }
- SetStaticNatRulesAnswer answer = null;
- List<StaticNatRuleTO> rulesTO = null;
- if (rules != null) {
- rulesTO = new ArrayList<StaticNatRuleTO>();
- for (StaticNat rule : rules) {
- IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId());
- StaticNatRuleTO ruleTO = new StaticNatRuleTO(0, sourceIp.getAddress().addr(), null, null, rule.getDestIpAddress(), null, null, null, rule.isForRevoke(), false);
- rulesTO.add(ruleTO);
+ if (!isNetscalerDevice(lbDevice.getDeviceName())) {
+ errMsg = "There are no NetScaler load balancer assigned for this network. So NetScaler element will not be handling the static nat rules.";
+ s_logger.error(errMsg);
+ throw new ResourceUnavailableException(errMsg, this.getClass(), 0);
+ }
+ SetStaticNatRulesAnswer answer = null;
+ List<StaticNatRuleTO> rulesTO = null;
+ if (rules != null) {
+ rulesTO = new ArrayList<StaticNatRuleTO>();
+ for (StaticNat rule : rules) {
+ IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId());
+ StaticNatRuleTO ruleTO = new StaticNatRuleTO(0, sourceIp.getAddress().addr(), null, null, rule.getDestIpAddress(), null, null, null, rule.isForRevoke(), false);
+ rulesTO.add(ruleTO);
+ }
}
- }
SetStaticNatRulesCommand cmd = new SetStaticNatRulesCommand(rulesTO);
- answer = (SetStaticNatRulesAnswer) _agentMgr.send(lbDevice.getHostId(), cmd);
- if (answer == null) {
- return false;
- } else {
- return answer.getResult();
- }
+ answer = (SetStaticNatRulesAnswer) _agentMgr.send(lbDevice.getHostId(), cmd);
+ if (answer == null) {
+ return false;
+ } else {
+ return answer.getResult();
+ }
} else {
if (rules != null) {
for (StaticNat rule : rules) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
index 9900e01..8716f9a 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java
@@ -104,6 +104,7 @@ class NitroError {
public class NetscalerResource implements ServerResource {
+ public final static int DEFAULT_SNMP_PORT = 161;
// deployment configuration
private String _name;
private String _zoneId;
@@ -1616,10 +1617,21 @@ public class NetscalerResource implements ServerResource {
AutoScaleVmProfileTO profileTO = vmGroupTO.getProfile();
List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
int interval = vmGroupTO.getInterval();
- int snmpPort = profileTO.getSnmpPort();
- String snmpCommunity = profileTO.getSnmpCommunity();
+ List<Pair<String, String>> counterParams = profileTO.getCounterParamList();
+ String snmpCommunity = null;
+ int snmpPort = DEFAULT_SNMP_PORT;
long cur_prirotiy = 1;
+ // get the session persistence parameters
+ List<Pair<String, String>> paramsList = profileTO.getCounterParamList();
+ for(Pair<String,String> param : paramsList) {
+ if ("snmpcommunity".equalsIgnoreCase(param.first())) {
+ snmpCommunity = param.second();
+ } else if ("snmpport".equalsIgnoreCase(param.first())) {
+ snmpPort = Integer.parseInt(param.second());
+ }
+ }
+
try
{
// Set min and max autoscale members;
@@ -1646,7 +1658,7 @@ public class NetscalerResource implements ServerResource {
String secretKey = profileTO.getAutoScaleUserSecretKey();
String url = profileTO.getCloudStackApiUrl();
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
+ autoscaleprofile autoscaleProfile = new autoscaleprofile();
try {
autoscaleProfile.set_name(profileName);
autoscaleProfile.set_type("CLOUDSTACK");
@@ -1987,7 +1999,7 @@ public class NetscalerResource implements ServerResource {
}
// Delete AutoScale Profile
- com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile autoscaleProfile = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile();
+ autoscaleprofile autoscaleProfile = new autoscaleprofile();
try {
autoscaleProfile.set_name(profileName);
autoscaleProfile.delete(_netscalerService, autoscaleProfile);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 4e5ee43..46bce74 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -3631,8 +3631,7 @@ public class ApiResponseHelper implements ResponseGenerator {
response.setServiceOfferingId(profile.getServiceOfferingId());
response.setTemplateId(profile.getTemplateId());
response.setOtherDeployParams(profile.getOtherDeployParams());
- response.setSnmpCommunity(profile.getSnmpCommunity());
- response.setSnmpPort(profile.getSnmpPort());
+ response.setCounterParams(profile.getCounterParams());
response.setDestroyVmGraceperiod(profile.getDestroyVmGraceperiod());
response.setAutoscaleUserId(profile.getAutoScaleUserId());
response.setObjectName("autoscalevmprofile");
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
index b536b0b..c59ff5b 100644
--- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java
@@ -18,7 +18,6 @@ package com.cloud.network.as;
import java.security.InvalidParameterException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -59,6 +58,7 @@ import com.cloud.exception.ResourceInUseException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.LoadBalancerVO;
import com.cloud.network.Network.Capability;
+import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterParam;
import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao;
import com.cloud.network.as.dao.AutoScalePolicyDao;
import com.cloud.network.as.dao.AutoScaleVmGroupDao;
@@ -82,6 +82,7 @@ import com.cloud.user.UserContext;
import com.cloud.user.dao.AccountDao;
import com.cloud.user.dao.UserDao;
import com.cloud.utils.IdentityProxy;
+import com.cloud.utils.Pair;
import com.cloud.utils.Ternary;
import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager;
@@ -94,6 +95,8 @@ import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.net.NetUtils;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
@Local(value = { AutoScaleService.class, AutoScaleManager.class })
public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleService, Manager {
@@ -160,25 +163,52 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
return _name;
}
- public List<String> getSupportedAutoScaleCounters(long networkid)
+ public List<AutoScaleCounter> getSupportedAutoScaleCounters(long networkid)
{
- String autoScaleCapability = _lbRulesMgr.getLBCapability(networkid, Capability.AutoScaleCounters.getName());
- if (autoScaleCapability == null || autoScaleCapability.length() == 0) {
+ String capability = _lbRulesMgr.getLBCapability(networkid, Capability.AutoScaleCounters.getName());
+ if (capability == null) {
return null;
}
- return Arrays.asList(autoScaleCapability.split(","));
+ Gson gson = new Gson();
+ java.lang.reflect.Type listType = new TypeToken<List<AutoScaleCounter>>() {
+ }.getType();
+ List<AutoScaleCounter> result = gson.fromJson(capability, listType);
+ return result;
}
- public void validateAutoScaleCounters(long networkid, List<Counter> counters)
- {
- List<String> supportedCounters = getSupportedAutoScaleCounters(networkid);
+ public void validateAutoScaleCounters(long networkid, List<Counter> counters, List<Pair<String, String>> counterParamPassed) {
+ List<AutoScaleCounter> supportedCounters = getSupportedAutoScaleCounters(networkid);
if (supportedCounters == null) {
throw new InvalidParameterException("AutoScale is not supported in the network");
}
for (Counter counter : counters) {
- if (!supportedCounters.contains(counter.getSource().name().toString())) {
- throw new InvalidParameterException("AutoScale counter with source='" + counter.getSource() + "' is not supported " +
- "in the network where lb is configured");
+ String counterName = counter.getSource().name().toString();
+ boolean isCounterSupported = false;
+ for (AutoScaleCounter autoScaleCounter : supportedCounters) {
+ if (autoScaleCounter.getName().equals(counterName)) {
+ isCounterSupported = true;
+ List<AutoScaleCounterParam> counterParams = autoScaleCounter.getParamList();
+ for (AutoScaleCounterParam autoScaleCounterParam : counterParams) {
+ boolean isRequiredParameter = autoScaleCounterParam.getRequired();
+ if (isRequiredParameter) {
+ boolean isRequiredParamPresent = false;
+ for (Pair<String, String> pair : counterParamPassed) {
+ if (pair.first().equals(autoScaleCounterParam.getParamName()))
+ isRequiredParamPresent = true;
+
+ }
+ if (!isRequiredParamPresent) {
+ throw new InvalidParameterException("Parameter " + autoScaleCounterParam.getParamName() + " has to be set in AutoScaleVmProfile's "
+ + ApiConstants.COUNTERPARAM_LIST);
+ }
+ }
+ }
+ break;
+ }
+ }
+ if (!isCounterSupported) {
+ throw new InvalidParameterException("AutoScale counter with source='" + counter.getSource().name() + "' is not supported " +
+ "in the network");
}
}
}
@@ -249,6 +279,7 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
return policies;
}
+ @DB
protected AutoScaleVmProfileVO checkValidityAndPersist(AutoScaleVmProfileVO vmProfile) {
long templateId = vmProfile.getTemplateId();
long autoscaleUserId = vmProfile.getAutoScaleUserId();
@@ -315,7 +346,7 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
// validations
HashMap<String, String> deployParams = cmd.getDeployParamMap();
- if(deployParams.containsKey("networks") && deployParams.get("networks").length() > 0) {
+ if (deployParams.containsKey("networks") && deployParams.get("networks").length() > 0) {
throw new InvalidParameterValueException("'networks' is not a valid parameter, network for an AutoScaled VM is chosen automatically. An autoscaled VM is deployed in the loadbalancer's network");
}
/*
@@ -330,7 +361,7 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
}
AutoScaleVmProfileVO profileVO = new AutoScaleVmProfileVO(cmd.getZoneId(), cmd.getDomainId(), cmd.getAccountId(), cmd.getServiceOfferingId(), cmd.getTemplateId(), cmd.getOtherDeployParams(),
- cmd.getSnmpCommunity(), cmd.getSnmpPort(), cmd.getDestroyVmGraceperiod(), autoscaleUserId);
+ cmd.getCounterParamList(), cmd.getDestroyVmGraceperiod(), autoscaleUserId);
profileVO = checkValidityAndPersist(profileVO);
s_logger.info("Successfully create AutoScale Vm Profile with Id: " + profileVO.getId());
@@ -343,8 +374,8 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
Long profileId = cmd.getId();
Long templateId = cmd.getTemplateId();
Long autoscaleUserId = cmd.getAutoscaleUserId();
- Integer snmpPort = cmd.getSnmpPort();
- String snmpCommunity = cmd.getSnmpCommunity();
+ Map counterParamList = cmd.getCounterParamList();
+
Integer destroyVmGraceperiod = cmd.getDestroyVmGraceperiod();
AutoScaleVmProfileVO vmProfile = getEntityInDatabase(UserContext.current().getCaller(), "Auto Scale Vm Profile", profileId, _autoScaleVmProfileDao);
@@ -357,12 +388,8 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
vmProfile.setAutoscaleUserId(autoscaleUserId);
}
- if (snmpCommunity != null) {
- vmProfile.setSnmpCommunity(snmpCommunity);
- }
-
- if (snmpPort != null) {
- vmProfile.setSnmpPort(snmpPort);
+ if (counterParamList != null) {
+ vmProfile.setCounterParamsForUpdate(counterParamList);
}
if (destroyVmGraceperiod != null) {
@@ -569,7 +596,7 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
Account caller = UserContext.current().getCaller();
Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean,
- ListProjectResourcesCriteria>(domainId, isRecursive, null);
+ ListProjectResourcesCriteria>(domainId, isRecursive, null);
_accountMgr.buildACLSearchParameters(caller, id, accountName, null, permittedAccounts, domainIdRecursiveListProject,
listAll, false);
domainId = domainIdRecursiveListProject.first();
@@ -720,7 +747,7 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
return vmGroup.getLoadBalancerId() != null;
}
- private boolean configureAutoScaleVmGroup(long vmGroupid, String currentState) throws ResourceUnavailableException{
+ private boolean configureAutoScaleVmGroup(long vmGroupid, String currentState) throws ResourceUnavailableException {
AutoScaleVmGroup vmGroup = _autoScaleVmGroupDao.findById(vmGroupid);
if (isLoadBalancerBasedAutoScaleVmGroup(vmGroup)) {
@@ -757,8 +784,7 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
} catch (ResourceUnavailableException e) {
autoScaleVmGroupVO.setState(bakupState);
_autoScaleVmGroupDao.persist(autoScaleVmGroupVO);
- }
- finally {
+ } finally {
if (!success) {
s_logger.warn("Could not delete AutoScale Vm Group id : " + id);
return false;
@@ -873,11 +899,10 @@ public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleSe
getAutoScalePolicies("scaledownpolicyid", currentScaleDownPolicyIds, counters, interval, false);
policyIds.addAll(currentScaleDownPolicyIds);
}
+ AutoScaleVmProfileVO profileVO = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.VMPROFILE_ID, vmGroup.getProfileId(), _autoScaleVmProfileDao);
LoadBalancerVO loadBalancer = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.LBID, vmGroup.getLoadBalancerId(), _lbDao);
- validateAutoScaleCounters(loadBalancer.getNetworkId(), counters);
-
- AutoScaleVmProfileVO profileVO = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.VMPROFILE_ID, vmGroup.getProfileId(), _autoScaleVmProfileDao);
+ validateAutoScaleCounters(loadBalancer.getNetworkId(), counters, profileVO.getCounterParams());
ControlledEntity[] sameOwnerEntities = policies.toArray(new ControlledEntity[policies.size() + 2]);
sameOwnerEntities[sameOwnerEntities.length - 2] = loadBalancer;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java
index d963eef..ea2fc76 100644
--- a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java
+++ b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java
@@ -16,7 +16,12 @@
// under the License.
package com.cloud.network.as;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.UUID;
import javax.persistence.Column;
@@ -29,6 +34,7 @@ import javax.persistence.InheritanceType;
import javax.persistence.Table;
import com.cloud.api.Identity;
+import com.cloud.utils.Pair;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.net.NetUtils;
@@ -69,11 +75,8 @@ public class AutoScaleVmProfileVO implements AutoScaleVmProfile, Identity {
@Column(name = "destroy_vm_grace_period", updatable = true)
private Integer destroyVmGraceperiod = NetUtils.DEFAULT_AUTOSCALE_VM_DESTROY_TIME;
- @Column(name = "snmp_community", updatable = true)
- private String snmpCommunity = NetUtils.DEFAULT_SNMP_COMMUNITY;
-
- @Column(name = "snmp_port", updatable = true)
- private Integer snmpPort = NetUtils.DEFAULT_SNMP_PORT;
+ @Column(name = "counter_params", updatable = true)
+ private String counterParams;
@Column(name = GenericDao.REMOVED_COLUMN)
protected Date removed;
@@ -84,7 +87,7 @@ public class AutoScaleVmProfileVO implements AutoScaleVmProfile, Identity {
public AutoScaleVmProfileVO() {
}
- public AutoScaleVmProfileVO(long zoneId, long domainId, long accountId, long serviceOfferingId, long templateId, String otherDeployParams, String snmpCommunity, Integer snmpPort, Integer destroyVmGraceperiod,
+ public AutoScaleVmProfileVO(long zoneId, long domainId, long accountId, long serviceOfferingId, long templateId, String otherDeployParams, Map counterParamList, Integer destroyVmGraceperiod,
long autoscaleUserId) {
this.uuid = UUID.randomUUID().toString();
this.zoneId = zoneId;
@@ -97,12 +100,7 @@ public class AutoScaleVmProfileVO implements AutoScaleVmProfile, Identity {
if (destroyVmGraceperiod != null) {
this.destroyVmGraceperiod = destroyVmGraceperiod;
}
- if (snmpCommunity != null) {
- this.snmpCommunity = snmpCommunity;
- }
- if (snmpPort != null) {
- this.snmpPort = snmpPort;
- }
+ setCounterParamsForUpdate(counterParamList);
}
@Override
@@ -134,21 +132,44 @@ public class AutoScaleVmProfileVO implements AutoScaleVmProfile, Identity {
}
@Override
- public String getSnmpCommunity() {
- return snmpCommunity;
- }
-
- public void setSnmpCommunity(String snmpCommunity) {
- this.snmpCommunity = snmpCommunity;
- }
-
- @Override
- public Integer getSnmpPort() {
- return snmpPort;
- }
-
- public void setSnmpPort(Integer snmpPort) {
- this.snmpPort = snmpPort;
+ public List<Pair<String, String>> getCounterParams() {
+ List<Pair<String, String>> paramsList = new ArrayList<Pair<String, String>>();
+ if (counterParams != null) {
+ String[] params = counterParams.split("[=&]");
+ for (int i = 0; i < (params.length - 1); i = i + 2) {
+ paramsList.add(new Pair<String, String>(params[i], params[i + 1]));
+ }
+ }
+ return paramsList;
+ }
+
+ public void setCounterParams(String counterParam) {
+ this.counterParams = counterParam;
+ }
+
+ public void setCounterParamsForUpdate(Map counterParamList) {
+ StringBuilder sb = new StringBuilder("");
+ boolean isFirstParam = true;
+ if (counterParamList != null) {
+ Iterator<HashMap<String, String>> iter = counterParamList.values().iterator();
+ while (iter.hasNext()) {
+ HashMap<String, String> paramKVpair = iter.next();
+ if (!isFirstParam) {
+ sb.append("&");
+ }
+ String paramName = paramKVpair.get("name");
+ String paramValue = paramKVpair.get("value");
+ sb.append(paramName + "=" + paramValue);
+ isFirstParam = false;
+ }
+ }
+ /*
+ * setCounterParams(String counterParam)'s String param is caught by UpdateBuilder and stored in an internal
+ * list.
+ * Which is used later to update the db. The variables in a VO object is not used to update the db.
+ * Hence calling the function which is intercepted.
+ */
+ setCounterParams(sb.toString());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index 03b2181..d9c29c6 100755
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@ -232,7 +232,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
serviceResponse.setName(service.getName());
if ("Lb".equalsIgnoreCase(service.getName())) {
Map<Capability, String> serviceCapabilities = serviceCapabilitiesMap
- .get(service);
+ .get(service);
if (serviceCapabilities != null) {
for (Capability capability : serviceCapabilities
.keySet()) {
@@ -857,10 +857,10 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
if (apply) {
try {
- if (!applyLoadBalancerConfig(loadBalancerId)) {
- s_logger.warn("Unable to apply the load balancer config");
- return false;
- }
+ if (!applyLoadBalancerConfig(loadBalancerId)) {
+ s_logger.warn("Unable to apply the load balancer config");
+ return false;
+ }
} catch (ResourceUnavailableException e) {
if (rollBack && isRollBackAllowedForProvider(lb)) {
if (backupMaps != null) {
@@ -929,7 +929,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
}
_networkMgr.checkIpForService(ipAddressVo, Service.Lb);
- }
+ }
// FIXME: breaking the dependency on ELB manager. This breaks functionality of ELB using virtual router
// Bug CS-15411 opened to document this
@@ -942,7 +942,7 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
if (off.getElasticLb() && ipAddressVo == null) {
ip = _networkMgr.assignSystemIp(lb.getNetworkId(), lbOwner, true, false);
lb.setSourceIpAddressId(ip.getId());
- }
+ }
try {
result = createLoadBalancer(lb, openFirewall);
} catch (Exception ex) {
@@ -955,8 +955,8 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
s_logger.debug("Releasing system IP address " + ip + " as corresponding lb rule failed to create");
_networkMgr.handleSystemIpRelease(ip);
}
+ }
}
- }
if (result == null) {
throw new CloudRuntimeException("Failed to create load balancer rule: " + lb.getName());
@@ -1373,14 +1373,6 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
return loadBalancerInstances;
}
- public List<String> getSupportedAutoScaleCounters(long networkid)
- {
- String capability = getLBCapability(networkid, Capability.AutoScaleCounters.getName());
- if (capability == null || capability.length() == 0) {
- return null;
- }
- return Arrays.asList(capability.split(","));
- }
@Override
public List<LbStickinessMethod> getStickinessMethods(long networkid)
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 020c0ab..ffde694 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2223,8 +2223,7 @@ CREATE TABLE `cloud`.`autoscale_vmprofiles` (
`template_id` bigint unsigned NOT NULL,
`other_deploy_params` varchar(1024) COMMENT 'other deployment parameters that is in addition to zoneid,serviceofferingid,domainid',
`destroy_vm_grace_period` int unsigned COMMENT 'the time allowed for existing connections to get closed before a vm is destroyed',
- `snmp_community` varchar(255) COMMENT 'the community string to be used to reach out to the VM deployed by this profile',
- `snmp_port` int unsigned COMMENT 'the snmp port to be used to reach out to the VM deployed by this profile',
+ `counter_params` varchar(1024) COMMENT 'the parameters for the counter to be used to get metric information from VMs',
`created` datetime NOT NULL COMMENT 'date created',
`removed` datetime COMMENT 'date removed if not null',
PRIMARY KEY (`id`),
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c65a4201/utils/src/com/cloud/utils/net/NetUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/net/NetUtils.java b/utils/src/com/cloud/utils/net/NetUtils.java
index 39853f4..619864c 100755
--- a/utils/src/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/com/cloud/utils/net/NetUtils.java
@@ -59,9 +59,6 @@ public class NetUtils {
public final static String ALL_CIDRS = "0.0.0.0/0";
- public final static String DEFAULT_SNMP_COMMUNITY = "public";
- public final static int DEFAULT_SNMP_PORT = 161;
-
public final static int DEFAULT_AUTOSCALE_VM_DESTROY_TIME = 2 * 60; // Grace period before Vm is destroyed
public final static int DEFAULT_AUTOSCALE_POLICY_INTERVAL_TIME = 30;
public final static int DEFAULT_AUTOSCALE_POLICY_QUIET_TIME = 5 * 60;
@@ -162,7 +159,7 @@ public class NetUtils {
try {
Process result = Runtime.getRuntime().exec("route print -4");
BufferedReader output = new BufferedReader
- (new InputStreamReader(result.getInputStream()));
+ (new InputStreamReader(result.getInputStream()));
String line = output.readLine();
while(line != null){
@@ -172,8 +169,8 @@ public class NetUtils {
}
line = output.readLine();
}
- } catch( Exception e ) {
- }
+ } catch( Exception e ) {
+ }
return null;
} else {
NetworkInterface nic = null;
@@ -790,7 +787,7 @@ public class NetUtils {
long shift = 32 - cidrBLong[1];
return ((cidrALong[0] >> shift) == (cidrBLong[0] >> shift));
}
-
+
public static Long[] cidrToLong(String cidr) {
if (cidr == null || cidr.isEmpty()) {
return null;
@@ -1058,7 +1055,7 @@ public class NetUtils {
if (instanceName.contains("-") || instanceName.contains(" ") || instanceName.contains("+")) {
s_logger.warn("Instance name can not contain hyphen, spaces and \"+\" char");
return false;
- }
+ }
return true;
}