CS-15644-Autoscale: Implemented UUIDs for templateId-serviceOff Reviewed-By:Vijay

This commit is contained in:
Deepak Garg 2012-09-26 21:25:08 +05:30 committed by Vijay Venkatachalam
parent 3e32a29048
commit bf1e6ed991
11 changed files with 292 additions and 233 deletions

View File

@ -36,7 +36,7 @@ import com.cloud.utils.Pair;
public class LoadBalancerTO {
Long id;
String uuid;
String srcIp;
int srcPort;
String protocol;
@ -48,11 +48,11 @@ public class LoadBalancerTO {
private AutoScaleVmGroupTO autoScaleVmGroupTO;
final static int MAX_STICKINESS_POLICIES = 1;
public LoadBalancerTO (Long id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, List<LbDestination> destinations) {
if (destinations == null) { // for autoscaleconfig destinations will be null;
public LoadBalancerTO(String uuid, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, List<LbDestination> destinations) {
if(destinations == null) { // for autoscaleconfig destinations will be null;
destinations = new ArrayList<LbDestination>();
}
this.id = id;
this.uuid = uuid;
this.srcIp = srcIp;
this.srcPort = srcPort;
this.protocol = protocol;
@ -67,7 +67,7 @@ public class LoadBalancerTO {
}
}
public LoadBalancerTO (Long id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, List<LbDestination> arg_destinations, List<LbStickinessPolicy> stickinessPolicies) {
public LoadBalancerTO(String id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, List<LbDestination> arg_destinations, List<LbStickinessPolicy> stickinessPolicies) {
this(id, srcIp, srcPort, protocol, algorithm, revoked, alreadyAdded, arg_destinations);
this.stickinessPolicies = null;
if (stickinessPolicies != null && stickinessPolicies.size() > 0) {
@ -78,19 +78,18 @@ public class LoadBalancerTO {
this.stickinessPolicies[index] = new StickinessPolicyTO(stickinesspolicy.getMethodName(), stickinesspolicy.getParams());
index++;
if (index == MAX_STICKINESS_POLICIES) break;
}
}
}
if (index == 0) this.stickinessPolicies = null;
}
}
}
}
protected LoadBalancerTO() {
}
public Long getId() {
return id;
public String getUuid() {
return uuid;
}
public String getSrcIp() {
@ -186,7 +185,7 @@ public class LoadBalancerTO {
return alreadyAdded;
}
}
public static class CounterTO implements Serializable {
public static class CounterTO implements Serializable{
private final String name;
private final String source;
private final String value;
@ -210,7 +209,7 @@ public class LoadBalancerTO {
}
}
public static class ConditionTO implements Serializable {
public static class ConditionTO implements Serializable{
private final long threshold;
private final String relationalOperator;
private final CounterTO counter;
@ -235,7 +234,7 @@ public class LoadBalancerTO {
}
}
public static class AutoScalePolicyTO implements Serializable {
public static class AutoScalePolicyTO implements Serializable{
private final long id;
private final int duration;
private final int quietTime;
@ -277,11 +276,11 @@ public class LoadBalancerTO {
}
}
public static class AutoScaleVmProfileTO implements Serializable {
private final Long zoneId;
private final Long domainId;
private final Long serviceOfferingId;
private final Long templateId;
public static class AutoScaleVmProfileTO implements Serializable{
private final String zoneId;
private final String domainId;
private final String serviceOfferingId;
private final String templateId;
private final String otherDeployParams;
private final String snmpCommunity;
private final Integer snmpPort;
@ -290,7 +289,7 @@ public class LoadBalancerTO {
private final String autoScaleUserApiKey;
private final String autoScaleUserSecretKey;
public AutoScaleVmProfileTO(Long zoneId, Long domainId, String cloudStackApiUrl, String autoScaleUserApiKey, String autoScaleUserSecretKey, Long serviceOfferingId, Long templateId,
public AutoScaleVmProfileTO(String zoneId, String domainId, String cloudStackApiUrl, String autoScaleUserApiKey, String autoScaleUserSecretKey, String serviceOfferingId, String templateId,
String otherDeployParams, String snmpCommunity, Integer snmpPort, Integer destroyVmGraceperiod) {
this.zoneId = zoneId;
this.domainId = domainId;
@ -305,19 +304,19 @@ public class LoadBalancerTO {
this.autoScaleUserSecretKey = autoScaleUserSecretKey;
}
public Long getZoneId() {
public String getZoneId() {
return zoneId;
}
public Long getDomainId() {
public String getDomainId() {
return domainId;
}
public Long getServiceOfferingId() {
public String getServiceOfferingId() {
return serviceOfferingId;
}
public Long getTemplateId() {
public String getTemplateId() {
return templateId;
}
@ -350,7 +349,7 @@ public class LoadBalancerTO {
}
}
public static class AutoScaleVmGroupTO implements Serializable {
public static class AutoScaleVmGroupTO implements Serializable{
private final int minMembers;
private final int maxMembers;
private final int memberPort;
@ -402,7 +401,7 @@ public class LoadBalancerTO {
public String getCurrentState() {
return currentState;
}
}
}
public void setAutoScaleVmGroup(LbAutoScaleVmGroup lbAutoScaleVmGroup)
@ -427,9 +426,9 @@ public class LoadBalancerTO {
LbAutoScaleVmProfile lbAutoScaleVmProfile = lbAutoScaleVmGroup.getProfile();
AutoScaleVmProfile autoScaleVmProfile = lbAutoScaleVmProfile.getProfile();
AutoScaleVmProfileTO autoScaleVmProfileTO = new AutoScaleVmProfileTO(autoScaleVmProfile.getZoneId(), autoScaleVmProfile.getDomainId(),
AutoScaleVmProfileTO autoScaleVmProfileTO = new AutoScaleVmProfileTO(lbAutoScaleVmProfile.getZoneId(), lbAutoScaleVmProfile.getDomainId(),
lbAutoScaleVmProfile.getCsUrl(), lbAutoScaleVmProfile.getAutoScaleUserApiKey(), lbAutoScaleVmProfile.getAutoScaleUserSecretKey(),
autoScaleVmProfile.getServiceOfferingId(), autoScaleVmProfile.getTemplateId(), autoScaleVmProfile.getOtherDeployParams(),
lbAutoScaleVmProfile.getServiceOfferingId(), lbAutoScaleVmProfile.getTemplateId(), autoScaleVmProfile.getOtherDeployParams(),
autoScaleVmProfile.getSnmpCommunity(), autoScaleVmProfile.getSnmpPort(), autoScaleVmProfile.getDestroyVmGraceperiod());
AutoScaleVmGroup autoScaleVmGroup = lbAutoScaleVmGroup.getVmGroup();

View File

@ -1,19 +1,19 @@
// 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
// 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
// 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.
// 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;
@ -46,4 +46,6 @@ public interface AutoScaleVmGroup extends ControlledEntity {
String getState();
String getUuid();
}

View File

@ -79,6 +79,11 @@ public class LoadBalancingRule implements FirewallRule, LoadBalancer {
return lb.getAlgorithm();
}
@Override
public String getUuid() {
return lb.getUuid();
}
@Override
public String getXid() {
return lb.getXid();
@ -297,12 +302,20 @@ public class LoadBalancingRule implements FirewallRule, LoadBalancer {
private final String autoScaleUserApiKey;
private final String autoScaleUserSecretKey;
private final String csUrl;
private final String zoneId;
private final String domainId;
private final String serviceOfferingId;
private final String templateId;
public LbAutoScaleVmProfile(AutoScaleVmProfile profile, String autoScaleUserApiKey, String autoScaleUserSecretKey, String csUrl) {
public LbAutoScaleVmProfile(AutoScaleVmProfile profile, String autoScaleUserApiKey, String autoScaleUserSecretKey, String csUrl, String zoneId, String domainId, String serviceOfferingId, String templateId) {
this.profile = profile;
this.autoScaleUserApiKey = autoScaleUserApiKey;
this.autoScaleUserSecretKey = autoScaleUserSecretKey;
this.csUrl = csUrl;
this.zoneId = zoneId;
this.domainId = domainId;
this.serviceOfferingId = serviceOfferingId;
this.templateId = templateId;
}
public AutoScaleVmProfile getProfile() {
@ -316,11 +329,28 @@ public class LoadBalancingRule implements FirewallRule, LoadBalancer {
public String getAutoScaleUserSecretKey() {
return autoScaleUserSecretKey;
}
public String getCsUrl() {
return csUrl;
}
public String getZoneId() {
return zoneId;
}
public String getDomainId() {
return domainId;
}
public String getServiceOfferingId() {
return serviceOfferingId;
}
public String getTemplateId() {
return templateId;
}
}
public static class LbAutoScaleVmGroup {
AutoScaleVmGroup vmGroup;
private final List<LbAutoScalePolicy> policies;
@ -350,4 +380,5 @@ public class LoadBalancingRule implements FirewallRule, LoadBalancer {
return currentState;
}
}
}

View File

@ -17,7 +17,7 @@
package com.cloud.network.rules;
/**
* Definition for a LoadBalancer
* Definition for a LoadBalancer
*/
public interface LoadBalancer extends FirewallRule {
@ -26,9 +26,10 @@ public interface LoadBalancer extends FirewallRule {
String getDescription();
int getDefaultPortStart();
int getDefaultPortEnd();
String getAlgorithm();
String getUuid();
}

View File

@ -140,7 +140,7 @@ import com.cloud.vm.dao.NicDao;
public class ElasticLoadBalancerManagerImpl implements
ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
private static final Logger s_logger = Logger
.getLogger(ElasticLoadBalancerManagerImpl.class);
.getLogger(ElasticLoadBalancerManagerImpl.class);
@Inject
IPAddressDao _ipAddressDao;
@ -184,9 +184,9 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
PodVlanMapDao _podVlanMapDao;
@Inject
ElasticLbVmMapDao _elbVmMapDao;
@Inject
@Inject
NetworkDao _networksDao;
@Inject
@Inject
AccountDao _accountDao;
@Inject
PhysicalNetworkServiceProviderDao _physicalProviderDao;
@ -195,7 +195,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
@Inject
NicDao _nicDao;
String _name;
String _instance;
static final private String _elbVmNamePrefix = "l";
@ -225,8 +224,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
}
}
public DomainRouterVO deployLoadBalancerVM(Long networkId, IPAddressVO ipAddr, Long accountId) {
public DomainRouterVO deployLoadBalancerVM(Long networkId, IPAddressVO ipAddr, Long accountId) {
NetworkVO network = _networkDao.findById(networkId);
DataCenter dc = _dcDao.findById(network.getDataCenterId());
Long podId = getPodIdForDirectIp(ipAddr);
@ -285,7 +283,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
private void createApplyLoadBalancingRulesCommands(
List<LoadBalancingRule> rules, DomainRouterVO elbVm, Commands cmds, long guestNetworkId) {
LoadBalancerTO[] lbs = new LoadBalancerTO[rules.size()];
int i = 0;
for (LoadBalancingRule rule : rules) {
@ -295,11 +292,12 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
String algorithm = rule.getAlgorithm();
String elbIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress()
.addr();
.addr();
int srcPort = rule.getSourcePortStart();
String uuid = rule.getUuid();
List<LbDestination> destinations = rule.getDestinations();
LoadBalancerTO lb = new LoadBalancerTO(rule.getId(), elbIp, srcPort, protocol, algorithm, revoked, false, destinations);
lbs[i++] = lb;
LoadBalancerTO lb = new LoadBalancerTO(uuid, elbIp, srcPort, protocol, algorithm, revoked, false, destinations);
lbs[i++] = lb;
}
LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,elbVm.getPublicIpAddress(),
@ -339,7 +337,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
@Override
public boolean applyLoadBalancerRules(Network network,
List<? extends FirewallRule> rules)
throws ResourceUnavailableException {
throws ResourceUnavailableException {
if (rules == null || rules.isEmpty()) {
return true;
}
@ -366,7 +364,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
List<LbStickinessPolicy> policyList = _lbMgr.getStickinessPolicies(lb.getId());
LoadBalancingRule loadBalancing = new LoadBalancingRule(
lb, dstList, policyList);
lbRules.add(loadBalancing);
lbRules.add(loadBalancing);
}
return applyLBRules(elbVm, lbRules, network.getId());
} else if (elbVm.getState() == State.Stopped
@ -386,7 +384,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
@Override
public boolean configure(String name, Map<String, Object> params)
throws ConfigurationException {
throws ConfigurationException {
_name = name;
final Map<String, String> configs = _configDao.getConfiguration("AgentManager", params);
_systemAcct = _accountService.getSystemAccount();
@ -402,14 +400,12 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
_elasticLbVmRamSize = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmMemory.key()), DEFAULT_ELB_VM_RAMSIZE);
_elasticLbvmCpuMHz = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmCpuMhz.key()), DEFAULT_ELB_VM_CPU_MHZ);
_elasticLbvmNumCpu = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmNumVcpu.key()), 1);
_elasticLbVmOffering = new ServiceOfferingVO("System Offering For Elastic LB VM", _elasticLbvmNumCpu,
_elasticLbVmRamSize, _elasticLbvmCpuMHz, 0, 0, true, null, useLocalStorage,
_elasticLbVmOffering = new ServiceOfferingVO("System Offering For Elastic LB VM", _elasticLbvmNumCpu,
_elasticLbVmRamSize, _elasticLbvmCpuMHz, 0, 0, true, null, useLocalStorage,
true, null, true, VirtualMachine.Type.ElasticLoadBalancerVm, true);
_elasticLbVmOffering.setUniqueName(ServiceOffering.elbVmDefaultOffUniqueName);
_elasticLbVmOffering = _serviceOfferingDao.persistSystemServiceOffering(_elasticLbVmOffering);
String enabled = _configDao.getValue(Config.ElasticLoadBalancerEnabled.key());
_enabled = (enabled == null) ? false: Boolean.parseBoolean(enabled);
s_logger.info("Elastic Load balancer enabled: " + _enabled);
@ -423,7 +419,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
throw new ConfigurationException("ELB: Traffic type for front end of load balancer has to be guest or public; found : " + traffType);
s_logger.info("ELB: Elastic Load Balancer: will balance on " + traffType );
int gcIntervalMinutes = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmGcInterval.key()), 5);
if (gcIntervalMinutes < 5)
if (gcIntervalMinutes < 5)
gcIntervalMinutes = 5;
s_logger.info("ELB: Elastic Load Balancer: scheduling GC to run every " + gcIntervalMinutes + " minutes" );
_gcThreadPool = Executors.newScheduledThreadPool(1, new NamedThreadFactory("ELBVM-GC"));
@ -431,7 +427,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
_itMgr.registerGuru(VirtualMachine.Type.ElasticLoadBalancerVm, this);
}
return true;
}
@ -484,10 +479,9 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Starting a ELB vm for network configurations: " + guestNetwork + " in " + dest);
}
assert guestNetwork.getState() == Network.State.Implemented
|| guestNetwork.getState() == Network.State.Setup
|| guestNetwork.getState() == Network.State.Implementing
: "Network is not yet fully implemented: "+ guestNetwork;
assert guestNetwork.getState() == Network.State.Implemented
|| guestNetwork.getState() == Network.State.Setup
|| guestNetwork.getState() == Network.State.Implementing : "Network is not yet fully implemented: " + guestNetwork;
DataCenterDeployment plan = null;
DomainRouterVO elbVm = null;
@ -537,7 +531,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
elbVm = this.start(elbVm, _accountService.getSystemUser(), _accountService.getSystemAccount(), params);
}
return elbVm;
} finally {
_networkDao.releaseFromLockTable(guestNetworkId);
@ -554,7 +547,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
}
}
private DomainRouterVO stop(DomainRouterVO elbVm, boolean forced, User user, Account caller) throws ConcurrentOperationException, ResourceUnavailableException {
s_logger.debug("Stopping ELB vm " + elbVm);
try {
@ -570,7 +562,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
protected List<LoadBalancerVO> findExistingLoadBalancers(String lbName, Long ipId, Long accountId, Long domainId, Integer publicPort) {
SearchBuilder<LoadBalancerVO> sb = _lbDao.createSearchBuilder();
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ);
sb.and("publicPort", sb.entity().getSourcePortStart(), SearchCriteria.Op.EQ);
if (ipId != null) {
@ -587,7 +579,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
sc.setParameters("accountId", accountId);
if (ipId != null) {
sc.setParameters("sourceIpAddress", ipId);
}
}
if (domainId != null) {
sc.setParameters("domainId",domainId);
}
@ -607,7 +599,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
PublicIp ip = _networkMgr.assignPublicIpAddress(frontEndNetwork.getDataCenterId(), null, account, VlanType.DirectAttached, frontEndNetwork.getId(), null, true);
IPAddressVO ipvo = _ipAddressDao.findById(ip.getId());
ipvo.setAssociatedWithNetworkId(frontEndNetwork.getId());
ipvo.setAssociatedWithNetworkId(frontEndNetwork.getId());
_ipAddressDao.update(ipvo.getId(), ipvo);
txn.commit();
s_logger.info("Acquired frontend IP for ELB " + ip);
@ -618,7 +610,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
public void releaseIp(long ipId, long userId, Account caller) {
s_logger.info("ELB: Release public IP for loadbalancing " + ipId);
IPAddressVO ipvo = _ipAddressDao.findById(ipId);
ipvo.setAssociatedWithNetworkId(null);
ipvo.setAssociatedWithNetworkId(null);
_ipAddressDao.update(ipvo.getId(), ipvo);
_networkMgr.disassociatePublicIpAddress(ipId, userId, caller);
_ipAddressDao.unassignIpAddress(ipId);
@ -651,7 +643,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
existingLbs = findExistingLoadBalancers(lb.getName(), null, lb.getAccountId(), lb.getDomainId(), null);
if (existingLbs != null) {
throw new InvalidParameterValueException("Supplied LB name " + lb.getName() + " is not associated with IP " + lb.getSourceIpAddressId() );
}
}
} else {
s_logger.debug("Could not find any existing frontend ips for this account for this LB rule, acquiring a new frontent IP for ELB");
PublicIp ip = allocDirectIp(account, networkId);
@ -684,7 +676,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
DomainRouterVO elbVm = null;
if (existingLbs == null) {
elbVm = findELBVmWithCapacity(network, ipAddr);
if (elbVm == null) {
@ -788,7 +779,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
}
}
@Override
public DomainRouterVO findByName(String name) {
if (!VirtualMachineName.isValidSystemVmName(name, _instance, _elbVmNamePrefix)) {
@ -798,19 +788,16 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
return _routerDao.findById(VirtualMachineName.getSystemVmId(name));
}
@Override
public DomainRouterVO findById(long id) {
return _routerDao.findById(id);
}
@Override
public DomainRouterVO persist(DomainRouterVO elbVm) {
return _routerDao.persist(elbVm);
}
@Override
public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest, ReservationContext context) {
DomainRouterVO elbVm = profile.getVirtualMachine();
@ -874,7 +861,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
String domain = guestNetwork.getNetworkDomain();
if (domain != null) {
buf.append(" domain=" + domain);
}
}
buf.append(" dns1=").append(defaultDns1);
if (defaultDns2 != null) {
@ -892,7 +879,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
return true;
}
@Override
public boolean finalizeDeployment(Commands cmds, VirtualMachineProfile<DomainRouterVO> profile, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException {
DomainRouterVO elbVm = profile.getVirtualMachine();
@ -914,7 +900,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
return true;
}
@Override
public boolean finalizeStart(VirtualMachineProfile<DomainRouterVO> profile, long hostId, Commands cmds, ReservationContext context) {
CheckSshAnswer answer = (CheckSshAnswer) cmds.getAnswer("checkSsh");
@ -926,7 +911,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
return true;
}
@Override
public boolean finalizeCommandsOnStart(Commands cmds, VirtualMachineProfile<DomainRouterVO> profile) {
DomainRouterVO elbVm = profile.getVirtualMachine();
@ -979,7 +963,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
return true;
}
@Override
public void finalizeStop(VirtualMachineProfile<DomainRouterVO> profile, StopAnswer answer) {
if (answer != null) {
@ -993,7 +976,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
//TODO: process network usage stats
}
@Override
public void finalizeExpunge(DomainRouterVO vm) {
// no-op
@ -1017,7 +999,6 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru<DomainRouterVO> {
throw new UnsupportedOperationException("Plug nic is not supported for vm of type " + vm.getType());
}
@Override
public boolean unplugNic(Network network, NicTO nic, VirtualMachineTO vm,
ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException {

View File

@ -371,7 +371,7 @@ StaticNatServiceProvider {
HostPodVO pod = _podDao.findById(podId);
if (pod == null) {
throw new InvalidParameterValueException("Can't find pod by id " + podId);
}
}
}
for (Long podId: newPodsConfig) {
@ -669,12 +669,13 @@ StaticNatServiceProvider {
boolean revoked = (rule.getState().equals(FirewallRule.State.Revoke));
String protocol = rule.getProtocol();
String algorithm = rule.getAlgorithm();
String lbUuid = rule.getUuid();
String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr();
int srcPort = rule.getSourcePortStart();
List<LbDestination> destinations = rule.getDestinations();
if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) {
LoadBalancerTO loadBalancer = new LoadBalancerTO(rule.getId(), srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies());
LoadBalancerTO loadBalancer = new LoadBalancerTO(lbUuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies());
if(rule.isAutoScaleConfig()) {
loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup());
}
@ -711,41 +712,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, null);
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) {

View File

@ -28,6 +28,7 @@ import org.apache.log4j.Logger;
import com.citrix.netscaler.nitro.exception.nitro_exception;
import com.citrix.netscaler.nitro.resource.base.base_response;
import com.citrix.netscaler.nitro.resource.config.autoscale.autoscalepolicy;
import com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleprofile;
import com.citrix.netscaler.nitro.resource.config.basic.server_service_binding;
import com.citrix.netscaler.nitro.resource.config.basic.servicegroup;
@ -49,7 +50,6 @@ import com.citrix.netscaler.nitro.resource.config.ns.nshardware;
import com.citrix.netscaler.nitro.resource.config.ns.nsip;
import com.citrix.netscaler.nitro.resource.config.ns.nstimer;
import com.citrix.netscaler.nitro.resource.config.ns.nstimer_autoscalepolicy_binding;
import com.citrix.netscaler.nitro.resource.config.autoscale.*;
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;
@ -619,14 +619,14 @@ public class NetscalerResource implements ServerResource {
saveConfiguration();
return new Answer(cmd);
} catch (ExecutionException e) {
s_logger.error("Failed to execute LoadBalancerConfigCommand due to " + e.getMessage());
s_logger.error("Failed to execute LoadBalancerConfigCommand due to ", e);
if (shouldRetry(numRetries)) {
return retry(cmd, numRetries);
} else {
return new Answer(cmd, e);
}
} catch (Exception e) {
s_logger.error("Failed to execute LoadBalancerConfigCommand due to " + e.getMessage());
s_logger.error("Failed to execute LoadBalancerConfigCommand due to ", e);
if (shouldRetry(numRetries)) {
return retry(cmd, numRetries);
} else {
@ -1367,7 +1367,8 @@ public class NetscalerResource implements ServerResource {
return nsProtocol;
}
private void addLBVirtualServer(String virtualServerName, String publicIp, int publicPort, String lbAlgorithm, String protocol, StickinessPolicyTO[] stickyPolicies, AutoScaleVmGroupTO vmGroupTO) throws ExecutionException {
private void addLBVirtualServer(String virtualServerName, String publicIp, int publicPort, String lbAlgorithm, String protocol, StickinessPolicyTO[] stickyPolicies, AutoScaleVmGroupTO vmGroupTO)
throws ExecutionException {
try {
String lbMethod;
if ("roundrobin".equalsIgnoreCase(lbAlgorithm)) {
@ -1516,6 +1517,7 @@ public class NetscalerResource implements ServerResource {
int srcPort = loadBalancerTO.getSrcPort();
String lbProtocol = getNetScalerProtocol(loadBalancerTO);
String lbAlgorithm = loadBalancerTO.getAlgorithm();
String vmGroupIdentifier = generateAutoScaleVmGroupIdentifier(loadBalancerTO);
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
if (s_logger.isDebugEnabled()) {
@ -1523,7 +1525,7 @@ public class NetscalerResource implements ServerResource {
}
addLBVirtualServer(nsVirtualServerName, srcIp, srcPort, lbAlgorithm, lbProtocol, loadBalancerTO.getStickinessPolicies(), vmGroupTO);
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
String serviceGroupName = generateAutoScaleServiceGroupName(vmGroupIdentifier);
if(!nsServiceGroupExists(serviceGroupName)) {
// add servicegroup lb_autoscaleGroup -autoscale POLICY -memberPort 80
int memberPort = vmGroupTO.getMemberPort();
@ -1562,15 +1564,16 @@ public class NetscalerResource implements ServerResource {
private synchronized boolean removeAutoScaleConfig(LoadBalancerTO loadBalancerTO) throws Exception, ExecutionException {
String srcIp = loadBalancerTO.getSrcIp();
int srcPort = loadBalancerTO.getSrcPort();
String vmGroupIdentifier = generateAutoScaleVmGroupIdentifier(loadBalancerTO);
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
String serviceGroupName = generateAutoScaleServiceGroupName(srcIp, srcPort);
String serviceGroupName = generateAutoScaleServiceGroupName(vmGroupIdentifier);
if (loadBalancerTO.getAutoScaleVmGroupTO().getCurrentState().equals("enabled")) {
disableAutoScaleConfig(loadBalancerTO, false);
}
if (isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) {
if(isServiceGroupBoundToVirtualServer(nsVirtualServerName, serviceGroupName)) {
// UnBind autoscale service group
// unbind lb vserver lb lb_autoscaleGroup
lbvserver_servicegroup_binding vserver_servicegroup_binding = new lbvserver_servicegroup_binding();
@ -1601,17 +1604,18 @@ public class NetscalerResource implements ServerResource {
@SuppressWarnings("static-access")
private synchronized boolean enableAutoScaleConfig(LoadBalancerTO loadBalancerTO, boolean isCleanUp) throws Exception {
String vmGroupIdentifier = generateAutoScaleVmGroupIdentifier(loadBalancerTO);
String srcIp = loadBalancerTO.getSrcIp();
int srcPort = loadBalancerTO.getSrcPort();
String nsVirtualServerName = generateNSVirtualServerName(srcIp, srcPort);
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);
String serviceGroupName = generateAutoScaleServiceGroupName(vmGroupIdentifier);
String profileName = generateAutoScaleProfileName(vmGroupIdentifier);
String timerName = generateAutoScaleTimerName(vmGroupIdentifier);
String scaleDownActionName = generateAutoScaleScaleDownActionName(vmGroupIdentifier);
String scaleUpActionName = generateAutoScaleScaleUpActionName(vmGroupIdentifier);
String mtName = generateSnmpMetricTableName(vmGroupIdentifier);
String monitorName = generateSnmpMonitorName(vmGroupIdentifier);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
AutoScaleVmProfileTO profileTO = vmGroupTO.getProfile();
List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
@ -1634,7 +1638,8 @@ public class NetscalerResource implements ServerResource {
vserver.update(_netscalerService, vserver);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
/* AutoScale Config */
@ -1655,7 +1660,8 @@ public class NetscalerResource implements ServerResource {
autoscaleProfile.add(_netscalerService, autoscaleProfile);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Add Timer
@ -1666,7 +1672,8 @@ public class NetscalerResource implements ServerResource {
timer.add(_netscalerService, timer);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// AutoScale Actions
@ -1707,12 +1714,13 @@ public class NetscalerResource implements ServerResource {
ApiConstants.SERVICE_OFFERING_ID + "=" + profileTO.getServiceOfferingId()+ "&" +
ApiConstants.TEMPLATE_ID + "=" + profileTO.getTemplateId()+ "&" +
((profileTO.getOtherDeployParams() == null)? "" : (profileTO.getOtherDeployParams() + "&")) +
"lbruleid=" + loadBalancerTO.getId();
"lbruleid=" + loadBalancerTO.getUuid();
scaleUpAction.set_parameters(scaleUpParameters);
scaleUpAction.add(_netscalerService, scaleUpAction);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction scaleDownAction = new com.citrix.netscaler.nitro.resource.config.autoscale.autoscaleaction();
@ -1725,23 +1733,24 @@ public class NetscalerResource implements ServerResource {
scaleDownAction.set_profilename(profileName);
scaleDownAction.set_quiettime(scaleDownQuietTime);
String scaleDownParameters = "command=destroyVirtualMachine" + "&" +
"lbruleid=" + loadBalancerTO.getId();
"lbruleid=" + loadBalancerTO.getUuid();
scaleDownAction.set_parameters(scaleDownParameters);
scaleDownAction.set_vmdestroygraceperiod(destroyVmGracePeriod);
scaleDownAction.add(_netscalerService, scaleDownAction);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
/* Create min member policy */
String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
String minMemberPolicyName = generateAutoScaleMinPolicyName(vmGroupIdentifier);
String minMemberPolicyExp = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.LT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MINAUTOSCALEMEMBERS)";
addAutoScalePolicy(timerName, minMemberPolicyName, cur_prirotiy++, minMemberPolicyExp, scaleUpActionName,
interval, interval, isCleanUp);
/* Create max member policy */
String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
String maxMemberPolicyName = generateAutoScaleMaxPolicyName(vmGroupIdentifier);
String maxMemberPolicyExp = "SYS.VSERVER(\"" + nsVirtualServerName + "\").ACTIVESERVICES.GT(SYS.VSERVER(\"" + nsVirtualServerName + "\").MAXAUTOSCALEMEMBERS)";
addAutoScalePolicy(timerName, maxMemberPolicyName, cur_prirotiy++, maxMemberPolicyExp, scaleDownActionName,
interval, interval, isCleanUp);
@ -1773,7 +1782,8 @@ public class NetscalerResource implements ServerResource {
metricTable.add(_netscalerService, metricTable);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Create Monitor
@ -1790,7 +1800,8 @@ public class NetscalerResource implements ServerResource {
monitor.add(_netscalerService, monitor);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Bind monitor to servicegroup.
@ -1807,7 +1818,8 @@ public class NetscalerResource implements ServerResource {
servicegroup_lbmonitor_binding.add(_netscalerService, servicegroup_monitor_binding);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
}
@ -1828,7 +1840,8 @@ public class NetscalerResource implements ServerResource {
metrictable_metric_binding.add(_netscalerService, metrictable_metric_binding);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// bind lb monitor lb_metric_table_mon -metric cpu -metricThreshold 1
@ -1845,11 +1858,13 @@ public class NetscalerResource implements ServerResource {
monitor_metric_binding.add(_netscalerService, monitor_metric_binding);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
}
// 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.
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);
}
else if (counterTO.getSource().equals("netscaler"))
@ -1865,7 +1880,7 @@ public class NetscalerResource implements ServerResource {
policyExpression = "(" + policyExpression + ")";
String policyId = Long.toString(autoScalePolicyTO.getId());
String policyName = generateAutoScalePolicyName(srcIp, srcPort, policyId);
String policyName = generateAutoScalePolicyName(vmGroupIdentifier, policyId);
String action = null;
if(isScaleUpPolicy(autoScalePolicyTO)) {
action = scaleUpActionName;
@ -1896,24 +1911,22 @@ 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);
String vmGroupIdentifier = generateAutoScaleVmGroupIdentifier(loadBalancerTO);
String profileName = generateAutoScaleProfileName(vmGroupIdentifier);
String timerName = generateAutoScaleTimerName(vmGroupIdentifier);
String scaleDownActionName = generateAutoScaleScaleDownActionName(vmGroupIdentifier);
String scaleUpActionName = generateAutoScaleScaleUpActionName(vmGroupIdentifier);
String mtName = generateSnmpMetricTableName(vmGroupIdentifier);
String monitorName = generateSnmpMonitorName(vmGroupIdentifier);
String serviceGroupName = generateAutoScaleServiceGroupName(vmGroupIdentifier);
AutoScaleVmGroupTO vmGroupTO = loadBalancerTO.getAutoScaleVmGroupTO();
List<AutoScalePolicyTO> policies = vmGroupTO.getPolicies();
String minMemberPolicyName = generateAutoScaleMinPolicyName(srcIp, srcPort);
String maxMemberPolicyName = generateAutoScaleMaxPolicyName(srcIp, srcPort);
String minMemberPolicyName = generateAutoScaleMinPolicyName(vmGroupIdentifier);
String maxMemberPolicyName = generateAutoScaleMaxPolicyName(vmGroupIdentifier);
try {
@ -1935,7 +1948,7 @@ public class NetscalerResource implements ServerResource {
}
}
String policyId = Long.toString(autoScalePolicyTO.getId());
String policyName = generateAutoScalePolicyName(srcIp, srcPort,policyId);
String policyName = generateAutoScalePolicyName(vmGroupIdentifier, policyId);
// Removing Timer policy
removeAutoScalePolicy(timerName, policyName, isCleanUp);
@ -1949,7 +1962,8 @@ public class NetscalerResource implements ServerResource {
scaleDownAction.delete(_netscalerService, scaleDownAction);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Delete AutoScale ScaleUp action
@ -1959,7 +1973,8 @@ public class NetscalerResource implements ServerResource {
scaleUpAction.delete(_netscalerService, scaleUpAction);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Delete Timer
@ -1969,7 +1984,8 @@ public class NetscalerResource implements ServerResource {
timer.delete(_netscalerService, timer);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Delete AutoScale Profile
@ -1979,7 +1995,8 @@ public class NetscalerResource implements ServerResource {
autoscaleProfile.delete(_netscalerService, autoscaleProfile);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
if(isSnmp) {
@ -1990,7 +2007,8 @@ public class NetscalerResource implements ServerResource {
servicegroup_lbmonitor_binding.delete(_netscalerService, servicegroup_monitor_binding);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Delete Monitor
@ -2002,7 +2020,8 @@ public class NetscalerResource implements ServerResource {
monitor.delete(_netscalerService, monitor);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Delete Metric Table
@ -2012,7 +2031,8 @@ public class NetscalerResource implements ServerResource {
metricTable.delete(_netscalerService, metricTable);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
}
} catch (Exception ex) {
@ -2029,7 +2049,6 @@ public class NetscalerResource implements ServerResource {
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
@ -2043,13 +2062,15 @@ public class NetscalerResource implements ServerResource {
timerPolicy.add(_netscalerService, timerPolicy);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// bind timer policy
// For now it is bound globally.
// bind timer trigger lb_astimer -policyName lb_policy_scaleUp -vserver lb -priority 1 -samplesize 5
// TODO: later bind to lbvserver. bind timer trigger lb_astimer -policyName lb_policy_scaleUp -vserver lb -priority 1 -samplesize 5
// TODO: later bind to lbvserver. bind timer trigger lb_astimer -policyName lb_policy_scaleUp -vserver lb
// -priority 1 -samplesize 5
// -thresholdsize 5
nstimer_autoscalepolicy_binding timer_policy_binding = new nstimer_autoscalepolicy_binding();
int sampleSize = duration/interval;
@ -2063,7 +2084,8 @@ public class NetscalerResource implements ServerResource {
timer_policy_binding.add(_netscalerService, timer_policy_binding);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
}
@ -2077,7 +2099,8 @@ public class NetscalerResource implements ServerResource {
timer_policy_binding.delete(_netscalerService, timer_policy_binding);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
// Removing Timer policy
@ -2088,12 +2111,12 @@ public class NetscalerResource implements ServerResource {
timerPolicy.delete(_netscalerService, timerPolicy);
} catch (Exception e) {
// Ignore Exception on cleanup
if(!isCleanUp) throw e;
if (!isCleanUp)
throw e;
}
}
private boolean isAutoScaleSupportedInNetScaler() throws ExecutionException {
autoscaleprofile autoscaleProfile = new autoscaleprofile();
try {
@ -2200,44 +2223,48 @@ public class NetscalerResource implements ServerResource {
return genObjectName("Cloud-Service", ip, port);
}
private String generateAutoScaleServiceGroupName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScaleServiceGroup", srcIp, srcPort);
private String generateAutoScaleVmGroupIdentifier(LoadBalancerTO lbTO) {
return lbTO.getSrcIp() + "-" + lbTO.getSrcPort();
}
private String generateAutoScaleTimerName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-Timer", srcIp, srcPort);
private String generateAutoScaleServiceGroupName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-SvcGrp", vmGroupIdentifier);
}
private String generateAutoScaleProfileName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-Profile", srcIp, srcPort);
private String generateAutoScaleTimerName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-Timer", vmGroupIdentifier);
}
private String generateAutoScaleScaleUpActionName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-ScaleUpAction", srcIp, srcPort);
private String generateAutoScaleProfileName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-Profile", vmGroupIdentifier);
}
private String generateAutoScaleScaleDownActionName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-ScaleDownAction", srcIp, srcPort);
private String generateAutoScaleScaleUpActionName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-ScaleUpAction", vmGroupIdentifier);
}
private String generateAutoScalePolicyName(String srcIp, long srcPort, String poilcyId) {
return genObjectName("Cloud-AutoScale-Policy", srcIp, srcPort, poilcyId);
private String generateAutoScaleScaleDownActionName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-ScaleDownAction", vmGroupIdentifier);
}
private String generateAutoScaleMinPolicyName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-Policy-Min", srcIp, srcPort);
private String generateAutoScalePolicyName(String vmGroupIdentifier, String poilcyId) {
return genObjectName("Cloud-AutoScale-Policy", vmGroupIdentifier, poilcyId);
}
private String generateAutoScaleMaxPolicyName(String srcIp, long srcPort) {
return genObjectName("Cloud-AutoScale-Policy-Max", srcIp, srcPort);
private String generateAutoScaleMinPolicyName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-Policy-Min", vmGroupIdentifier);
}
private String generateSnmpMetricTableName(String srcIp, long srcPort) {
return genObjectName("Cloud-MTbl", srcIp, srcPort);
private String generateAutoScaleMaxPolicyName(String vmGroupIdentifier) {
return genObjectName("Cloud-AutoScale-Policy-Max", vmGroupIdentifier);
}
private String generateSnmpMonitorName(String srcIp, long srcPort) {
return genObjectName("Cloud-Mon", srcIp, srcPort);
private String generateSnmpMetricTableName(String vmGroupIdentifier) {
return genObjectName("Cloud-MTbl", vmGroupIdentifier);
}
private String generateSnmpMonitorName(String vmGroupIdentifier) {
return genObjectName("Cloud-Mon", vmGroupIdentifier);
}
private String generateSnmpMetricName(String counterName) {

View File

@ -115,6 +115,7 @@ import com.cloud.vm.Nic.State;
import com.cloud.vm.NicVO;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase implements ExternalLoadBalancerDeviceManager, ResourceStateAdapter {
@Inject
@ -384,7 +385,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
if (deviceMapLock.lock(120)) {
try {
boolean dedicatedLB = offering.getDedicatedLB(); // does network offering supports a dedicated
// load balancer?
// load balancer?
long lbDeviceId;
txn.start();
@ -398,7 +399,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
// persist the load balancer device id that will be used for this network. Once a network
// is implemented on a LB device then later on all rules will be programmed on to same
// device
// device
NetworkExternalLoadBalancerVO networkLB = new NetworkExternalLoadBalancerVO(guestConfig.getId(), lbDeviceId);
_networkExternalLBDao.persist(networkLB);
@ -416,12 +417,12 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
if (tryLbProvisioning) {
retry = false;
// TODO: throwing warning instead of error for now as its possible another provider can
// service this network
// service this network
s_logger.warn("There are no load balancer device with the capacity for implementing this network");
throw exception;
} else {
tryLbProvisioning = true; // if possible provision a LB appliance in to the physical
// network
// network
}
}
} finally {
@ -436,7 +437,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
}
// there are no LB devices or there is no free capacity on the devices in the physical network so provision
// a new LB appliance
// a new LB appliance
if (tryLbProvisioning) {
// check if LB appliance can be dynamically provisioned
List<ExternalLoadBalancerDeviceVO> providerLbDevices = _externalLoadBalancerDeviceDao.listByProviderAndDeviceAllocationState(physicalNetworkId, provider, LBDeviceAllocationState.Provider);
@ -444,7 +445,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
for (ExternalLoadBalancerDeviceVO lbProviderDevice : providerLbDevices) {
if (lbProviderDevice.getState() == LBDeviceState.Enabled) {
// acquire a private IP from the data center which will be used as management IP of
// provisioned LB appliance,
// provisioned LB appliance,
DataCenterIpAddressVO dcPrivateIp = _dcDao.allocatePrivateIpAddress(guestConfig.getDataCenterId(), lbProviderDevice.getUuid());
if (dcPrivateIp == null) {
throw new InsufficientNetworkCapacityException("failed to acquire a priavate IP in the zone " + guestConfig.getDataCenterId() +
@ -475,12 +476,12 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
String privateIf = createLbAnswer.getPrivateInterface();
// we have provisioned load balancer so add the appliance as cloudstack provisioned external
// load balancer
// load balancer
String dedicatedLb = offering.getDedicatedLB() ? "true" : "false";
String capacity = Long.toString(lbProviderDevice.getCapacity());
// acquire a public IP to associate with lb appliance (used as subnet IP to make the
// appliance part of private network)
// appliance part of private network)
PublicIp publicIp = _networkMgr.assignPublicIpAddress(guestConfig.getDataCenterId(), null, _accountMgr.getSystemAccount(), VlanType.VirtualNetwork, null, null, false);
String publicIPNetmask = publicIp.getVlanNetmask();
String publicIPgateway = publicIp.getVlanGateway();
@ -488,8 +489,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
String publicIP = publicIp.getAddress().toString();
String url = "https://" + lbIP + "?publicinterface=" + publicIf + "&privateinterface=" + privateIf + "&lbdevicededicated=" + dedicatedLb +
"&cloudmanaged=true" + "&publicip=" + publicIP + "&publicipnetmask=" + publicIPNetmask + "&lbdevicecapacity=" + capacity +
"&publicipvlan=" + publicIPVlanTag + "&publicipgateway=" + publicIPgateway;
"&cloudmanaged=true" + "&publicip=" + publicIP + "&publicipnetmask=" + publicIPNetmask + "&lbdevicecapacity=" + capacity +
"&publicipvlan=" + publicIPVlanTag + "&publicipgateway=" + publicIPgateway;
ExternalLoadBalancerDeviceVO lbAppliance = null;
try {
lbAppliance = addExternalLoadBalancer(physicalNetworkId, url, username, password, createLbAnswer.getDeviceName(), createLbAnswer.getServerResource());
@ -499,7 +500,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
if (lbAppliance != null) {
// mark the load balancer as cloudstack managed and set parent host id on which lb
// appliance is provisioned
// appliance is provisioned
ExternalLoadBalancerDeviceVO managedLb = _externalLoadBalancerDeviceDao.findById(lbAppliance.getId());
managedLb.setIsManagedDevice(true);
managedLb.setParentHostId(lbProviderDevice.getHostId());
@ -514,7 +515,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
s_logger.warn("Failed to destroy load balancer appliance created");
} else {
// release the public & private IP back to dc pool, as the load balancer
// appliance is now destroyed
// appliance is now destroyed
_dcDao.releasePrivateIpAddress(lbIP, guestConfig.getDataCenterId(), null);
_networkMgr.disassociatePublicIpAddress(publicIp.getId(), _accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount());
}
@ -594,7 +595,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
}
// if we are here then there are no existing LB devices in shared use or the devices in shared use has no
// free capacity left
// free capacity left
// so allocate a new load balancer configured for shared use from the pool of free LB devices
lbDevices = _externalLoadBalancerDeviceDao.listByProviderAndDeviceAllocationState(physicalNetworkId, provider, LBDeviceAllocationState.Free);
if (lbDevices != null && !lbDevices.isEmpty()) {
@ -631,7 +632,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
if (!lbInUse && !lbCloudManaged) {
// this is the last network mapped to the load balancer device so set device allocation state to be
// free
// free
lbDevice.setAllocationState(LBDeviceAllocationState.Free);
_externalLoadBalancerDeviceDao.update(lbDevice.getId(), lbDevice);
}
@ -797,9 +798,9 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
LoadBalancingRule rule = loadBalancingRules.get(i);
boolean revoked = (rule.getState().equals(FirewallRule.State.Revoke));
Long lbId = rule.getId();
String protocol = rule.getProtocol();
String algorithm = rule.getAlgorithm();
String uuid = rule.getUuid();
String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr();
int srcPort = rule.getSourcePortStart();
List<LbDestination> destinations = rule.getDestinations();
@ -836,7 +837,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
_inlineLoadBalancerNicMapDao.persist(mapping);
// On the firewall provider for the network, create a static NAT rule between the source IP
// address and the load balancing IP address
// address and the load balancing IP address
applyStaticNatRuleForInlineLBRule(zone, network, firewallProviderHost, revoked, srcIp, loadBalancingIpNic.getIp4Address());
} else {
loadBalancingIpNic = _nicDao.findById(mapping.getNicId());
@ -847,7 +848,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
loadBalancingIpNic = _nicDao.findById(mapping.getNicId());
// On the firewall provider for the network, delete the static NAT rule between the source IP
// address and the load balancing IP address
// address and the load balancing IP address
applyStaticNatRuleForInlineLBRule(zone, network, firewallProviderHost, revoked, srcIp, loadBalancingIpNic.getIp4Address());
// Delete the mapping between the source IP address and the load balancing IP address
@ -866,7 +867,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
}
if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) {
LoadBalancerTO loadBalancer = new LoadBalancerTO(lbId, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies());
LoadBalancerTO loadBalancer = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies());
if(rule.isAutoScaleConfig()) {
loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup());
}
@ -917,7 +918,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
ExternalLoadBalancerDeviceVO lbDeviceVO = getExternalLoadBalancerForNetwork(guestConfig);
if (lbDeviceVO == null) {
s_logger.warn("Network shutdwon requested on external load balancer element, which did not implement the network." +
" Either network implement failed half way through or already network shutdown is completed. So just returning.");
" Either network implement failed half way through or already network shutdown is completed. So just returning.");
return true;
}
@ -944,7 +945,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
NicVO selfipNic = getPlaceholderNic(guestConfig);
if (selfipNic == null) {
s_logger.warn("Network shutdwon requested on external load balancer element, which did not implement the network." +
" Either network implement failed half way through or already network shutdown is completed. So just returning.");
" Either network implement failed half way through or already network shutdown is completed. So just returning.");
return true;
}
selfIp = selfipNic.getIp4Address();

View File

@ -182,4 +182,9 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup {
public void setLoadBalancerId(Long loadBalancerId) {
this.loadBalancerId = loadBalancerId;
}
@Override
public String getUuid() {
return uuid;
}
}

View File

@ -110,6 +110,8 @@ import com.cloud.network.vpc.VpcManager;
import com.cloud.offering.NetworkOffering;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.tags.ResourceTagVO;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.template.TemplateManager;
@ -199,6 +201,10 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
@Inject
VpcManager _vpcMgr;
@Inject
VMTemplateDao _templateDao;
@Inject
ServiceOfferingDao _offeringsDao;
@Inject
CounterDao _counterDao;
@Inject
ConditionDao _conditionDao;
@ -263,20 +269,24 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
String apiKey = user.getApiKey();
String secretKey = user.getSecretKey();
String csUrl = _configDao.getValue(Config.EndpointeUrl.key());
String zoneId = _dcDao.findById(autoScaleVmProfile.getZoneId()).getUuid();
String domainId = _domainDao.findById(autoScaleVmProfile.getDomainId()).getUuid();
String serviceOfferingId = _offeringsDao.findById(autoScaleVmProfile.getServiceOfferingId()).getUuid();
String templateId = _templateDao.findById(autoScaleVmProfile.getTemplateId()).getUuid();
if (apiKey == null) {
if(apiKey == null) {
throw new InvalidParameterValueException("apiKey for user: " + user.getUsername() + " is empty. Please generate it");
}
if (secretKey == null) {
if(secretKey == null) {
throw new InvalidParameterValueException("secretKey for user: " + user.getUsername() + " is empty. Please generate it");
}
if (csUrl == null || csUrl.contains("localhost")) {
if(csUrl == null || csUrl.contains("localhost")) {
throw new InvalidParameterValueException("Global setting endpointe.url has to be set to the Management Server's API end point");
}
LbAutoScaleVmProfile lbAutoScaleVmProfile = new LbAutoScaleVmProfile(autoScaleVmProfile, apiKey, secretKey, csUrl);
LbAutoScaleVmProfile lbAutoScaleVmProfile = new LbAutoScaleVmProfile(autoScaleVmProfile, apiKey, secretKey, csUrl, zoneId, domainId, serviceOfferingId, templateId);
return new LbAutoScaleVmGroup(vmGroup, autoScalePolicies, lbAutoScaleVmProfile, currentState);
}
@ -326,11 +336,11 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
success = applyAutoScaleConfig(loadBalancer, vmGroup, currentState);
} catch (ResourceUnavailableException e) {
s_logger.warn("Unable to configure AutoScaleVmGroup to the lb rule: " + loadBalancer.getId() + " because resource is unavaliable:", e);
if (isRollBackAllowedForProvider(loadBalancer)) {
loadBalancer.setState(backupState);
_lbDao.persist(loadBalancer);
s_logger.debug("LB Rollback rule id: " + loadBalancer.getId() + " lb state rolback while creating AutoscaleVmGroup");
}
if (isRollBackAllowedForProvider(loadBalancer)) {
loadBalancer.setState(backupState);
_lbDao.persist(loadBalancer);
s_logger.debug("LB Rollback rule id: " + loadBalancer.getId() + " lb state rolback while creating AutoscaleVmGroup");
}
throw e;
} finally {
if (!success) {
@ -829,10 +839,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) {

View File

@ -2795,12 +2795,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
boolean revoked = (rule.getState().equals(FirewallRule.State.Revoke));
String protocol = rule.getProtocol();
String algorithm = rule.getAlgorithm();
String uuid = rule.getUuid();
String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr();
int srcPort = rule.getSourcePortStart();
List<LbDestination> destinations = rule.getDestinations();
List<LbStickinessPolicy> stickinessPolicies = rule.getStickinessPolicies();
LoadBalancerTO lb = new LoadBalancerTO(rule.getId(), srcIp, srcPort, protocol, algorithm, revoked, false, destinations, stickinessPolicies);
LoadBalancerTO lb = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, stickinessPolicies);
lbs[i++] = lb;
}
String routerPublicIp = null;