mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
AutoScaling without NetScaler
This commit is contained in:
parent
bd238ce24e
commit
dc151115be
@ -27,6 +27,8 @@ public class AutoScaleCounter {
|
||||
|
||||
public static final AutoScaleCounterType Snmp = new AutoScaleCounterType("snmp");
|
||||
public static final AutoScaleCounterType Netscaler = new AutoScaleCounterType("netscaler");
|
||||
public static final AutoScaleCounterType Cpu = new AutoScaleCounterType("cpu");
|
||||
public static final AutoScaleCounterType Memory = new AutoScaleCounterType("memory");
|
||||
|
||||
public AutoScaleCounterType(String name) {
|
||||
_name = name;
|
||||
|
||||
@ -17,6 +17,8 @@
|
||||
|
||||
package com.cloud.network.as;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.cloudstack.acl.ControlledEntity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
@ -30,6 +32,8 @@ public interface AutoScalePolicy extends ControlledEntity, InternalIdentity {
|
||||
public int getDuration();
|
||||
|
||||
public int getQuietTime();
|
||||
|
||||
public Date getLastQuiteTime();
|
||||
|
||||
public String getAction();
|
||||
|
||||
|
||||
@ -17,6 +17,8 @@
|
||||
|
||||
package com.cloud.network.as;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.cloudstack.acl.ControlledEntity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
@ -45,6 +47,8 @@ public interface AutoScaleVmGroup extends ControlledEntity, InternalIdentity {
|
||||
|
||||
int getInterval();
|
||||
|
||||
Date getLastInterval();
|
||||
|
||||
String getState();
|
||||
|
||||
String getUuid();
|
||||
|
||||
@ -23,7 +23,10 @@ import org.apache.cloudstack.api.InternalIdentity;
|
||||
public interface Counter extends InternalIdentity, Identity {
|
||||
|
||||
public static enum Source {
|
||||
netscaler, snmp
|
||||
netscaler,
|
||||
snmp,
|
||||
cpu,
|
||||
memory
|
||||
}
|
||||
|
||||
String getName();
|
||||
@ -31,4 +34,5 @@ public interface Counter extends InternalIdentity, Identity {
|
||||
String getValue();
|
||||
|
||||
Source getSource();
|
||||
|
||||
}
|
||||
|
||||
956
client/tomcatconf/applicationContext.xml.in
Normal file
956
client/tomcatconf/applicationContext.xml.in
Normal file
@ -0,0 +1,956 @@
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
||||
|
||||
|
||||
|
||||
|
||||
http://www.springframework.org/schema/context
|
||||
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
|
||||
|
||||
<context:annotation-config />
|
||||
|
||||
<!--=====================================================================================================-->
|
||||
<!-- -->
|
||||
<!-- core OSS/non-OSS Common components -->
|
||||
<!-- -->
|
||||
<!--=====================================================================================================-->
|
||||
|
||||
<!--
|
||||
@DB support
|
||||
-->
|
||||
<bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />
|
||||
<bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
|
||||
<bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
|
||||
|
||||
<bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
|
||||
<property name="Interceptors">
|
||||
<list>
|
||||
<ref bean="transactionContextBuilder" />
|
||||
<ref bean="actionEventInterceptor" />
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Managed Context
|
||||
-->
|
||||
<bean id="ManagedContext" class="org.apache.cloudstack.managed.context.impl.DefaultManagedContext" >
|
||||
<property name="listeners">
|
||||
<list>
|
||||
<bean class="org.apache.cloudstack.context.CallContextListener" />
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean class="org.apache.cloudstack.managed.context.ManagedContextRunnable" factory-method="initializeGlobalContext"
|
||||
autowire-candidate="false" >
|
||||
<constructor-arg><ref bean="ManagedContext"/></constructor-arg>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
RPC/Async/EventBus
|
||||
-->
|
||||
|
||||
<bean id="onwireRegistry" class="org.apache.cloudstack.framework.serializer.OnwireClassRegistry"
|
||||
init-method="scan" >
|
||||
<property name="packages">
|
||||
<list>
|
||||
<value>org.apache.cloudstack.framework</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="messageSerializer" class="org.apache.cloudstack.framework.serializer.JsonMessageSerializer">
|
||||
<property name="onwireClassRegistry" ref="onwireRegistry" />
|
||||
</bean>
|
||||
|
||||
<bean id="transportProvider" class="org.apache.cloudstack.framework.server.ServerTransportProvider" init-method="initialize">
|
||||
<property name="workerPoolSize" value="5" />
|
||||
<property name="nodeId" value="Node1" />
|
||||
<property name="messageSerializer" ref="messageSerializer" />
|
||||
</bean>
|
||||
|
||||
<bean id="rpcProvider" class="org.apache.cloudstack.framework.rpc.RpcProviderImpl" init-method="initialize">
|
||||
<constructor-arg ref="transportProvider" />
|
||||
<property name="messageSerializer" ref="messageSerializer" />
|
||||
</bean>
|
||||
|
||||
<bean id="messageBus" class = "org.apache.cloudstack.framework.messagebus.MessageBusBase" />
|
||||
<bean id="configDepot" class = "org.apache.cloudstack.framework.config.impl.ConfigDepotImpl" />
|
||||
|
||||
<!--
|
||||
DAO with customized configuration
|
||||
-->
|
||||
<bean id="serviceOfferingDaoImpl" class="com.cloud.service.dao.ServiceOfferingDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="50" />
|
||||
<entry key="cache.time.to.live" value="600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="diskOfferingDaoImpl" class="com.cloud.storage.dao.DiskOfferingDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="50" />
|
||||
<entry key="cache.time.to.live" value="600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="dataCenterDaoImpl" class="com.cloud.dc.dao.DataCenterDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="50" />
|
||||
<entry key="cache.time.to.live" value="600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="hostPodDaoImpl" class="com.cloud.dc.dao.HostPodDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="50" />
|
||||
<entry key="cache.time.to.live" value="600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="vlanDaoImpl" class="com.cloud.dc.dao.VlanDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="30" />
|
||||
<entry key="cache.time.to.live" value="3600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="userDaoImpl" class="com.cloud.user.dao.UserDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="5000" />
|
||||
<entry key="cache.time.to.live" value="300" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="VMTemplateDaoImpl" class="com.cloud.storage.dao.VMTemplateDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="100" />
|
||||
<entry key="cache.time.to.live" value="600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="hypervisorCapabilitiesDaoImpl" class="com.cloud.hypervisor.dao.HypervisorCapabilitiesDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="100" />
|
||||
<entry key="cache.time.to.live" value="600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
<bean id="dedicatedResourceDaoImpl" class="com.cloud.dc.dao.DedicatedResourceDaoImpl">
|
||||
<property name="configParams">
|
||||
<map>
|
||||
<entry key="cache.size" value="30" />
|
||||
<entry key="cache.time.to.live" value="3600" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
DAOs with default configuration
|
||||
-->
|
||||
<bean id="accountDaoImpl" class="com.cloud.user.dao.AccountDaoImpl" />
|
||||
<bean id="accountDetailsDaoImpl" class="com.cloud.user.AccountDetailsDaoImpl" />
|
||||
<bean id="accountJoinDaoImpl" class="com.cloud.api.query.dao.AccountJoinDaoImpl" />
|
||||
<bean id="accountGuestVlanMapDaoImpl" class="com.cloud.network.dao.AccountGuestVlanMapDaoImpl" />
|
||||
<bean id="accountVlanMapDaoImpl" class="com.cloud.dc.dao.AccountVlanMapDaoImpl" />
|
||||
<bean id="alertDaoImpl" class="com.cloud.alert.dao.AlertDaoImpl" />
|
||||
<bean id="asyncJobJoinDaoImpl" class="com.cloud.api.query.dao.AsyncJobJoinDaoImpl" />
|
||||
<bean id="autoScalePolicyConditionMapDaoImpl" class="com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl" />
|
||||
<bean id="autoScalePolicyDaoImpl" class="com.cloud.network.as.dao.AutoScalePolicyDaoImpl" />
|
||||
<bean id="autoScaleVmGroupDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl" />
|
||||
<bean id="autoScaleVmGroupPolicyMapDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl" />
|
||||
<bean id="autoScaleVmProfileDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl" />
|
||||
<bean id="autoScaleVmGroupVmMapDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupVmMapDaoImpl" />
|
||||
<bean id="capacityDaoImpl" class="com.cloud.capacity.dao.CapacityDaoImpl" />
|
||||
<bean id="certificateDaoImpl" class="com.cloud.certificate.dao.CertificateDaoImpl" />
|
||||
<bean id="clusterDaoImpl" class="com.cloud.dc.dao.ClusterDaoImpl" />
|
||||
<bean id="clusterDetailsDaoImpl" class="com.cloud.dc.ClusterDetailsDaoImpl" />
|
||||
<bean id="clusterVSMMapDaoImpl" class="com.cloud.dc.dao.ClusterVSMMapDaoImpl" />
|
||||
<bean id="commandExecLogDaoImpl" class="com.cloud.secstorage.CommandExecLogDaoImpl" />
|
||||
<bean id="conditionDaoImpl" class="com.cloud.network.as.dao.ConditionDaoImpl" />
|
||||
<bean id="consoleProxyDaoImpl" class="com.cloud.vm.dao.ConsoleProxyDaoImpl" />
|
||||
<bean id="counterDaoImpl" class="com.cloud.network.as.dao.CounterDaoImpl" />
|
||||
<bean id="dataCenterIpAddressDaoImpl" class="com.cloud.dc.dao.DataCenterIpAddressDaoImpl" />
|
||||
<bean id="dataCenterJoinDaoImpl" class="com.cloud.api.query.dao.DataCenterJoinDaoImpl" />
|
||||
<bean id="dataCenterLinkLocalIpAddressDaoImpl" class="com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl" />
|
||||
<bean id="dataCenterVnetDaoImpl" class="com.cloud.dc.dao.DataCenterVnetDaoImpl" />
|
||||
<bean id="dcDetailsDaoImpl" class="com.cloud.dc.dao.DcDetailsDaoImpl" />
|
||||
<bean id="engineDcDetailsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DcDetailsDaoImpl" />
|
||||
<bean id="diskOfferingJoinDaoImpl" class="com.cloud.api.query.dao.DiskOfferingJoinDaoImpl" />
|
||||
<bean id="domainDaoImpl" class="com.cloud.domain.dao.DomainDaoImpl" />
|
||||
<bean id="domainRouterDaoImpl" class="com.cloud.vm.dao.DomainRouterDaoImpl" />
|
||||
<bean id="domainRouterJoinDaoImpl" class="com.cloud.api.query.dao.DomainRouterJoinDaoImpl" />
|
||||
<bean id="elasticLbVmMapDaoImpl" class="com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl" />
|
||||
<bean id="engineClusterDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineClusterDaoImpl" />
|
||||
<bean id="engineDataCenterDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineDataCenterDaoImpl" />
|
||||
<bean id="engineHostDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineHostDaoImpl" />
|
||||
<bean id="engineHostPodDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineHostPodDaoImpl" />
|
||||
<bean id="eventDaoImpl" class="com.cloud.event.dao.EventDaoImpl" />
|
||||
<bean id="eventJoinDaoImpl" class="com.cloud.event.dao.EventJoinDaoImpl" />
|
||||
<bean id="externalFirewallDeviceDaoImpl" class="com.cloud.network.dao.ExternalFirewallDeviceDaoImpl" />
|
||||
<bean id="externalLoadBalancerDeviceDaoImpl" class="com.cloud.network.dao.ExternalLoadBalancerDeviceDaoImpl" />
|
||||
<bean id="externalPublicIpStatisticsDaoImpl" class="com.cloud.usage.dao.ExternalPublicIpStatisticsDaoImpl" />
|
||||
<bean id="firewallRulesCidrsDaoImpl" class="com.cloud.network.dao.FirewallRulesCidrsDaoImpl" />
|
||||
<bean id="firewallRulesDaoImpl" class="com.cloud.network.dao.FirewallRulesDaoImpl" />
|
||||
<bean id="globalLoadBalancerDaoImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancerDaoImpl" />
|
||||
<bean id="globalLoadBalancerLbRuleMapDaoImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancerLbRuleMapDaoImpl" />
|
||||
<bean id="guestOSCategoryDaoImpl" class="com.cloud.storage.dao.GuestOSCategoryDaoImpl" />
|
||||
<bean id="guestOSDaoImpl" class="com.cloud.storage.dao.GuestOSDaoImpl" />
|
||||
<bean id="guestOSHypervisorDaoImpl" class="com.cloud.storage.dao.GuestOSHypervisorDaoImpl" />
|
||||
<bean id="highAvailabilityDaoImpl" class="com.cloud.ha.dao.HighAvailabilityDaoImpl" />
|
||||
<bean id="hostDaoImpl" class="com.cloud.host.dao.HostDaoImpl" />
|
||||
<bean id="engineHostDetailsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostDetailsDaoImpl" />
|
||||
<bean id="hostDetailsDaoImpl" class="com.cloud.host.dao.HostDetailsDaoImpl" />
|
||||
<bean id="hostJoinDaoImpl" class="com.cloud.api.query.dao.HostJoinDaoImpl" />
|
||||
<bean id="engineHostTagsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostTagsDaoImpl" />
|
||||
<bean id="hostTagsDaoImpl" class="com.cloud.host.dao.HostTagsDaoImpl" />
|
||||
<bean id="hostTransferMapDaoImpl" class="com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl" />
|
||||
<bean id="iPAddressDaoImpl" class="com.cloud.network.dao.IPAddressDaoImpl" />
|
||||
<bean id="identityDaoImpl" class="com.cloud.uuididentity.dao.IdentityDaoImpl" />
|
||||
<bean id="imageStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageStoreDaoImpl" />
|
||||
<bean id="imageStoreDetailsDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageStoreDetailsDaoImpl" />
|
||||
<bean id="imageStoreJoinDaoImpl" class="com.cloud.api.query.dao.ImageStoreJoinDaoImpl" />
|
||||
<bean id="snapshotDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.SnapshotDataStoreDaoImpl" />
|
||||
<bean id="templateDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.TemplateDataStoreDaoImpl" />
|
||||
<bean id="templateJoinDaoImpl" class="com.cloud.api.query.dao.TemplateJoinDaoImpl" />
|
||||
<bean id="volumeDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.VolumeDataStoreDaoImpl" />
|
||||
<bean id="inlineLoadBalancerNicMapDaoImpl" class="com.cloud.network.dao.InlineLoadBalancerNicMapDaoImpl" />
|
||||
<bean id="instanceGroupDaoImpl" class="com.cloud.vm.dao.InstanceGroupDaoImpl" />
|
||||
<bean id="instanceGroupJoinDaoImpl" class="com.cloud.api.query.dao.InstanceGroupJoinDaoImpl" />
|
||||
<bean id="instanceGroupVMMapDaoImpl" class="com.cloud.vm.dao.InstanceGroupVMMapDaoImpl" />
|
||||
<bean id="itWorkDaoImpl" class="com.cloud.vm.ItWorkDaoImpl" />
|
||||
<bean id="keystoreDaoImpl" class="com.cloud.keystore.KeystoreDaoImpl" />
|
||||
<bean id="lBHealthCheckPolicyDaoImpl" class="com.cloud.network.dao.LBHealthCheckPolicyDaoImpl" />
|
||||
<bean id="lBStickinessPolicyDaoImpl" class="com.cloud.network.dao.LBStickinessPolicyDaoImpl" />
|
||||
<bean id="launchPermissionDaoImpl" class="com.cloud.storage.dao.LaunchPermissionDaoImpl" />
|
||||
<bean id="loadBalancerDaoImpl" class="com.cloud.network.dao.LoadBalancerDaoImpl" />
|
||||
<bean id="loadBalancerVMMapDaoImpl" class="com.cloud.network.dao.LoadBalancerVMMapDaoImpl" />
|
||||
<bean id="managementServerHostDaoImpl" class="com.cloud.cluster.dao.ManagementServerHostDaoImpl" />
|
||||
<bean id="managementServerHostPeerDaoImpl" class="com.cloud.cluster.dao.ManagementServerHostPeerDaoImpl" />
|
||||
<bean id="networkAccountDaoImpl" class="com.cloud.network.dao.NetworkAccountDaoImpl" />
|
||||
<bean id="networkACLDaoImpl" class="com.cloud.network.vpc.dao.NetworkACLDaoImpl" />
|
||||
<bean id="networkACLItemDaoImpl" class="com.cloud.network.vpc.dao.NetworkACLItemDaoImpl" />
|
||||
<bean id="networkDaoImpl" class="com.cloud.network.dao.NetworkDaoImpl" />
|
||||
<bean id="networkDomainDaoImpl" class="com.cloud.network.dao.NetworkDomainDaoImpl" />
|
||||
<bean id="networkExternalFirewallDaoImpl" class="com.cloud.network.dao.NetworkExternalFirewallDaoImpl" />
|
||||
<bean id="networkExternalLoadBalancerDaoImpl" class="com.cloud.network.dao.NetworkExternalLoadBalancerDaoImpl" />
|
||||
<bean id="networkOfferingDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingDaoImpl" />
|
||||
<bean id="networkOfferingServiceMapDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl" />
|
||||
<bean id="networkOpDaoImpl" class="com.cloud.network.dao.NetworkOpDaoImpl" />
|
||||
<bean id="networkRuleConfigDaoImpl" class="com.cloud.network.dao.NetworkRuleConfigDaoImpl" />
|
||||
<bean id="networkServiceMapDaoImpl" class="com.cloud.network.dao.NetworkServiceMapDaoImpl" />
|
||||
<bean id="nicDaoImpl" class="com.cloud.vm.dao.NicDaoImpl" />
|
||||
<bean id="nicDetailDaoImpl" class="com.cloud.vm.dao.NicDetailDaoImpl" />
|
||||
<bean id="nicSecondaryIpDaoImpl" class="com.cloud.vm.dao.NicSecondaryIpDaoImpl" />
|
||||
<bean id="nicIpAliasDaoImpl" class="com.cloud.vm.dao.NicIpAliasDaoImpl" />
|
||||
<bean id="objectInDataStoreDaoImpl" class="org.apache.cloudstack.storage.db.ObjectInDataStoreDaoImpl" />
|
||||
<bean id="ovsTunnelInterfaceDaoImpl" class="com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl" />
|
||||
<bean id="ovsTunnelNetworkDaoImpl" class="com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl" />
|
||||
<bean id="physicalNetworkDaoImpl" class="com.cloud.network.dao.PhysicalNetworkDaoImpl" />
|
||||
<bean id="physicalNetworkIsolationMethodDaoImpl" class="com.cloud.network.dao.PhysicalNetworkIsolationMethodDaoImpl" />
|
||||
<bean id="physicalNetworkServiceProviderDaoImpl" class="com.cloud.network.dao.PhysicalNetworkServiceProviderDaoImpl" />
|
||||
<bean id="physicalNetworkTagDaoImpl" class="com.cloud.network.dao.PhysicalNetworkTagDaoImpl" />
|
||||
<bean id="physicalNetworkTrafficTypeDaoImpl" class="com.cloud.network.dao.PhysicalNetworkTrafficTypeDaoImpl" />
|
||||
<bean id="podVlanDaoImpl" class="com.cloud.dc.dao.PodVlanDaoImpl" />
|
||||
<bean id="podVlanMapDaoImpl" class="com.cloud.dc.dao.PodVlanMapDaoImpl" />
|
||||
<bean id="PortableIpDaoImpl" class="org.apache.cloudstack.region.PortableIpDaoImpl" />
|
||||
<bean id="PortableIpRangeDaoImpl" class="org.apache.cloudstack.region.PortableIpRangeDaoImpl" />
|
||||
<bean id="portForwardingRulesDaoImpl" class="com.cloud.network.rules.dao.PortForwardingRulesDaoImpl" />
|
||||
<bean id="portProfileDaoImpl" class="com.cloud.network.dao.PortProfileDaoImpl" />
|
||||
<bean id="primaryDataStoreDaoImpl" class="org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl" />
|
||||
<bean id="primaryDataStoreDetailsDaoImpl" class="org.apache.cloudstack.storage.volume.db.PrimaryDataStoreDetailsDaoImpl" />
|
||||
<bean id="privateIpDaoImpl" class="com.cloud.network.vpc.dao.PrivateIpDaoImpl" />
|
||||
<bean id="projectAccountDaoImpl" class="com.cloud.projects.dao.ProjectAccountDaoImpl" />
|
||||
<bean id="projectAccountJoinDaoImpl" class="com.cloud.api.query.dao.ProjectAccountJoinDaoImpl" />
|
||||
<bean id="projectDaoImpl" class="com.cloud.projects.dao.ProjectDaoImpl" />
|
||||
<bean id="projectInvitationDaoImpl" class="com.cloud.projects.dao.ProjectInvitationDaoImpl" />
|
||||
<bean id="projectInvitationJoinDaoImpl" class="com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl" />
|
||||
<bean id="projectJoinDaoImpl" class="com.cloud.api.query.dao.ProjectJoinDaoImpl" />
|
||||
<bean id="regionDaoImpl" class="org.apache.cloudstack.region.dao.RegionDaoImpl" />
|
||||
<bean id="remoteAccessVpnDaoImpl" class="com.cloud.network.dao.RemoteAccessVpnDaoImpl" />
|
||||
<bean id="resourceCountDaoImpl" class="com.cloud.configuration.dao.ResourceCountDaoImpl" />
|
||||
<bean id="resourceLimitDaoImpl" class="com.cloud.configuration.dao.ResourceLimitDaoImpl" />
|
||||
<bean id="resourceTagJoinDaoImpl" class="com.cloud.api.query.dao.ResourceTagJoinDaoImpl" />
|
||||
<bean id="resourceTagsDaoImpl" class="com.cloud.tags.dao.ResourceTagsDaoImpl" />
|
||||
<bean id="routerNetworkDaoImpl" class="com.cloud.network.dao.RouterNetworkDaoImpl" />
|
||||
<bean id="sSHKeyPairDaoImpl" class="com.cloud.user.dao.SSHKeyPairDaoImpl" />
|
||||
<bean id="secondaryStorageVmDaoImpl" class="com.cloud.vm.dao.SecondaryStorageVmDaoImpl" />
|
||||
<bean id="securityGroupDaoImpl" class="com.cloud.network.security.dao.SecurityGroupDaoImpl" />
|
||||
<bean id="securityGroupJoinDaoImpl" class="com.cloud.api.query.dao.SecurityGroupJoinDaoImpl" />
|
||||
<bean id="securityGroupRuleDaoImpl" class="com.cloud.network.security.dao.SecurityGroupRuleDaoImpl" />
|
||||
<bean id="securityGroupRulesDaoImpl" class="com.cloud.network.security.dao.SecurityGroupRulesDaoImpl" />
|
||||
<bean id="securityGroupVMMapDaoImpl" class="com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl" />
|
||||
<bean id="securityGroupWorkDaoImpl" class="com.cloud.network.security.dao.SecurityGroupWorkDaoImpl" />
|
||||
<bean id="serviceOfferingJoinDaoImpl" class="com.cloud.api.query.dao.ServiceOfferingJoinDaoImpl" />
|
||||
<bean id="site2SiteCustomerGatewayDaoImpl" class="com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl" />
|
||||
<bean id="site2SiteVpnConnectionDaoImpl" class="com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl" />
|
||||
<bean id="site2SiteVpnGatewayDaoImpl" class="com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl" />
|
||||
<bean id="snapshotDaoImpl" class="com.cloud.storage.dao.SnapshotDaoImpl" />
|
||||
<bean id="snapshotPolicyDaoImpl" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl" />
|
||||
<bean id="snapshotScheduleDaoImpl" class="com.cloud.storage.dao.SnapshotScheduleDaoImpl" />
|
||||
<bean id="staticRouteDaoImpl" class="com.cloud.network.vpc.dao.StaticRouteDaoImpl" />
|
||||
<bean id="storageNetworkIpAddressDaoImpl" class="com.cloud.dc.dao.StorageNetworkIpAddressDaoImpl" />
|
||||
<bean id="storageNetworkIpRangeDaoImpl" class="com.cloud.dc.dao.StorageNetworkIpRangeDaoImpl" />
|
||||
<bean id="storagePoolDetailsDaoImpl" class="com.cloud.storage.dao.StoragePoolDetailsDaoImpl" />
|
||||
<bean id="storagePoolHostDaoImpl" class="com.cloud.storage.dao.StoragePoolHostDaoImpl" />
|
||||
<bean id="storagePoolJoinDaoImpl" class="com.cloud.api.query.dao.StoragePoolJoinDaoImpl" />
|
||||
<bean id="storagePoolWorkDaoImpl" class="com.cloud.storage.dao.StoragePoolWorkDaoImpl" />
|
||||
<bean id="templatePrimaryDataStoreDaoImpl" class="org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreDaoImpl" />
|
||||
<bean id="uploadDaoImpl" class="com.cloud.storage.dao.UploadDaoImpl" />
|
||||
<bean id="usageDaoImpl" class="com.cloud.usage.dao.UsageDaoImpl" />
|
||||
<bean id="usageEventDaoImpl" class="com.cloud.event.dao.UsageEventDaoImpl" />
|
||||
<bean id="usageIPAddressDaoImpl" class="com.cloud.usage.dao.UsageIPAddressDaoImpl" />
|
||||
<bean id="usageJobDaoImpl" class="com.cloud.usage.dao.UsageJobDaoImpl" />
|
||||
<bean id="usageLoadBalancerPolicyDaoImpl" class="com.cloud.usage.dao.UsageLoadBalancerPolicyDaoImpl" />
|
||||
<bean id="usageNetworkDaoImpl" class="com.cloud.usage.dao.UsageNetworkDaoImpl" />
|
||||
<bean id="usageNetworkOfferingDaoImpl" class="com.cloud.usage.dao.UsageNetworkOfferingDaoImpl" />
|
||||
<bean id="usagePortForwardingRuleDaoImpl" class="com.cloud.usage.dao.UsagePortForwardingRuleDaoImpl" />
|
||||
<bean id="usageSecurityGroupDaoImpl" class="com.cloud.usage.dao.UsageSecurityGroupDaoImpl" />
|
||||
<bean id="usageStorageDaoImpl" class="com.cloud.usage.dao.UsageStorageDaoImpl" />
|
||||
<bean id="usageVMInstanceDaoImpl" class="com.cloud.usage.dao.UsageVMInstanceDaoImpl" />
|
||||
<bean id="usageVPNUserDaoImpl" class="com.cloud.usage.dao.UsageVPNUserDaoImpl" />
|
||||
<bean id="usageVolumeDaoImpl" class="com.cloud.usage.dao.UsageVolumeDaoImpl" />
|
||||
<bean id="usageVmDiskDaoImpl" class="com.cloud.usage.dao.UsageVmDiskDaoImpl" />
|
||||
<bean id="userAccountDaoImpl" class="com.cloud.user.dao.UserAccountDaoImpl" />
|
||||
<bean id="userAccountJoinDaoImpl" class="com.cloud.api.query.dao.UserAccountJoinDaoImpl" />
|
||||
<bean id="userIpv6AddressDaoImpl" class="com.cloud.network.dao.UserIpv6AddressDaoImpl" />
|
||||
<bean id="userStatisticsDaoImpl" class="com.cloud.user.dao.UserStatisticsDaoImpl" />
|
||||
<bean id="userStatsLogDaoImpl" class="com.cloud.user.dao.UserStatsLogDaoImpl" />
|
||||
<bean id="userVmDiskStatsDaoImpl" class="com.cloud.user.dao.VmDiskStatisticsDaoImpl" />
|
||||
<bean id="userVmCloneSettingDaoImpl" class="com.cloud.vm.dao.UserVmCloneSettingDaoImpl" />
|
||||
<bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
|
||||
<bean id="userVmDetailsDaoImpl" class="com.cloud.vm.dao.UserVmDetailsDaoImpl" />
|
||||
<bean id="userVmJoinDaoImpl" class="com.cloud.api.query.dao.UserVmJoinDaoImpl" />
|
||||
<bean id="vMComputeTagDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMComputeTagDaoImpl" />
|
||||
<bean id="vMEntityDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMEntityDaoImpl" />
|
||||
<bean id="vMInstanceDaoImpl" class="com.cloud.vm.dao.VMInstanceDaoImpl" />
|
||||
<bean id="vMNetworkMapDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMNetworkMapDaoImpl" />
|
||||
<bean id="vMReservationDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDaoImpl" />
|
||||
<bean id="vMRootDiskTagDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMRootDiskTagDaoImpl" />
|
||||
<bean id="vMSnapshotDaoImpl" class="com.cloud.vm.snapshot.dao.VMSnapshotDaoImpl" />
|
||||
<bean id="vMTemplateDetailsDaoImpl" class="com.cloud.storage.dao.VMTemplateDetailsDaoImpl" />
|
||||
<bean id="vMTemplateHostDaoImpl" class="com.cloud.storage.dao.VMTemplateHostDaoImpl" />
|
||||
<bean id="vMTemplatePoolDaoImpl" class="com.cloud.storage.dao.VMTemplatePoolDaoImpl" />
|
||||
<bean id="vMTemplateZoneDaoImpl" class="com.cloud.storage.dao.VMTemplateZoneDaoImpl" />
|
||||
<bean id="versionDaoImpl" class="com.cloud.upgrade.dao.VersionDaoImpl" />
|
||||
<bean id="virtualRouterProviderDaoImpl" class="com.cloud.network.dao.VirtualRouterProviderDaoImpl" />
|
||||
<bean id="vmRulesetLogDaoImpl" class="com.cloud.network.security.dao.VmRulesetLogDaoImpl" />
|
||||
<bean id="volumeDaoImpl" class="com.cloud.storage.dao.VolumeDaoImpl" />
|
||||
<bean id="volumeDetailsDaoImpl" class="com.cloud.storage.dao.VolumeDetailsDaoImpl" />
|
||||
<bean id="volumeHostDaoImpl" class="com.cloud.storage.dao.VolumeHostDaoImpl" />
|
||||
<bean id="volumeJoinDaoImpl" class="com.cloud.api.query.dao.VolumeJoinDaoImpl" />
|
||||
<bean id="volumeReservationDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VolumeReservationDaoImpl" />
|
||||
<bean id="vpcDaoImpl" class="com.cloud.network.vpc.dao.VpcDaoImpl" />
|
||||
<bean id="vpcGatewayDaoImpl" class="com.cloud.network.vpc.dao.VpcGatewayDaoImpl" />
|
||||
<bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" />
|
||||
<bean id="vpcOfferingServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingServiceMapDaoImpl" />
|
||||
<bean id="vpcServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcServiceMapDaoImpl" />
|
||||
<bean id="vpnUserDaoImpl" class="com.cloud.network.dao.VpnUserDaoImpl" />
|
||||
<bean id="applicationLbRuleDaoImpl" class="org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDaoImpl" />
|
||||
<bean id="networkOfferingDetailsDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingDetailsDaoImpl" />
|
||||
<bean id="serviceOfferingDetailsDaoImpl" class="com.cloud.service.dao.ServiceOfferingDetailsDaoImpl"/>
|
||||
|
||||
<!--
|
||||
Checkers
|
||||
-->
|
||||
<bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" />
|
||||
<bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
|
||||
<bean id="databaseIntegrityChecker" class="com.cloud.upgrade.DatabaseIntegrityChecker" />
|
||||
<bean id="domainChecker" class="com.cloud.acl.DomainChecker" />
|
||||
<bean id="affinityGroupAccessChecker" class="com.cloud.acl.AffinityGroupAccessChecker" />
|
||||
|
||||
<!--
|
||||
Authenticators
|
||||
-->
|
||||
<bean id="basicAgentAuthManager" class="com.cloud.agent.manager.authn.impl.BasicAgentAuthManager">
|
||||
<property name="name" value="BASIC"/>
|
||||
</bean>
|
||||
<bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator">
|
||||
<property name="name" value="MD5"/>
|
||||
</bean>
|
||||
<bean id="LdapAuthenticator" class="org.apache.cloudstack.ldap.LdapAuthenticator">
|
||||
<property name="name" value="LDAP"/>
|
||||
</bean>
|
||||
<bean id="SHA256SaltedUserAuthenticator" class="com.cloud.server.auth.SHA256SaltedUserAuthenticator">
|
||||
<property name="name" value="SHA256SALT"/>
|
||||
</bean>
|
||||
<bean id="PlainTextUserAuthenticator" class="com.cloud.server.auth.PlainTextUserAuthenticator">
|
||||
<property name="name" value="PLAINTEXT"/>
|
||||
</bean>
|
||||
<bean id="LdapManager" class="org.apache.cloudstack.ldap.LdapManagerImpl" />
|
||||
<bean id="LdapUserManager" class="org.apache.cloudstack.ldap.LdapUserManager" />
|
||||
<bean id="LdapContextFactory" class="org.apache.cloudstack.ldap.LdapContextFactory" />
|
||||
<bean id="LdapConfigurationDao" class="org.apache.cloudstack.ldap.dao.LdapConfigurationDaoImpl" />
|
||||
<bean id="LdapConfiguration" class="org.apache.cloudstack.ldap.LdapConfiguration" />
|
||||
|
||||
<!--
|
||||
Network Elements
|
||||
-->
|
||||
<bean id="Ovs" class="com.cloud.network.element.OvsElement">
|
||||
<property name="name" value="Ovs"/>
|
||||
</bean>
|
||||
<bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
|
||||
<property name="name" value="SecurityGroupProvider"/>
|
||||
</bean>
|
||||
<bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
|
||||
<property name="name" value="VirtualRouter"/>
|
||||
</bean>
|
||||
<bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
|
||||
<property name="name" value="VpcVirtualRouter"/>
|
||||
</bean>
|
||||
<bean id="elasticLoadBalancerElement" class="com.cloud.network.element.ElasticLoadBalancerElement">
|
||||
<property name="name" value="ElasticLoadBalancerElement"/>
|
||||
</bean>
|
||||
<bean id="InternalLbVm" class="org.apache.cloudstack.network.element.InternalLoadBalancerElement">
|
||||
<property name="name" value="InternalLbVm"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
General allocators
|
||||
-->
|
||||
<bean id="firstFitAllocator" class="com.cloud.agent.manager.allocator.impl.FirstFitAllocator" />
|
||||
<bean id="randomAllocator" class="com.cloud.agent.manager.allocator.impl.RandomAllocator" />
|
||||
|
||||
<!--
|
||||
Host Allocators
|
||||
-->
|
||||
<bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
|
||||
<property name="name" value="FirstFitRouting"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Storage pool allocators
|
||||
-->
|
||||
<bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
|
||||
<property name="name" value="LocalStorage"/>
|
||||
</bean>
|
||||
<bean id="clusterScopeStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.ClusterScopeStoragePoolAllocator" />
|
||||
<bean id="zoneWideStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.ZoneWideStoragePoolAllocator" />
|
||||
<bean id="garbageCollectingStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.GarbageCollectingStoragePoolAllocator">
|
||||
<property name="name" value="GCStorage"/>
|
||||
</bean>
|
||||
|
||||
<bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
|
||||
<property name="name" value="UserFirst"/>
|
||||
</bean>
|
||||
|
||||
|
||||
<bean id="recreatableFencer" class="com.cloud.ha.RecreatableFencer" />
|
||||
<bean id="recreateHostAllocator" class="com.cloud.agent.manager.allocator.impl.RecreateHostAllocator" />
|
||||
<bean id="secondaryStorageVmDefaultAllocator" class="com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator" />
|
||||
|
||||
|
||||
<!--
|
||||
Misc allocator & Adapters
|
||||
-->
|
||||
<bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
|
||||
<property name="name" value="Balance"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ExternalIpAddressAllocator" class="com.cloud.network.ExternalIpAddressAllocator">
|
||||
<property name="name" value="Basic"/>
|
||||
</bean>
|
||||
|
||||
<bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter" />
|
||||
<bean id="clusterAlertAdapter" class="com.cloud.alert.ClusterAlertAdapter" />
|
||||
<bean id="consoleProxyAlertAdapter" class="com.cloud.alert.ConsoleProxyAlertAdapter" />
|
||||
<bean id="secondaryStorageVmAlertAdapter" class="com.cloud.alert.SecondaryStorageVmAlertAdapter" />
|
||||
<bean id="clusterServiceServletAdapter" class="com.cloud.cluster.ClusterServiceServletAdapter" />
|
||||
|
||||
<!--
|
||||
Investigators
|
||||
-->
|
||||
<bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
|
||||
<property name="name" value="SimpleInvestigator"/>
|
||||
</bean>
|
||||
|
||||
<bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
|
||||
<property name="name" value="XenServerInvestigator"/>
|
||||
</bean>
|
||||
|
||||
<bean id="KVMInvestigator" class="com.cloud.ha.KVMInvestigator">
|
||||
<property name="name" value="KVMInvestigator"/>
|
||||
</bean>
|
||||
|
||||
<bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
|
||||
<property name="name" value="PingInvestigator"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
|
||||
<property name="name" value="ManagementIPSysVMInvestigator"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Fencers
|
||||
-->
|
||||
<bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
|
||||
<property name="name" value="XenServerFenceBuilder"/>
|
||||
</bean>
|
||||
<bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
|
||||
<property name="name" value="KVMFenceBuilder"/>
|
||||
</bean>
|
||||
<bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer">
|
||||
<property name="name" value="OvmFenceBuilder"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Discovers
|
||||
-->
|
||||
<bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
|
||||
<property name="name" value="XCP Agent"/>
|
||||
</bean>
|
||||
|
||||
<bean id="SecondaryStorageDiscoverer" class="org.apache.cloudstack.storage.resource.SecondaryStorageDiscoverer">
|
||||
<property name="name" value="SecondaryStorage"/>
|
||||
</bean>
|
||||
|
||||
<bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
|
||||
<property name="name" value="KVM Agent"/>
|
||||
</bean>
|
||||
|
||||
<bean id="LxcServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.LxcServerDiscoverer">
|
||||
<property name="name" value="Lxc Discover"/>
|
||||
</bean>
|
||||
|
||||
<bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer">
|
||||
<property name="name" value="Ovm Discover"/>
|
||||
</bean>
|
||||
|
||||
<bean id="dummyHostDiscoverer" class="com.cloud.resource.DummyHostDiscoverer">
|
||||
<property name="name" value="dummyHostDiscoverer" />
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Deployment planners
|
||||
-->
|
||||
<bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
|
||||
<property name="name" value="UserDispersingPlanner"/>
|
||||
</bean>
|
||||
|
||||
<bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
|
||||
<property name="name" value="UserConcentratedPodPlanner"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ImplicitDedicationPlanner" class="com.cloud.deploy.ImplicitDedicationPlanner">
|
||||
<property name="name" value="ImplicitDedicationPlanner"/>
|
||||
</bean>
|
||||
|
||||
<bean id="clusterBasedAgentLoadBalancerPlanner" class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner">
|
||||
<property name="name" value="ClusterBasedAgentLoadBalancerPlanner"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Network Gurus
|
||||
-->
|
||||
<bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
|
||||
<property name="name" value="StorageNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
|
||||
<property name="name" value="ExternalGuestNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
|
||||
<property name="name" value="PublicNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
|
||||
<property name="name" value="PodBasedNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
|
||||
<property name="name" value="ControlNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
|
||||
<property name="name" value="DirectNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
|
||||
<property name="name" value="DirectPodBasedNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
|
||||
<property name="name" value="OvsGuestNetworkGuru"/>
|
||||
</bean>
|
||||
<bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
|
||||
<property name="name" value="PrivateNetworkGuru"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Hypervisor Gurus
|
||||
-->
|
||||
<bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
|
||||
<property name="name" value="XenServerGuru"/>
|
||||
</bean>
|
||||
|
||||
<bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
|
||||
<property name="name" value="KVMGuru"/>
|
||||
</bean>
|
||||
|
||||
<bean id="LXCGuru" class="com.cloud.hypervisor.LXCGuru">
|
||||
<property name="name" value="LXCGuru"/>
|
||||
</bean>
|
||||
|
||||
<bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
|
||||
<property name="name" value="OvmGuru"/>
|
||||
</bean>
|
||||
|
||||
<!--=====================================================================================================-->
|
||||
<!-- -->
|
||||
<!-- Storage Subsystem Components and Helpers -->
|
||||
<!-- -->
|
||||
<!--=====================================================================================================-->
|
||||
|
||||
<!--Filesystem types-->
|
||||
<bean id="iSCSI" class="org.apache.cloudstack.storage.datastore.type.ISCSI" />
|
||||
<bean id="networkFileSystem" class="org.apache.cloudstack.storage.datastore.type.NetworkFileSystem" />
|
||||
|
||||
<!--Image formats-->
|
||||
<bean id="ISO" class="org.apache.cloudstack.storage.image.format.ISO" />
|
||||
<bean id="OVA" class="org.apache.cloudstack.storage.image.format.OVA" />
|
||||
<bean id="QCOW2" class="org.apache.cloudstack.storage.image.format.QCOW2" />
|
||||
<bean id="VHD" class="org.apache.cloudstack.storage.image.format.VHD" />
|
||||
<bean id="VHDX" class="org.apache.cloudstack.storage.image.format.VHDX" />
|
||||
<bean id="unknown" class="org.apache.cloudstack.storage.image.format.Unknown" />
|
||||
|
||||
<!--Data Store Services -->
|
||||
<bean id="snapshotServiceImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotServiceImpl"
|
||||
depends-on="snapshotStateMachineManagerImpl, snapshotDataFactoryImpl, dataStoreManagerImpl, dataMotionServiceImpl, objectInDataStoreManagerImpl"/>
|
||||
<bean id="templateServiceImpl" class="org.apache.cloudstack.storage.image.TemplateServiceImpl"
|
||||
depends-on="dataObjectManagerImpl, dataStoreManagerImpl, dataMotionServiceImpl, objectInDataStoreManagerImpl, defaultEndPointSelector, templateDataFactoryImpl"/>
|
||||
<bean id="volumeServiceImpl" class="org.apache.cloudstack.storage.volume.VolumeServiceImpl"
|
||||
depends-on="snapshotManagerImpl, dataMotionServiceImpl"/>
|
||||
|
||||
<bean id="xenserverSnapshotStrategy" class="org.apache.cloudstack.storage.snapshot.XenserverSnapshotStrategy" />
|
||||
|
||||
<!--Data Store Factory-->
|
||||
<bean id="templateDataFactoryImpl" class="org.apache.cloudstack.storage.image.TemplateDataFactoryImpl" />
|
||||
<bean id="snapshotDataFactoryImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotDataFactoryImpl"
|
||||
depends-on="dataStoreManagerImpl, snapshotDataStoreDaoImpl, volumeDataFactoryImpl"/>
|
||||
<bean id="volumeDataFactoryImpl" class="org.apache.cloudstack.storage.volume.VolumeDataFactoryImpl" />
|
||||
|
||||
<bean id="objectInDataStoreManagerImpl" class="org.apache.cloudstack.storage.datastore.ObjectInDataStoreManagerImpl" />
|
||||
<bean id="dataObjectManagerImpl" class="org.apache.cloudstack.storage.datastore.DataObjectManagerImpl" />
|
||||
|
||||
<!--Data Store Helpers-->
|
||||
<bean id="primaryDataStoreHelper" class="org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper" />
|
||||
<bean id="imageStoreHelper" class="org.apache.cloudstack.storage.image.datastore.ImageStoreHelper" />
|
||||
<bean id="imageFormatHelper" class="org.apache.cloudstack.storage.image.format.ImageFormatHelper" />
|
||||
|
||||
<bean id="storageCacheRandomAllocator" class="org.apache.cloudstack.storage.cache.allocator.StorageCacheRandomAllocator" />
|
||||
<bean id="storageCacheManagerImpl" class="org.apache.cloudstack.storage.cache.manager.StorageCacheManagerImpl" />
|
||||
<bean id="StorageCacheReplacementAlgorithm" class="org.apache.cloudstack.storage.cache.manager.StorageCacheReplacementAlgorithmLRU" />
|
||||
|
||||
<bean id="snapshotStateMachineManagerImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotStateMachineManagerImpl" />
|
||||
<bean id="defaultEndPointSelector" class="org.apache.cloudstack.storage.endpoint.DefaultEndPointSelector" />
|
||||
|
||||
|
||||
<bean id="ancientDataMotionStrategy" class="org.apache.cloudstack.storage.motion.AncientDataMotionStrategy" />
|
||||
<bean id="xenserverStorageMotionStrategy" class="org.apache.cloudstack.storage.motion.XenServerStorageMotionStrategy" />
|
||||
|
||||
<!--Data Motion Services-->
|
||||
<bean id="dataMotionServiceImpl" class="org.apache.cloudstack.storage.motion.DataMotionServiceImpl">
|
||||
<property name="strategies">
|
||||
<list>
|
||||
<ref local="ancientDataMotionStrategy"/>
|
||||
<ref local="xenserverStorageMotionStrategy"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Data Store Provider Manager
|
||||
-->
|
||||
<bean id="primaryDataStoreProviderMgr"
|
||||
class="org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreProviderManagerImpl"/>
|
||||
<bean id="imageStoreProviderMgr" class="org.apache.cloudstack.storage.image.manager.ImageStoreProviderManagerImpl"/>
|
||||
|
||||
<bean id="dataStoreManagerImpl" class="org.apache.cloudstack.storage.datastore.DataStoreManagerImpl"
|
||||
depends-on="dataStoreProviderManager">
|
||||
<property name="primaryStoreMgr" ref="primaryDataStoreProviderMgr"/>
|
||||
<property name="imageDataStoreMgr" ref="imageStoreProviderMgr"/>
|
||||
</bean>
|
||||
|
||||
<bean id="cloudStackPrimaryDataStoreProviderImpl"
|
||||
class="org.apache.cloudstack.storage.datastore.provider.CloudStackPrimaryDataStoreProviderImpl"/>
|
||||
|
||||
<bean id="dataStoreProviderManager"
|
||||
class="org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManagerImpl">
|
||||
<property name="providers">
|
||||
<list>
|
||||
<!--Data Store Providers-->
|
||||
<ref bean="cloudStackPrimaryDataStoreProviderImpl"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Managers
|
||||
-->
|
||||
<bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" >
|
||||
<property name="UserAuthenticators" value="#{userAuthenticators.Adapters}" />
|
||||
<property name="UserPasswordEncoders" value="#{userPasswordEncoders.Adapters}" />
|
||||
<property name="SecurityCheckers" value="#{securityCheckers.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl">
|
||||
<property name="UserAuthenticators" value="#{userAuthenticators.Adapters}" />
|
||||
<property name="UserPasswordEncoders" value="#{userPasswordEncoders.Adapters}" />
|
||||
<property name="HostAllocators" value="#{hostAllocators.Adapters}" />
|
||||
<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" />
|
||||
<property name="Planners" value="#{deploymentPlanners.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl"/>
|
||||
|
||||
<bean id="volumeOrchestrator" class="org.apache.cloudstack.engine.orchestration.VolumeOrchestrator">
|
||||
<property name="PodAllocators" value="#{podAllocators.Adapters}" />
|
||||
<property name="StoragePoolAllocators" value="#{storagePoolAllocators.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
|
||||
<property name="name" value="FirstFitPlanner"/>
|
||||
</bean>
|
||||
|
||||
<bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl" >
|
||||
<property name="Discoverers" value="#{resourceDiscoverers.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" >
|
||||
<property name="Investigators" value="#{haInvestigators.Adapters}" />
|
||||
<property name="FenceBuilders" value="#{haFenceBuilders.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" >
|
||||
<property name="HostAllocators" value="#{hostAllocators.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="networkOrchestrator" class="org.apache.cloudstack.engine.orchestration.NetworkOrchestrator" >
|
||||
<property name="NetworkGurus" value="#{networkGurus.Adapters}" />
|
||||
<property name="NetworkElements" value="#{networkElements.Adapters}" />
|
||||
<property name="IpDeployers" value="#{ipDeployers.Adapters}" />
|
||||
<property name="DhcpProviders" value="#{dhcpProviders.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="ipAddressManagerImpl" class="com.cloud.network.IpAddressManagerImpl" >
|
||||
</bean>
|
||||
<bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl">
|
||||
<property name="NetworkElements" value="#{networkElements.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
|
||||
|
||||
<bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
|
||||
<bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
|
||||
|
||||
<bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
|
||||
<bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" />
|
||||
<bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
|
||||
<bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
|
||||
|
||||
<bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
|
||||
|
||||
<bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
|
||||
<bean id="alertManagerImpl" class="com.cloud.alert.AlertManagerImpl" />
|
||||
<bean id="autoScaleManagerImpl" class="com.cloud.network.as.AutoScaleManagerImpl" />
|
||||
<bean id="capacityManagerImpl" class="com.cloud.capacity.CapacityManagerImpl" />
|
||||
<bean id="clusterFenceManagerImpl" class="com.cloud.cluster.ClusterFenceManagerImpl" />
|
||||
<bean id="configurationManagerImpl" class="com.cloud.configuration.ConfigurationManagerImpl" />
|
||||
|
||||
<bean id="elasticLoadBalancerManagerImpl" class="com.cloud.network.lb.ElasticLoadBalancerManagerImpl" />
|
||||
<bean id="entityManagerImpl" class="com.cloud.dao.EntityManagerImpl" />
|
||||
<bean id="externalDeviceUsageManagerImpl" class="com.cloud.network.ExternalDeviceUsageManagerImpl" />
|
||||
<bean id="externalNetworkDeviceManagerImpl" class="com.cloud.network.ExternalNetworkDeviceManagerImpl" />
|
||||
<bean id="firewallManagerImpl" class="com.cloud.network.firewall.FirewallManagerImpl" />
|
||||
<bean id="hypervisorGuruManagerImpl" class="com.cloud.hypervisor.HypervisorGuruManagerImpl" />
|
||||
<bean id="identityServiceImpl" class="com.cloud.uuididentity.IdentityServiceImpl" />
|
||||
<bean id="keystoreManagerImpl" class="com.cloud.keystore.KeystoreManagerImpl" />
|
||||
<bean id="loadBalancingRulesManagerImpl" class="com.cloud.network.lb.LoadBalancingRulesManagerImpl" />
|
||||
<bean id="networkACLManagerImpl" class="com.cloud.network.vpc.NetworkACLManagerImpl" />
|
||||
<bean id="networkACLServiceImpl" class="com.cloud.network.vpc.NetworkACLServiceImpl" />
|
||||
<bean id="networkServiceImpl" class="com.cloud.network.NetworkServiceImpl" />
|
||||
<bean id="networkUsageManagerImpl" class="com.cloud.network.NetworkUsageManagerImpl" />
|
||||
<bean id="oCFS2ManagerImpl" class="com.cloud.storage.OCFS2ManagerImpl" />
|
||||
<bean id="ovsTunnelManagerImpl" class="com.cloud.network.ovs.OvsTunnelManagerImpl" />
|
||||
<bean id="projectManagerImpl" class="com.cloud.projects.ProjectManagerImpl" />
|
||||
<bean id="queryManagerImpl" class="com.cloud.api.query.QueryManagerImpl" />
|
||||
<bean id="regionManagerImpl" class="org.apache.cloudstack.region.RegionManagerImpl" />
|
||||
<bean id="regionServiceImpl" class="org.apache.cloudstack.region.RegionServiceImpl" />
|
||||
<bean id="remoteAccessVpnManagerImpl" class="com.cloud.network.vpn.RemoteAccessVpnManagerImpl" />
|
||||
<bean id="resourceLimitManagerImpl" class="com.cloud.resourcelimit.ResourceLimitManagerImpl" />
|
||||
<bean id="rulesManagerImpl" class="com.cloud.network.rules.RulesManagerImpl" />
|
||||
<bean id="site2SiteVpnManagerImpl" class="com.cloud.network.vpn.Site2SiteVpnManagerImpl" />
|
||||
<bean id="snapshotManagerImpl" class="com.cloud.storage.snapshot.SnapshotManagerImpl" />
|
||||
<bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" />
|
||||
<bean id="storageNetworkManagerImpl" class="com.cloud.network.StorageNetworkManagerImpl" />
|
||||
<bean id="taggedResourceManagerImpl" class="com.cloud.tags.TaggedResourceManagerImpl" />
|
||||
<bean id="resourceMetaDataManagerImpl" class="com.cloud.metadata.ResourceMetaDataManagerImpl" />
|
||||
<bean id="templateManagerImpl" class="com.cloud.template.TemplateManagerImpl" />
|
||||
<bean id="uploadMonitorImpl" class="com.cloud.storage.upload.UploadMonitorImpl" />
|
||||
<bean id="usageServiceImpl" class="com.cloud.usage.UsageServiceImpl" />
|
||||
<bean id="virtualNetworkApplianceManagerImpl" class="com.cloud.network.router.VirtualNetworkApplianceManagerImpl" />
|
||||
<bean id="vpcManagerImpl" class="com.cloud.network.vpc.VpcManagerImpl" />
|
||||
<bean id="vpcVirtualNetworkApplianceManagerImpl" class="com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl" />
|
||||
|
||||
<!-- Async management -->
|
||||
<bean id="asyncJobDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.AsyncJobDaoImpl" />
|
||||
<bean id="asyncJobJournalDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.AsyncJobJournalDaoImpl" />
|
||||
<bean id="asyncJobJoinMapDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.AsyncJobJoinMapDaoImpl" />
|
||||
<bean id="asyncJobManagerImpl" class="org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl"/>
|
||||
<bean id="asyncJobMonitor" class="org.apache.cloudstack.framework.jobs.impl.AsyncJobMonitor"/>
|
||||
<bean id="syncQueueDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.SyncQueueDaoImpl" />
|
||||
<bean id="syncQueueItemDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDaoImpl" />
|
||||
<bean id="syncQueueManagerImpl" class="org.apache.cloudstack.framework.jobs.impl.SyncQueueManagerImpl" />
|
||||
|
||||
<bean id="ApiAsyncJobDispatcher" class="com.cloud.api.ApiAsyncJobDispatcher">
|
||||
<property name="name" value="ApiAsyncJobDispatcher" />
|
||||
</bean>
|
||||
|
||||
|
||||
<!--
|
||||
Misc components
|
||||
-->
|
||||
<bean id="actionEventUtils" class="com.cloud.event.ActionEventUtils" />
|
||||
<bean id="alertGenerator" class="com.cloud.event.AlertGenerator" />
|
||||
<bean id="apiDBUtils" class="com.cloud.api.ApiDBUtils" />
|
||||
<bean id="apiDiscoveryServiceImpl" class="org.apache.cloudstack.discovery.ApiDiscoveryServiceImpl" />
|
||||
<bean id="apiDispatcher" class="com.cloud.api.ApiDispatcher" />
|
||||
<bean id="apiResponseHelper" class="com.cloud.api.ApiResponseHelper" />
|
||||
<bean id="apiServer" class="com.cloud.api.ApiServer" />
|
||||
<bean id="apiServlet" class="com.cloud.api.ApiServlet" />
|
||||
<bean id="bAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" />
|
||||
<bean id="cloudOrchestrator" class="org.apache.cloudstack.engine.orchestration.CloudOrchestrator" />
|
||||
<bean id="clusterRestService" class="org.apache.cloudstack.engine.rest.service.api.ClusterRestService" />
|
||||
<bean id="consoleProxyServlet" class="com.cloud.servlet.ConsoleProxyServlet" />
|
||||
<bean id="dataCenterResourceManagerImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceManagerImpl" />
|
||||
<bean id="dataDisk" class="org.apache.cloudstack.engine.subsystem.api.storage.type.DataDisk" />
|
||||
|
||||
|
||||
<bean id="podRestService" class="org.apache.cloudstack.engine.rest.service.api.PodRestService" />
|
||||
<bean id="iso" class="org.apache.cloudstack.engine.subsystem.api.storage.type.Iso" />
|
||||
<bean id="networkRestService" class="org.apache.cloudstack.engine.rest.service.api.NetworkRestService" />
|
||||
<bean id="provisioningServiceImpl" class="org.apache.cloudstack.engine.service.api.ProvisioningServiceImpl" />
|
||||
<bean id="rootDisk" class="org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk" />
|
||||
<bean id="registerCompleteServlet" class="com.cloud.servlet.RegisterCompleteServlet" />
|
||||
<bean id="statsCollector" class="com.cloud.server.StatsCollector" />
|
||||
<bean id="storagePoolAutomationImpl" class="com.cloud.storage.StoragePoolAutomationImpl" />
|
||||
<bean id="usageEventUtils" class="com.cloud.event.UsageEventUtils" />
|
||||
<bean id="vMEntityManagerImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl" />
|
||||
<bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" />
|
||||
<bean id="virtualMachineRestService" class="org.apache.cloudstack.engine.rest.service.api.VirtualMachineRestService" />
|
||||
<bean id="volumeRestService" class="org.apache.cloudstack.engine.rest.service.api.VolumeRestService" />
|
||||
<bean id="volumeTypeHelper" class="org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeTypeHelper" />
|
||||
<bean id="zoneRestService" class="org.apache.cloudstack.engine.rest.service.api.ZoneRestService" />
|
||||
<bean id="cloudZonesStartupProcessor" class="com.cloud.hypervisor.CloudZonesStartupProcessor" />
|
||||
<bean id="managementServerNode" class="org.apache.cloudstack.utils.identity.ManagementServerNode" />
|
||||
<bean id="testingAllocator" class="com.cloud.agent.manager.allocator.impl.TestingAllocator" />
|
||||
<bean id="domainManagerImpl" class="com.cloud.user.DomainManagerImpl" />
|
||||
<bean id="downloadMonitorImpl" class="com.cloud.storage.download.DownloadMonitorImpl" />
|
||||
<bean id="lBHealthCheckManagerImpl" class="com.cloud.network.lb.LBHealthCheckManagerImpl" />
|
||||
<bean id="volumeApiServiceImpl" class="com.cloud.storage.VolumeApiServiceImpl"/>
|
||||
<bean id="ApplicationLoadBalancerService" class="org.apache.cloudstack.network.lb.ApplicationLoadBalancerManagerImpl" />
|
||||
<bean id="InternalLoadBalancerVMManager" class="org.apache.cloudstack.network.lb.InternalLoadBalancerVMManagerImpl" />
|
||||
|
||||
<bean id="vMSnapshotManagerImpl" class="com.cloud.vm.snapshot.VMSnapshotManagerImpl" />
|
||||
|
||||
|
||||
<!--=======================================================================================================-->
|
||||
<!-- -->
|
||||
<!-- Module-basis OSS/non-OSS Common components -->
|
||||
<!-- -->
|
||||
<!--=======================================================================================================-->
|
||||
|
||||
<!--
|
||||
Baremetal components
|
||||
-->
|
||||
|
||||
<bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement">
|
||||
<property name="name" value="BareMetalDhcp"/>
|
||||
</bean>
|
||||
<bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement">
|
||||
<property name="name" value="BareMetalPxe"/>
|
||||
</bean>
|
||||
<bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement">
|
||||
<property name="name" value="BareMetalUserdata"/>
|
||||
</bean>
|
||||
|
||||
<bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" />
|
||||
|
||||
<bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
|
||||
<property name="name" value="Bare Metal Agent"/>
|
||||
</bean>
|
||||
|
||||
<bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner">
|
||||
<property name="name" value="BareMetalPlanner"/>
|
||||
</bean>
|
||||
|
||||
<bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
|
||||
<property name="name" value="BaremetalGuru"/>
|
||||
</bean>
|
||||
|
||||
<bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/>
|
||||
<bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/>
|
||||
<bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/>
|
||||
<bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" />
|
||||
<bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" />
|
||||
|
||||
<bean id="BAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" />
|
||||
<bean id="baremetalDhcpDaoImpl" class="com.cloud.baremetal.database.BaremetalDhcpDaoImpl" />
|
||||
<bean id="baremetalPxeDaoImpl" class="com.cloud.baremetal.database.BaremetalPxeDaoImpl" />
|
||||
|
||||
<bean id="UcsManager" class="com.cloud.ucs.manager.UcsManagerImpl" />
|
||||
|
||||
<bean id="AffinityGroupServiceImpl" class="org.apache.cloudstack.affinity.AffinityGroupServiceImpl">
|
||||
<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" />
|
||||
</bean>
|
||||
<bean id="DeploymentPlanningManager" class="com.cloud.deploy.DeploymentPlanningManagerImpl">
|
||||
<property name="Planners" value="#{deploymentPlanners.Adapters}" />
|
||||
<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" />
|
||||
<property name="StoragePoolAllocators" value="#{storagePoolAllocators.Adapters}" />
|
||||
<property name="HostAllocators" value="#{hostAllocators.Adapters}" />
|
||||
</bean>
|
||||
|
||||
<bean id="AffinityGroupJoinDaoImpl" class="com.cloud.api.query.dao.AffinityGroupJoinDaoImpl">
|
||||
</bean>
|
||||
<bean id="AffinityGroupDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupDaoImpl">
|
||||
</bean>
|
||||
<bean id="AffinityGroupVMMapDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDaoImpl">
|
||||
</bean>
|
||||
<bean id="AffinityGroupDomainMapDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupDomainMapDaoImpl">
|
||||
</bean>
|
||||
|
||||
<bean id="PlannerHostReservationDaoImpl" class="com.cloud.deploy.dao.PlannerHostReservationDaoImpl">
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
11
core/src/com/cloud/agent/api/PerformanceMonitorAnswer.java
Normal file
11
core/src/com/cloud/agent/api/PerformanceMonitorAnswer.java
Normal file
@ -0,0 +1,11 @@
|
||||
package com.cloud.agent.api;
|
||||
|
||||
public class PerformanceMonitorAnswer extends Answer {
|
||||
public PerformanceMonitorAnswer() {
|
||||
}
|
||||
|
||||
public PerformanceMonitorAnswer(PerformanceMonitorCommand cmd,
|
||||
boolean result, String details) {
|
||||
super(cmd, result, details);
|
||||
}
|
||||
}
|
||||
30
core/src/com/cloud/agent/api/PerformanceMonitorCommand.java
Normal file
30
core/src/com/cloud/agent/api/PerformanceMonitorCommand.java
Normal file
@ -0,0 +1,30 @@
|
||||
package com.cloud.agent.api;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PerformanceMonitorCommand extends Command {
|
||||
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
|
||||
public PerformanceMonitorCommand() {
|
||||
}
|
||||
|
||||
public PerformanceMonitorCommand(Map<String, String> params, int wait) {
|
||||
setWait(wait);
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Map<String, String> getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setParams(Map<String, String> params) {
|
||||
this.params = params;
|
||||
}
|
||||
}
|
||||
@ -27,6 +27,8 @@ import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
@ -57,6 +59,10 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity {
|
||||
@Column(name = "quiet_time", updatable = true, nullable = false)
|
||||
private int quietTime;
|
||||
|
||||
@Column(name = "last_quiet_time", updatable = true)
|
||||
@Temporal(value = TemporalType.TIMESTAMP)
|
||||
private Date lastQuiteTime;
|
||||
|
||||
@Column(name = "action", updatable = false, nullable = false)
|
||||
private String action;
|
||||
|
||||
@ -69,12 +75,14 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity {
|
||||
public AutoScalePolicyVO() {
|
||||
}
|
||||
|
||||
public AutoScalePolicyVO(long domainId, long accountId, int duration, int quietTime, String action) {
|
||||
public AutoScalePolicyVO(long domainId, long accountId, int duration,
|
||||
int quietTime, Date lastQuiteTime, String action) {
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.domainId = domainId;
|
||||
this.accountId = accountId;
|
||||
this.duration = duration;
|
||||
this.quietTime = quietTime;
|
||||
this.lastQuiteTime = lastQuiteTime;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
@ -113,6 +121,11 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity {
|
||||
return quietTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getLastQuiteTime() {
|
||||
return lastQuiteTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAction() {
|
||||
return action;
|
||||
@ -133,4 +146,8 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity {
|
||||
public void setQuietTime(Integer quietTime) {
|
||||
this.quietTime = quietTime;
|
||||
}
|
||||
|
||||
public void setLastQuiteTime(Date lastQuiteTime) {
|
||||
this.lastQuiteTime = lastQuiteTime;
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,6 +27,8 @@ import javax.persistence.Id;
|
||||
import javax.persistence.Inheritance;
|
||||
import javax.persistence.InheritanceType;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
@ -69,6 +71,10 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity {
|
||||
@Column(name = "interval")
|
||||
private int interval;
|
||||
|
||||
@Column(name = "last_interval", updatable = true)
|
||||
@Temporal(value = TemporalType.TIMESTAMP)
|
||||
private Date lastInterval;
|
||||
|
||||
@Column(name = "profile_id")
|
||||
private long profileId;
|
||||
|
||||
@ -84,8 +90,10 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity {
|
||||
public AutoScaleVmGroupVO() {
|
||||
}
|
||||
|
||||
public AutoScaleVmGroupVO(long lbRuleId, long zoneId, long domainId, long accountId, int minMembers, int maxMembers, int memberPort, int interval, long profileId,
|
||||
String state) {
|
||||
public AutoScaleVmGroupVO(long lbRuleId, long zoneId, long domainId,
|
||||
long accountId, int minMembers, int maxMembers, int memberPort,
|
||||
int interval, Date lastInterval, long profileId, String state) {
|
||||
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.loadBalancerId = lbRuleId;
|
||||
this.minMembers = minMembers;
|
||||
@ -97,6 +105,7 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity {
|
||||
this.zoneId = zoneId;
|
||||
this.state = state;
|
||||
this.interval = interval;
|
||||
this.lastInterval = lastInterval;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -148,6 +157,11 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity {
|
||||
return interval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getLastInterval() {
|
||||
return lastInterval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getProfileId() {
|
||||
return profileId;
|
||||
@ -182,6 +196,10 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity {
|
||||
this.interval = interval;
|
||||
}
|
||||
|
||||
public void setLastInterval(Date lastInterval) {
|
||||
this.lastInterval = lastInterval;
|
||||
}
|
||||
|
||||
public void setLoadBalancerId(Long loadBalancerId) {
|
||||
this.loadBalancerId = loadBalancerId;
|
||||
}
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
package com.cloud.network.as;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
@Entity
|
||||
@Table(name = ("autoscale_vmgroup_vm_map"))
|
||||
public class AutoScaleVmGroupVmMapVO implements InternalIdentity {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id")
|
||||
private long id;
|
||||
|
||||
@Column(name = "vmgroup_id")
|
||||
private long vmGroupId;
|
||||
|
||||
@Column(name = "instance_id")
|
||||
private long instanceId;
|
||||
|
||||
public AutoScaleVmGroupVmMapVO() {
|
||||
}
|
||||
|
||||
public AutoScaleVmGroupVmMapVO(long vmGroupId, long instanceId) {
|
||||
this.vmGroupId = vmGroupId;
|
||||
this.instanceId = instanceId;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public long getVmGroupId() {
|
||||
return vmGroupId;
|
||||
}
|
||||
|
||||
public long getInstanceId() {
|
||||
return instanceId;
|
||||
}
|
||||
|
||||
}
|
||||
@ -26,5 +26,7 @@ public interface AutoScalePolicyConditionMapDao extends GenericDao<AutoScalePoli
|
||||
|
||||
public boolean isConditionInUse(Long conditionId);
|
||||
|
||||
boolean removeByAutoScalePolicyId(long id);
|
||||
boolean removeByAutoScalePolicyId(long id);
|
||||
|
||||
List<AutoScalePolicyConditionMapVO> findByPolicyId(long id);
|
||||
}
|
||||
|
||||
@ -56,6 +56,14 @@ public class AutoScalePolicyConditionMapDaoImpl extends GenericDaoBase<AutoScale
|
||||
public boolean removeByAutoScalePolicyId(long policyId) {
|
||||
SearchCriteria<AutoScalePolicyConditionMapVO> sc = createSearchCriteria();
|
||||
sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId);
|
||||
return expunge(sc) > 0;
|
||||
}
|
||||
return expunge(sc) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AutoScalePolicyConditionMapVO> findByPolicyId(long policyId) {
|
||||
SearchCriteria<AutoScalePolicyConditionMapVO> sc = createSearchCriteria();
|
||||
sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId);
|
||||
|
||||
return listBy(sc);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package com.cloud.network.as.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.network.as.AutoScaleVmGroupVmMapVO;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
public interface AutoScaleVmGroupVmMapDao extends GenericDao<AutoScaleVmGroupVmMapVO, Long> {
|
||||
public Integer countByGroup(long vmGroupId);
|
||||
|
||||
public List<AutoScaleVmGroupVmMapVO> listByGroup(long vmGroupId);
|
||||
|
||||
public int remove(long vmGroupId, long vmId);
|
||||
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
package com.cloud.network.as.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.ejb.Local;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.cloud.network.as.AutoScaleVmGroupVmMapVO;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
|
||||
@Component
|
||||
@Local(value={AutoScaleVmGroupVmMapDao.class})
|
||||
public class AutoScaleVmGroupVmMapDaoImpl extends GenericDaoBase<AutoScaleVmGroupVmMapVO, Long> implements AutoScaleVmGroupVmMapDao {
|
||||
|
||||
@Override
|
||||
public Integer countByGroup(long vmGroupId) {
|
||||
|
||||
SearchCriteria<AutoScaleVmGroupVmMapVO> sc = createSearchCriteria();
|
||||
sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId);
|
||||
return getCount(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AutoScaleVmGroupVmMapVO> listByGroup(long vmGroupId) {
|
||||
SearchCriteria<AutoScaleVmGroupVmMapVO> sc = createSearchCriteria();
|
||||
sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId);
|
||||
return listBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int remove(long vmGroupId, long vmId) {
|
||||
SearchCriteria<AutoScaleVmGroupVmMapVO> sc = createSearchCriteria();
|
||||
sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId);
|
||||
sc.addAnd("vmId", SearchCriteria.Op.EQ, vmId);
|
||||
return remove(sc);
|
||||
}
|
||||
|
||||
}
|
||||
@ -168,6 +168,9 @@ import com.cloud.agent.api.OvsSetTagAndFlowAnswer;
|
||||
import com.cloud.agent.api.OvsFetchInterfaceAnswer;
|
||||
import com.cloud.agent.api.OvsSetTagAndFlowCommand;
|
||||
import com.cloud.agent.api.OvsFetchInterfaceCommand;
|
||||
import com.cloud.agent.api.PerformanceMonitorAnswer;
|
||||
import com.cloud.agent.api.PerformanceMonitorCommand;
|
||||
|
||||
import com.cloud.agent.api.PingCommand;
|
||||
import com.cloud.agent.api.PingRoutingCommand;
|
||||
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
|
||||
@ -304,7 +307,6 @@ import com.cloud.vm.snapshot.VMSnapshot;
|
||||
|
||||
import com.cloud.utils.ssh.SSHCmdHelper;
|
||||
|
||||
|
||||
/**
|
||||
* CitrixResourceBase encapsulates the calls to the XenServer Xapi process
|
||||
* to perform the required functionalities for CloudStack.
|
||||
@ -657,11 +659,88 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
|
||||
return execute((PvlanSetupCommand)cmd);
|
||||
} else if (clazz == SetMonitorServiceCommand.class) {
|
||||
return execute((SetMonitorServiceCommand)cmd);
|
||||
} else if (clazz == PerformanceMonitorCommand.class) {
|
||||
return execute((PerformanceMonitorCommand) cmd);
|
||||
} else {
|
||||
return Answer.createUnsupportedCommandAnswer(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
private Answer execute(PerformanceMonitorCommand cmd) {
|
||||
Connection conn = getConnection();
|
||||
String perfMon = getPerfMon(conn, cmd.getParams(), cmd.getWait());
|
||||
if (perfMon == null) {
|
||||
return new PerformanceMonitorAnswer(cmd, false, perfMon);
|
||||
} else
|
||||
return new PerformanceMonitorAnswer(cmd, true, perfMon);
|
||||
}
|
||||
|
||||
private String getPerfMon(Connection conn, Map<String, String> params,
|
||||
int wait) {
|
||||
String result = null;
|
||||
try {
|
||||
result = callHostPluginAsync(conn, "vmopspremium", "asmonitor", 60,
|
||||
params);
|
||||
if (result != null)
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
s_logger.error("Can not get performance monitor for AS due to ", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected String callHostPluginAsync(Connection conn, String plugin,
|
||||
String cmd, int wait, Map<String, String> params) {
|
||||
int timeout = wait * 1000;
|
||||
Map<String, String> args = new HashMap<String, String>();
|
||||
Task task = null;
|
||||
try {
|
||||
for (String key : params.keySet()) {
|
||||
args.put(key, params.get(key));
|
||||
}
|
||||
if (s_logger.isTraceEnabled()) {
|
||||
s_logger.trace("callHostPlugin executing for command " + cmd
|
||||
+ " with " + getArgsString(args));
|
||||
}
|
||||
Host host = Host.getByUuid(conn, _host.uuid);
|
||||
task = host.callPluginAsync(conn, plugin, cmd, args);
|
||||
// poll every 1 seconds
|
||||
waitForTask(conn, task, 1000, timeout);
|
||||
checkForSuccess(conn, task);
|
||||
String result = task.getResult(conn);
|
||||
if (s_logger.isTraceEnabled()) {
|
||||
s_logger.trace("callHostPlugin Result: " + result);
|
||||
}
|
||||
return result.replace("<value>", "").replace("</value>", "")
|
||||
.replace("\n", "");
|
||||
} catch (Types.HandleInvalid e) {
|
||||
s_logger.warn("callHostPlugin failed for cmd: " + cmd
|
||||
+ " with args " + getArgsString(args)
|
||||
+ " due to HandleInvalid clazz:" + e.clazz + ", handle:"
|
||||
+ e.handle);
|
||||
} catch (XenAPIException e) {
|
||||
s_logger.warn(
|
||||
"callHostPlugin failed for cmd: " + cmd + " with args "
|
||||
+ getArgsString(args) + " due to " + e.toString(),
|
||||
e);
|
||||
} catch (XmlRpcException e) {
|
||||
s_logger.warn(
|
||||
"callHostPlugin failed for cmd: " + cmd + " with args "
|
||||
+ getArgsString(args) + " due to " + e.getMessage(),
|
||||
e);
|
||||
} finally {
|
||||
if (task != null) {
|
||||
try {
|
||||
task.destroy(conn);
|
||||
} catch (Exception e1) {
|
||||
s_logger.warn("unable to destroy task(" + task.toString()
|
||||
+ ") on host(" + _host.uuid + ") due to ", e1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void scaleVM(Connection conn, VM vm, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException {
|
||||
|
||||
Long staticMemoryMax = vm.getMemoryStaticMax(conn);
|
||||
|
||||
245
scripts/vm/hypervisor/xenserver/perfmon.py
Normal file
245
scripts/vm/hypervisor/xenserver/perfmon.py
Normal file
@ -0,0 +1,245 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import pprint
|
||||
import XenAPI
|
||||
import urllib
|
||||
from xml.dom import minidom
|
||||
import time
|
||||
|
||||
|
||||
# Per VM dictionary (used by RRDUpdates to look up column numbers by variable names)
|
||||
class VMReport(dict):
|
||||
"""Used internally by RRDUpdates"""
|
||||
def __init__(self, uuid):
|
||||
self.uuid = uuid
|
||||
super(dict, self).__init__()
|
||||
|
||||
|
||||
# Per Host dictionary (used by RRDUpdates to look up column numbers by variable names)
|
||||
class HostReport(dict):
|
||||
"""Used internally by RRDUpdates"""
|
||||
def __init__(self, uuid):
|
||||
self.uuid = uuid
|
||||
super(dict, self).__init__()
|
||||
|
||||
|
||||
class PerfMonException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class XmlConfigException(PerfMonException):
|
||||
pass
|
||||
|
||||
|
||||
class UsageException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class RRDUpdates:
|
||||
""" Object used to get and parse the output the http://localhost/rrd_udpates?...
|
||||
"""
|
||||
def __init__(self):
|
||||
# params are what get passed to the CGI executable in the URL
|
||||
self.params = dict()
|
||||
self.params['start'] = int(time.time()) - 1000 # For demo purposes!
|
||||
self.params['host'] = 'false' # include data for host (as well as for VMs)
|
||||
self.params['cf'] = 'AVERAGE' # consolidation function, each sample averages 12 from the 5 second RRD
|
||||
self.params['interval'] = '60'
|
||||
|
||||
def get_nrows(self):
|
||||
return self.rows
|
||||
|
||||
def get_vm_list(self):
|
||||
return self.vm_reports.keys()
|
||||
|
||||
def get_vm_param_list(self, uuid):
|
||||
report = self.vm_reports[uuid]
|
||||
if not report:
|
||||
return []
|
||||
return report.keys()
|
||||
|
||||
def get_total_cpu_core(self, uuid):
|
||||
report = self.vm_reports[uuid]
|
||||
if not report:
|
||||
return 0
|
||||
else:
|
||||
param_keys = report.keys()
|
||||
result = 0
|
||||
for param in param_keys:
|
||||
if "cpu" in param:
|
||||
result += 1
|
||||
return result
|
||||
|
||||
def get_vm_data(self, uuid, param, row):
|
||||
#pp = pprint.PrettyPrinter(indent=4)
|
||||
#pp.pprint(self.vm_reports)
|
||||
report = self.vm_reports[uuid]
|
||||
col = report[param]
|
||||
return self.__lookup_data(col, row)
|
||||
|
||||
def get_host_uuid(self):
|
||||
report = self.host_report
|
||||
if not report:
|
||||
return None
|
||||
return report.uuid
|
||||
|
||||
def get_host_param_list(self):
|
||||
report = self.host_report
|
||||
if not report:
|
||||
return []
|
||||
return report.keys()
|
||||
|
||||
def get_host_data(self, param, row):
|
||||
report = self.host_report
|
||||
col = report[param]
|
||||
return self.__lookup_data(col, row)
|
||||
|
||||
def get_row_time(self, row):
|
||||
return self.__lookup_timestamp(row)
|
||||
|
||||
# extract float from value (<v>) node by col,row
|
||||
def __lookup_data(self, col, row):
|
||||
# Note: the <rows> nodes are in reverse chronological order, and comprise
|
||||
# a timestamp <t> node, followed by self.columns data <v> nodes
|
||||
node = self.data_node.childNodes[self.rows - 1 - row].childNodes[col + 1]
|
||||
return float(node.firstChild.toxml()) # node.firstChild should have nodeType TEXT_NODE
|
||||
|
||||
# extract int from value (<t>) node by row
|
||||
def __lookup_timestamp(self, row):
|
||||
# Note: the <rows> nodes are in reverse chronological order, and comprise
|
||||
# a timestamp <t> node, followed by self.columns data <v> nodes
|
||||
node = self.data_node.childNodes[self.rows - 1 - row].childNodes[0]
|
||||
return int(node.firstChild.toxml()) # node.firstChild should have nodeType TEXT_NODE
|
||||
|
||||
def refresh(self, login, starttime, session, override_params):
|
||||
self.params['start'] = starttime
|
||||
params = override_params
|
||||
params['session_id'] = session
|
||||
params.update(self.params)
|
||||
paramstr = "&".join(["%s=%s" % (k, params[k]) for k in params])
|
||||
# this is better than urllib.urlopen() as it raises an Exception on http 401 'Unauthorised' error
|
||||
# rather than drop into interactive mode
|
||||
for host in login.host.get_all():
|
||||
#print "http://" + str(login.host.get_address(host)) + "/rrd_updates?%s" % paramstr
|
||||
sock = urllib.URLopener().open("http://" + str(login.host.get_address(host)) + "/rrd_updates?%s" % paramstr)
|
||||
xmlsource = sock.read()
|
||||
sock.close()
|
||||
xmldoc = minidom.parseString(xmlsource)
|
||||
self.__parse_xmldoc(xmldoc)
|
||||
# Update the time used on the next run
|
||||
self.params['start'] = self.end_time + 1 # avoid retrieving same data twice
|
||||
|
||||
def __parse_xmldoc(self, xmldoc):
|
||||
# The 1st node contains meta data (description of the data)
|
||||
# The 2nd node contains the data
|
||||
self.meta_node = xmldoc.firstChild.childNodes[0]
|
||||
self.data_node = xmldoc.firstChild.childNodes[1]
|
||||
|
||||
def lookup_metadata_bytag(name):
|
||||
return int(self.meta_node.getElementsByTagName(name)[0].firstChild.toxml())
|
||||
# rows = number of samples per variable
|
||||
# columns = number of variables
|
||||
self.rows = lookup_metadata_bytag('rows')
|
||||
self.columns = lookup_metadata_bytag('columns')
|
||||
# These indicate the period covered by the data
|
||||
self.start_time = lookup_metadata_bytag('start')
|
||||
self.step_time = lookup_metadata_bytag('step')
|
||||
self.end_time = lookup_metadata_bytag('end')
|
||||
# the <legend> Node describes the variables
|
||||
self.legend = self.meta_node.getElementsByTagName('legend')[0]
|
||||
# vm_reports matches uuid to per VM report
|
||||
if not hasattr(self,'vm_reports'):
|
||||
self.vm_reports = {}
|
||||
# There is just one host_report and its uuid should not change!
|
||||
self.host_report = None
|
||||
# Handle each column. (I.e. each variable)
|
||||
for col in range(self.columns):
|
||||
self.__handle_col(col)
|
||||
|
||||
def __handle_col(self, col):
|
||||
# work out how to interpret col from the legend
|
||||
col_meta_data = self.legend.childNodes[col].firstChild.toxml()
|
||||
# vm_or_host will be 'vm' or 'host'. Note that the Control domain counts as a VM!
|
||||
(cf, vm_or_host, uuid, param) = col_meta_data.split(':')
|
||||
if vm_or_host == 'vm':
|
||||
# Create a report for this VM if it doesn't exist
|
||||
if not uuid in self.vm_reports:
|
||||
self.vm_reports[uuid] = VMReport(uuid)
|
||||
# Update the VMReport with the col data and meta data
|
||||
vm_report = self.vm_reports[uuid]
|
||||
vm_report[param] = col
|
||||
elif vm_or_host == 'host':
|
||||
# Create a report for the host if it doesn't exist
|
||||
if not self.host_report:
|
||||
self.host_report = HostReport(uuid)
|
||||
elif self.host_report.uuid != uuid:
|
||||
raise PerfMonException("Host UUID changed: (was %s, is %s)" % (self.host_report.uuid, uuid))
|
||||
# Update the HostReport with the col data and meta data
|
||||
self.host_report[param] = col
|
||||
else:
|
||||
raise PerfMonException("Invalid string in <legend>: %s" % col_meta_data)
|
||||
|
||||
|
||||
def get_vm_group_perfmon(args={}):
|
||||
#Release code
|
||||
login = XenAPI.xapi_local()
|
||||
login.login_with_password("","")
|
||||
average_cpu = 0
|
||||
average_memory = 0
|
||||
result = ""
|
||||
|
||||
#test code
|
||||
#login = XenAPI.Session(url)
|
||||
#login.login_with_password(username, password)
|
||||
total_vm = int(args['total_vm'])
|
||||
total_counter = int(args['total_counter'])
|
||||
now = int(time.time()) / 60
|
||||
|
||||
# Get pool's info of this host
|
||||
#pool = login.xenapi.pool.get_all()[0]
|
||||
# Get master node's address of pool
|
||||
#master = login.xenapi.pool.get_master(pool)
|
||||
#master_address = login.xenapi.host.get_address(master)
|
||||
session = login._session
|
||||
|
||||
max_duration = 0
|
||||
for counter_count in xrange(1, total_counter + 1):
|
||||
duration = int(args['duration' + str(counter_count)])
|
||||
if duration > max_duration:
|
||||
max_duration = duration
|
||||
|
||||
rrd_updates = RRDUpdates()
|
||||
rrd_updates.refresh(login.xenapi, now * 60 - max_duration, session, {})
|
||||
|
||||
#for uuid in rrd_updates.get_vm_list():
|
||||
for vm_count in xrange(1, total_vm + 1):
|
||||
vm_uuid = args['vmuuid' + str(vm_count)]
|
||||
#print "Got values for VM: " + str(vm_count) + " " + vm_uuid
|
||||
for counter_count in xrange(1, total_counter + 1):
|
||||
counter = args['counter' + str(counter_count)]
|
||||
total_row = rrd_updates.get_nrows()
|
||||
duration = int(args['duration' + str(counter_count)]) / 60
|
||||
duration_diff = total_row - duration
|
||||
#print "param: " + counter
|
||||
if counter == "cpu":
|
||||
total_cpu = rrd_updates.get_total_cpu_core(vm_uuid)
|
||||
for row in xrange(duration_diff, total_row):
|
||||
for cpu in xrange(0, total_cpu):
|
||||
average_cpu += rrd_updates.get_vm_data(vm_uuid, "cpu" + str(cpu), row)
|
||||
average_cpu /= (duration * total_cpu)
|
||||
#print "Average CPU: " + str(average_cpu)
|
||||
if result == "":
|
||||
result += str(vm_count) + '.' + str(counter_count) + ':' + str(average_cpu)
|
||||
else:
|
||||
result += ',' + str(vm_count) + '.' + str(counter_count) + ':' + str(average_cpu)
|
||||
elif counter == "memory":
|
||||
for row in xrange(duration_diff, total_row):
|
||||
average_memory += rrd_updates.get_vm_data(vm_uuid, "memory_target", row) / 1048576 - rrd_updates.get_vm_data(vm_uuid, "memory_internal_free", row) / 1024
|
||||
average_memory /= duration
|
||||
#print "Average Memory: " + str(average_memory)
|
||||
if result == "":
|
||||
result += str(vm_count) + '.' + str(counter_count) + ':' + str(average_memory)
|
||||
else:
|
||||
result += ',' + str(vm_count) + '.' + str(counter_count) + ':' + str(average_memory)
|
||||
return result
|
||||
|
||||
@ -28,6 +28,7 @@ if os.path.exists("/usr/lib/xcp/sm"):
|
||||
sys.path.extend(["/usr/lib/xcp/sm/", "/usr/local/sbin/", "/sbin/"])
|
||||
import util
|
||||
import socket
|
||||
import perfmon
|
||||
|
||||
def echo(fn):
|
||||
def wrapped(*v, **k):
|
||||
@ -142,6 +143,11 @@ def heartbeat(session, args):
|
||||
txt='fail'
|
||||
return txt
|
||||
|
||||
if __name__ == "__main__":
|
||||
XenAPIPlugin.dispatch({"forceShutdownVM":forceShutdownVM, "upgrade_snapshot":upgrade_snapshot, "create_privatetemplate_from_snapshot":create_privatetemplate_from_snapshot, "copy_vhd_to_secondarystorage":copy_vhd_to_secondarystorage, "copy_vhd_from_secondarystorage":copy_vhd_from_secondarystorage, "setup_heartbeat_sr":setup_heartbeat_sr, "setup_heartbeat_file":setup_heartbeat_file, "check_heartbeat":check_heartbeat, "heartbeat": heartbeat})
|
||||
@echo
|
||||
def asmonitor(session, args):
|
||||
result = perfmon.get_vm_group_perfmon(args)
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
XenAPIPlugin.dispatch({"forceShutdownVM":forceShutdownVM, "upgrade_snapshot":upgrade_snapshot, "create_privatetemplate_from_snapshot":create_privatetemplate_from_snapshot, "copy_vhd_to_secondarystorage":copy_vhd_to_secondarystorage, "copy_vhd_from_secondarystorage":copy_vhd_from_secondarystorage, "setup_heartbeat_sr":setup_heartbeat_sr, "setup_heartbeat_file":setup_heartbeat_file, "check_heartbeat":check_heartbeat, "heartbeat": heartbeat, "asmonitor": asmonitor})
|
||||
|
||||
|
||||
@ -19,4 +19,8 @@ package com.cloud.network.as;
|
||||
public interface AutoScaleManager extends AutoScaleService {
|
||||
|
||||
void cleanUpAutoScaleResources(Long accountId);
|
||||
|
||||
void doScaleUp(long groupId, Integer numVm);
|
||||
|
||||
void doScaleDown(long groupId);
|
||||
}
|
||||
|
||||
@ -17,22 +17,24 @@
|
||||
package com.cloud.network.as;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import org.apache.cloudstack.acl.ControlledEntity;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.ApiErrorCode;
|
||||
import org.apache.cloudstack.api.BaseCmd.HTTPMethod;
|
||||
import org.apache.cloudstack.api.BaseListAccountResourcesCmd;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd;
|
||||
import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd;
|
||||
import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd;
|
||||
@ -49,42 +51,55 @@ import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfile
|
||||
import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.ApiDispatcher;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.configuration.ConfigurationManager;
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.event.ActionEvent;
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.InsufficientServerCapacityException;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceInUseException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.network.Network.Capability;
|
||||
import com.cloud.network.Network.IpAddresses;
|
||||
import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterParam;
|
||||
import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao;
|
||||
import com.cloud.network.as.dao.AutoScalePolicyDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmGroupDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmProfileDao;
|
||||
import com.cloud.network.as.dao.ConditionDao;
|
||||
import com.cloud.network.as.dao.CounterDao;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.LoadBalancerDao;
|
||||
import com.cloud.network.dao.LoadBalancerVMMapDao;
|
||||
import com.cloud.network.dao.LoadBalancerVMMapVO;
|
||||
import com.cloud.network.dao.LoadBalancerVO;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.lb.LoadBalancingRulesService;
|
||||
import com.cloud.offering.ServiceOffering;
|
||||
import com.cloud.projects.Project.ListProjectResourcesCriteria;
|
||||
import com.cloud.template.TemplateManager;
|
||||
import com.cloud.template.VirtualMachineTemplate;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.user.AccountService;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
import com.cloud.user.dao.UserDao;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.Ternary;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
@ -100,10 +115,15 @@ import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.TransactionCallback;
|
||||
import com.cloud.utils.db.TransactionStatus;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
import com.cloud.vm.UserVmManager;
|
||||
import com.cloud.vm.UserVmService;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
@Local(value = {AutoScaleService.class, AutoScaleManager.class})
|
||||
public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScaleManager, AutoScaleService {
|
||||
private static final Logger s_logger = Logger.getLogger(AutoScaleManagerImpl.class);
|
||||
private ScheduledExecutorService _executor = null;
|
||||
|
||||
@Inject
|
||||
EntityManager _entityMgr;
|
||||
@ -138,6 +158,8 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
|
||||
@Inject
|
||||
AutoScaleVmGroupPolicyMapDao _autoScaleVmGroupPolicyMapDao;
|
||||
@Inject
|
||||
AutoScaleVmGroupVmMapDao _autoScaleVmGroupVmMapDao;
|
||||
@Inject
|
||||
DataCenterDao _dcDao = null;
|
||||
@Inject
|
||||
UserDao _userDao;
|
||||
@ -145,6 +167,16 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
|
||||
ConfigurationDao _configDao;
|
||||
@Inject
|
||||
IPAddressDao _ipAddressDao;
|
||||
@Inject
|
||||
AccountService _accountService;
|
||||
@Inject
|
||||
UserVmService _userVmService;
|
||||
@Inject
|
||||
UserVmManager _userVmManager;
|
||||
@Inject
|
||||
LoadBalancerVMMapDao _LbVmMapDao;
|
||||
@Inject
|
||||
LoadBalancingRulesService _LoadBalancingRulesService;
|
||||
|
||||
public List<AutoScaleCounter> getSupportedAutoScaleCounters(long networkid) {
|
||||
String capability = _lbRulesMgr.getLBCapability(networkid, Capability.AutoScaleCounters.getName());
|
||||
@ -501,7 +533,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
|
||||
throw new InvalidParameterValueException("action is invalid, only 'scaleup' and 'scaledown' is supported");
|
||||
}
|
||||
|
||||
AutoScalePolicyVO policyVO = new AutoScalePolicyVO(cmd.getDomainId(), cmd.getAccountId(), duration, quietTime, action);
|
||||
AutoScalePolicyVO policyVO = new AutoScalePolicyVO(cmd.getDomainId(), cmd.getAccountId(), duration, quietTime, null, action);
|
||||
|
||||
policyVO = checkValidityAndPersist(policyVO, cmd.getConditionIds());
|
||||
s_logger.info("Successfully created AutoScale Policy with Id: " + policyVO.getId());
|
||||
@ -705,9 +737,8 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
|
||||
"there are Vms already bound to the specified LoadBalancing Rule. User bound Vms and AutoScaled Vm Group cannot co-exist on a Load Balancing Rule");
|
||||
}
|
||||
|
||||
AutoScaleVmGroupVO vmGroupVO =
|
||||
new AutoScaleVmGroupVO(cmd.getLbRuleId(), zoneId, loadBalancer.getDomainId(), loadBalancer.getAccountId(), minMembers, maxMembers,
|
||||
loadBalancer.getDefaultPortStart(), interval, cmd.getProfileId(), AutoScaleVmGroup.State_New);
|
||||
AutoScaleVmGroupVO vmGroupVO = new AutoScaleVmGroupVO(cmd.getLbRuleId(), zoneId, loadBalancer.getDomainId(), loadBalancer.getAccountId(), minMembers, maxMembers,
|
||||
loadBalancer.getDefaultPortStart(), interval, null, cmd.getProfileId(), AutoScaleVmGroup.State_New);
|
||||
|
||||
vmGroupVO = checkValidityAndPersist(vmGroupVO, cmd.getScaleUpPolicyIds(), cmd.getScaleDownPolicyIds());
|
||||
s_logger.info("Successfully created Autoscale Vm Group with Id: " + vmGroupVO.getId());
|
||||
@ -1169,4 +1200,264 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale
|
||||
s_logger.debug("Deleted " + count + " Conditions for account Id: " + accountId);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkConditionUp(AutoScaleVmGroupVO asGroup, Integer numVm) {
|
||||
// check maximum
|
||||
Integer currentVM = _autoScaleVmGroupVmMapDao.countByGroup(asGroup.getId());
|
||||
Integer maxVm = asGroup.getMaxMembers();
|
||||
if (currentVM + numVm > maxVm) {
|
||||
s_logger.warn("number of VM will greater than the maximum in this group if scaling up, so do nothing more");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean checkConditionDown(AutoScaleVmGroupVO asGroup) {
|
||||
Integer currentVM = _autoScaleVmGroupVmMapDao.countByGroup(asGroup.getId());
|
||||
Integer minVm = asGroup.getMinMembers();
|
||||
if (currentVM - 1 < minVm) {
|
||||
s_logger.warn("number of VM will less than the minimum in this group if scaling down, so do nothing more");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private long createNewVM(AutoScaleVmGroupVO asGroup) {
|
||||
AutoScaleVmProfileVO profileVo = _autoScaleVmProfileDao.findById(asGroup.getProfileId());
|
||||
long templateId = profileVo.getTemplateId();
|
||||
long serviceOfferingId = profileVo.getServiceOfferingId();
|
||||
if (templateId == -1) {
|
||||
return -1;
|
||||
}
|
||||
// create new VM into DB
|
||||
try {
|
||||
//Verify that all objects exist before passing them to the service
|
||||
Account owner = _accountService.getActiveAccountById(profileVo.getAccountId());
|
||||
|
||||
DataCenter zone = _entityMgr.findById(DataCenter.class, profileVo.getZoneId());
|
||||
if (zone == null) {
|
||||
throw new InvalidParameterValueException("Unable to find zone by id=" + profileVo.getZoneId());
|
||||
}
|
||||
|
||||
ServiceOffering serviceOffering = _entityMgr.findById(ServiceOffering.class, serviceOfferingId);
|
||||
if (serviceOffering == null) {
|
||||
throw new InvalidParameterValueException("Unable to find service offering: " + serviceOfferingId);
|
||||
}
|
||||
|
||||
VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, templateId);
|
||||
// Make sure a valid template ID was specified
|
||||
if (template == null) {
|
||||
throw new InvalidParameterValueException("Unable to use template " + templateId);
|
||||
}
|
||||
|
||||
if (!zone.isLocalStorageEnabled()) {
|
||||
if (serviceOffering.getUseLocalStorage()) {
|
||||
throw new InvalidParameterValueException("Zone is not configured to use local storage but service offering " + serviceOffering.getName() + " uses it");
|
||||
}
|
||||
}
|
||||
|
||||
UserVm vm = null;
|
||||
IpAddresses addrs = new IpAddresses(null, null);
|
||||
if (zone.getNetworkType() == NetworkType.Basic) {
|
||||
vm = _userVmService.createBasicSecurityGroupVirtualMachine(zone, serviceOffering, template, null, owner, "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(),
|
||||
"autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), null, null, null, HypervisorType.XenServer, HTTPMethod.GET, null, null, null, null, true, null, null);
|
||||
} else {
|
||||
if (zone.isSecurityGroupEnabled()) {
|
||||
vm = _userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, template, null, null,
|
||||
owner, "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), null, null, null, HypervisorType.XenServer, HTTPMethod.GET, null, null, null, null, true, null, null);
|
||||
|
||||
} else {
|
||||
vm = _userVmService.createAdvancedVirtualMachine(zone, serviceOffering, template, null, owner, "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(),
|
||||
null, null, null, HypervisorType.XenServer, HTTPMethod.GET, null, null, null, addrs, true, null, null);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (vm != null) {
|
||||
return vm.getId();
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} catch (InsufficientCapacityException ex) {
|
||||
s_logger.info(ex);
|
||||
s_logger.trace(ex.getMessage(), ex);
|
||||
throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage());
|
||||
} catch (ResourceUnavailableException ex) {
|
||||
s_logger.warn("Exception: ", ex);
|
||||
throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
|
||||
} catch (ConcurrentOperationException ex) {
|
||||
s_logger.warn("Exception: ", ex);
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
|
||||
} catch (ResourceAllocationException ex) {
|
||||
s_logger.warn("Exception: ", ex);
|
||||
throw new ServerApiException(ApiErrorCode.RESOURCE_ALLOCATION_ERROR, ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private String getCurrentTimeStampString(){
|
||||
Date current = new Date();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||
|
||||
return sdf.format(current);
|
||||
}
|
||||
|
||||
private boolean startNewVM(long vmId) {
|
||||
try {
|
||||
CallContext.current().setEventDetails("Vm Id: "+vmId);
|
||||
_userVmManager.startVirtualMachine(vmId, null, null);
|
||||
} catch (ResourceUnavailableException ex) {
|
||||
s_logger.warn("Exception: ", ex);
|
||||
throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage());
|
||||
} catch (ConcurrentOperationException ex) {
|
||||
s_logger.warn("Exception: ", ex);
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
|
||||
} catch (InsufficientCapacityException ex) {
|
||||
StringBuilder message = new StringBuilder(ex.getMessage());
|
||||
if (ex instanceof InsufficientServerCapacityException) {
|
||||
if(((InsufficientServerCapacityException)ex).isAffinityApplied()){
|
||||
message.append(", Please check the affinity groups provided, there may not be sufficient capacity to follow them");
|
||||
}
|
||||
}
|
||||
s_logger.info(ex);
|
||||
s_logger.info(message.toString(), ex);
|
||||
throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, message.toString());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean assignLBruleToNewVm(long vmId, AutoScaleVmGroupVO asGroup) {
|
||||
List<Long> lstVmId = new ArrayList<Long>();
|
||||
long lbId = asGroup.getLoadBalancerId();
|
||||
|
||||
List<LoadBalancerVMMapVO> LbVmMapVos = _LbVmMapDao.listByLoadBalancerId(lbId);
|
||||
if ((LbVmMapVos != null) && (LbVmMapVos.size() > 0)) {
|
||||
for (LoadBalancerVMMapVO LbVmMapVo : LbVmMapVos) {
|
||||
long instanceId = LbVmMapVo.getInstanceId();
|
||||
if (instanceId == vmId) {
|
||||
s_logger.warn("the new VM is already mapped to LB rule. What's wrong?");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
lstVmId.add(new Long(vmId));
|
||||
return _LoadBalancingRulesService.assignToLoadBalancer(lbId, lstVmId);
|
||||
|
||||
}
|
||||
|
||||
private long removeLBrule(AutoScaleVmGroupVO asGroup) {
|
||||
long lbId = asGroup.getLoadBalancerId();
|
||||
long instanceId = -1;
|
||||
List<LoadBalancerVMMapVO> LbVmMapVos = _LbVmMapDao.listByLoadBalancerId(lbId);
|
||||
if ((LbVmMapVos != null) && (LbVmMapVos.size() > 0)) {
|
||||
for (LoadBalancerVMMapVO LbVmMapVo : LbVmMapVos) {
|
||||
instanceId = LbVmMapVo.getInstanceId();
|
||||
}
|
||||
}
|
||||
// take last VM out of the list
|
||||
List<Long> lstVmId = new ArrayList<Long>();
|
||||
if (instanceId != -1)
|
||||
lstVmId.add(instanceId);
|
||||
if (_LoadBalancingRulesService.removeFromLoadBalancer(lbId, lstVmId))
|
||||
return instanceId;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doScaleUp(long groupId, Integer numVm) {
|
||||
AutoScaleVmGroupVO asGroup = _autoScaleVmGroupDao.findById(groupId);
|
||||
if (asGroup == null) {
|
||||
s_logger.error("Can not find the groupid " + groupId + " for scaling up");
|
||||
return;
|
||||
}
|
||||
if (!checkConditionUp(asGroup, numVm)) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < numVm; i++) {
|
||||
long vmId = createNewVM(asGroup);
|
||||
if (vmId == -1) {
|
||||
s_logger.error("Can not deploy new VM for scaling up in the group "
|
||||
+ asGroup.getId() + ". Waiting for next round");
|
||||
break;
|
||||
}
|
||||
if (startNewVM(vmId)) {
|
||||
if (assignLBruleToNewVm(vmId, asGroup)) {
|
||||
// persist to DB
|
||||
AutoScaleVmGroupVmMapVO GroupVmVO = new AutoScaleVmGroupVmMapVO(
|
||||
asGroup.getId(), vmId);
|
||||
_autoScaleVmGroupVmMapDao.persist(GroupVmVO);
|
||||
// update last_quiettime
|
||||
List<AutoScaleVmGroupPolicyMapVO> GroupPolicyVOs = _autoScaleVmGroupPolicyMapDao
|
||||
.listByVmGroupId(groupId);
|
||||
for (AutoScaleVmGroupPolicyMapVO GroupPolicyVO : GroupPolicyVOs) {
|
||||
AutoScalePolicyVO vo = _autoScalePolicyDao
|
||||
.findById(GroupPolicyVO.getPolicyId());
|
||||
if (vo.getAction().equals("scaleup")) {
|
||||
vo.setLastQuiteTime(new Date());
|
||||
_autoScalePolicyDao.persist(vo);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
s_logger.error("Can not assign LB rule for this new VM");
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
s_logger.error("Can not deploy new VM for scaling up in the group "
|
||||
+ asGroup.getId() + ". Waiting for next round");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doScaleDown(final long groupId) {
|
||||
AutoScaleVmGroupVO asGroup = _autoScaleVmGroupDao.findById(groupId);
|
||||
if (asGroup == null) {
|
||||
s_logger.error("Can not find the groupid " + groupId + " for scaling up");
|
||||
return;
|
||||
}
|
||||
if (!checkConditionDown(asGroup)) {
|
||||
return;
|
||||
}
|
||||
final long vmId = removeLBrule(asGroup);
|
||||
if (vmId != -1) {
|
||||
long profileId = asGroup.getProfileId();
|
||||
// get destroyvmgrace param
|
||||
AutoScaleVmProfileVO asProfile = _autoScaleVmProfileDao.findById(profileId);
|
||||
Integer destroyVmGracePeriod = asProfile.getDestroyVmGraceperiod();
|
||||
if (destroyVmGracePeriod >= 0) {
|
||||
_executor.schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
// destroy vm
|
||||
_userVmManager.destroyVm(vmId);
|
||||
// update group-vm mapping
|
||||
_autoScaleVmGroupVmMapDao.remove(groupId, vmId);
|
||||
// update last_quiettime
|
||||
List<AutoScaleVmGroupPolicyMapVO> GroupPolicyVOs = _autoScaleVmGroupPolicyMapDao
|
||||
.listByVmGroupId(groupId);
|
||||
for (AutoScaleVmGroupPolicyMapVO GroupPolicyVO : GroupPolicyVOs) {
|
||||
AutoScalePolicyVO vo = _autoScalePolicyDao
|
||||
.findById(GroupPolicyVO.getPolicyId());
|
||||
if (vo.getAction().equals("scaledown")) {
|
||||
vo.setLastQuiteTime(new Date());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (ResourceUnavailableException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ConcurrentOperationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}, destroyVmGracePeriod, TimeUnit.SECONDS);
|
||||
}
|
||||
} else {
|
||||
s_logger.error("Can not remove LB rule for the VM being destroyed. Do nothing more.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -30,11 +30,13 @@ import org.apache.log4j.Logger;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import org.apache.cloudstack.api.command.admin.router.ConfigureOvsElementCmd;
|
||||
|
||||
import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ListOvsElementsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.api.to.LoadBalancerTO;
|
||||
import com.cloud.configuration.ConfigurationManager;
|
||||
@ -62,6 +64,8 @@ import com.cloud.network.RemoteAccessVpn;
|
||||
import com.cloud.network.VirtualRouterProvider;
|
||||
import com.cloud.network.VirtualRouterProvider.Type;
|
||||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.network.as.AutoScaleCounter;
|
||||
import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterType;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.LoadBalancerDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
@ -99,6 +103,7 @@ import com.cloud.vm.VirtualMachine.State;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
@ -112,8 +117,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer,
|
||||
NetworkMigrationResponder {
|
||||
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
|
||||
|
||||
protected static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
|
||||
public static final AutoScaleCounterType AutoScaleCounterCpu = new AutoScaleCounterType("cpu");
|
||||
public static final AutoScaleCounterType AutoScaleCounterMemory = new AutoScaleCounterType("memory");
|
||||
protected static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
|
||||
|
||||
@Inject
|
||||
NetworkDao _networksDao;
|
||||
@ -555,7 +561,17 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
lbCapabilities.put(Capability.SupportedProtocols, "tcp, udp");
|
||||
lbCapabilities.put(Capability.SupportedStickinessMethods, getHAProxyStickinessCapability());
|
||||
lbCapabilities.put(Capability.LbSchemes, LoadBalancerContainer.Scheme.Public.toString());
|
||||
|
||||
|
||||
//specifies that LB rules can support autoscaling and the list of counters it supports
|
||||
AutoScaleCounter counter;
|
||||
List<AutoScaleCounter> counterList = new ArrayList<AutoScaleCounter>();
|
||||
counter = new AutoScaleCounter(AutoScaleCounterCpu);
|
||||
counterList.add(counter);
|
||||
counter = new AutoScaleCounter(AutoScaleCounterMemory);
|
||||
counterList.add(counter);
|
||||
Gson gson = new Gson();
|
||||
String autoScaleCounterList = gson.toJson(counterList);
|
||||
lbCapabilities.put(Capability.AutoScaleCounters, autoScaleCounterList);
|
||||
capabilities.put(Service.Lb, lbCapabilities);
|
||||
|
||||
// Set capabilities for Firewall service
|
||||
|
||||
@ -915,7 +915,8 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
|
||||
if (provider == null || provider.size() == 0) {
|
||||
return false;
|
||||
}
|
||||
if (provider.get(0) == Provider.Netscaler || provider.get(0) == Provider.F5BigIp) {
|
||||
if (provider.get(0) == Provider.Netscaler || provider.get(0) == Provider.F5BigIp ||
|
||||
provider.get(0) == Provider.VirtualRouter || provider.get(0) == Provider.VPCVirtualRouter) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -48,6 +48,7 @@ import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.GetStorageStatsCommand;
|
||||
import com.cloud.agent.api.HostStatsEntry;
|
||||
import com.cloud.agent.api.PerformanceMonitorCommand;
|
||||
import com.cloud.agent.api.VmDiskStatsEntry;
|
||||
import com.cloud.agent.api.VmStatsEntry;
|
||||
import com.cloud.cluster.ManagementServerHostVO;
|
||||
@ -59,8 +60,29 @@ import com.cloud.host.HostVO;
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.host.dao.HostDao;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.network.as.AutoScaleManager;
|
||||
import com.cloud.network.as.AutoScalePolicyConditionMapVO;
|
||||
import com.cloud.network.as.AutoScalePolicyVO;
|
||||
import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO;
|
||||
import com.cloud.network.as.AutoScaleVmGroupVO;
|
||||
import com.cloud.network.as.AutoScaleVmGroupVmMapVO;
|
||||
import com.cloud.network.as.AutoScaleVmProfileVO;
|
||||
import com.cloud.network.as.Condition.Operator;
|
||||
import com.cloud.network.as.ConditionVO;
|
||||
import com.cloud.network.as.Counter;
|
||||
import com.cloud.network.as.CounterVO;
|
||||
import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao;
|
||||
import com.cloud.network.as.dao.AutoScalePolicyDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmGroupDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao;
|
||||
import com.cloud.network.as.dao.AutoScaleVmProfileDao;
|
||||
import com.cloud.network.as.dao.ConditionDao;
|
||||
import com.cloud.network.as.dao.CounterDao;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceState;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import com.cloud.storage.StorageManager;
|
||||
import com.cloud.storage.StorageStats;
|
||||
import com.cloud.storage.VolumeStats;
|
||||
@ -70,6 +92,7 @@ import com.cloud.storage.dao.VolumeDao;
|
||||
import com.cloud.user.VmDiskStatisticsVO;
|
||||
import com.cloud.user.dao.VmDiskStatisticsDao;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.component.ComponentMethodInterceptable;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
import com.cloud.utils.concurrency.NamedThreadFactory;
|
||||
@ -82,9 +105,11 @@ import com.cloud.utils.db.TransactionStatus;
|
||||
import com.cloud.utils.net.MacAddress;
|
||||
import com.cloud.vm.UserVmManager;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VmStats;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
|
||||
/**
|
||||
* Provides real time stats for various agent resources up to x seconds
|
||||
@ -92,55 +117,53 @@ import com.cloud.vm.dao.UserVmDao;
|
||||
*/
|
||||
@Component
|
||||
public class StatsCollector extends ManagerBase implements ComponentMethodInterceptable {
|
||||
public static final Logger s_logger = Logger.getLogger(StatsCollector.class.getName());
|
||||
|
||||
private static StatsCollector s_instance = null;
|
||||
public static final Logger s_logger = Logger.getLogger(StatsCollector.class.getName());
|
||||
|
||||
private ScheduledExecutorService _executor = null;
|
||||
@Inject
|
||||
private AgentManager _agentMgr;
|
||||
@Inject
|
||||
private UserVmManager _userVmMgr;
|
||||
@Inject
|
||||
private HostDao _hostDao;
|
||||
@Inject
|
||||
private UserVmDao _userVmDao;
|
||||
@Inject
|
||||
private VolumeDao _volsDao;
|
||||
@Inject
|
||||
private PrimaryDataStoreDao _storagePoolDao;
|
||||
@Inject
|
||||
private ImageStoreDao _imageStoreDao;
|
||||
@Inject
|
||||
private StorageManager _storageManager;
|
||||
@Inject
|
||||
private StoragePoolHostDao _storagePoolHostDao;
|
||||
@Inject
|
||||
private DataStoreManager _dataStoreMgr;
|
||||
@Inject
|
||||
private ResourceManager _resourceMgr;
|
||||
@Inject
|
||||
private ConfigurationDao _configDao;
|
||||
@Inject
|
||||
private EndPointSelector _epSelector;
|
||||
@Inject
|
||||
private VmDiskStatisticsDao _vmDiskStatsDao;
|
||||
@Inject
|
||||
private ManagementServerHostDao _msHostDao;
|
||||
private static StatsCollector s_instance = null;
|
||||
|
||||
private ConcurrentHashMap<Long, HostStats> _hostStats = new ConcurrentHashMap<Long, HostStats>();
|
||||
private final ConcurrentHashMap<Long, VmStats> _VmStats = new ConcurrentHashMap<Long, VmStats>();
|
||||
private ConcurrentHashMap<Long, VolumeStats> _volumeStats = new ConcurrentHashMap<Long, VolumeStats>();
|
||||
private ConcurrentHashMap<Long, StorageStats> _storageStats = new ConcurrentHashMap<Long, StorageStats>();
|
||||
private ConcurrentHashMap<Long, StorageStats> _storagePoolStats = new ConcurrentHashMap<Long, StorageStats>();
|
||||
private ScheduledExecutorService _executor = null;
|
||||
@Inject private AgentManager _agentMgr;
|
||||
@Inject private UserVmManager _userVmMgr;
|
||||
@Inject private HostDao _hostDao;
|
||||
@Inject private UserVmDao _userVmDao;
|
||||
@Inject private VolumeDao _volsDao;
|
||||
@Inject private PrimaryDataStoreDao _storagePoolDao;
|
||||
@Inject private ImageStoreDao _imageStoreDao;
|
||||
@Inject private StorageManager _storageManager;
|
||||
@Inject private StoragePoolHostDao _storagePoolHostDao;
|
||||
@Inject private DataStoreManager _dataStoreMgr;
|
||||
@Inject private ResourceManager _resourceMgr;
|
||||
@Inject private ConfigurationDao _configDao;
|
||||
@Inject private EndPointSelector _epSelector;
|
||||
@Inject private VmDiskStatisticsDao _vmDiskStatsDao;
|
||||
@Inject private ManagementServerHostDao _msHostDao;
|
||||
@Inject private AutoScaleVmGroupDao _asGroupDao;
|
||||
@Inject private AutoScaleVmGroupVmMapDao _asGroupVmDao;
|
||||
@Inject private AutoScaleManager _asManager;
|
||||
@Inject private VMInstanceDao _vmInstance;
|
||||
@Inject private AutoScaleVmGroupPolicyMapDao _asGroupPolicyDao;
|
||||
@Inject private AutoScalePolicyDao _asPolicyDao;
|
||||
@Inject private AutoScalePolicyConditionMapDao _asConditionMapDao;
|
||||
@Inject private ConditionDao _asConditionDao;
|
||||
@Inject private CounterDao _asCounterDao;
|
||||
@Inject private AutoScaleVmProfileDao _asProfileDao;
|
||||
@Inject private ServiceOfferingDao _serviceOfferingDao;
|
||||
|
||||
long hostStatsInterval = -1L;
|
||||
long hostAndVmStatsInterval = -1L;
|
||||
long storageStatsInterval = -1L;
|
||||
long volumeStatsInterval = -1L;
|
||||
int vmDiskStatsInterval = 0;
|
||||
private ConcurrentHashMap<Long, HostStats> _hostStats = new ConcurrentHashMap<Long, HostStats>();
|
||||
private final ConcurrentHashMap<Long, VmStats> _VmStats = new ConcurrentHashMap<Long, VmStats>();
|
||||
private ConcurrentHashMap<Long, VolumeStats> _volumeStats = new ConcurrentHashMap<Long, VolumeStats>();
|
||||
private ConcurrentHashMap<Long, StorageStats> _storageStats = new ConcurrentHashMap<Long, StorageStats>();
|
||||
private ConcurrentHashMap<Long, StorageStats> _storagePoolStats = new ConcurrentHashMap<Long, StorageStats>();
|
||||
|
||||
private ScheduledExecutorService _diskStatsUpdateExecutor;
|
||||
long hostStatsInterval = -1L;
|
||||
long hostAndVmStatsInterval = -1L;
|
||||
long storageStatsInterval = -1L;
|
||||
long volumeStatsInterval = -1L;
|
||||
long autoScaleStatsInterval = -1L;
|
||||
int vmDiskStatsInterval = 0;
|
||||
|
||||
private ScheduledExecutorService _diskStatsUpdateExecutor;
|
||||
private int _usageAggregationRange = 1440;
|
||||
private String _usageTimeZone = "GMT";
|
||||
private final long mgmtSrvrId = MacAddress.getMacAddress().toLong();
|
||||
@ -169,14 +192,15 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
|
||||
return true;
|
||||
}
|
||||
|
||||
private void init(Map<String, String> configs) {
|
||||
_executor = Executors.newScheduledThreadPool(3, new NamedThreadFactory("StatsCollector"));
|
||||
private void init(Map<String, String> configs) {
|
||||
_executor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("StatsCollector"));
|
||||
|
||||
hostStatsInterval = NumbersUtil.parseLong(configs.get("host.stats.interval"), 60000L);
|
||||
hostAndVmStatsInterval = NumbersUtil.parseLong(configs.get("vm.stats.interval"), 60000L);
|
||||
storageStatsInterval = NumbersUtil.parseLong(configs.get("storage.stats.interval"), 60000L);
|
||||
volumeStatsInterval = NumbersUtil.parseLong(configs.get("volume.stats.interval"), -1L);
|
||||
vmDiskStatsInterval = NumbersUtil.parseInt(configs.get("vm.disk.stats.interval"), 0);
|
||||
hostStatsInterval = NumbersUtil.parseLong(configs.get("host.stats.interval"), 60000L);
|
||||
hostAndVmStatsInterval = NumbersUtil.parseLong(configs.get("vm.stats.interval"), 60000L);
|
||||
storageStatsInterval = NumbersUtil.parseLong(configs.get("storage.stats.interval"), 60000L);
|
||||
volumeStatsInterval = NumbersUtil.parseLong(configs.get("volume.stats.interval"), -1L);
|
||||
autoScaleStatsInterval = NumbersUtil.parseLong(configs.get("autoscale.stats.interval"), 60000L);
|
||||
vmDiskStatsInterval = NumbersUtil.parseInt(configs.get("vm.disk.stats.interval"), 0);
|
||||
|
||||
if (hostStatsInterval > 0) {
|
||||
_executor.scheduleWithFixedDelay(new HostCollector(), 15000L, hostStatsInterval, TimeUnit.MILLISECONDS);
|
||||
@ -186,9 +210,13 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
|
||||
_executor.scheduleWithFixedDelay(new VmStatsCollector(), 15000L, hostAndVmStatsInterval, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
if (storageStatsInterval > 0) {
|
||||
_executor.scheduleWithFixedDelay(new StorageCollector(), 15000L, storageStatsInterval, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
if (storageStatsInterval > 0) {
|
||||
_executor.scheduleWithFixedDelay(new StorageCollector(), 15000L, storageStatsInterval, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
if (autoScaleStatsInterval > 0) {
|
||||
_executor.scheduleWithFixedDelay(new AutoScaleMonitor(), 15000L, autoScaleStatsInterval, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
if (vmDiskStatsInterval > 0) {
|
||||
if (vmDiskStatsInterval < 300)
|
||||
@ -578,21 +606,271 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
|
||||
}
|
||||
}
|
||||
_storagePoolStats = storagePoolStats;
|
||||
} catch (Throwable t) {
|
||||
s_logger.error("Error trying to retrieve storage stats", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
s_logger.error("Error trying to retrieve storage stats", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public StorageStats getStorageStats(long id) {
|
||||
return _storageStats.get(id);
|
||||
}
|
||||
class AutoScaleMonitor extends ManagedContextRunnable {
|
||||
@Override
|
||||
protected void runInContext() {
|
||||
try {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("AutoScaling Monitor is running...");
|
||||
}
|
||||
// list all AS VMGroups
|
||||
List<AutoScaleVmGroupVO> asGroups = _asGroupDao.listAll();
|
||||
for (AutoScaleVmGroupVO asGroup : asGroups) {
|
||||
// check group state
|
||||
if (asGroup.getState().equals("enabled")) {
|
||||
// check minimum vm of group
|
||||
Integer currentVM = _asGroupVmDao.countByGroup(asGroup.getId());
|
||||
if (currentVM < asGroup.getMinMembers()) {
|
||||
_asManager.doScaleUp(asGroup.getId(), asGroup.getMinMembers() - currentVM);
|
||||
continue;
|
||||
}
|
||||
|
||||
//check interval
|
||||
long now = (new Date()).getTime();
|
||||
if (asGroup.getLastInterval() != null)
|
||||
if ((now - asGroup.getLastInterval().getTime()) < (long) asGroup
|
||||
.getInterval()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
public HostStats getHostStats(long hostId) {
|
||||
return _hostStats.get(hostId);
|
||||
}
|
||||
// update last_interval
|
||||
asGroup.setLastInterval(new Date());
|
||||
_asGroupDao.persist(asGroup);
|
||||
|
||||
public StorageStats getStoragePoolStats(long id) {
|
||||
return _storagePoolStats.get(id);
|
||||
}
|
||||
// collect RRDs data for this group
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("[AutoScale] Collecting RRDs data...");
|
||||
}
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
List <AutoScaleVmGroupVmMapVO> asGroupVmVOs = _asGroupVmDao.listByGroup(asGroup.getId());
|
||||
params.put("total_vm", String.valueOf(asGroupVmVOs.size()));
|
||||
for (int i = 0; i < asGroupVmVOs.size(); i++) {
|
||||
long vmId = asGroupVmVOs.get(i).getInstanceId();
|
||||
VMInstanceVO vmVO = _vmInstance.findById(vmId);
|
||||
//xe vm-list | grep vmname -B 1 | head -n 1 | awk -F':' '{print $2}'
|
||||
params.put("vmname" + String.valueOf(i + 1), vmVO.getInstanceName());
|
||||
params.put("vmid" + String.valueOf(i + 1), String.valueOf(vmVO.getId()));
|
||||
|
||||
}
|
||||
// get random hostid because all vms are in a cluster
|
||||
long vmId = asGroupVmVOs.get(0).getInstanceId();
|
||||
VMInstanceVO vmVO = _vmInstance.findById(vmId);
|
||||
Long receiveHost = vmVO.getHostId();
|
||||
|
||||
// setup parameters phase: duration and counter
|
||||
// list pair [counter, duration]
|
||||
List<Pair<String, Integer>> lstPair = getPairofCounternameAndDuration(asGroup.getId());
|
||||
int total_counter = 0;
|
||||
String[] lstCounter = new String[lstPair.size()];
|
||||
for (int i = 0; i < lstPair.size(); i++) {
|
||||
Pair<String, Integer> pair = lstPair.get(i);
|
||||
String strCounterNames = pair.first();
|
||||
Integer duration = pair.second();
|
||||
|
||||
lstCounter[i] = strCounterNames.split(",")[0];
|
||||
total_counter++;
|
||||
params.put("duration" + String.valueOf(total_counter), duration.toString());
|
||||
params.put("counter" + String.valueOf(total_counter), lstCounter[i]);
|
||||
params.put("con" + String.valueOf(total_counter), strCounterNames.split(",")[1]);
|
||||
}
|
||||
params.put("total_counter", String.valueOf(total_counter));
|
||||
|
||||
PerformanceMonitorCommand perfMon = new PerformanceMonitorCommand(params, 20);
|
||||
|
||||
try {
|
||||
Answer answer = _agentMgr.send(receiveHost, perfMon);
|
||||
if (answer == null || !answer.getResult()) {
|
||||
s_logger.debug("Failed to send data to node !");
|
||||
} else {
|
||||
String result = answer.getDetails();
|
||||
s_logger.debug("[AutoScale] RRDs collection answer: " + result);
|
||||
HashMap<Long, Double> avgCounter = new HashMap<Long, Double>();
|
||||
|
||||
// extract data
|
||||
String[] counterElements = result.split(",");
|
||||
if ((counterElements != null) && (counterElements.length > 0)) {
|
||||
for (String string : counterElements) {
|
||||
try {
|
||||
String[] counterVals = string.split(":");
|
||||
String[] counter_vm = counterVals[0].split("\\.");
|
||||
|
||||
Long counterId = Long.parseLong(counter_vm[1]);
|
||||
Long conditionId = Long.parseLong(params.get("con" + counter_vm[1]));
|
||||
Double coVal = Double.parseDouble(counterVals[1]);
|
||||
|
||||
// Summary of all counter by counterId key
|
||||
if (avgCounter.get(counterId) == null){
|
||||
/* initialize if data is not set */
|
||||
avgCounter.put(counterId, new Double(0));
|
||||
}
|
||||
|
||||
String counterName = getCounternamebyCondition(conditionId.longValue());
|
||||
if (counterName == Counter.Source.memory.toString()) {
|
||||
// calculate memory in percent
|
||||
Long profileId = asGroup.getProfileId();
|
||||
AutoScaleVmProfileVO profileVo = _asProfileDao.findById(profileId);
|
||||
ServiceOfferingVO serviceOff = _serviceOfferingDao.findById(profileVo.getServiceOfferingId());
|
||||
int maxRAM = serviceOff.getRamSize();
|
||||
|
||||
// get current RAM percent
|
||||
coVal = coVal / maxRAM;
|
||||
} else {
|
||||
// cpu
|
||||
coVal = coVal * 100;
|
||||
}
|
||||
|
||||
// update data entry
|
||||
avgCounter.put(counterId, avgCounter.get(counterId)+ coVal);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
String scaleAction = getAutoscaleAction(avgCounter, asGroup.getId(), currentVM);
|
||||
if (scaleAction != null) {
|
||||
s_logger.debug("[AutoScale] Doing scale action: " + scaleAction + " for group " + asGroup.getId());
|
||||
if (scaleAction.equals("scaleup")) {
|
||||
_asManager.doScaleUp(asGroup.getId(), 1);
|
||||
} else {
|
||||
_asManager.doScaleDown(asGroup.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Throwable t) {
|
||||
s_logger.error("Error trying to monitor autoscaling", t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private String getAutoscaleAction(HashMap<Long, Double> avgCounter, long groupId, long currentVM) {
|
||||
|
||||
List<AutoScaleVmGroupPolicyMapVO> listMap = _asGroupPolicyDao.listByVmGroupId(groupId);
|
||||
if ( (listMap == null) || (listMap.size() == 0) )
|
||||
return null;
|
||||
for (AutoScaleVmGroupPolicyMapVO asVmgPmap : listMap) {
|
||||
AutoScalePolicyVO policyVO = _asPolicyDao.findById(asVmgPmap.getPolicyId());
|
||||
if (policyVO != null) {
|
||||
Integer quitetime = policyVO.getQuietTime();
|
||||
long last_quitetime = policyVO.getLastQuiteTime().getTime();
|
||||
long current_time = (new Date()).getTime();
|
||||
|
||||
// check quite time for this policy
|
||||
if ((current_time - last_quitetime) >= (long) quitetime) {
|
||||
|
||||
// list all condition of this policy
|
||||
boolean bValid = true;
|
||||
List<ConditionVO> lstConditions = getConditionsbyPolicyId(policyVO.getId());
|
||||
if ((lstConditions != null) && (lstConditions.size() > 0)) {
|
||||
// check whole conditions of this policy
|
||||
for (ConditionVO conditionVO : lstConditions) {
|
||||
long threholdValue = conditionVO.getThreshold();
|
||||
Double sum = avgCounter.get(conditionVO.getCounterid());
|
||||
Double avg = sum/ currentVM;
|
||||
|
||||
Operator op = conditionVO.getRelationalOperator();
|
||||
boolean bConditionCheck = ((op == com.cloud.network.as.Condition.Operator.EQ) && (threholdValue == avg))
|
||||
|| ((op == com.cloud.network.as.Condition.Operator.GE) && (avg >= threholdValue))
|
||||
|| ((op == com.cloud.network.as.Condition.Operator.GT) && (avg > threholdValue))
|
||||
|| ((op == com.cloud.network.as.Condition.Operator.LE) && (avg <= threholdValue))
|
||||
|| ((op == com.cloud.network.as.Condition.Operator.LT) && (avg < threholdValue));
|
||||
|
||||
if (!bConditionCheck) {
|
||||
bValid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bValid) {
|
||||
return policyVO.getAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<ConditionVO> getConditionsbyPolicyId(long policyId){
|
||||
List<AutoScalePolicyConditionMapVO> conditionMap = _asConditionMapDao.findByPolicyId(policyId);
|
||||
if ( (conditionMap == null) || (conditionMap.size() == 0))
|
||||
return null;
|
||||
|
||||
List<ConditionVO> lstResult = new ArrayList<ConditionVO>();
|
||||
for (AutoScalePolicyConditionMapVO asPCmap : conditionMap) {
|
||||
lstResult.add(_asConditionDao.findById(asPCmap.getConditionId()));
|
||||
}
|
||||
|
||||
return lstResult;
|
||||
}
|
||||
|
||||
public List<Pair<String, Integer>> getPairofCounternameAndDuration(
|
||||
long groupId) {
|
||||
AutoScaleVmGroupVO groupVo = _asGroupDao.findById(groupId);
|
||||
if (groupVo == null)
|
||||
return null;
|
||||
List<Pair<String, Integer>> result = new ArrayList<Pair<String, Integer>>();
|
||||
//list policy map
|
||||
List<AutoScaleVmGroupPolicyMapVO> groupPolicymap = _asGroupPolicyDao.listByVmGroupId(groupVo.getId());
|
||||
if (groupPolicymap == null)
|
||||
return null;
|
||||
for (AutoScaleVmGroupPolicyMapVO gpMap : groupPolicymap) {
|
||||
//get duration
|
||||
AutoScalePolicyVO policyVo = _asPolicyDao.findById(gpMap.getPolicyId());
|
||||
Integer duration = policyVo.getDuration();
|
||||
//get collection of counter name
|
||||
String counterNames = "";
|
||||
List<AutoScalePolicyConditionMapVO> lstPCmap = _asConditionMapDao.findByPolicyId(policyVo.getId());
|
||||
for (AutoScalePolicyConditionMapVO pcMap : lstPCmap) {
|
||||
String counterName = getCounternamebyCondition(pcMap.getConditionId());
|
||||
|
||||
counterNames += counterName + "," + pcMap.getConditionId();
|
||||
}
|
||||
// add to result
|
||||
Pair<String, Integer> pair = new Pair<String, Integer>(counterNames, duration);
|
||||
result.add(pair);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getCounternamebyCondition(long conditionId){
|
||||
|
||||
ConditionVO condition = _asConditionDao.findById(conditionId);
|
||||
if (condition == null)
|
||||
return "";
|
||||
|
||||
long counterId = condition.getCounterid();
|
||||
CounterVO counter = _asCounterDao.findById(counterId);
|
||||
if (counter == null)
|
||||
return "";
|
||||
|
||||
return counter.getSource().toString();
|
||||
}
|
||||
}
|
||||
public StorageStats getStorageStats(long id) {
|
||||
return _storageStats.get(id);
|
||||
}
|
||||
|
||||
public HostStats getHostStats(long hostId){
|
||||
return _hostStats.get(hostId);
|
||||
}
|
||||
|
||||
public StorageStats getStoragePoolStats(long id) {
|
||||
return _storagePoolStats.get(id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,6 +152,7 @@ DROP TABLE IF EXISTS `cloud`.`template_s3_ref`;
|
||||
DROP TABLE IF EXISTS `cloud`.`nicira_nvp_router_map`;
|
||||
DROP TABLE IF EXISTS `cloud`.`external_bigswitch_vns_devices`;
|
||||
DROP TABLE IF EXISTS `cloud`.`autoscale_vmgroup_policy_map`;
|
||||
DROP TABLE IF EXISTS `cloud`.`autoscale_vmgroup_vm_map`;
|
||||
DROP TABLE IF EXISTS `cloud`.`autoscale_policy_condition_map`;
|
||||
DROP TABLE IF EXISTS `cloud`.`autoscale_vmgroups`;
|
||||
DROP TABLE IF EXISTS `cloud`.`autoscale_vmprofiles`;
|
||||
|
||||
@ -345,6 +345,7 @@ CREATE TABLE `cloud`.`autoscale_policies` (
|
||||
`account_id` bigint unsigned NOT NULL,
|
||||
`duration` int unsigned NOT NULL,
|
||||
`quiet_time` int unsigned NOT NULL,
|
||||
`last_quiet_time` datetime DEFAULT NULL,
|
||||
`action` varchar(15),
|
||||
`created` datetime NOT NULL COMMENT 'date created',
|
||||
`removed` datetime COMMENT 'date removed if not null',
|
||||
@ -366,6 +367,7 @@ CREATE TABLE `cloud`.`autoscale_vmgroups` (
|
||||
`max_members` int unsigned NOT NULL,
|
||||
`member_port` int unsigned NOT NULL,
|
||||
`interval` int unsigned NOT NULL,
|
||||
`last_interval` datetime DEFAULT NULL,
|
||||
`profile_id` bigint unsigned NOT NULL,
|
||||
`state` varchar(255) NOT NULL COMMENT 'enabled or disabled, a vmgroup is disabled to stop autoscaling activity',
|
||||
`created` datetime NOT NULL COMMENT 'date created',
|
||||
@ -401,10 +403,22 @@ CREATE TABLE `cloud`.`autoscale_vmgroup_policy_map` (
|
||||
INDEX `i_autoscale_vmgroup_policy_map__vmgroup_id`(`vmgroup_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'snmp','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now());
|
||||
INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'snmp','Linux System CPU - percentage', '1.3.6.1.4.1.2021.11.10.0', now());
|
||||
INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (3, UUID(), 'snmp','Linux CPU Idle - percentage', '1.3.6.1.4.1.2021.11.11.0', now());
|
||||
INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (100, UUID(), 'netscaler','Response Time - microseconds', 'RESPTIME', now());
|
||||
CREATE TABLE `cloud`.`autoscale_vmgroup_vm_map` (
|
||||
`id` bigint unsigned NOT NULL auto_increment,
|
||||
`vmgroup_id` bigint unsigned NOT NULL,
|
||||
`instance_id` bigint unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
CONSTRAINT `fk_autoscale_vmgroup_vm_map__vmgroup_id` FOREIGN KEY `fk_autoscale_vmgroup_vm_map__vmgroup_id` (`vmgroup_id`) REFERENCES `autoscale_vmgroups` (`id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `fk_autoscale_vmgroup_vm_map__instance_id` FOREIGN KEY `fk_autoscale_vmgroup_vm_map__instance_id` (`instance_id`) REFERENCES `vm_instance` (`id`),
|
||||
INDEX `i_autoscale_vmgroup_vm_map__vmgroup_id`(`vmgroup_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'snmp','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now());
|
||||
--INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'snmp','Linux System CPU - percentage', '1.3.6.1.4.1.2021.11.10.0', now());
|
||||
--INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (3, UUID(), 'snmp','Linux CPU Idle - percentage', '1.3.6.1.4.1.2021.11.11.0', now());
|
||||
--INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (100, UUID(), 'netscaler','Response Time - microseconds', 'RESPTIME', now());
|
||||
INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'cpu','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now());
|
||||
INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'memory','Linux User RAM - percentage', '1.3.6.1.4.1.2021.11.10.0', now());
|
||||
|
||||
CREATE TABLE `cloud`.`user_ipv6_address` (
|
||||
`id` bigint unsigned NOT NULL UNIQUE auto_increment,
|
||||
|
||||
@ -25,7 +25,7 @@ region.id=1
|
||||
# CloudStack database settings
|
||||
db.cloud.username=cloud
|
||||
db.cloud.password=cloud
|
||||
db.root.password=
|
||||
db.root.password=123
|
||||
db.cloud.host=localhost
|
||||
db.cloud.port=3306
|
||||
db.cloud.name=cloud
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user