http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/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 433d263..4e5ee43 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -39,11 +39,16 @@ import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.AsyncJobResponse; +import com.cloud.api.response.AutoScalePolicyResponse; +import com.cloud.api.response.AutoScaleVmGroupResponse; +import com.cloud.api.response.AutoScaleVmProfileResponse; import com.cloud.api.response.CapabilityResponse; import com.cloud.api.response.CapacityResponse; import com.cloud.api.response.ClusterResponse; +import com.cloud.api.response.ConditionResponse; import com.cloud.api.response.ConfigurationResponse; import com.cloud.api.response.ControlledEntityResponse; +import com.cloud.api.response.CounterResponse; import com.cloud.api.response.CreateCmdResponse; import com.cloud.api.response.DiskOfferingResponse; import com.cloud.api.response.DomainResponse; @@ -137,6 +142,12 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VpnUser; +import com.cloud.network.as.AutoScalePolicy; +import com.cloud.network.as.AutoScaleVmGroup; +import com.cloud.network.as.AutoScaleVmProfile; +import com.cloud.network.as.Condition; +import com.cloud.network.as.ConditionVO; +import com.cloud.network.as.Counter; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.LoadBalancer; @@ -344,7 +355,7 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setVmStopped(vmStopped); accountResponse.setVmRunning(vmRunning); accountResponse.setObjectName("account"); - + //get resource limits for projects Long projectLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.project, account.getId()); String projectLimitDisplay = (accountIsAdmin || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit); @@ -353,7 +364,7 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setProjectLimit(projectLimitDisplay); accountResponse.setProjectTotal(projectTotal); accountResponse.setProjectAvailable(projectAvail); - + //get resource limits for networks Long networkLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.network, account.getId()); String networkLimitDisplay = (accountIsAdmin || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit); @@ -362,7 +373,7 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setNetworkLimit(networkLimitDisplay); accountResponse.setNetworkTotal(networkTotal); accountResponse.setNetworkAvailable(networkAvail); - + // adding all the users for an account as part of the response obj List<UserVO> usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId()); List<UserResponse> userResponseList = new ArrayList<UserResponse>(); @@ -407,7 +418,7 @@ public class ApiResponseHelper implements ResponseGenerator { domainResponse.setLevel(domain.getLevel()); domainResponse.setNetworkDomain(domain.getNetworkDomain()); domainResponse.setParentDomainId(domain.getParent()); - StringBuilder domainPath = new StringBuilder("ROOT"); + StringBuilder domainPath = new StringBuilder("ROOT"); (domainPath.append(domain.getPath())).deleteCharAt(domainPath.length() - 1); domainResponse.setPath(domainPath.toString()); if (domain.getParent() != null) { @@ -534,7 +545,7 @@ public class ApiResponseHelper implements ResponseGenerator { snapshotResponse.setName(snapshot.getName()); snapshotResponse.setIntervalType(ApiDBUtils.getSnapshotIntervalTypes(snapshot.getId())); snapshotResponse.setState(snapshot.getStatus()); - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Snapshot, snapshot.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -543,7 +554,7 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } snapshotResponse.setTags(tagResponses); - + snapshotResponse.setObjectName("snapshot"); return snapshotResponse; } @@ -624,7 +635,7 @@ public class ApiResponseHelper implements ResponseGenerator { hostResponse.setMemoryTotal(host.getTotalMemory()); String hostTags = ApiDBUtils.getHostTags(host.getId()); hostResponse.setHostTags(hostTags); - + String haTag = ApiDBUtils.getHaTag(); if (haTag != null && !haTag.isEmpty() && hostTags != null && !hostTags.isEmpty()) { if (haTag.equalsIgnoreCase(hostTags)) { @@ -635,7 +646,7 @@ public class ApiResponseHelper implements ResponseGenerator { } else { hostResponse.setHaHost(false); } - + hostResponse.setHypervisorVersion(host.getHypervisorVersion()); String cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; @@ -807,7 +818,7 @@ public class ApiResponseHelper implements ResponseGenerator { ipResponse.setVlanId(ipAddress.getVlanId()); ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddress.getVlanId()).getVlanTag()); } - + if (ipAddress.getSystem()) { if (ipAddress.isOneToOneNat()) { ipResponse.setPurpose(IpAddress.Purpose.StaticNat.toString()); @@ -815,7 +826,7 @@ public class ApiResponseHelper implements ResponseGenerator { ipResponse.setPurpose(IpAddress.Purpose.Lb.toString()); } } - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.PublicIpAddress, ipAddress.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -824,7 +835,7 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } ipResponse.setTags(tagResponses); - + ipResponse.setObjectName("ipaddress"); return ipResponse; } @@ -852,7 +863,7 @@ public class ApiResponseHelper implements ResponseGenerator { lbResponse.setState(stateToSet); populateOwner(lbResponse, loadBalancer); lbResponse.setZoneId(publicIp.getDataCenterId()); - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, loadBalancer.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -1063,7 +1074,7 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setCreated(volumeHostRef.getCreated()); Account caller = UserContext.current().getCaller(); if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) - volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volumeHostRef.getFormat()).toString()); + volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volumeHostRef.getFormat()).toString()); if (volumeHostRef.getDownloadState() != Status.DOWNLOADED) { String volumeStatus = "Processing"; if (volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { @@ -1087,9 +1098,9 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setState("Uploaded"); } else { volResponse.setStatus("Successfully Installed"); - } + } } - + populateOwner(volResponse, volume); String storageType; @@ -1135,20 +1146,20 @@ public class ApiResponseHelper implements ResponseGenerator { // return hypervisor for ROOT and Resource domain only Account caller = UserContext.current().getCaller(); - if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); + if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { + volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); } volResponse.setAttached(volume.getAttached()); - volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); + volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); boolean isExtractable = true; if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); if (template != null) { // For ISO based volumes template = null and we allow extraction of all ISO based volumes - isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; + isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; } } - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Volume, volume.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -1157,7 +1168,7 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } volResponse.setTags(tagResponses); - + volResponse.setExtractable(isExtractable); volResponse.setObjectName("volume"); return volResponse; @@ -1292,7 +1303,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (vm != null) { response.setVirtualMachineId(vm.getId()); response.setVirtualMachineName(vm.getHostName()); - + if (vm.getDisplayName() != null) { response.setVirtualMachineDisplayName(vm.getDisplayName()); } else { @@ -1305,7 +1316,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (state.equals(FirewallRule.State.Revoke)) { stateToSet = "Deleting"; } - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.PortForwardingRule, fwRule.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -1314,7 +1325,7 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } response.setTags(tagResponses); - + response.setState(stateToSet); response.setObjectName("portforwardingrule"); return response; @@ -1387,12 +1398,12 @@ public class ApiResponseHelper implements ResponseGenerator { } else { userVmResponse.setDisplayName(userVm.getHostName()); } - + if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN) { userVmResponse.setInstanceName(userVm.getInstanceName()); } - - + + if (userVm.getPassword() != null) { userVmResponse.setPassword(userVm.getPassword()); } @@ -1450,7 +1461,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (userVm.getHypervisorType() != null) { userVmResponse.setHypervisor(userVm.getHypervisorType().toString()); } - + if (details.contains(VMDetails.all) || details.contains(VMDetails.tmpl)) { // Template Info VMTemplateVO template = templates.get(userVm.getTemplateId()); @@ -1590,7 +1601,7 @@ public class ApiResponseHelper implements ResponseGenerator { } userVmResponse.setNics(nicResponses); } - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVm.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -1599,7 +1610,7 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } userVmResponse.setTags(tagResponses); - + IpAddress ip = ApiDBUtils.findIpByAssociatedVmId(userVm.getId()); if (ip != null) { userVmResponse.setPublicIpId(ip.getId()); @@ -1875,7 +1886,7 @@ public class ApiResponseHelper implements ResponseGenerator { Account owner = ApiDBUtils.findAccountById(result.getAccountId()); populateAccount(response, owner.getId()); populateDomain(response, owner.getDomainId()); - + //set tag information List<? extends ResourceTag> tags = null; if (result.getFormat() == ImageFormat.ISO) { @@ -1883,7 +1894,7 @@ public class ApiResponseHelper implements ResponseGenerator { } else { tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Template, result.getId()); } - + List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); for (ResourceTag tag : tags) { ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); @@ -2076,7 +2087,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setChecksum(template.getChecksum()); templateResponse.setTemplateTag(template.getTemplateTag()); - + //set tag information List<? extends ResourceTag> tags = null; if (template.getFormat() == ImageFormat.ISO) { @@ -2122,7 +2133,7 @@ public class ApiResponseHelper implements ResponseGenerator { Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); populateAccount(isoResponse, owner.getId()); populateDomain(isoResponse, owner.getDomainId()); - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.ISO, iso.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -2279,10 +2290,10 @@ public class ApiResponseHelper implements ResponseGenerator { if (isoSize > 0) { isoResponse.setSize(isoSize); } - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.ISO, iso.getId()); - + List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); for (ResourceTag tag : tags) { ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); @@ -2299,7 +2310,7 @@ public class ApiResponseHelper implements ResponseGenerator { public ListResponse<SecurityGroupResponse> createSecurityGroupResponses( List<? extends SecurityGroupRules> networkGroups) { List<SecurityGroupResultObject> groupResultObjs = SecurityGroupResultObject - .transposeNetworkGroups(networkGroups); + .transposeNetworkGroups(networkGroups); ListResponse<SecurityGroupResponse> response = new ListResponse<SecurityGroupResponse>(); List<SecurityGroupResponse> netGrpResponses = new ArrayList<SecurityGroupResponse>(); @@ -2312,7 +2323,7 @@ public class ApiResponseHelper implements ResponseGenerator { populateOwner(netGrpResponse, networkGroup); List<SecurityGroupRuleResultObject> securityGroupRules = networkGroup - .getSecurityGroupRules(); + .getSecurityGroupRules(); if ((securityGroupRules != null) && !securityGroupRules.isEmpty()) { List<SecurityGroupRuleResponse> ingressRulesResponse = new ArrayList<SecurityGroupRuleResponse>(); List<SecurityGroupRuleResponse> egressRulesResponse = new ArrayList<SecurityGroupRuleResponse>(); @@ -2355,15 +2366,15 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } netGrpResponse.setTags(tagResponses); - + netGrpResponse - .setSecurityGroupIngressRules(ingressRulesResponse); + .setSecurityGroupIngressRules(ingressRulesResponse); netGrpResponse.setSecurityGroupEgressRules(egressRulesResponse); } netGrpResponse.setObjectName("securitygroup"); netGrpResponses.add(netGrpResponse); } - + response.setResponses(netGrpResponses); return response; } @@ -2427,11 +2438,11 @@ public class ApiResponseHelper implements ResponseGenerator { boolean savedValue = SerializationContext.current().getUuidTranslation(); SerializationContext.current().setUuidTranslation(false); - + Object resultObject = ApiSerializerHelper.fromSerializedString(job.getResult()); jobResponse.setJobResult((ResponseObject) resultObject); SerializationContext.current().setUuidTranslation(savedValue); - + if (resultObject != null) { Class<?> clz = resultObject.getClass(); if (clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) { @@ -2552,17 +2563,17 @@ public class ApiResponseHelper implements ResponseGenerator { } if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) { // Reserved - // Capacity - // accounts -// for + // Capacity + // accounts + // for // stopped -// vms + // vms // that -// have been + // have been // stopped -// within + // within // an -// interval + // interval usedCapacity += capacity.getReservedCapacity(); } @@ -2591,17 +2602,17 @@ public class ApiResponseHelper implements ResponseGenerator { } if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) { // Reserved - // Capacity - // accounts - // for - // stopped - // vms -// that + // Capacity + // accounts + // for + // stopped + // vms + // that // have -// been + // been // stopped // within -// an + // an // interval usedCapacity += capacity.getReservedCapacity(); } @@ -2633,7 +2644,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public List<CapacityResponse> createCapacityResponse(List<? extends Capacity> result, DecimalFormat format) { List<CapacityResponse> capacityResponses = new ArrayList<CapacityResponse>(); - + for (Capacity summedCapacity : result) { CapacityResponse capacityResponse = new CapacityResponse(); capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity()); @@ -3079,7 +3090,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setIcmpCode(fwRule.getIcmpCode()); response.setIcmpType(fwRule.getIcmpType()); - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.FirewallRule, fwRule.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -3110,7 +3121,7 @@ public class ApiResponseHelper implements ResponseGenerator { userVmData.setDisplayName(userVm.getHostName()); } userVmData.setInstanceName(userVm.getInstanceName()); - + userVmData.setDomainId(userVm.getDomainId()); if (userVm.getHypervisorType() != null) { @@ -3210,7 +3221,7 @@ public class ApiResponseHelper implements ResponseGenerator { userVmResponse.setNics(new ArrayList<NicResponse>(nicResponses)); userVmResponse.setPublicIpId(userVmData.getPublicIpId()); userVmResponse.setPublicIp(userVmData.getPublicIp()); - + //set tag information List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVmData.getId()); List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>(); @@ -3544,20 +3555,20 @@ public class ApiResponseHelper implements ResponseGenerator { response.setObjectName("storagenetworkiprange"); return response; } - + @Override public Long getIdentiyId(String tableName, String token) { return ApiDispatcher.getIdentiyId(tableName, token); } - + @Override public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) { ResourceTagResponse response = new ResourceTagResponse(); response.setKey(resourceTag.getKey()); response.setValue(resourceTag.getValue()); - + if (!keyValueOnly) { - response.setResourceType(resourceTag.getResourceType().toString()); + response.setResourceType(resourceTag.getResourceType().toString()); response.setId(ApiDBUtils.getUuid(String.valueOf(resourceTag.getResourceId()),resourceTag.getResourceType())); Long accountId = resourceTag.getAccountId(); Long domainId = resourceTag.getDomainId(); @@ -3573,19 +3584,114 @@ public class ApiResponseHelper implements ResponseGenerator { response.setAccountName(account.getAccountName()); } } - + if (domainId != null) { response.setDomainId(domainId); response.setDomainName(ApiDBUtils.findDomainById(domainId).getName()); } - + response.setCustomer(resourceTag.getCustomer()); } - + response.setObjectName("tag"); - + + return response; + } + + @Override + public CounterResponse createCounterResponse(Counter counter) { + CounterResponse response = new CounterResponse(); + response.setId(counter.getId()); + response.setSource(counter.getSource().toString()); + response.setName(counter.getName()); + response.setValue(counter.getValue()); + response.setObjectName("counter"); + return response; + } + + @Override + public ConditionResponse createConditionResponse(Condition condition) { + ConditionResponse response = new ConditionResponse(); + response.setId(condition.getId()); + CounterResponse counter; + counter = createCounterResponse(ApiDBUtils.getCounter(condition.getCounterid())); + response.setCounter(counter); + response.setRelationalOperator(condition.getRelationalOperator().toString()); + response.setThreshold(condition.getThreshold()); + response.setObjectName("condition"); + populateOwner(response, condition); + return response; + } + + @Override + public AutoScaleVmProfileResponse createAutoScaleVmProfileResponse(AutoScaleVmProfile profile) { + AutoScaleVmProfileResponse response = new AutoScaleVmProfileResponse(); + response.setId(profile.getId()); + response.setZoneId(profile.getZoneId()); + response.setServiceOfferingId(profile.getServiceOfferingId()); + response.setTemplateId(profile.getTemplateId()); + response.setOtherDeployParams(profile.getOtherDeployParams()); + response.setSnmpCommunity(profile.getSnmpCommunity()); + response.setSnmpPort(profile.getSnmpPort()); + response.setDestroyVmGraceperiod(profile.getDestroyVmGraceperiod()); + response.setAutoscaleUserId(profile.getAutoScaleUserId()); + response.setObjectName("autoscalevmprofile"); + + // Populates the account information in the response + populateOwner(response, profile); + return response; + } + + @Override + public AutoScalePolicyResponse createAutoScalePolicyResponse(AutoScalePolicy policy) { + AutoScalePolicyResponse response = new AutoScalePolicyResponse(); + response.setId(policy.getId()); + response.setDuration(policy.getDuration()); + response.setQuietTime(policy.getQuietTime()); + response.setAction(policy.getAction()); + List<ConditionVO> vos = ApiDBUtils.getAutoScalePolicyConditions(policy.getId()); + ArrayList<ConditionResponse> conditions = new ArrayList<ConditionResponse>(vos.size()); + for (ConditionVO vo : vos) { + conditions.add(createConditionResponse(vo)); + } + response.setConditions(conditions); + response.setObjectName("autoscalepolicy"); + + // Populates the account information in the response + populateOwner(response, policy); + + return response; + } + + @Override + public AutoScaleVmGroupResponse createAutoScaleVmGroupResponse(AutoScaleVmGroup vmGroup) { + AutoScaleVmGroupResponse response = new AutoScaleVmGroupResponse(); + response.setId(vmGroup.getId()); + response.setMinMembers(vmGroup.getMinMembers()); + response.setMaxMembers(vmGroup.getMaxMembers()); + response.setState(vmGroup.getState()); + response.setInterval(vmGroup.getInterval()); + response.setProfileId(vmGroup.getProfileId()); + response.setLoadBalancerId(vmGroup.getProfileId()); + + List<AutoScalePolicyResponse> scaleUpPoliciesResponse = new ArrayList<AutoScalePolicyResponse>(); + List<AutoScalePolicyResponse> scaleDownPoliciesResponse = new ArrayList<AutoScalePolicyResponse>(); + response.setScaleUpPolicies(scaleUpPoliciesResponse); + response.setScaleDownPolicies(scaleDownPoliciesResponse); + response.setObjectName("autoscalevmgroup"); + + // Fetch policies for vmgroup + List<AutoScalePolicy> scaleUpPolicies = new ArrayList<AutoScalePolicy>(); + List<AutoScalePolicy> scaleDownPolicies = new ArrayList<AutoScalePolicy>(); + ApiDBUtils.getAutoScaleVmGroupPolicies(vmGroup.getId(), scaleUpPolicies, scaleDownPolicies); + // populate policies + for (AutoScalePolicy autoScalePolicy : scaleUpPolicies) { + scaleUpPoliciesResponse.add(createAutoScalePolicyResponse(autoScalePolicy)); + } + for (AutoScalePolicy autoScalePolicy : scaleDownPolicies) { + scaleDownPoliciesResponse.add(createAutoScalePolicyResponse(autoScalePolicy)); + } + return response; } - - }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/configuration/DefaultComponentLibrary.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index f6db30b..8b124df 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -75,6 +75,14 @@ import com.cloud.maint.dao.AgentUpgradeDaoImpl; import com.cloud.network.ExternalLoadBalancerUsageManagerImpl; import com.cloud.network.NetworkManagerImpl; import com.cloud.network.StorageNetworkManagerImpl; +import com.cloud.network.as.AutoScaleManagerImpl; +import com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl; +import com.cloud.network.as.dao.AutoScalePolicyDaoImpl; +import com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl; +import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl; +import com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl; +import com.cloud.network.as.dao.ConditionDaoImpl; +import com.cloud.network.as.dao.CounterDaoImpl; import com.cloud.network.dao.ExternalFirewallDeviceDaoImpl; import com.cloud.network.dao.ExternalLoadBalancerDeviceDaoImpl; import com.cloud.network.dao.FirewallRulesCidrsDaoImpl; @@ -226,6 +234,13 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class); addDao("LoadBalancerVMMapDao", LoadBalancerVMMapDaoImpl.class); addDao("LBStickinessPolicyDao", LBStickinessPolicyDaoImpl.class); + addDao("CounterDao", CounterDaoImpl.class); + addDao("ConditionDao", ConditionDaoImpl.class); + addDao("AutoScalePolicyDao", AutoScalePolicyDaoImpl.class); + addDao("AutoScalePolicyConditionMapDao", AutoScalePolicyConditionMapDaoImpl.class); + addDao("AutoScaleVmProfileDao", AutoScaleVmProfileDaoImpl.class); + addDao("AutoScaleVmGroupDao", AutoScaleVmGroupDaoImpl.class); + addDao("AutoScaleVmGroupPolicyMapDao", AutoScaleVmGroupPolicyMapDaoImpl.class); addDao("DataCenterIpAddressDao", DataCenterIpAddressDaoImpl.class); addDao("SecurityGroupDao", SecurityGroupDaoImpl.class); addDao("SecurityGroupRuleDao", SecurityGroupRuleDaoImpl.class); @@ -354,6 +369,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addManager("DomainRouterManager", VirtualNetworkApplianceManagerImpl.class); addManager("EntityManager", EntityManagerImpl.class); addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class); + addManager("AutoScaleManager", AutoScaleManagerImpl.class); addManager("RulesManager", RulesManagerImpl.class); addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class); addManager("Capacity Manager", CapacityManagerImpl.class); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 79e6e7d..ba3d689 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -187,7 +187,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase if ((ntwkDevice == null) || (url == null) || (username == null) || (resource == null) || (password == null)) { throw new InvalidParameterValueException("Atleast one of the required parameters (url, username, password," + - " server resource, zone id/physical network id) is not specified or a valid parameter."); + " server resource, zone id/physical network id) is not specified or a valid parameter."); } pNetwork = _physicalNetworkDao.findById(physicalNetworkId); @@ -239,7 +239,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase boolean dedicatedUse = (configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED) != null) ? Boolean.parseBoolean(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED)) : false; boolean inline = (configParams.get(ApiConstants.INLINE) != null) ? Boolean.parseBoolean(configParams.get(ApiConstants.INLINE)) : false; - long capacity = NumbersUtil.parseLong((String) configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY), 0); + long capacity = NumbersUtil.parseLong(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY), 0); if (capacity == 0) { capacity = _defaultLbCapacity; } @@ -384,7 +384,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 +398,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 +416,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 +436,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 +444,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 +475,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 +488,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 +499,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 +514,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.releasePublicIpAddress(publicIp.getId(), _accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount()); } @@ -594,7 +594,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 +631,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,6 +797,7 @@ 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 srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr(); @@ -835,7 +836,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()); @@ -846,7 +847,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 @@ -864,8 +865,11 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase srcIp = loadBalancingIpNic.getIp4Address(); } - if (destinations != null && !destinations.isEmpty()) { - LoadBalancerTO loadBalancer = new LoadBalancerTO(srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies()); + if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) { + LoadBalancerTO loadBalancer = new LoadBalancerTO(lbId, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies()); + if(rule.isAutoScaleConfig()) { + loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup()); + } loadBalancersToApply.add(loadBalancer); } } @@ -913,7 +917,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; } @@ -940,7 +944,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(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/AutoScaleManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/as/AutoScaleManager.java b/server/src/com/cloud/network/as/AutoScaleManager.java new file mode 100644 index 0000000..7ea7807 --- /dev/null +++ b/server/src/com/cloud/network/as/AutoScaleManager.java @@ -0,0 +1,20 @@ +// 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; + +public interface AutoScaleManager extends AutoScaleService { +}
