You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/06/20 09:19:54 UTC

[21/50] [abbrv] git commit: updated refs/heads/master to 97f8c52

Merge branch 'master' (up to commit
c30d9be3cea30339cfff40c1002906634291b373) into object_store.



Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/18aeef3e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/18aeef3e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/18aeef3e

Branch: refs/heads/master
Commit: 18aeef3ef19c18ddc45ef16e5249661d4c495895
Parents: ec55c2e c30d9be
Author: Min Chen <mi...@citrix.com>
Authored: Wed Jun 12 11:20:32 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Wed Jun 12 11:20:32 2013 -0700

----------------------------------------------------------------------
 .gitignore                                      |    1 +
 INSTALL.md                                      |   19 +-
 .../tomcatconf/components-simulator.xml.in      |   54 -
 agent/bindir/cloud-setup-agent.in               |    7 +-
 agent/conf/agent.properties                     |    5 +
 api/src/com/cloud/agent/api/to/DnsmasqTO.java   |   13 +-
 .../cloud/agent/api/to/VirtualMachineTO.java    |    9 +
 api/src/com/cloud/dc/DedicatedResources.java    |   33 +
 .../cloud/deploy/DeploymentClusterPlanner.java  |    4 +-
 api/src/com/cloud/event/EventTypes.java         |    7 +-
 api/src/com/cloud/network/NetworkService.java   |    2 +-
 .../ha/GlobalLoadBalancingRulesService.java     |    3 +
 api/src/com/cloud/user/AccountService.java      |   13 +-
 api/src/com/cloud/vm/VmDiskStats.java           |   30 +
 api/src/com/cloud/vm/VmStats.java               |    8 +
 .../affinity/AffinityGroupService.java          |    5 +-
 .../org/apache/cloudstack/api/ApiConstants.java |    4 +
 api/src/org/apache/cloudstack/api/BaseCmd.java  |    2 +-
 .../cloudstack/api/ResponseGenerator.java       |  135 +-
 .../cloudstack/api/ServerApiException.java      |    3 +-
 .../config/UpdateHypervisorCapabilitiesCmd.java |    8 +-
 ...ConfigureInternalLoadBalancerElementCmd.java |   23 +-
 .../admin/storage/CreateStoragePoolCmd.java     |   20 +-
 .../FindStoragePoolsForMigrationCmd.java        |   25 +-
 .../command/admin/vpc/UpdateVPCOfferingCmd.java |    2 +-
 .../user/account/AddAccountToProjectCmd.java    |    2 +-
 .../user/address/AssociateIPAddrCmd.java        |    6 +-
 .../user/address/DisassociateIPAddrCmd.java     |    8 +-
 .../affinitygroup/DeleteAffinityGroupCmd.java   |   18 +-
 .../affinitygroup/ListAffinityGroupsCmd.java    |    7 +-
 .../user/autoscale/ListConditionsCmd.java       |    9 +-
 .../firewall/CreatePortForwardingRuleCmd.java   |    6 +-
 .../user/network/CreateNetworkACLCmd.java       |   11 +-
 .../gslb/DeleteGlobalLoadBalancerRuleCmd.java   |   12 +-
 .../user/snapshot/CreateSnapshotPolicyCmd.java  |    2 +-
 .../user/template/CreateTemplateCmd.java        |   34 +-
 .../api/command/user/vm/RestoreVMCmd.java       |    5 +-
 .../command/user/volume/UploadVolumeCmd.java    |    8 +-
 .../api/command/user/vpc/RestartVPCCmd.java     |    2 +-
 .../api/command/user/vpc/UpdateVPCCmd.java      |    4 +-
 .../api/response/ExceptionResponse.java         |   12 +-
 .../HypervisorCapabilitiesResponse.java         |   32 +
 .../api/response/NetworkResponse.java           |   12 +
 .../api/response/ServiceOfferingResponse.java   |   11 +
 .../StoragePoolForMigrationResponse.java        |  248 ----
 .../api/response/StoragePoolResponse.java       |   40 +-
 .../cloudstack/api/response/UserVmResponse.java |   28 +
 .../apache/cloudstack/query/QueryService.java   |    3 +-
 .../org/apache/cloudstack/usage/UsageTypes.java |    8 +
 .../classes/resources/messages.properties       |    7 +
 .../classes/resources/messages_ar.properties    |    2 +-
 .../classes/resources/messages_ca.properties    |    1 -
 .../classes/resources/messages_de_DE.properties |    1 -
 .../classes/resources/messages_es.properties    |    1 -
 .../classes/resources/messages_fr_FR.properties |    5 +-
 .../classes/resources/messages_it_IT.properties |  191 ++-
 .../classes/resources/messages_ja.properties    |  108 +-
 .../classes/resources/messages_ko_KR.properties |    4 +-
 .../classes/resources/messages_nb_NO.properties |    1 -
 .../classes/resources/messages_pt_BR.properties |    2 +-
 .../classes/resources/messages_ru_RU.properties |    4 +-
 .../classes/resources/messages_zh_CN.properties |   10 +-
 client/pom.xml                                  |   10 +
 client/tomcatconf/applicationContext.xml.in     |   12 +-
 client/tomcatconf/commands.properties.in        |   25 +-
 client/tomcatconf/componentContext.xml.in       |   32 +-
 client/tomcatconf/nonossComponentContext.xml.in |   14 +
 .../tomcatconf/simulatorComponentContext.xml.in |    6 +
 .../cloud/agent/api/GetVmDiskStatsAnswer.java   |   47 +
 .../cloud/agent/api/GetVmDiskStatsCommand.java  |   54 +
 .../agent/api/MigrateWithStorageCommand.java    |   12 +
 .../com/cloud/agent/api/UnPlugNicCommand.java   |    2 +-
 .../com/cloud/agent/api/VmDiskStatsEntry.java   |   90 ++
 core/src/com/cloud/agent/api/VmStatsEntry.java  |   48 +
 .../virtualnetwork/VirtualRoutingResource.java  |    2 +-
 .../com/cloud/network/DnsMasqConfigurator.java  |   30 +-
 .../template/HttpTemplateDownloader.java        |    7 +
 debian/cloudstack-management.install            |   23 +-
 debian/control                                  |    2 +-
 debian/rules                                    |    6 +-
 developer/pom.xml                               |    2 +-
 docs/en-US/CloudStack_GSoC_Guide.ent            |   22 +
 docs/en-US/CloudStack_GSoC_Guide.xml            |   54 +
 docs/en-US/Release_Notes.xml                    |   47 +-
 docs/en-US/acquire-new-ip-for-vpc.xml           |   33 +-
 docs/en-US/add-gateway-vpc.xml                  |   57 +-
 docs/en-US/add-loadbalancer-rule-vpc.xml        |  359 ++++-
 docs/en-US/add-portforward-rule-vpc.xml         |   36 +-
 docs/en-US/add-tier.xml                         |    5 +-
 docs/en-US/add-vm-to-tier.xml                   |   14 +-
 docs/en-US/configure-acl.xml                    |  102 +-
 docs/en-US/egress-firewall-rule.xml             |    4 +-
 docs/en-US/enable-disable-static-nat-vpc.xml    |   35 +-
 docs/en-US/gsoc-dharmesh.xml                    |  149 ++
 docs/en-US/gsoc-imduffy15.xml                   |  395 ++++++
 docs/en-US/gsoc-tuna.xml                        |  231 +++
 docs/en-US/guest-ip-ranges.xml                  |    2 +-
 docs/en-US/images/add-new-gateway-vpc.png       |  Bin 23184 -> 21912 bytes
 docs/en-US/images/add-vm-vpc.png                |  Bin 0 -> 8596 bytes
 docs/en-US/images/del-tier.png                  |  Bin 0 -> 815 bytes
 docs/en-US/images/mesos-integration-arch.jpg    |    0
 docs/en-US/images/vpc-lb.png                    |  Bin 0 -> 181811 bytes
 docs/en-US/ip-vlan-tenant.xml                   |  205 +++
 docs/en-US/multiple-ip-nic.xml                  |    3 +-
 docs/en-US/multiple-ip-range.xml                |   42 +
 docs/en-US/networks.xml                         |    1 +
 docs/en-US/pvlan.xml                            |   57 +
 docs/en-US/release-ip-for-vpc.xml               |   31 +-
 docs/en-US/remove-tier.xml                      |   22 +-
 docs/en-US/remove-vpc.xml                       |    5 +-
 docs/en-US/vpc.xml                              |    4 +-
 docs/publican-gsoc-2013.cfg                     |   27 +
 .../api/storage/DataStoreLifeCycle.java         |    3 +-
 .../datastore/db/PrimaryDataStoreDao.java       |   14 +-
 .../datastore/db/PrimaryDataStoreDaoImpl.java   |   11 +
 .../storage/datastore/db/StoragePoolVO.java     |   13 +
 .../orchestration/CloudOrchestrator.java        |    3 +-
 .../src/com/cloud/alert/dao/AlertDaoImpl.java   |    2 +-
 .../schema/src/com/cloud/dc/dao/ClusterDao.java |    1 +
 .../src/com/cloud/dc/dao/ClusterDaoImpl.java    |   14 +-
 .../src/com/cloud/domain/dao/DomainDaoImpl.java |    2 +-
 .../schema/src/com/cloud/host/dao/HostDao.java  |    6 +
 .../src/com/cloud/host/dao/HostDaoImpl.java     |   37 +-
 .../cloud/upgrade/DatabaseUpgradeChecker.java   |    5 +-
 .../upgrade/PremiumDatabaseUpgradeChecker.java  |    4 -
 .../com/cloud/upgrade/dao/Upgrade302to40.java   |   41 +
 .../com/cloud/upgrade/dao/Upgrade410to420.java  |  826 ++++++++++-
 .../src/com/cloud/usage/UsageVmDiskVO.java      |  180 +++
 .../src/com/cloud/usage/dao/UsageDao.java       |    4 +
 .../src/com/cloud/usage/dao/UsageDaoImpl.java   |  105 ++
 .../com/cloud/usage/dao/UsageNetworkDao.java    |    2 +
 .../cloud/usage/dao/UsageNetworkDaoImpl.java    |   34 +
 .../src/com/cloud/usage/dao/UsageVmDiskDao.java |   29 +
 .../com/cloud/usage/dao/UsageVmDiskDaoImpl.java |  139 ++
 .../src/com/cloud/user/VmDiskStatisticsVO.java  |  216 +++
 .../com/cloud/user/dao/VmDiskStatisticsDao.java |   35 +
 .../cloud/user/dao/VmDiskStatisticsDaoImpl.java |  134 ++
 .../schema/src/com/cloud/vm/dao/UserVmDao.java  |    3 +-
 .../src/com/cloud/vm/dao/UserVmDaoImpl.java     |    3 +-
 .../schema/src/com/cloud/vm/dao/UserVmData.java |   36 +
 .../lb/dao/ApplicationLoadBalancerRuleDao.java  |    1 +
 .../dao/ApplicationLoadBalancerRuleDaoImpl.java |   22 +-
 .../region/gslb/GlobalLoadBalancerDaoImpl.java  |   12 +
 .../region/gslb/GlobalLoadBalancerRuleDao.java  |    3 +
 .../allocator/AbstractStoragePoolAllocator.java |    1 +
 .../allocator/ZoneWideStoragePoolAllocator.java |    9 +-
 .../datastore/PrimaryDataStoreHelper.java       |   10 +
 packaging/centos63/cloud-management.rc          |   10 +-
 packaging/centos63/cloud.spec                   |   11 +-
 .../debian/config/etc/init.d/cloud-early-config |   31 +-
 .../debian/config/etc/iptables/iptables-router  |    1 +
 patches/systemvm/debian/config/etc/rc.local     |    3 +
 .../opt/cloud/bin/get_template_version.sh       |   26 +
 .../debian/config/opt/cloud/bin/ipassoc.sh      |    6 +-
 .../debian/config/opt/cloud/bin/vpc_func.sh     |    2 +-
 .../debian/config/root/deleteIpAlias.sh         |    2 +-
 .../root/redundant_router/backup.sh.templ       |    2 +
 .../explicit-dedication/pom.xml                 |   33 +
 .../affinity/ExplicitDedicationProcessor.java   |  383 +++++
 plugins/dedicated-resources/pom.xml             |   29 +
 .../api/commands/DedicateClusterCmd.java        |  115 ++
 .../api/commands/DedicateHostCmd.java           |  118 ++
 .../cloudstack/api/commands/DedicatePodCmd.java |  120 ++
 .../api/commands/DedicateZoneCmd.java           |  120 ++
 .../api/commands/ListDedicatedClustersCmd.java  |  105 ++
 .../api/commands/ListDedicatedHostsCmd.java     |  105 ++
 .../api/commands/ListDedicatedPodsCmd.java      |  105 ++
 .../api/commands/ListDedicatedZonesCmd.java     |  105 ++
 .../commands/ReleaseDedicatedClusterCmd.java    |   91 ++
 .../api/commands/ReleaseDedicatedHostCmd.java   |   91 ++
 .../api/commands/ReleaseDedicatedPodCmd.java    |   91 ++
 .../api/commands/ReleaseDedicatedZoneCmd.java   |   91 ++
 .../api/response/DedicateClusterResponse.java   |   79 ++
 .../api/response/DedicateHostResponse.java      |   79 ++
 .../api/response/DedicatePodResponse.java       |   82 ++
 .../api/response/DedicateZoneResponse.java      |   83 ++
 .../dedicated/DedicatedResourceManagerImpl.java |  815 +++++++++++
 .../cloudstack/dedicated/DedicatedService.java  |   63 +
 .../dedicated/manager/DedicatedApiUnitTest.java |  317 +++++
 .../test/resource/dedicatedContext.xml          |   45 +
 .../cloud/deploy/ImplicitDedicationPlanner.java |  117 +-
 .../implicitplanner/ImplicitPlannerTest.java    |   18 +-
 plugins/hypervisors/kvm/pom.xml                 |    9 +
 .../kvm/resource/LibvirtComputingResource.java  |  127 +-
 .../kvm/storage/LibvirtStorageAdaptor.java      |  248 +++-
 .../resources/components-simulator.xml          |   66 -
 .../cloud/agent/manager/MockAgentManager.java   |   15 +-
 .../cloud/agent/manager/MockNetworkManager.java |   91 ++
 .../agent/manager/MockNetworkManagerImpl.java   |  236 ++++
 .../com/cloud/agent/manager/MockVmManager.java  |   72 +-
 .../cloud/agent/manager/MockVmManagerImpl.java  |  142 +-
 .../agent/manager/SimulatorManagerImpl.java     |   75 +-
 .../SimulatorComponentLibrary.java              |   40 -
 plugins/hypervisors/vmware/pom.xml              |    6 +
 .../com/cloud/hypervisor/vmware/LegacyZone.java |   28 +
 .../cloud/hypervisor/vmware/LegacyZoneVO.java   |   81 ++
 .../hypervisor/vmware/VmwareDatacenter.java     |   36 +
 .../vmware/VmwareDatacenterService.java         |   32 +
 .../hypervisor/vmware/VmwareDatacenterVO.java   |  160 +++
 .../vmware/VmwareDatacenterZoneMap.java         |   30 +
 .../vmware/VmwareDatacenterZoneMapVO.java       |   78 +
 .../vmware/VmwareServerDiscoverer.java          |   80 +-
 .../hypervisor/vmware/dao/LegacyZoneDao.java    |   37 +
 .../vmware/dao/LegacyZoneDaoImpl.java           |   66 +
 .../vmware/dao/VmwareDatacenterDao.java         |   65 +
 .../vmware/dao/VmwareDatacenterDaoImpl.java     |  104 ++
 .../vmware/dao/VmwareDatacenterZoneMapDao.java  |   35 +
 .../dao/VmwareDatacenterZoneMapDaoImpl.java     |   61 +
 .../vmware/manager/VmwareManager.java           |    3 +
 .../vmware/manager/VmwareManagerImpl.java       |  276 +++-
 .../manager/VmwareStorageManagerImpl.java       |   33 +-
 .../vmware/resource/VmwareResource.java         |  324 ++++-
 .../api/command/admin/zone/AddVmwareDcCmd.java  |  123 ++
 .../command/admin/zone/RemoveVmwareDcCmd.java   |   99 ++
 .../api/response/VmwareDatacenterResponse.java  |   51 +
 .../motion/VmwareStorageMotionStrategy.java     |  205 +++
 .../vmware/VmwareDatacenterApiUnitTest.java     |  426 ++++++
 .../motion/VmwareStorageMotionStrategyTest.java |  271 ++++
 .../xen/resource/CitrixResourceBase.java        |  127 +-
 .../hypervisor/xen/resource/XcpOssResource.java |   35 +-
 .../xen/resource/XenServer56FP1Resource.java    |    2 +-
 .../network/cisco/CiscoVnmcConnectionImpl.java  |    2 +-
 .../cloud/network/element/CiscoVnmcElement.java |   47 +-
 .../network/resource/CiscoVnmcResource.java     |    2 +-
 .../element/InternalLoadBalancerElement.java    |   18 +-
 .../JuniperSRXExternalFirewallElement.java      |    1 +
 .../network/resource/JuniperSrxResource.java    |   35 +-
 .../network/resource/NetscalerResource.java     |   38 +
 plugins/pom.xml                                 |    2 +
 .../CloudStackImageStoreLifeCycleImpl.java      |    4 +-
 .../lifecycle/S3ImageStoreLifeCycleImpl.java    |    5 +-
 .../SampleImageStoreLifeCycleImpl.java          |    3 +-
 .../lifecycle/SwiftImageStoreLifeCycleImpl.java |    4 +-
 ...CloudStackPrimaryDataStoreLifeCycleImpl.java |    7 +-
 .../SamplePrimaryDataStoreLifeCycleImpl.java    |    2 +-
 pom.xml                                         |    1 +
 python/lib/cloudutils/globalEnv.py              |    2 +
 python/lib/cloudutils/networkConfig.py          |   14 +-
 python/lib/cloudutils/serviceConfig.py          |   66 +-
 scripts/storage/qcow2/modifyvlan.sh             |  269 ----
 scripts/vm/hypervisor/kvm/patchviasocket.pl     |    0
 scripts/vm/hypervisor/xenserver/vmops           |    1 +
 scripts/vm/network/ovs-pvlan-vm.sh              |    3 +-
 server/pom.xml                                  |    5 +
 server/src/com/cloud/api/ApiDBUtils.java        |    9 +-
 server/src/com/cloud/api/ApiResponseHelper.java |   48 +-
 server/src/com/cloud/api/ApiServer.java         |   32 +-
 .../com/cloud/api/query/QueryManagerImpl.java   |   78 +-
 .../com/cloud/api/query/ViewResponseHelper.java |   70 +-
 .../query/dao/ServiceOfferingJoinDaoImpl.java   |    1 +
 .../cloud/api/query/dao/StoragePoolJoinDao.java |   12 +-
 .../api/query/dao/StoragePoolJoinDaoImpl.java   |   13 +-
 .../cloud/api/query/dao/UserVmJoinDaoImpl.java  |   12 +
 .../api/query/vo/ServiceOfferingJoinVO.java     |   11 +
 .../cloud/api/query/vo/StoragePoolJoinVO.java   |   19 +-
 .../api/response/ApiResponseSerializer.java     |   23 +-
 .../com/cloud/async/AsyncJobManagerImpl.java    |   17 +-
 server/src/com/cloud/async/dao/AsyncJobDao.java |    5 +-
 .../com/cloud/async/dao/AsyncJobDaoImpl.java    |   88 +-
 server/src/com/cloud/configuration/Config.java  |    6 +-
 .../configuration/ConfigurationManagerImpl.java |  113 +-
 .../consoleproxy/ConsoleProxyManagerImpl.java   |   17 +-
 .../src/com/cloud/dc/DedicatedResourceVO.java   |  136 ++
 .../com/cloud/dc/dao/DedicatedResourceDao.java  |   49 +
 .../cloud/dc/dao/DedicatedResourceDaoImpl.java  |  304 ++++
 .../deploy/DeploymentPlanningManagerImpl.java   |   77 +-
 .../src/com/cloud/deploy/FirstFitPlanner.java   |    3 +-
 .../cloud/hypervisor/HypervisorGuruBase.java    |    7 +
 .../ExternalFirewallDeviceManagerImpl.java      |    6 +-
 .../ExternalLoadBalancerDeviceManagerImpl.java  |   22 +-
 .../src/com/cloud/network/NetworkManager.java   |   31 +-
 .../com/cloud/network/NetworkManagerImpl.java   |  242 +++-
 .../src/com/cloud/network/NetworkModelImpl.java |   50 +-
 .../com/cloud/network/NetworkServiceImpl.java   |  125 +-
 .../network/firewall/FirewallManagerImpl.java   |    1 +
 .../cloud/network/guru/DirectNetworkGuru.java   |    5 +-
 .../network/guru/DirectPodBasedNetworkGuru.java |    2 +-
 .../lb/LoadBalancingRulesManagerImpl.java       |   39 +-
 .../VirtualNetworkApplianceManagerImpl.java     |   62 +-
 .../VpcVirtualNetworkApplianceManagerImpl.java  |    6 +-
 .../com/cloud/network/rules/RulesManager.java   |   27 -
 .../cloud/network/rules/RulesManagerImpl.java   |  115 +-
 .../network/vpc/NetworkACLManagerImpl.java      |   27 +
 .../network/vpc/NetworkACLServiceImpl.java      |   42 +-
 .../src/com/cloud/network/vpc/VpcManager.java   |    2 +-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |   84 +-
 .../com/cloud/projects/ProjectManagerImpl.java  |   34 +-
 .../com/cloud/resource/ResourceManagerImpl.java |   80 +-
 .../cloud/server/ConfigurationServerImpl.java   |   50 +-
 .../src/com/cloud/server/ManagementServer.java  |   34 -
 .../com/cloud/server/ManagementServerImpl.java  |  105 +-
 server/src/com/cloud/server/StatsCollector.java |  247 ++++
 .../com/cloud/storage/StorageManagerImpl.java   |   25 +-
 server/src/com/cloud/storage/VolumeManager.java |    3 +
 .../com/cloud/storage/VolumeManagerImpl.java    |   44 +-
 .../storage/listener/StoragePoolMonitor.java    |    5 +-
 .../secondary/SecondaryStorageManagerImpl.java  |   20 +-
 .../storage/snapshot/SnapshotManagerImpl.java   |   34 +-
 .../com/cloud/template/TemplateManagerImpl.java |    4 +-
 server/src/com/cloud/user/AccountManager.java   |   16 +-
 .../src/com/cloud/user/AccountManagerImpl.java  |  159 +--
 .../src/com/cloud/user/DomainManagerImpl.java   |   36 +-
 server/src/com/cloud/vm/UserVmManager.java      |    5 +
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  377 ++++-
 .../com/cloud/vm/VirtualMachineManagerImpl.java |    2 +-
 .../affinity/AffinityGroupServiceImpl.java      |   13 +-
 .../lb/ApplicationLoadBalancerManagerImpl.java  |    2 +-
 .../GlobalLoadBalancingRulesServiceImpl.java    |   95 +-
 server/test/async-job-component.xml             |    1 +
 .../cloud/network/MockNetworkManagerImpl.java   |   33 +-
 .../com/cloud/network/MockRulesManagerImpl.java |   63 -
 .../server/ConfigurationServerImplTest.java     |   61 +
 .../com/cloud/user/MockAccountManagerImpl.java  |   54 +-
 .../vm/DeploymentPlanningManagerImplTest.java   |    9 +
 .../com/cloud/vm/MockUserVmManagerImpl.java     |   12 +
 server/test/com/cloud/vm/UserVmManagerTest.java |   42 +-
 .../com/cloud/vpc/MockNetworkManagerImpl.java   |   58 +-
 .../test/com/cloud/vpc/MockVpcManagerImpl.java  |    2 +-
 .../com/cloud/vpc/NetworkACLManagerTest.java    |    8 +
 .../com/cloud/vpc/NetworkACLServiceTest.java    |    1 +
 server/test/com/cloud/vpc/VpcApiUnitTest.java   |   10 +-
 .../affinity/AffinityApiUnitTest.java           |   27 +-
 .../networkoffering/ChildTestConfiguration.java |    8 +-
 ...GlobalLoadBalancingRulesServiceImplTest.java |   13 +
 setup/db/create-schema.sql                      |    1 -
 setup/db/db/schema-302to40.sql                  |    3 -
 setup/db/db/schema-40to410.sql                  |    6 +-
 setup/db/db/schema-410to420.sql                 |  144 +-
 setup/dev/advancedsg.cfg                        |  185 +++
 .../component/test_advancedsg_networks.py       |  753 ++++++++++
 test/integration/component/test_assign_vm.py    |  458 ++++++
 .../component/test_custom_hostname.py           |    2 +-
 test/integration/component/test_egress_rules.py |   20 +-
 .../component/test_explicit_dedication.py       |  231 +++
 .../component/test_high_availability.py         |    1 -
 .../component/test_host_high_availability.py    |  707 +++++-----
 .../component/test_project_limits.py            |    8 +-
 .../component/test_project_resources.py         |    4 +-
 .../integration/component/test_project_usage.py |    2 +-
 .../component/test_security_groups.py           |   22 +-
 .../component/test_shared_networks.py           |   13 +
 test/integration/component/test_stopped_vm.py   |   10 +-
 .../component/test_storage_motion.py            |    2 -
 test/integration/component/test_tags.py         |    8 +-
 test/integration/component/test_templates.py    |   89 --
 .../component/test_vm_passwdenabled.py          |    4 +-
 .../component/test_vpc_host_maintenance.py      |    2 -
 .../component/test_vpc_network_lbrules.py       |   15 -
 .../component/test_vpc_network_pfrules.py       |    8 -
 .../component/test_vpc_network_staticnatrule.py |    4 -
 test/integration/smoke/test_internal_lb.py      |  355 ++---
 test/integration/smoke/test_iso.py              |    2 +-
 test/integration/smoke/test_network.py          |  238 ++--
 test/integration/smoke/test_network_acl.py      |  229 +--
 test/integration/smoke/test_nicdetail.py        |  224 ---
 test/integration/smoke/test_primary_storage.py  |  134 +-
 test/integration/smoke/test_privategw_acl.py    |    3 +
 test/integration/smoke/test_routers.py          |    1 -
 .../integration/smoke/test_service_offerings.py |  375 +++--
 test/integration/smoke/test_templates.py        |    2 +-
 test/integration/smoke/test_vm_life_cycle.py    |  248 +---
 test/integration/smoke/test_volumedetail.py     |  239 ----
 test/integration/smoke/test_volumes.py          |   31 +-
 test/setup-test-data.sh                         |  102 --
 tools/apidoc/gen_toc.py                         |    5 +-
 .../definitions/systemvmtemplate/postinstall.sh |   18 +-
 .../systemvmtemplate64/postinstall.sh           |   19 +-
 tools/cli/cloudmonkey/cachemaker.py             |    2 +-
 tools/devcloud-kvm/devcloud-kvm.cfg             |    2 +-
 tools/devcloud/devcloud-advancedsg.cfg          |  119 ++
 tools/devcloud/devcloud.cfg                     |    2 +-
 tools/devcloud/devcloud_internal-mgt.cfg        |    2 +-
 tools/devcloud/quickcloud.cfg                   |    2 +-
 tools/marvin/marvin/TestCaseExecuteEngine.py    |    2 +-
 tools/marvin/marvin/cloudstackConnection.py     |    5 +-
 tools/marvin/marvin/configGenerator.py          |  129 +-
 tools/marvin/marvin/deployDataCenter.py         |   30 +-
 tools/marvin/marvin/integration/lib/base.py     |  207 ++-
 tools/marvin/marvin/jsonHelper.py               |    4 +-
 .../marvin/sandbox/advancedsg/__init__.py       |   18 +
 .../marvin/sandbox/advancedsg/advancedsg_env.py |  150 ++
 .../marvin/sandbox/advancedsg/setup.properties  |   61 +
 tools/marvin/setup.py                           |    2 +-
 ui/css/cloudstack3.css                          |   95 +-
 ui/dictionary.jsp                               |    7 +
 ui/images/sprites.png                           |  Bin 192407 -> 193277 bytes
 ui/index.jsp                                    |    2 +-
 ui/modules/modules.js                           |    1 +
 ui/modules/vpc/vpc.css                          |  384 +++++
 ui/modules/vpc/vpc.js                           |  425 ++++++
 ui/scripts/configuration.js                     |  197 ++-
 ui/scripts/docs.js                              |   14 +-
 ui/scripts/instances.js                         |   23 +-
 ui/scripts/network.js                           |  171 ++-
 ui/scripts/projects.js                          |    3 +
 ui/scripts/regions.js                           |  215 ++-
 ui/scripts/sharedFunctions.js                   |    2 +-
 ui/scripts/storage.js                           |    2 +-
 ui/scripts/system.js                            | 1193 +++++++++++++++-
 ui/scripts/templates.js                         |    4 +-
 ui/scripts/ui-custom/ipRules.js                 |    4 +-
 ui/scripts/ui-custom/projects.js                |   25 +
 ui/scripts/ui/dialog.js                         |   94 +-
 ui/scripts/ui/widgets/detailView.js             |   23 +-
 ui/scripts/ui/widgets/listView.js               |   49 +-
 ui/scripts/ui/widgets/multiEdit.js              | 1330 +++++++++---------
 ui/scripts/vpc.js                               | 1281 ++++++++++++++++-
 ui/scripts/zoneWizard.js                        |  118 +-
 usage/src/com/cloud/usage/UsageManagerImpl.java |  169 ++-
 .../cloud/usage/parser/VmDiskUsageParser.java   |  208 +++
 .../test/com/cloud/usage/UsageManagerTest.java  |    3 +
 .../usage/UsageManagerTestConfiguration.java    |    2 +
 .../utils/exception/CloudRuntimeException.java  |   24 +-
 .../utils/exception/ExceptionProxyObject.java   |   50 +
 utils/src/com/cloud/utils/net/NetUtils.java     |   30 +
 utils/src/com/cloud/utils/ssh/SshHelper.java    |    4 -
 .../test/com/cloud/utils/net/NetUtilsTest.java  |   19 +
 .../vmware/mo/CustomFieldConstants.java         |    1 +
 .../hypervisor/vmware/mo/DatacenterMO.java      |    5 +
 .../cloud/hypervisor/vmware/mo/DatastoreMO.java |   44 +-
 .../vmware/mo/HostDatastoreBrowserMO.java       |   20 +-
 .../vmware/mo/HypervisorHostHelper.java         |    1 +
 .../vmware/mo/VirtualDiskManagerMO.java         |    4 +
 .../hypervisor/vmware/mo/VirtualMachineMO.java  |   26 +
 424 files changed, 23782 insertions(+), 5630 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/api/src/org/apache/cloudstack/api/ResponseGenerator.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/ResponseGenerator.java
index 575a2ff,096bf26..d8d07cb
--- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java
+++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
@@@ -110,6 -91,106 +91,108 @@@ import com.cloud.vm.Nic
  import com.cloud.vm.NicSecondaryIp;
  import com.cloud.vm.VirtualMachine;
  import com.cloud.vm.snapshot.VMSnapshot;
+ import org.apache.cloudstack.affinity.AffinityGroup;
+ import org.apache.cloudstack.affinity.AffinityGroupResponse;
+ import org.apache.cloudstack.api.ApiConstants.HostDetails;
+ import org.apache.cloudstack.api.ApiConstants.VMDetails;
+ import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
+ import org.apache.cloudstack.api.response.AccountResponse;
+ import org.apache.cloudstack.api.response.ApplicationLoadBalancerResponse;
+ import org.apache.cloudstack.api.response.AsyncJobResponse;
+ import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
+ import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
+ import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
+ import org.apache.cloudstack.api.response.CapacityResponse;
+ import org.apache.cloudstack.api.response.ClusterResponse;
+ import org.apache.cloudstack.api.response.ConditionResponse;
+ import org.apache.cloudstack.api.response.ConfigurationResponse;
+ import org.apache.cloudstack.api.response.CounterResponse;
+ import org.apache.cloudstack.api.response.CreateCmdResponse;
+ import org.apache.cloudstack.api.response.DiskOfferingResponse;
+ import org.apache.cloudstack.api.response.DomainResponse;
+ import org.apache.cloudstack.api.response.DomainRouterResponse;
+ import org.apache.cloudstack.api.response.EventResponse;
+ import org.apache.cloudstack.api.response.ExtractResponse;
+ import org.apache.cloudstack.api.response.FirewallResponse;
+ import org.apache.cloudstack.api.response.FirewallRuleResponse;
+ import org.apache.cloudstack.api.response.GlobalLoadBalancerResponse;
+ import org.apache.cloudstack.api.response.GuestOSResponse;
+ import org.apache.cloudstack.api.response.GuestVlanRangeResponse;
+ import org.apache.cloudstack.api.response.HostForMigrationResponse;
+ import org.apache.cloudstack.api.response.HostResponse;
+ import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse;
+ import org.apache.cloudstack.api.response.IPAddressResponse;
++import org.apache.cloudstack.api.response.ImageStoreResponse;
+ import org.apache.cloudstack.api.response.InstanceGroupResponse;
+ import org.apache.cloudstack.api.response.InternalLoadBalancerElementResponse;
+ import org.apache.cloudstack.api.response.IpForwardingRuleResponse;
+ import org.apache.cloudstack.api.response.IsolationMethodResponse;
+ import org.apache.cloudstack.api.response.LBHealthCheckResponse;
+ import org.apache.cloudstack.api.response.LBStickinessResponse;
+ import org.apache.cloudstack.api.response.LDAPConfigResponse;
+ import org.apache.cloudstack.api.response.LoadBalancerResponse;
+ import org.apache.cloudstack.api.response.NetworkACLItemResponse;
+ import org.apache.cloudstack.api.response.NetworkACLResponse;
+ import org.apache.cloudstack.api.response.NetworkOfferingResponse;
+ import org.apache.cloudstack.api.response.NetworkResponse;
+ import org.apache.cloudstack.api.response.NicResponse;
+ import org.apache.cloudstack.api.response.NicSecondaryIpResponse;
+ import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+ import org.apache.cloudstack.api.response.PodResponse;
+ import org.apache.cloudstack.api.response.PortableIpRangeResponse;
+ import org.apache.cloudstack.api.response.PortableIpResponse;
+ import org.apache.cloudstack.api.response.PrivateGatewayResponse;
+ import org.apache.cloudstack.api.response.ProjectAccountResponse;
+ import org.apache.cloudstack.api.response.ProjectInvitationResponse;
+ import org.apache.cloudstack.api.response.ProjectResponse;
+ import org.apache.cloudstack.api.response.ProviderResponse;
+ import org.apache.cloudstack.api.response.RegionResponse;
+ import org.apache.cloudstack.api.response.RemoteAccessVpnResponse;
+ import org.apache.cloudstack.api.response.ResourceCountResponse;
+ import org.apache.cloudstack.api.response.ResourceLimitResponse;
+ import org.apache.cloudstack.api.response.ResourceTagResponse;
+ import org.apache.cloudstack.api.response.S3Response;
+ import org.apache.cloudstack.api.response.SecurityGroupResponse;
+ import org.apache.cloudstack.api.response.ServiceOfferingResponse;
+ import org.apache.cloudstack.api.response.ServiceResponse;
+ import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse;
+ import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse;
+ import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse;
+ import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
+ import org.apache.cloudstack.api.response.SnapshotResponse;
+ import org.apache.cloudstack.api.response.SnapshotScheduleResponse;
+ import org.apache.cloudstack.api.response.StaticRouteResponse;
+ import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse;
+ import org.apache.cloudstack.api.response.StoragePoolResponse;
+ import org.apache.cloudstack.api.response.SwiftResponse;
+ import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
+ import org.apache.cloudstack.api.response.SystemVmResponse;
+ import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
+ import org.apache.cloudstack.api.response.TemplateResponse;
+ import org.apache.cloudstack.api.response.TrafficMonitorResponse;
+ import org.apache.cloudstack.api.response.TrafficTypeResponse;
+ import org.apache.cloudstack.api.response.UsageRecordResponse;
+ import org.apache.cloudstack.api.response.UserResponse;
+ import org.apache.cloudstack.api.response.UserVmResponse;
+ import org.apache.cloudstack.api.response.VMSnapshotResponse;
+ import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
+ import org.apache.cloudstack.api.response.VlanIpRangeResponse;
+ import org.apache.cloudstack.api.response.VolumeResponse;
+ import org.apache.cloudstack.api.response.VpcOfferingResponse;
+ import org.apache.cloudstack.api.response.VpcResponse;
+ import org.apache.cloudstack.api.response.VpnUsersResponse;
+ import org.apache.cloudstack.api.response.ZoneResponse;
+ import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
+ import org.apache.cloudstack.region.PortableIp;
+ import org.apache.cloudstack.region.PortableIpRange;
+ import org.apache.cloudstack.region.Region;
+ import org.apache.cloudstack.usage.Usage;
+ 
++import com.cloud.storage.ImageStore;
+ import java.text.DecimalFormat;
+ import java.util.EnumSet;
+ import java.util.List;
+ import java.util.Map;
  
  public interface ResponseGenerator {
      UserResponse createUserResponse(UserAccount user);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/api/src/org/apache/cloudstack/query/QueryService.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/query/QueryService.java
index 1a9e36e,73e393b..28dba3d
--- a/api/src/org/apache/cloudstack/query/QueryService.java
+++ b/api/src/org/apache/cloudstack/query/QueryService.java
@@@ -111,11 -85,9 +111,12 @@@ public interface QueryService 
  
      public ListResponse<ZoneResponse>  listDataCenters(ListZonesByCmd cmd);
  
 +    public ListResponse<TemplateResponse> listTemplates(ListTemplatesCmd cmd);
 +
 +    public ListResponse<TemplateResponse> listIsos(ListIsosCmd cmd);
      public ListResponse<AffinityGroupResponse> listAffinityGroups(Long affinityGroupId, String affinityGroupName,
-             String affinityGroupType, Long vmId, Long startIndex, Long pageSize);
+             String affinityGroupType, Long vmId, String accountName, Long domainId, boolean isRecursive,
+             boolean listAll, Long startIndex, Long pageSize);
  
      public List<ResourceDetailResponse> listResource(ListResourceDetailsCmd cmd);
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/client/pom.xml
----------------------------------------------------------------------
diff --cc client/pom.xml
index ca92c7e,ab758eb..672f4eb
--- a/client/pom.xml
+++ b/client/pom.xml
@@@ -30,8 -30,13 +30,13 @@@
        <artifactId>cloud-plugin-acl-static-role-based</artifactId>
        <version>${project.version}</version>
      </dependency>
 -     <dependency>
 +    <dependency>
        <groupId>org.apache.cloudstack</groupId>
+       <artifactId>cloud-plugin-dedicated-resources</artifactId>
+       <version>${project.version}</version>
+     </dependency>
+     <dependency>
+       <groupId>org.apache.cloudstack</groupId>
        <artifactId>cloud-plugin-api-limit-account-based</artifactId>
        <version>${project.version}</version>
      </dependency>    

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --cc client/tomcatconf/applicationContext.xml.in
index 92fdf4f,049e483..0193642
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@@ -156,9 -156,17 +156,17 @@@
          <entry key="cache.size" value="100" />
          <entry key="cache.time.to.live" value="600" />
        </map>
 -    </property>
 +    </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
    -->

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/client/tomcatconf/commands.properties.in
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/core/src/com/cloud/storage/template/HttpTemplateDownloader.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/developer/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
----------------------------------------------------------------------
diff --cc engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
index d714df3,cb46709..bd8c6e0
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
@@@ -21,15 -21,15 +21,16 @@@ package org.apache.cloudstack.engine.su
  import java.util.Map;
  
  import com.cloud.agent.api.StoragePoolInfo;
+ import com.cloud.hypervisor.Hypervisor.HypervisorType;
  
 -
  public interface DataStoreLifeCycle {
      public DataStore initialize(Map<String, Object> dsInfos);
  
      public boolean attachCluster(DataStore store, ClusterScope scope);
 +
      public boolean attachHost(DataStore store, HostScope scope, StoragePoolInfo existingInfo);
 +
-     boolean attachZone(DataStore dataStore, ZoneScope scope);
+     boolean attachZone(DataStore dataStore, ZoneScope scope, HypervisorType hypervisorType);
  
      public boolean dettach();
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
----------------------------------------------------------------------
diff --cc engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
index 5458de5,d436762..99b7b9c
--- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
+++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
@@@ -16,82 -16,71 +16,82 @@@
  // under the License.
  package org.apache.cloudstack.storage.datastore.db;
  
  import java.util.List;
  import java.util.Map;
  
 -import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
 -
+ import com.cloud.hypervisor.Hypervisor.HypervisorType;
 +import com.cloud.storage.ScopeType;
  import com.cloud.storage.StoragePoolStatus;
  import com.cloud.utils.db.GenericDao;
 +
  /**
   * Data Access Object for storage_pool table
   */
  public interface PrimaryDataStoreDao extends GenericDao<StoragePoolVO, Long> {
  
 -	/**
 -	 * @param datacenterId -- the id of the datacenter (availability zone)
 -	 */
 -	List<StoragePoolVO> listByDataCenterId(long datacenterId);
 -	
 -	/**
 -	 * @param datacenterId -- the id of the datacenter (availability zone)
 -	 */
 -	List<StoragePoolVO> listBy(long datacenterId, long podId, Long clusterId, ScopeType scope);
 -    
 -	/**
 -	 * Set capacity of storage pool in bytes
 -	 * @param id pool id.
 -	 * @param capacity capacity in bytes
 -	 */
 +    /**
 +     * @param datacenterId
 +     *            -- the id of the datacenter (availability zone)
 +     */
 +    List<StoragePoolVO> listByDataCenterId(long datacenterId);
 +
 +    /**
 +     * @param datacenterId
 +     *            -- the id of the datacenter (availability zone)
 +     */
 +    List<StoragePoolVO> listBy(long datacenterId, long podId, Long clusterId, ScopeType scope);
 +
 +    /**
 +     * Set capacity of storage pool in bytes
-      * 
++     *
 +     * @param id
 +     *            pool id.
 +     * @param capacity
 +     *            capacity in bytes
 +     */
      void updateCapacity(long id, long capacity);
 -    
 -	/**
 -	 * Set available bytes of storage pool in bytes
 -	 * @param id pool id.
 -	 * @param available available capacity in bytes
 -	 */
 +
 +    /**
 +     * Set available bytes of storage pool in bytes
-      * 
++     *
 +     * @param id
 +     *            pool id.
 +     * @param available
 +     *            available capacity in bytes
 +     */
      void updateAvailable(long id, long available);
 -        
 -    
 +
      StoragePoolVO persist(StoragePoolVO pool, Map<String, String> details);
 -    
 +
      /**
       * Find pool by name.
--     * 
 -     * @param name name of pool.
 -     * @return the single  StoragePoolVO
++     *
 +     * @param name
 +     *            name of pool.
 +     * @return the single StoragePoolVO
       */
      List<StoragePoolVO> findPoolByName(String name);
 -    
 +
      /**
       * Find pools by the pod that matches the details.
--     * 
 -     * @param podId pod id to find the pools in.
 -     * @param details details to match.  All must match for the pool to be returned.
++     *
 +     * @param podId
 +     *            pod id to find the pools in.
 +     * @param details
 +     *            details to match. All must match for the pool to be returned.
       * @return List of StoragePoolVO
       */
 -    List<StoragePoolVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details, ScopeType scope);
 -    
 +    List<StoragePoolVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details,
 +            ScopeType scope);
 +
      List<StoragePoolVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags);
 -    
 +
      /**
       * Find pool by UUID.
--     * 
 -     * @param uuid uuid of pool.
 -     * @return the single  StoragePoolVO
++     *
 +     * @param uuid
 +     *            uuid of pool.
 +     * @return the single StoragePoolVO
       */
      StoragePoolVO findPoolByUUID(String uuid);
  
@@@ -113,11 -102,14 +113,13 @@@
  
      long countPoolsByStatus(StoragePoolStatus... statuses);
  
 -	List<StoragePoolVO> listByStatusInZone(long dcId, StoragePoolStatus status);
 -    
 +    List<StoragePoolVO> listByStatusInZone(long dcId, StoragePoolStatus status);
 +
      List<StoragePoolVO> listPoolsByCluster(long clusterId);
  
 -	List<StoragePoolVO> findLocalStoragePoolsByTags(long dcId, long podId,
 -			Long clusterId, String[] tags);
 +    List<StoragePoolVO> findLocalStoragePoolsByTags(long dcId, long podId, Long clusterId, String[] tags);
  
 -	List<StoragePoolVO> findZoneWideStoragePoolsByTags(long dcId, String[] tags);
 +    List<StoragePoolVO> findZoneWideStoragePoolsByTags(long dcId, String[] tags);
+ 
+     List<StoragePoolVO> findZoneWideStoragePoolsByHypervisor(long dataCenterId, HypervisorType hypervisorType);
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --cc engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
index 5d6e2cf,d461d58..0808287
--- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
+++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
@@@ -31,8 -31,9 +31,9 @@@ import javax.naming.ConfigurationExcept
  import org.springframework.stereotype.Component;
  
  import com.cloud.host.Status;
+ import com.cloud.hypervisor.Hypervisor.HypervisorType;
  
 +import com.cloud.storage.ScopeType;
  import com.cloud.storage.StoragePoolStatus;
  
  import com.cloud.utils.db.DB;
@@@ -420,7 -425,17 +421,17 @@@ public class PrimaryDataStoreDaoImpl ex
      public List<StoragePoolVO> listPoolsByCluster(long clusterId) {
          SearchCriteria<StoragePoolVO> sc = AllFieldSearch.create();
          sc.setParameters("clusterId", clusterId);
 -        
 +
          return listBy(sc);
      }
+ 
+     @Override
+     public List<StoragePoolVO> findZoneWideStoragePoolsByHypervisor(long dataCenterId, HypervisorType hypervisorType) {
+         SearchCriteriaService<StoragePoolVO, StoragePoolVO> sc =  SearchCriteria2.create(StoragePoolVO.class);
+         sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
+         sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up);
+         sc.addAnd(sc.getEntity().getScope(), Op.EQ, ScopeType.ZONE);
+         sc.addAnd(sc.getEntity().getHypervisor(), Op.EQ, hypervisorType);
+         return sc.list();
+     }
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/api/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
----------------------------------------------------------------------
diff --cc engine/api/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
index 78a5779,0262f65..a991924
--- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
+++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java
@@@ -29,8 -29,10 +29,9 @@@ import javax.persistence.TableGenerator
  import javax.persistence.Temporal;
  import javax.persistence.TemporalType;
  
 -import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
 -
+ import com.cloud.hypervisor.Hypervisor.HypervisorType;
  import com.cloud.storage.Storage.StoragePoolType;
 +import com.cloud.storage.ScopeType;
  import com.cloud.storage.StoragePool;
  import com.cloud.storage.StoragePoolStatus;
  import com.cloud.utils.db.GenericDao;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
----------------------------------------------------------------------
diff --cc engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
index 2e9f47f,d8f90ad..1919486
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
@@@ -75,15 -79,243 +79,243 @@@ public class Upgrade410to420 implement
          updateNetworkACLs(conn);
          addHostDetailsIndex(conn);
          updateNetworksForPrivateGateways(conn);
+         correctExternalNetworkDevicesSetup(conn);
          removeFirewallServiceFromSharedNetworkOfferingWithSGService(conn);
+         fix22xKVMSnapshots(conn);
+         addIndexForAlert(conn);
+     }
+ 
+     private void addIndexForAlert(Connection conn) {
+ 
+         //First drop if it exists. (Due to patches shipped to customers some will have the index and some wont.)
+         List<String> indexList = new ArrayList<String>();
+         s_logger.debug("Dropping index i_alert__last_sent if it exists");
+         indexList.add("i_alert__last_sent");
+         DbUpgradeUtils.dropKeysIfExist(conn, "alert", indexList, false);
+ 
+         //Now add index.
+         PreparedStatement pstmt = null;
+         try {
+             pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`alert` ADD INDEX `i_alert__last_sent`(`last_sent`)");
+             pstmt.executeUpdate();
+             s_logger.debug("Added index i_alert__last_sent for table alert");
+         } catch (SQLException e) {
+             throw new CloudRuntimeException("Unable to add index i_alert__last_sent to alert table for the column last_sent", e);
+         } finally {
+             try {
+                 if (pstmt != null) {
+                     pstmt.close();
+                 }
+             } catch (SQLException e) {
+             }
+         }
+ 
      }
  
 -    private void updateSystemVmTemplates(Connection conn) {
 -
 +	private void updateSystemVmTemplates(Connection conn) {
- 	    /* TODO: where should be system vm templates located?
- 	    PreparedStatement sql = null;
++	    // TODO: system vm template migration after storage refactoring
+         PreparedStatement pstmt = null;
+         ResultSet rs = null;
+         boolean xenserver = false;
+         boolean kvm = false;
+         boolean VMware = false;
+         boolean Hyperv = false;
+         boolean LXC = false;
+         s_logger.debug("Updating System Vm template IDs");
+         try{
+             //Get all hypervisors in use
 -            try {
 +        try {
-             sql = conn.prepareStatement("update vm_template set image_data_store_id = 1 where type = 'SYSTEM' or type = 'BUILTIN'");
-             sql.executeUpdate();
+                 pstmt = conn.prepareStatement("select distinct(hypervisor_type) from `cloud`.`cluster` where removed is null");
+                 rs = pstmt.executeQuery();
+                 while(rs.next()){
+                     if("XenServer".equals(rs.getString(1))){
+                         xenserver = true;
+                     } else if("KVM".equals(rs.getString(1))){
+                         kvm = true;
+                     } else if("VMware".equals(rs.getString(1))){
+                         VMware = true;
+                     } else if("Hyperv".equals(rs.getString(1))) {
+                         Hyperv = true;
+                     } else if("LXC".equals(rs.getString(1))) {
+                         LXC = true;
+                     }
+                 }
+             } catch (SQLException e) {
+                 throw new CloudRuntimeException("Error while listing hypervisors in use", e);
+             }
+ 
+             s_logger.debug("Updating XenSever System Vms");
+             //XenServer
+             try {
+                 //Get 4.2.0 xenserer system Vm template Id
+                 pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name like 'systemvm-xenserver-4.2' and removed is null order by id desc limit 1");
+                 rs = pstmt.executeQuery();
+                 if(rs.next()){
+                     long templateId = rs.getLong(1);
+                     rs.close();
+                     pstmt.close();
+                     // change template type to SYSTEM
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                     // update templete ID of system Vms
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'XenServer'");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                 } else {
+                     if (xenserver){
+                         throw new CloudRuntimeException("4.2.0 XenServer SystemVm template not found. Cannot upgrade system Vms");
+                     } else {
+                         s_logger.warn("4.2.0 XenServer SystemVm template not found. XenServer hypervisor is not used, so not failing upgrade");
+                     }
+                 }
+             } catch (SQLException e) {
+                 throw new CloudRuntimeException("Error while updating XenServer systemVm template", e);
+             }
+ 
+             //KVM
+             s_logger.debug("Updating KVM System Vms");
+             try {
+                 //Get 4.2.0 KVM system Vm template Id
+                 pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-kvm-4.2' and removed is null order by id desc limit 1");
+                 rs = pstmt.executeQuery();
+                 if(rs.next()){
+                     long templateId = rs.getLong(1);
+                     rs.close();
+                     pstmt.close();
+                     // change template type to SYSTEM
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                     // update templete ID of system Vms
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'KVM'");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                 } else {
+                     if (kvm){
+                         throw new CloudRuntimeException("4.2.0 KVM SystemVm template not found. Cannot upgrade system Vms");
+                     } else {
+                         s_logger.warn("4.2.0 KVM SystemVm template not found. KVM hypervisor is not used, so not failing upgrade");
+                     }
+                 }
+             } catch (SQLException e) {
+                 throw new CloudRuntimeException("Error while updating KVM systemVm template", e);
+             }
+ 
+             //VMware
+             s_logger.debug("Updating VMware System Vms");
+             try {
+                 //Get 4.2.0 VMware system Vm template Id
+                 pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-vmware-4.2' and removed is null order by id desc limit 1");
+                 rs = pstmt.executeQuery();
+                 if(rs.next()){
+                     long templateId = rs.getLong(1);
+                     rs.close();
+                     pstmt.close();
+                     // change template type to SYSTEM
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                     // update templete ID of system Vms
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'VMware'");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                 } else {
+                     if (VMware){
+                         throw new CloudRuntimeException("4.2.0 VMware SystemVm template not found. Cannot upgrade system Vms");
+                     } else {
+                         s_logger.warn("4.2.0 VMware SystemVm template not found. VMware hypervisor is not used, so not failing upgrade");
+                     }
+                 }
+             } catch (SQLException e) {
+                 throw new CloudRuntimeException("Error while updating VMware systemVm template", e);
+             }
+ 
+             //Hyperv
+             s_logger.debug("Updating Hyperv System Vms");
+             try {
+                 //Get 4.2.0 Hyperv system Vm template Id
+                 pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-hyperv-4.2' and removed is null order by id desc limit 1");
+                 rs = pstmt.executeQuery();
+                 if(rs.next()){
+                     long templateId = rs.getLong(1);
+                     rs.close();
+                     pstmt.close();
+                     // change template type to SYSTEM
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                     // update templete ID of system Vms
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'Hyperv'");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                 } else {
+                     if (Hyperv){
+                         throw new CloudRuntimeException("4.2.0 HyperV SystemVm template not found. Cannot upgrade system Vms");
+                     } else {
+                         s_logger.warn("4.2.0 Hyperv SystemVm template not found. Hyperv hypervisor is not used, so not failing upgrade");
+                     }
+                 }
+             } catch (SQLException e) {
+                 throw new CloudRuntimeException("Error while updating Hyperv systemVm template", e);
+             }
+ 
+             //LXC
+             s_logger.debug("Updating LXC System Vms");
+             try {
+                 //Get 4.2.0 LXC system Vm template Id
+                 pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-lxc-4.2' and removed is null order by id desc limit 1");
+                 rs = pstmt.executeQuery();
+                 if(rs.next()){
+                     long templateId = rs.getLong(1);
+                     rs.close();
+                     pstmt.close();
+                     // change template type to SYSTEM
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                     // update templete ID of system Vms
+                     pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'LXC'");
+                     pstmt.setLong(1, templateId);
+                     pstmt.executeUpdate();
+                     pstmt.close();
+                 } else {
+                     if (LXC){
+                         throw new CloudRuntimeException("4.2.0 LXC SystemVm template not found. Cannot upgrade system Vms");
+                     } else {
+                         s_logger.warn("4.2.0 LXC SystemVm template not found. LXC hypervisor is not used, so not failing upgrade");
+                     }
+                 }
+             } catch (SQLException e) {
+                 throw new CloudRuntimeException("Error while updating LXC systemVm template", e);
+             }
+             s_logger.debug("Updating System Vm Template IDs Complete");
+         }
+         finally {
+             try {
+                 if (rs != null) {
+                     rs.close();
+                 }
+ 
+                 if (pstmt != null) {
+                     pstmt.close();
+                 }
+             } catch (SQLException e) {
+             }
+         }
+         pstmt = null;
+         try {
+             pstmt = conn.prepareStatement("update vm_template set image_data_store_id = 1 where type = 'SYSTEM' or type = 'BUILTIN'");
+             pstmt.executeUpdate();
          } catch (SQLException e) {
              throw new CloudRuntimeException("Failed to upgrade vm template data store uuid: " + e.toString());
          } finally {
@@@ -94,7 -326,6 +326,7 @@@
                  }
              }
          }
-         */
++
  	}
  
  	private void updatePrimaryStore(Connection conn) {
@@@ -725,8 -1130,8 +1131,8 @@@
              }
          }
      }
--    
--    
++
++
      private void updateNetworksForPrivateGateways(Connection conn) {
  
          PreparedStatement pstmt = null;
@@@ -744,7 -1149,7 +1150,7 @@@
                  pstmt.setLong(1, vpcId);
                  pstmt.setLong(2, networkId);
                  pstmt.executeUpdate();
--                
++
              }
          } catch (SQLException e) {
              throw new CloudRuntimeException("Failed to update private networks with VPC id.", e);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
----------------------------------------------------------------------
diff --cc engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
index 010e468,5326701..e16703e
--- a/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java
@@@ -132,72 -119,66 +132,73 @@@ public abstract class AbstractStoragePo
              poolMap.put(pool.getId(), pool);
          }
          List<Long> matchingPoolIds = new ArrayList<Long>(poolMap.keySet());
 -        
 +
          poolIdsByVolCount.retainAll(matchingPoolIds);
 -        
 +
          List<StoragePool> reorderedPools = new ArrayList<StoragePool>();
 -        for(Long id: poolIdsByVolCount){
 +        for (Long id : poolIdsByVolCount) {
              reorderedPools.add(poolMap.get(id));
          }
 -        
 +
          return reorderedPools;
      }
 -    
 -    protected List<StoragePool> reOrder(List<StoragePool> pools, 
 -    		VirtualMachineProfile<? extends VirtualMachine> vmProfile,
 -    		DeploymentPlan plan) {
 -    	Account account = null;
 -    	if(vmProfile.getVirtualMachine() != null){
 -    		account = vmProfile.getOwner();
 -    	}
 -    	
 -    	if(_allocationAlgorithm.equals("random") || _allocationAlgorithm.equals("userconcentratedpod_random") || (account == null)) {
 -    		// Shuffle this so that we don't check the pools in the same order.
 -    		Collections.shuffle(pools);
 -    	}else if(_allocationAlgorithm.equals("userdispersing")){
 -    		pools = reorderPoolsByNumberOfVolumes(plan, pools, account);
 -    	}
 -    	return pools;
 +
 +    protected List<StoragePool> reOrder(List<StoragePool> pools,
 +            VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan) {
 +        Account account = null;
 +        if (vmProfile.getVirtualMachine() != null) {
 +            account = vmProfile.getOwner();
 +        }
 +
 +        if (_allocationAlgorithm.equals("random") || _allocationAlgorithm.equals("userconcentratedpod_random")
 +                || (account == null)) {
 +            // Shuffle this so that we don't check the pools in the same order.
 +            Collections.shuffle(pools);
 +        } else if (_allocationAlgorithm.equals("userdispersing")) {
 +            pools = reorderPoolsByNumberOfVolumes(plan, pools, account);
 +        }
 +        return pools;
      }
 -	
 -	protected boolean filter(ExcludeList avoid, StoragePool pool, DiskProfile dskCh, 
 -		 DeploymentPlan plan) {
 -		
 -		if (s_logger.isDebugEnabled()) {
 -            s_logger.debug("Checking if storage pool is suitable, name: " + pool.getName()+ " ,poolId: "+ pool.getId());
 +
 +    protected boolean filter(ExcludeList avoid, StoragePool pool, DiskProfile dskCh, DeploymentPlan plan) {
 +
 +        if (s_logger.isDebugEnabled()) {
 +            s_logger.debug("Checking if storage pool is suitable, name: " + pool.getName() + " ,poolId: "
 +                    + pool.getId());
          }
 -		if (avoid.shouldAvoid(pool)) {
 -			if (s_logger.isDebugEnabled()) {
 +        if (avoid.shouldAvoid(pool)) {
 +            if (s_logger.isDebugEnabled()) {
                  s_logger.debug("StoragePool is in avoid set, skipping this pool");
 -            }			
 -			return false;
 -		}
 -		
 -        if(dskCh.getType().equals(Type.ROOT) && pool.getPoolType().equals(StoragePoolType.Iscsi)){
 -    		if (s_logger.isDebugEnabled()) {
 +            }
 +            return false;
 +        }
 +
 +        if (dskCh.getType().equals(Type.ROOT) && pool.getPoolType().equals(StoragePoolType.Iscsi)) {
 +            if (s_logger.isDebugEnabled()) {
                  s_logger.debug("Disk needed for ROOT volume, but StoragePoolType is Iscsi, skipping this and trying other available pools");
 -            }	
 +            }
 +            return false;
 +        }
 +
++
 +        DiskOfferingVO diskOffering = _diskOfferingDao.findById(dskCh.getDiskOfferingId());
 +        if (diskOffering.getSystemUse() && pool.getPoolType() == StoragePoolType.RBD) {
 +            s_logger.debug("Skipping RBD pool " + pool.getName()
 +                    + " as a suitable pool. RBD is not supported for System VM's");
              return false;
          }
 -        
 -        
 -		Long clusterId = pool.getClusterId();
 -		ClusterVO cluster = _clusterDao.findById(clusterId);
 -		if (!(cluster.getHypervisorType() == dskCh.getHypervisorType())) {
 -    		if (s_logger.isDebugEnabled()) {
 +
 +        Long clusterId = pool.getClusterId();
 +        ClusterVO cluster = _clusterDao.findById(clusterId);
 +        if (!(cluster.getHypervisorType() == dskCh.getHypervisorType())) {
 +            if (s_logger.isDebugEnabled()) {
                  s_logger.debug("StoragePool's Cluster does not have required hypervisorType, skipping this pool");
              }
 -			return false;
 -		}
 +            return false;
 +        }
  
 -        // check capacity  
 -        Volume volume =  _volumeDao.findById(dskCh.getVolumeId());
 +        // check capacity
 +        Volume volume = _volumeDao.findById(dskCh.getVolumeId());
          List<Volume> requestVolumes = new ArrayList<Volume>();
          requestVolumes.add(volume);
          return storageMgr.storagePoolHasEnoughSpace(requestVolumes, pool);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
----------------------------------------------------------------------
diff --cc engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
index 501f044,349f6ba..70e5a5a
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
@@@ -36,8 -38,7 +36,9 @@@ import com.cloud.agent.api.StoragePoolI
  import com.cloud.capacity.Capacity;
  import com.cloud.capacity.CapacityVO;
  import com.cloud.capacity.dao.CapacityDao;
 +import com.cloud.storage.DataStoreRole;
 +import com.cloud.storage.ScopeType;
+ import com.cloud.hypervisor.Hypervisor.HypervisorType;
  import com.cloud.storage.StorageManager;
  import com.cloud.storage.StoragePoolHostVO;
  import com.cloud.storage.StoragePoolStatus;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 4f90c44,bab53bc..60d2aeb
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@@ -56,15 -56,14 +56,16 @@@ import java.util.regex.Pattern
  import javax.ejb.Local;
  import javax.naming.ConfigurationException;
  
 -import org.apache.log4j.Logger;
 -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
 +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
  import org.apache.cloudstack.utils.qemu.QemuImg;
 -import org.apache.cloudstack.utils.qemu.QemuImgFile;
 +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
  import org.apache.cloudstack.utils.qemu.QemuImgException;
 +import org.apache.cloudstack.utils.qemu.QemuImgFile;
 +import org.apache.log4j.Logger;
  import org.libvirt.Connect;
  import org.libvirt.Domain;
+ import org.libvirt.DomainBlockStats;
  import org.libvirt.DomainInfo;
  import org.libvirt.DomainInterfaceStats;
  import org.libvirt.DomainSnapshot;
@@@ -3866,19 -3987,23 +3917,23 @@@ ServerResource 
          final HashMap<String, State> vmStates = new HashMap<String, State>();
          Connect conn = null;
  
+         if (_hypervisorType == HypervisorType.LXC) {
 -            try {
 -                conn = LibvirtConnection.getConnectionByType(HypervisorType.LXC.toString());
 -                vmStates.putAll(getAllVms(conn));
 -            } catch (LibvirtException e) {
 -                s_logger.debug("Failed to get connection: " + e.getMessage());
 -            }
 +        try {
 +            conn = LibvirtConnection.getConnectionByType(HypervisorType.LXC.toString());
 +            vmStates.putAll(getAllVms(conn));
 +        } catch (LibvirtException e) {
 +            s_logger.debug("Failed to get connection: " + e.getMessage());
 +        }
+         }
  
+         if (_hypervisorType == HypervisorType.KVM) {
 -            try {
 -                conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString());
 -                vmStates.putAll(getAllVms(conn));
 -            } catch (LibvirtException e) {
 -                s_logger.debug("Failed to get connection: " + e.getMessage());
 -            }
 +        try {
 +            conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString());
 +            vmStates.putAll(getAllVms(conn));
 +        } catch (LibvirtException e) {
 +            s_logger.debug("Failed to get connection: " + e.getMessage());
 +        }
+         }
  
          return vmStates;
      }
@@@ -4391,8 -4523,71 +4446,40 @@@
          return command.execute();
      }
  
 -    private String executeBashScript(String script, OutputInterpreter parser) {
 -        Script command = new Script("/bin/bash", _timeout, s_logger);
 -        command.add("-c");
 -        command.add(script);
 -        return command.execute(parser);
 -    }
  
 -    private void deletExitingLinkLocalRoutTable(String linkLocalBr) {
 -        Script command = new Script("/bin/bash", _timeout);
 -        command.add("-c");
 -        command.add("ip route | grep " + NetUtils.getLinkLocalCIDR());
 -        OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser();
 -        String result = command.execute(parser);
 -        boolean foundLinkLocalBr = false;
 -        if (result == null && parser.getLines() != null) {
 -            String[] lines = parser.getLines().split("\\n");
 -            for (String line : lines) {
 -                String[] tokens = line.split(" ");
 -                if (!tokens[2].equalsIgnoreCase(linkLocalBr)) {
 -                    Script.runSimpleBashScript("ip route del "
 -                            + NetUtils.getLinkLocalCIDR());
 -                } else {
 -                    foundLinkLocalBr = true;
 -                }
 -            }
 -        }
 -        if (!foundLinkLocalBr) {
 -            Script.runSimpleBashScript("ip route add "
 -                    + NetUtils.getLinkLocalCIDR() + " dev " + linkLocalBr
 -                    + " src " + NetUtils.getLinkLocalGateway());
 -        }
 -    }
  
+     private List<VmDiskStatsEntry> getVmDiskStat(Connect conn, String vmName)
+             throws LibvirtException {
+         Domain dm = null;
+         try {
+             dm = getDomain(conn, vmName);
+ 
+             List<VmDiskStatsEntry> stats = new ArrayList<VmDiskStatsEntry>();
+ 
+             List<DiskDef> disks = getDisks(conn, vmName);
+ 
+             for (DiskDef disk : disks) {
+                 DomainBlockStats blockStats = dm.blockStats(disk.getDiskLabel());
+                 String path = disk.getDiskPath(); // for example, path = /mnt/pool_uuid/disk_path/
+                 String diskPath = null;
+                 if (path != null) {
+                     String[] token = path.split("/");
+                     if (token.length > 3) {
+                         diskPath = token[3];
+                         VmDiskStatsEntry stat = new VmDiskStatsEntry(vmName, diskPath, blockStats.wr_req, blockStats.rd_req, blockStats.wr_bytes, blockStats.rd_bytes);
+                         stats.add(stat);
+                     }
+                 }
+             }
+ 
+             return stats;
+         } finally {
+             if (dm != null) {
+                 dm.free();
+             }
+         }
+     }
+ 
      private class vmStats {
          long _usedTime;
          long _tx;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java
index 5ddf60a,1f1f4c5..c13d37e
--- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java
@@@ -46,8 -33,11 +47,10 @@@ import com.cloud.agent.api.ComputeCheck
  import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand;
  import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand;
  import com.cloud.agent.api.CreateStoragePoolCommand;
+ import com.cloud.agent.api.CreateVMSnapshotCommand;
  import com.cloud.agent.api.CreateVolumeFromSnapshotCommand;
 -import com.cloud.agent.api.DeleteSnapshotBackupCommand;
  import com.cloud.agent.api.DeleteStoragePoolCommand;
+ import com.cloud.agent.api.DeleteVMSnapshotCommand;
  import com.cloud.agent.api.GetDomRVersionCmd;
  import com.cloud.agent.api.GetHostStatsCommand;
  import com.cloud.agent.api.GetStorageStatsCommand;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/18aeef3e/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
index edd26a3,a604392..68acd9e
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
@@@ -35,8 -36,8 +36,10 @@@ import javax.ejb.Local
  import javax.inject.Inject;
  import javax.naming.ConfigurationException;
  
 +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+ import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
+ import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
  import org.apache.log4j.Logger;
  
  import com.cloud.agent.AgentManager;
@@@ -53,11 -54,15 +56,15 @@@ import com.cloud.configuration.dao.Conf
  import com.cloud.dc.ClusterDetailsDao;
  import com.cloud.dc.ClusterVO;
  import com.cloud.dc.ClusterVSMMapVO;
+ import com.cloud.dc.DataCenterVO;
  import com.cloud.dc.dao.ClusterDao;
  import com.cloud.dc.dao.ClusterVSMMapDao;
+ import com.cloud.dc.dao.DataCenterDao;
  import com.cloud.exception.DiscoveredWithErrorException;
 +import com.cloud.host.Host;
- import com.cloud.host.HostVO;
+ import com.cloud.exception.DiscoveryException;
+ import com.cloud.exception.InvalidParameterValueException;
+ import com.cloud.exception.ResourceInUseException;
 -import com.cloud.host.HostVO;
  import com.cloud.host.Status;
  import com.cloud.host.dao.HostDao;
  import com.cloud.hypervisor.Hypervisor.HypervisorType;
@@@ -98,12 -113,11 +115,11 @@@ import com.cloud.vm.DomainRouterVO
  import com.google.gson.Gson;
  import com.vmware.vim25.AboutInfo;
  import com.vmware.vim25.HostConnectSpec;
--import com.vmware.vim25.ManagedObjectReference;
- import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;;
++import com.vmware.vim25.ManagedObjectReference;;
  
  
- @Local(value = {VmwareManager.class})
- public class VmwareManagerImpl extends ManagerBase implements VmwareManager, VmwareStorageMount, Listener {
+ @Local(value = {VmwareManager.class, VmwareDatacenterService.class})
+ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, VmwareStorageMount, Listener, VmwareDatacenterService {
      private static final Logger s_logger = Logger.getLogger(VmwareManagerImpl.class);
  
      private static final int STARTUP_DELAY = 60000; 				// 60 seconds