You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2014/03/14 00:55:36 UTC

[43/50] [abbrv] git commit: updated refs/heads/master to 8ff9460

Merge branch 'master' into rbac.


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

Branch: refs/heads/master
Commit: 99bdc8d8752a37f629bd86b842312e420b87b0af
Parents: f2d4b4d 5779292
Author: Min Chen <mi...@citrix.com>
Authored: Thu Mar 13 11:05:03 2014 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Mar 13 11:05:03 2014 -0700

----------------------------------------------------------------------
 agent/conf/agent.properties                     |  11 +
 .../SYSCONFDIR/rc.d/init.d/cloud-agent.in       |   2 +-
 .../SYSCONFDIR/rc.d/init.d/cloud-agent.in       |   2 +-
 .../sles/SYSCONFDIR/init.d/cloud-agent.in       |   2 +-
 .../rhel/SYSCONFDIR/rc.d/init.d/cloud-agent.in  |   2 +-
 .../sles/SYSCONFDIR/init.d/cloud-agent.in       |   2 +-
 .../cloud/agent/api/HostVmStateReportEntry.java |  10 +-
 api/src/com/cloud/agent/api/to/GPUDeviceTO.java |  56 ++
 .../cloud/agent/api/to/VirtualMachineTO.java    |   9 +
 api/src/com/cloud/event/EventTypes.java         |  42 +-
 api/src/com/cloud/gpu/GPU.java                  |  49 ++
 .../VpcVirtualNetworkApplianceService.java      |   8 +-
 .../element/AggregatedCommandExecutor.java      |  28 +
 .../com/cloud/offering/DiskOfferingInfo.java    |  65 ++
 api/src/com/cloud/server/ManagementService.java |  77 ++-
 api/src/com/cloud/storage/GuestOS.java          |   6 +
 .../com/cloud/storage/GuestOSHypervisor.java    |  10 +
 api/src/com/cloud/storage/VolumeApiService.java |   2 +
 api/src/com/cloud/user/AccountService.java      |   2 +
 api/src/com/cloud/vm/UserVmService.java         |   6 +
 .../cloudstack/api/ApiCommandJobType.java       |   6 +-
 .../org/apache/cloudstack/api/ApiConstants.java |  22 +-
 .../org/apache/cloudstack/api/BaseAsyncCmd.java |  36 -
 .../apache/cloudstack/api/BaseAsyncVMCmd.java   |  30 +
 .../cloudstack/api/BaseAsyncVolumeCmd.java      |  30 +
 api/src/org/apache/cloudstack/api/BaseCmd.java  | 239 +++----
 .../org/apache/cloudstack/api/BaseListCmd.java  |  30 +-
 .../org/apache/cloudstack/api/Parameter.java    |   2 -
 .../cloudstack/api/ResponseGenerator.java       |   4 +
 .../api/command/admin/guest/AddGuestOsCmd.java  | 136 ++++
 .../admin/guest/AddGuestOsMappingCmd.java       | 146 ++++
 .../admin/guest/ListGuestOsMappingCmd.java      | 101 +++
 .../command/admin/guest/RemoveGuestOsCmd.java   |  98 +++
 .../admin/guest/RemoveGuestOsMappingCmd.java    |  98 +++
 .../command/admin/guest/UpdateGuestOsCmd.java   | 104 +++
 .../admin/guest/UpdateGuestOsMappingCmd.java    | 102 +++
 .../admin/offering/CreateDiskOfferingCmd.java   |   6 +-
 .../offering/CreateServiceOfferingCmd.java      |  54 +-
 .../api/command/admin/user/CreateUserCmd.java   |   3 +-
 .../affinitygroup/DeleteAffinityGroupCmd.java   |   1 +
 .../user/autoscale/CreateConditionCmd.java      |   2 +-
 .../api/command/user/iso/ListIsosCmd.java       |   3 +-
 .../api/command/user/iso/RegisterIsoCmd.java    |   5 +-
 .../command/user/network/CreateNetworkCmd.java  |   2 +-
 .../gslb/CreateGlobalLoadBalancerRuleCmd.java   |   5 +-
 .../user/resource/ListResourceLimitsCmd.java    |   5 +-
 .../user/resource/UpdateResourceCountCmd.java   |   5 +-
 .../user/resource/UpdateResourceLimitCmd.java   |   7 +-
 .../AuthorizeSecurityGroupEgressCmd.java        |   2 +-
 .../AuthorizeSecurityGroupIngressCmd.java       |   2 +-
 .../securitygroup/DeleteSecurityGroupCmd.java   |   2 +-
 .../command/user/ssh/CreateSSHKeyPairCmd.java   |   2 +-
 .../command/user/ssh/DeleteSSHKeyPairCmd.java   |   1 +
 .../command/user/ssh/RegisterSSHKeyPairCmd.java |   2 +-
 .../command/user/template/ListTemplatesCmd.java |   3 +-
 .../user/template/RegisterTemplateCmd.java      |   5 +-
 .../api/command/user/vm/DeployVMCmd.java        |  62 +-
 .../api/command/user/vm/DestroyVMCmd.java       |   4 +-
 .../api/command/user/vm/ListVMsCmd.java         |   8 +
 .../api/command/user/vm/RebootVMCmd.java        |   4 +-
 .../api/command/user/vm/ResetVMPasswordCmd.java |   4 +-
 .../api/command/user/vm/ResetVMSSHKeyCmd.java   |   4 +-
 .../api/command/user/vm/RestoreVMCmd.java       |  10 +-
 .../api/command/user/vm/ScaleVMCmd.java         |   4 +-
 .../api/command/user/vm/StartVMCmd.java         |   4 +-
 .../api/command/user/vm/StopVMCmd.java          |   4 +-
 .../api/command/user/vm/UpgradeVMCmd.java       |   5 +
 .../command/user/vmgroup/CreateVMGroupCmd.java  |   2 +-
 .../command/user/volume/AttachVolumeCmd.java    |  15 +-
 .../command/user/volume/CreateVolumeCmd.java    |  14 +-
 .../command/user/volume/DeleteVolumeCmd.java    |   5 +
 .../command/user/volume/DetachVolumeCmd.java    |   6 +-
 .../command/user/volume/ExtractVolumeCmd.java   |   4 +-
 .../command/user/volume/MigrateVolumeCmd.java   |  10 +-
 .../command/user/volume/ResizeVolumeCmd.java    |  10 +-
 .../command/user/volume/UpdateVolumeCmd.java    |   5 +
 .../command/user/volume/UploadVolumeCmd.java    |   2 +-
 .../api/command/user/vpc/CreateVPCCmd.java      |   2 +-
 .../api/command/user/vpn/AddVpnUserCmd.java     |   2 +-
 .../user/vpn/CreateVpnCustomerGatewayCmd.java   |   2 +-
 .../api/command/user/vpn/RemoveVpnUserCmd.java  |   2 +-
 .../command/user/vpn/ResetVpnConnectionCmd.java |   2 +-
 .../user/vpn/UpdateVpnCustomerGatewayCmd.java   |   2 +-
 .../api/response/DiskOfferingResponse.java      |  12 +
 .../cloudstack/api/response/GpuResponse.java    |  46 ++
 .../api/response/GuestOsMappingResponse.java    | 102 +++
 .../cloudstack/api/response/HostResponse.java   |   8 +
 .../api/response/ServiceOfferingResponse.java   |  48 ++
 .../cloudstack/api/response/UserVmResponse.java |  10 +
 .../cloudstack/api/response/VgpuResponse.java   |  52 ++
 .../org/apache/cloudstack/api/BaseCmdTest.java  |  69 ++
 .../classes/resources/messages.properties       | 209 ++++++
 .../classes/resources/messages_ja_JP.properties | 272 +++++++-
 .../classes/resources/messages_zh_CN.properties | 572 +++++++++++-----
 client/tomcatconf/commands.properties.in        |   9 +
 .../com/cloud/agent/api/ClusterSyncAnswer.java  |  10 +-
 .../agent/api/ClusterVMMetaDataSyncAnswer.java  |  52 ++
 .../agent/api/ClusterVMMetaDataSyncCommand.java |  47 ++
 .../com/cloud/agent/api/GetGPUStatsAnswer.java  |  36 +
 .../com/cloud/agent/api/GetGPUStatsCommand.java |  47 ++
 .../cloud/agent/api/StartupRoutingCommand.java  |  17 +-
 core/src/com/cloud/agent/api/StopCommand.java   |   9 +
 .../api/routing/AggregationControlCommand.java  |  44 ++
 .../virtualnetwork/VirtualRoutingResource.java  | 210 ++++--
 core/src/com/cloud/info/ConsoleProxyInfo.java   |  19 +-
 .../storage/to/PrimaryDataStoreTO.java          |  18 +
 .../VirtualRoutingResourceTest.java             | 467 ++++++++++---
 .../src/com/cloud/vm/VirtualMachineManager.java |   4 +-
 .../service/VolumeOrchestrationService.java     |   2 +-
 .../api/storage/DataMotionService.java          |   2 +
 .../api/storage/DataMotionStrategy.java         |   2 +
 .../api/storage/PrimaryDataStoreInfo.java       |  18 +
 .../subsystem/api/storage/VolumeService.java    |   6 +-
 .../src/com/cloud/resource/ResourceManager.java |  41 ++
 .../cloud/agent/manager/DirectAgentAttache.java |   2 -
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 123 ++--
 .../engine/orchestration/CloudOrchestrator.java |  40 +-
 .../orchestration/NetworkOrchestrator.java      |  33 +-
 .../orchestration/VolumeOrchestrator.java       |  29 +-
 .../spring-engine-schema-core-daos-context.xml  |   2 +
 engine/schema/src/com/cloud/event/EventVO.java  |  12 +-
 .../src/com/cloud/gpu/HostGpuGroupsVO.java      |  70 ++
 .../schema/src/com/cloud/gpu/VGPUTypesVO.java   |  82 +++
 .../src/com/cloud/gpu/dao/HostGpuGroupsDao.java |  60 ++
 .../com/cloud/gpu/dao/HostGpuGroupsDaoImpl.java |  94 +++
 .../src/com/cloud/gpu/dao/VGPUTypesDao.java     |  48 ++
 .../src/com/cloud/gpu/dao/VGPUTypesDaoImpl.java |  95 +++
 engine/schema/src/com/cloud/host/HostVO.java    |  13 +
 .../src/com/cloud/host/dao/HostDaoImpl.java     |  18 +
 .../com/cloud/network/vpc/NetworkACLItemVO.java |  14 +-
 .../cloud/service/ServiceOfferingDetailsVO.java |   4 +
 .../com/cloud/storage/GuestOSHypervisorVO.java  |  62 +-
 .../schema/src/com/cloud/storage/GuestOSVO.java |  25 +-
 .../cloud/storage/dao/GuestOSHypervisorDao.java |   3 +
 .../storage/dao/GuestOSHypervisorDaoImpl.java   |  27 +
 .../cloud/upgrade/dao/DatabaseAccessObject.java |  99 +++
 .../com/cloud/upgrade/dao/DbUpgradeUtils.java   |  76 +--
 .../datastore/db/SnapshotDataStoreVO.java       |  11 +-
 .../datastore/db/TemplateDataStoreVO.java       |  11 +-
 .../storage/datastore/db/VolumeDataStoreVO.java |  11 +-
 .../upgrade/dao/DatabaseAccessObjectTest.java   | 463 +++++++++++++
 .../cloud/upgrade/dao/DbUpgradeUtilsTest.java   | 162 +++++
 .../motion/AncientDataMotionStrategy.java       |  25 +-
 .../storage/motion/DataMotionServiceImpl.java   |   9 +-
 .../storage/image/TemplateServiceImpl.java      |  13 +-
 .../storage/image/store/TemplateObject.java     |  15 +
 .../storage/test/MockStorageMotionStrategy.java |   5 +
 .../storage/datastore/PrimaryDataStoreImpl.java |  20 +-
 .../datastore/provider/DefaultHostListener.java |   2 +-
 .../storage/volume/VolumeServiceImpl.java       | 156 ++++-
 packaging/centos63/cloud-agent.rc               |   2 +-
 packaging/centos63/cloud-ipallocator.rc         |   2 +-
 .../networkservice/BareMetalResourceBase.java   |   3 +-
 .../hypervisor/hyperv/guru/HypervGuru.java      |   9 +-
 .../resource/HypervDirectConnectResource.java   | 218 +++++-
 .../kvm/resource/LibvirtComputingResource.java  | 110 ++-
 .../cloud/ovm/hypervisor/OvmResourceBase.java   |   2 +-
 .../cloud/resource/AgentRoutingResource.java    |   2 +-
 .../motion/SimulatorDataMotionStrategy.java     |   5 +
 .../vmware/resource/VmwareResource.java         |   2 +-
 .../network/element/CiscoNexusVSMElement.java   |   5 +-
 .../motion/VmwareStorageMotionStrategy.java     |   5 +
 .../src/com/cloud/hypervisor/XenServerGuru.java |  33 +-
 .../xen/resource/CitrixResourceBase.java        | 256 +++++--
 .../xen/resource/XenServer610Resource.java      |   8 -
 .../xen/resource/XenServerPoolVms.java          |  41 +-
 .../xen/resource/XenServerStorageProcessor.java | 126 +++-
 .../xenserver/XenServerResourceNewBase.java     |  20 +-
 .../motion/XenServerStorageMotionStrategy.java  |   5 +
 .../api/command/CreateServiceInstanceCmd.java   |   2 +-
 .../contrail/management/MockAccountManager.java |   5 +
 .../driver/CloudStackImageStoreDriverImpl.java  |  12 +-
 .../apache/cloudstack/ldap/LdapUserManager.java |   8 +-
 .../cloudstack/ldap/LdapUserManagerSpec.groovy  | 263 ++++----
 .../SYSCONFDIR/rc.d/init.d/cloud-ipallocator.in |   2 +-
 .../SYSCONFDIR/rc.d/init.d/cloud-ipallocator.in |   2 +-
 .../SYSCONFDIR/init.d/cloud-ipallocator.in      |   2 +-
 .../SYSCONFDIR/rc.d/init.d/cloud-ipallocator.in |   2 +-
 .../sles/SYSCONFDIR/init.d/cloud-ipallocator.in |   2 +-
 .../SYSCONFDIR/init.d/cloud-ipallocator.in      |   2 +-
 .../vm/hypervisor/xenserver/createipAlias.sh    |  25 -
 .../vm/hypervisor/xenserver/deleteipAlias.sh    |  24 -
 scripts/vm/hypervisor/xenserver/vmops           |  16 -
 scripts/vm/hypervisor/xenserver/xcposs/patch    |  12 -
 scripts/vm/hypervisor/xenserver/xcpserver/patch |   9 -
 .../vm/hypervisor/xenserver/xenserver56/patch   |   7 -
 .../hypervisor/xenserver/xenserver56fp1/patch   |   7 -
 .../vm/hypervisor/xenserver/xenserver60/patch   |   7 -
 .../vm/hypervisor/xenserver/xenserver62/patch   |   7 -
 .../core/spring-server-core-misc-context.xml    |  12 +
 .../allocator/impl/FirstFitAllocator.java       |  17 +-
 server/src/com/cloud/api/ApiDBUtils.java        |  30 +
 server/src/com/cloud/api/ApiDispatcher.java     | 481 ++------------
 server/src/com/cloud/api/ApiResponseHelper.java |  26 +-
 server/src/com/cloud/api/ApiServer.java         | 413 ++++++------
 server/src/com/cloud/api/ApiServlet.java        | 133 ++--
 .../api/dispatch/CommandCreationWorker.java     |  56 ++
 .../com/cloud/api/dispatch/DispatchChain.java   |  40 ++
 .../api/dispatch/DispatchChainFactory.java      |  72 ++
 .../com/cloud/api/dispatch/DispatchTask.java    |  58 ++
 .../com/cloud/api/dispatch/DispatchWorker.java  |  30 +
 .../dispatch/ParamGenericValidationWorker.java  | 103 +++
 .../cloud/api/dispatch/ParamProcessWorker.java  | 428 ++++++++++++
 .../cloud/api/dispatch/ParamUnpackWorker.java   | 114 ++++
 .../dispatch/SpecificCmdValidationWorker.java   |  34 +
 .../com/cloud/api/query/QueryManagerImpl.java   |  22 +-
 .../api/query/dao/DiskOfferingJoinDaoImpl.java  |   1 +
 .../cloud/api/query/dao/HostJoinDaoImpl.java    |  25 +
 .../query/dao/ServiceOfferingJoinDaoImpl.java   |   4 +
 .../api/query/dao/TemplateJoinDaoImpl.java      |   3 +-
 .../cloud/api/query/dao/UserVmJoinDaoImpl.java  |   6 +
 .../cloud/api/query/vo/DiskOfferingJoinVO.java  |   7 +-
 .../src/com/cloud/api/query/vo/EventJoinVO.java |   8 +-
 .../api/query/vo/ServiceOfferingJoinVO.java     |  28 +
 server/src/com/cloud/configuration/Config.java  |   4 +-
 .../configuration/ConfigurationManagerImpl.java | 104 ++-
 .../consoleproxy/ConsoleProxyManagerImpl.java   |  11 +-
 .../deploy/DeploymentPlanningManagerImpl.java   |  12 +
 .../src/com/cloud/event/ActionEventUtils.java   |  18 +-
 .../cloud/hypervisor/HypervisorGuruBase.java    |  15 +
 .../com/cloud/network/IpAddressManagerImpl.java |   4 +-
 .../src/com/cloud/network/NetworkModelImpl.java |  14 +-
 .../com/cloud/network/NetworkServiceImpl.java   |   5 +-
 .../cloud/network/NetworkUsageManagerImpl.java  |   4 +
 .../cloud/network/as/AutoScaleManagerImpl.java  |   7 +-
 .../network/element/VirtualRouterElement.java   |  71 +-
 .../element/VpcVirtualRouterElement.java        |  14 +-
 .../router/VirtualNetworkApplianceManager.java  |  16 +-
 .../VirtualNetworkApplianceManagerImpl.java     | 129 ++--
 .../VpcVirtualNetworkApplianceManagerImpl.java  |  76 ++-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |   5 +-
 .../com/cloud/resource/ResourceManagerImpl.java |  97 ++-
 .../src/com/cloud/server/ManagementServer.java  |   3 +
 .../com/cloud/server/ManagementServerImpl.java  | 257 ++++++-
 server/src/com/cloud/server/StatsCollector.java |  21 +
 .../com/cloud/storage/VolumeApiServiceImpl.java |  17 +
 .../storage/snapshot/SnapshotSchedulerImpl.java | 105 +--
 .../src/com/cloud/user/AccountManagerImpl.java  |  46 ++
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  21 +-
 .../test/com/cloud/api/ApiDispatcherTest.java   | 106 ---
 .../api/dispatch/CommandCreationWorkerTest.java |  48 ++
 .../api/dispatch/DispatchChainFactoryTest.java  |  55 ++
 .../ParamGenericValidationWorkerTest.java       | 195 ++++++
 .../api/dispatch/ParamProcessWorkerTest.java    | 107 +++
 .../SpecificCmdValidationWorkerTest.java        |  48 ++
 .../cloud/network/vpc/VpcManagerImplTest.java   |  66 ++
 .../cloud/resource/MockResourceManagerImpl.java |  31 +
 .../com/cloud/user/MockAccountManagerImpl.java  |   5 +
 .../vm/DeploymentPlanningManagerImplTest.java   |  12 +
 .../MockVpcVirtualNetworkApplianceManager.java  |  39 +-
 server/test/resources/createNetworkOffering.xml |   4 +-
 .../SecondaryStorageManagerImpl.java            |   7 +
 setup/db/db/schema-421to430.sql                 |   4 +
 setup/db/db/schema-430to440.sql                 |  37 +-
 systemvm/conf/consoleproxy.properties           |   2 +-
 .../rc.d/init.d/cloud-console-proxy.in          |   2 +-
 .../rc.d/init.d/cloud-console-proxy.in          |   2 +-
 .../rc.d/init.d/cloud-console-proxy.in          |   2 +-
 .../SYSCONFDIR/init.d/cloud-console-proxy.in    |   2 +-
 .../debian/config/etc/init.d/cloud-early-config |  18 +-
 .../debian/config/opt/cloud/bin/vr_cfg.sh       |  96 +++
 .../component/test_cpu_domain_limits.py         |  11 +-
 test/integration/component/test_cpu_limits.py   |  15 +-
 .../component/test_cpu_project_limits.py        |   7 +-
 .../component/test_dynamic_compute_offering.py  | 409 ++++++++++++
 .../integration/component/test_memory_limits.py |  15 +-
 .../component/test_mm_domain_limits.py          |   7 +-
 .../component/test_mm_project_limits.py         |   7 +-
 test/integration/component/test_routers.py      |  28 +-
 .../component/test_vpc_vm_life_cycle.py         | 108 +--
 .../smoke/test_deploy_vgpu_enabled_vm.py        | 227 +++++++
 test/integration/smoke/test_deploy_vm.py        |  52 +-
 tools/marvin/marvin/codes.py                    |   1 +
 tools/marvin/marvin/configGenerator.py          |   5 +-
 tools/marvin/marvin/integration/lib/base.py     |  32 +-
 tools/marvin/marvin/integration/lib/common.py   |  39 +-
 tools/marvin/marvin/integration/lib/utils.py    |   3 +-
 .../marvin/sandbox/advanced/advanced_env.py     |  23 +-
 .../marvin/sandbox/advancedsg/advancedsg_env.py |  18 +-
 tools/marvin/marvin/sandbox/basic/basic_env.py  |  16 +-
 .../sandbox/demo/simulator/simulator_setup.py   |  16 +-
 tools/ngui/static/js/app/accounts/accounts.js   |  16 +-
 tools/ngui/static/js/app/storage/storage.js     |   2 +-
 ui/css/cloudstack3.css                          |  42 +-
 ui/dictionary.jsp                               | 220 +++++-
 ui/images/sprites.png                           | Bin 212515 -> 211543 bytes
 ui/index.jsp                                    |  11 +
 .../vnmcNetworkProvider/vnmcNetworkProvider.js  |  50 +-
 ui/scripts/configuration.js                     | 350 ++++++++--
 ui/scripts/installWizard.js                     |   6 +-
 ui/scripts/instanceWizard.js                    |  16 +-
 ui/scripts/instances.js                         |  24 +-
 ui/scripts/network.js                           |  62 +-
 ui/scripts/sharedFunctions.js                   |  28 +-
 ui/scripts/storage.js                           |   6 +-
 ui/scripts/system.js                            | 662 ++++++++++---------
 ui/scripts/templates.js                         |   6 +-
 ui/scripts/ui-custom/instanceWizard.js          |   8 +
 ui/scripts/ui-custom/zoneChart.js               |  16 +-
 ui/scripts/ui/core.js                           |   2 +-
 ui/scripts/ui/dialog.js                         |   2 +-
 ui/scripts/ui/widgets/multiEdit.js              |   2 +-
 ui/scripts/ui/widgets/tagger.js                 |   4 +-
 ui/scripts/vpc.js                               |  16 +-
 ui/scripts/zoneWizard.js                        |  12 +-
 utils/src/com/cloud/utils/ReflectUtil.java      |  13 +
 306 files changed, 11294 insertions(+), 2990 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/com/cloud/storage/VolumeApiService.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/com/cloud/user/AccountService.java
----------------------------------------------------------------------
diff --cc api/src/com/cloud/user/AccountService.java
index 37f6105,de0b470..85c71ca
--- a/api/src/com/cloud/user/AccountService.java
+++ b/api/src/com/cloud/user/AccountService.java
@@@ -108,9 -103,6 +108,11 @@@ public interface AccountService 
  
      void checkAccess(Account account, AccessType accessType, boolean sameOwner, ControlledEntity... entities) throws PermissionDeniedException;
  
 -    Long finalyzeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly);
 +    void checkAccess(Account account, AccessType accessType, boolean sameOwner, String apiName,
 +            ControlledEntity... entities) throws PermissionDeniedException;
  
 +    //TO be implemented, to check accessibility for an entity owned by domain
 +    void checkAccess(Account account, AccessType accessType, boolean sameOwner, PartOf... entities) throws PermissionDeniedException;
++
++    Long finalyzeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly);
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/ApiConstants.java
index 62191fc,089affb..239b8cd
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@@ -568,8 -583,12 +583,13 @@@ public class ApiConstants 
      public static final String PASSIVE = "passive";
      public static final String VERSION = "version";
      public static final String START = "start";
+     public static final String GPUGROUP = "gpugroup";
+     public static final String GPUGROUPNAME = "gpugroupname";
+     public static final String VGPU = "vgpu";
+     public static final String VGPUTYPE = "vgputype";
+     public static final String REMAININGCAPACITY = "remainingcapacity";
  
 +
      public enum HostDetails {
          all, capacity, events, stats, min;
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/BaseCmd.java
index 7c720c9,937ccc2..f6f21ae
--- a/api/src/org/apache/cloudstack/api/BaseCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseCmd.java
@@@ -26,22 -29,21 +29,22 @@@ import java.util.regex.Pattern
  
  import javax.inject.Inject;
  
++import org.apache.log4j.Logger;
++
+ import org.apache.cloudstack.acl.RoleType;
  import org.apache.cloudstack.affinity.AffinityGroupService;
  import org.apache.cloudstack.alert.AlertService;
+ import org.apache.cloudstack.context.CallContext;
  import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
  import org.apache.cloudstack.network.lb.ApplicationLoadBalancerService;
  import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
  import org.apache.cloudstack.query.QueryService;
  import org.apache.cloudstack.usage.UsageService;
--import org.apache.log4j.Logger;
  
  import com.cloud.configuration.ConfigurationService;
- import com.cloud.domain.Domain;
  import com.cloud.exception.ConcurrentOperationException;
  import com.cloud.exception.InsufficientCapacityException;
- import com.cloud.exception.InvalidParameterValueException;
  import com.cloud.exception.NetworkRuleConflictException;
- import com.cloud.exception.PermissionDeniedException;
  import com.cloud.exception.ResourceAllocationException;
  import com.cloud.exception.ResourceUnavailableException;
  import com.cloud.network.NetworkModel;
@@@ -264,92 -279,68 +280,68 @@@ public abstract class BaseCmd 
          return formattedString;
      }
  
-     // FIXME: move this to a utils method so that maps can be unpacked and integer/long values can be appropriately cast
-     @SuppressWarnings({"unchecked", "rawtypes"})
-     public Map<String, Object> unpackParams(Map<String, String> params) {
-         Map<String, Object> lowercaseParams = new HashMap<String, Object>();
-         for (String key : params.keySet()) {
-             int arrayStartIndex = key.indexOf('[');
-             int arrayStartLastIndex = key.lastIndexOf('[');
-             if (arrayStartIndex != arrayStartLastIndex) {
-                 throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key +
-                     "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
-             }
- 
-             if (arrayStartIndex > 0) {
-                 int arrayEndIndex = key.indexOf(']');
-                 int arrayEndLastIndex = key.lastIndexOf(']');
-                 if ((arrayEndIndex < arrayStartIndex) || (arrayEndIndex != arrayEndLastIndex)) {
-                     // malformed parameter
-                     throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key +
-                         "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
-                 }
+     protected List<Field> getAllFieldsForClass(final Class<?> clazz) {
+         List<Field> filteredFields = fieldsForCmdClass.get(clazz);
  
-                 // Now that we have an array object, check for a field name in the case of a complex object
-                 int fieldIndex = key.indexOf('.');
-                 String fieldName = null;
-                 if (fieldIndex < arrayEndIndex) {
-                     throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key +
-                         "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
-                 } else {
-                     fieldName = key.substring(fieldIndex + 1);
-                 }
+         // If list of fields was not cached yet
+         if (filteredFields == null) {
+             final List<Field> allFields = ReflectUtil.getAllFieldsForClass(this.getClass(), BaseCmd.class);
+             filteredFields = new ArrayList<Field>();
  
-                 // parse the parameter name as the text before the first '[' character
-                 String paramName = key.substring(0, arrayStartIndex);
-                 paramName = paramName.toLowerCase();
- 
-                 Map<Integer, Map> mapArray = null;
-                 Map<String, Object> mapValue = null;
-                 String indexStr = key.substring(arrayStartIndex + 1, arrayEndIndex);
-                 int index = 0;
-                 boolean parsedIndex = false;
-                 try {
-                     if (indexStr != null) {
-                         index = Integer.parseInt(indexStr);
-                         parsedIndex = true;
+             for (final Field field : allFields) {
+                 final Parameter parameterAnnotation = field.getAnnotation(Parameter.class);
+                 if ((parameterAnnotation != null) && parameterAnnotation.expose()) {
+                     filteredFields.add(field);
 +                    }
-                 } catch (NumberFormatException nfe) {
-                     s_logger.warn("Invalid parameter " + key + " received, unable to parse object array, returning an error.");
                  }
 -            }
  
-                 if (!parsedIndex) {
-                     throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key +
-                         "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
+             // Cache the prepared list for future use
+             fieldsForCmdClass.put(clazz, filteredFields);
 -        }
++                    }
+         return filteredFields;
 -    }
 +                }
  
-                 Object value = lowercaseParams.get(paramName);
-                 if (value == null) {
-                     // for now, assume object array with sub fields
-                     mapArray = new HashMap<Integer, Map>();
-                     mapValue = new HashMap<String, Object>();
-                     mapArray.put(Integer.valueOf(index), mapValue);
-                 } else if (value instanceof Map) {
-                     mapArray = (HashMap)value;
-                     mapValue = mapArray.get(Integer.valueOf(index));
-                     if (mapValue == null) {
-                         mapValue = new HashMap<String, Object>();
-                         mapArray.put(Integer.valueOf(index), mapValue);
+     /**
+      * This method doesn't return all the @{link Parameter}, but only the ones exposed
+      * and allowed for current @{link RoleType}. This method will get the fields for a given
+      * Cmd class only once and never again, so in case of a dynamic update the result would
+      * be obsolete (this might be a plugin update. It is agreed upon that we will not do
+      * upgrades dynamically but in case we come back on that decision we need to revisit this)
+      *
+      * @return
+      */
+     public List<Field> getParamFields() {
+         final List<Field> allFields = getAllFieldsForClass(this.getClass());
+         final List<Field> validFields = new ArrayList<Field>();
+         final Account caller = CallContext.current().getCallingAccount();
+ 
+         for (final Field field : allFields) {
+             final Parameter parameterAnnotation = field.getAnnotation(Parameter.class);
+ 
+             //TODO: Annotate @Validate on API Cmd classes, FIXME how to process Validate
+             final RoleType[] allowedRoles = parameterAnnotation.authorized();
+             boolean roleIsAllowed = true;
+             if (allowedRoles.length > 0) {
+                 roleIsAllowed = false;
+                 for (final RoleType allowedRole : allowedRoles) {
+                     if (allowedRole.getValue() == caller.getType()) {
+                         roleIsAllowed = true;
+                         break;
                      }
                  }
+             }
  
-                 // we are ready to store the value for a particular field into the map for this object
-                 mapValue.put(fieldName, params.get(key));
- 
-                 lowercaseParams.put(paramName, mapArray);
+             if (roleIsAllowed) {
+                 validFields.add(field);
              } else {
-                 lowercaseParams.put(key.toLowerCase(), params.get(key));
+                 s_logger.debug("Ignoring paremeter " + parameterAnnotation.name() + " as the caller is not authorized to pass it in");
              }
          }
-         return lowercaseParams;
-     }
  
-     protected long getInstanceIdFromJobSuccessResult(String result) {
-         s_logger.debug("getInstanceIdFromJobSuccessResult not overridden in subclass " + this.getClass().getName());
-         return 0;
+         return validFields;
      }
  
-     public void setFullUrlParams(Map<String, String> map) {
+     public void setFullUrlParams(final Map<String, String> map) {
          fullUrlParams = map;
      }
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/ResponseGenerator.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
index eb9145c,6a6dd25..378a826
--- a/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/affinitygroup/DeleteAffinityGroupCmd.java
@@@ -16,12 -16,7 +16,13 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.affinitygroup;
  
++
 +import org.apache.log4j.Logger;
 +
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
  import org.apache.cloudstack.affinity.AffinityGroupResponse;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
index 19b29bd,92105c1..d0a5234
--- a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java
@@@ -16,9 -16,6 +16,10 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.ssh;
  
++
 +import org.apache.log4j.Logger;
 +
 +import org.apache.cloudstack.acl.IAMEntityType;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.BaseCmd;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
index b8ac561,e9a5213..4c3a415
--- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java
@@@ -18,18 -18,14 +18,18 @@@ package org.apache.cloudstack.api.comma
  
  import java.util.List;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.UserVmResponse;
  import org.apache.cloudstack.context.CallContext;
@@@ -40,10 -36,12 +40,10 @@@ import com.cloud.exception.ResourceUnav
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "destroyVirtualMachine",
 -            description = "Destroys a virtual machine. Once destroyed, only the administrator can recover it.",
 -            responseObject = UserVmResponse.class,
 +@APICommand(name = "destroyVirtualMachine", description = "Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject = UserVmResponse.class, responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
              requestHasSensitiveInfo = false,
              responseHasSensitiveInfo = true)
- public class DestroyVMCmd extends BaseAsyncCmd {
+ public class DestroyVMCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(DestroyVMCmd.class.getName());
  
      private static final String s_name = "destroyvirtualmachineresponse";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
index 8f04430,c547d62..0f04114
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java
@@@ -16,18 -16,14 +16,18 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.vm;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.UserVmResponse;
  import org.apache.cloudstack.context.CallContext;
@@@ -38,9 -34,9 +38,9 @@@ import com.cloud.exception.ResourceUnav
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "rebootVirtualMachine", description = "Reboots a virtual machine.", responseObject = UserVmResponse.class,
 +@APICommand(name = "rebootVirtualMachine", description = "Reboots a virtual machine.", responseObject = UserVmResponse.class, responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = true)
- public class RebootVMCmd extends BaseAsyncCmd {
+ public class RebootVMCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(RebootVMCmd.class.getName());
      private static final String s_name = "rebootvirtualmachineresponse";
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
index 2fd508b,461ce7f..615ef69
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java
@@@ -16,18 -16,14 +16,18 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.vm;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.UserVmResponse;
  import org.apache.cloudstack.context.CallContext;
@@@ -38,11 -34,10 +38,11 @@@ import com.cloud.exception.ResourceUnav
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "resetPasswordForVirtualMachine", responseObject = UserVmResponse.class, description = "Resets the password for virtual machine. "
 -    + "The virtual machine must be in a \"Stopped\" state and the template must already " + "support this feature for this command to take effect. [async]",
 +@APICommand(name = "resetPasswordForVirtualMachine", responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " +
 +                    "The virtual machine must be in a \"Stopped\" state and the template must already " +
 +        "support this feature for this command to take effect. [async]", responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
      requestHasSensitiveInfo = false, responseHasSensitiveInfo = true)
- public class ResetVMPasswordCmd extends BaseAsyncCmd {
+ public class ResetVMPasswordCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(ResetVMPasswordCmd.class.getName());
  
      private static final String s_name = "resetpasswordforvirtualmachineresponse";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
index 288eed7,b7ab357..7d43853
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMSSHKeyCmd.java
@@@ -17,18 -17,14 +17,18 @@@
  
  package org.apache.cloudstack.api.command.user.vm;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.DomainResponse;
  import org.apache.cloudstack.api.response.ProjectResponse;
@@@ -41,10 -37,10 +41,10 @@@ import com.cloud.exception.ResourceUnav
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "resetSSHKeyForVirtualMachine", responseObject = UserVmResponse.class, description = "Resets the SSH Key for virtual machine. "
 -    + "The virtual machine must be in a \"Stopped\" state. [async]",
 +@APICommand(name = "resetSSHKeyForVirtualMachine", responseObject = UserVmResponse.class, description = "Resets the SSH Key for virtual machine. " +
 +        "The virtual machine must be in a \"Stopped\" state. [async]", responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
      requestHasSensitiveInfo = false, responseHasSensitiveInfo = true)
- public class ResetVMSSHKeyCmd extends BaseAsyncCmd {
+ public class ResetVMSSHKeyCmd extends BaseAsyncVMCmd {
  
      public static final Logger s_logger = Logger.getLogger(ResetVMSSHKeyCmd.class.getName());
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
index 9befc67,81c40ec..0d5ef70
--- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java
@@@ -16,17 -16,13 +16,17 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.vm;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.TemplateResponse;
  import org.apache.cloudstack.api.response.UserVmResponse;
@@@ -40,10 -36,13 +40,10 @@@ import com.cloud.exception.ResourceUnav
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "restoreVirtualMachine",
 -            description = "Restore a VM to original template/ISO or new template/ISO",
 -            responseObject = UserVmResponse.class,
 -            since = "3.0.0",
 +@APICommand(name = "restoreVirtualMachine", description = "Restore a VM to original template/ISO or new template/ISO", responseObject = UserVmResponse.class, since = "3.0.0", responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
              requestHasSensitiveInfo = false,
              responseHasSensitiveInfo = true)
- public class RestoreVMCmd extends BaseAsyncCmd {
+ public class RestoreVMCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class);
      private static final String s_name = "restorevmresponse";
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
index cd658cb,07672c0..d668ad4
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java
@@@ -30,10 -26,9 +30,10 @@@ import org.apache.cloudstack.api.ACL
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.cloudstack.api.BaseCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.ServiceOfferingResponse;
  import org.apache.cloudstack.api.response.SuccessResponse;
@@@ -47,10 -43,9 +47,10 @@@ import com.cloud.exception.VirtualMachi
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "scaleVirtualMachine", description = "Scales the virtual machine to a new service offering.", responseObject = SuccessResponse.class,
 +
 +@APICommand(name = "scaleVirtualMachine", description = "Scales the virtual machine to a new service offering.", responseObject = SuccessResponse.class, responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
- public class ScaleVMCmd extends BaseAsyncCmd {
+ public class ScaleVMCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(ScaleVMCmd.class.getName());
      private static final String s_name = "scalevirtualmachineresponse";
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
index 2e4187d,553b753..4e91c7b
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java
@@@ -16,18 -16,14 +16,18 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.vm;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.HostResponse;
  import org.apache.cloudstack.api.response.UserVmResponse;
@@@ -44,9 -40,9 +44,9 @@@ import com.cloud.user.Account
  import com.cloud.uservm.UserVm;
  import com.cloud.utils.exception.ExecutionException;
  
 -@APICommand(name = "startVirtualMachine", responseObject = UserVmResponse.class, description = "Starts a virtual machine.",
 +@APICommand(name = "startVirtualMachine", responseObject = UserVmResponse.class, description = "Starts a virtual machine.", responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = true)
- public class StartVMCmd extends BaseAsyncCmd {
+ public class StartVMCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(StartVMCmd.class.getName());
  
      private static final String s_name = "startvirtualmachineresponse";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
index fe94964,e9fa97b..6db5d18
--- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java
@@@ -16,18 -16,15 +16,18 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.vm;
  
+ import org.apache.cloudstack.api.BaseAsyncVMCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
  import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.UserVmResponse;
  import org.apache.cloudstack.context.CallContext;
@@@ -37,9 -34,9 +37,9 @@@ import com.cloud.exception.ConcurrentOp
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "stopVirtualMachine", responseObject = UserVmResponse.class, description = "Stops a virtual machine.",
 +@APICommand(name = "stopVirtualMachine", responseObject = UserVmResponse.class, description = "Stops a virtual machine.", responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = true)
- public class StopVMCmd extends BaseAsyncCmd {
+ public class StopVMCmd extends BaseAsyncVMCmd {
      public static final Logger s_logger = Logger.getLogger(StopVMCmd.class.getName());
  
      private static final String s_name = "stopvirtualmachineresponse";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
index 553e2e9,7939edf..f9d9081
--- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java
@@@ -15,18 -15,15 +15,19 @@@
  // specific language governing permissions and limitations
  // under the License.
  package org.apache.cloudstack.api.command.user.volume;
+ 
 -import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
++import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.UserVmResponse;
  import org.apache.cloudstack.api.response.VolumeResponse;
@@@ -36,9 -33,9 +37,9 @@@ import com.cloud.event.EventTypes
  import com.cloud.storage.Volume;
  import com.cloud.user.Account;
  
 -@APICommand(name = "attachVolume", description = "Attaches a disk volume to a virtual machine.", responseObject = VolumeResponse.class,
 +@APICommand(name = "attachVolume", description = "Attaches a disk volume to a virtual machine.", responseObject = VolumeResponse.class, responseView = ResponseView.Restricted, entityType = {IAMEntityType.VirtualMachine},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
- public class AttachVolumeCmd extends BaseAsyncCmd {
+ public class AttachVolumeCmd extends BaseAsyncVolumeCmd {
      public static final Logger s_logger = Logger.getLogger(AttachVolumeCmd.class.getName());
      private static final String s_name = "attachvolumeresponse";
  
@@@ -67,6 -66,6 +68,7 @@@
          return deviceId;
      }
  
++    @Override
      public Long getId() {
          return id;
      }
@@@ -109,17 -108,8 +111,8 @@@
      }
  
      @Override
-     public boolean isDisplayResourceEnabled(){
-         Volume volume = _responseGenerator.findVolumeById(getId());
-         if (volume == null) {
-             return true; // bad id given, parent this command to true so ERROR events are tracked
-         }
-         return volume.isDisplayVolume();
-     }
- 
-     @Override
      public String getEventDescription() {
 -        return "attaching volume: " + getId() + " to vm: " + getVirtualMachineId();
 +        return  "attaching volume: " + getId() + " to vm: " + getVirtualMachineId();
      }
  
      @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
index ad06bc2,31d75d8..9b83f61
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@@ -221,10 -221,9 +222,9 @@@ public class CreateVolumeCmd extends Ba
      @Override
      public void execute() {
          CallContext.current().setEventDetails("Volume Id: " + getEntityId() + ((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId()));
-         CallContext.current().setEventDisplayEnabled(getDisplayVolume());
          Volume volume = _volumeService.createVolume(this);
          if (volume != null) {
 -            VolumeResponse response = _responseGenerator.createVolumeResponse(volume);
 +            VolumeResponse response = _responseGenerator.createVolumeResponse(ResponseView.Restricted, volume);
              //FIXME - have to be moved to ApiResponseHelper
              if (getSnapshotId() != null) {
                  Snapshot snap = _entityMgr.findById(Snapshot.class, getSnapshotId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
index 546a9d5,eff7a35..6ca96b0
--- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java
@@@ -81,12 -77,17 +81,17 @@@ public class DeleteVolumeCmd extends Ba
      }
  
      @Override
+     public boolean isDisplayResourceEnabled(){
+         return _volumeService.isDisplayResourceEnabled(getId());
+     }
+ 
+     @Override
      public void execute() throws ConcurrentOperationException {
          CallContext.current().setEventDetails("Volume Id: " + getId());
 -        boolean result = this._volumeService.deleteVolume(id, CallContext.current().getCallingAccount());
 +        boolean result = _volumeService.deleteVolume(id, CallContext.current().getCallingAccount());
          if (result) {
              SuccessResponse response = new SuccessResponse(getCommandName());
 -            this.setResponseObject(response);
 +            setResponseObject(response);
          } else {
              throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete volume");
          }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
index 1a874e1,b45ad0b..bfd0322
--- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java
@@@ -15,18 -15,15 +15,19 @@@
  // specific language governing permissions and limitations
  // under the License.
  package org.apache.cloudstack.api.command.user.volume;
+ 
 -import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
++import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.UserVmResponse;
  import org.apache.cloudstack.api.response.VolumeResponse;
@@@ -37,9 -34,9 +38,9 @@@ import com.cloud.storage.Volume
  import com.cloud.user.Account;
  import com.cloud.uservm.UserVm;
  
 -@APICommand(name = "detachVolume", description = "Detaches a disk volume from a virtual machine.", responseObject = VolumeResponse.class,
 +@APICommand(name = "detachVolume", description = "Detaches a disk volume from a virtual machine.", responseObject = VolumeResponse.class, responseView = ResponseView.Restricted, entityType = {IAMEntityType.Volume},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
- public class DetachVolumeCmd extends BaseAsyncCmd {
+ public class DetachVolumeCmd extends BaseAsyncVolumeCmd {
      public static final Logger s_logger = Logger.getLogger(DetachVolumeCmd.class.getName());
      private static final String s_name = "detachvolumeresponse";
  
@@@ -65,6 -60,6 +66,7 @@@
      /////////////////// Accessors ///////////////////////
      /////////////////////////////////////////////////////
  
++    @Override
      public Long getId() {
          return id;
      }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
index b9883cc,7f5cd0d..cc7f56c
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
@@@ -16,11 -16,9 +16,12 @@@
  // under the License.
  package org.apache.cloudstack.api.command.user.volume;
  
+ import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.log4j.Logger;
  
 +import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.acl.SecurityChecker.AccessType;
 +import org.apache.cloudstack.api.ACL;
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
@@@ -39,9 -36,9 +39,9 @@@ import com.cloud.storage.Upload
  import com.cloud.storage.Volume;
  import com.cloud.user.Account;
  
 -@APICommand(name = "extractVolume", description = "Extracts volume", responseObject = ExtractResponse.class,
 +@APICommand(name = "extractVolume", description = "Extracts volume", responseObject = ExtractResponse.class, entityType = {IAMEntityType.Volume},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
- public class ExtractVolumeCmd extends BaseAsyncCmd {
+ public class ExtractVolumeCmd extends BaseAsyncVolumeCmd {
      public static final Logger s_logger = Logger.getLogger(ExtractVolumeCmd.class.getName());
  
      private static final String s_name = "extractvolumeresponse";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
index 820d73d,126f1f3..d80595a
--- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java
@@@ -20,9 -19,8 +20,9 @@@ import org.apache.cloudstack.acl.IAMEnt
  import org.apache.cloudstack.api.APICommand;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
+ import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.StoragePoolResponse;
  import org.apache.cloudstack.api.response.VolumeResponse;
@@@ -31,12 -29,12 +31,12 @@@ import com.cloud.event.EventTypes
  import com.cloud.storage.Volume;
  import com.cloud.user.Account;
  
 -@APICommand(name = "migrateVolume", description = "Migrate volume", responseObject = VolumeResponse.class, since = "3.0.0",
 +@APICommand(name = "migrateVolume", description = "Migrate volume", responseObject = VolumeResponse.class, since = "3.0.0", responseView = ResponseView.Restricted, entityType = {IAMEntityType.Volume},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
- public class MigrateVolumeCmd extends BaseAsyncCmd {
+ public class MigrateVolumeCmd extends BaseAsyncVolumeCmd {
      private static final String s_name = "migratevolumeresponse";
  
 -    /////////////////////////////////////////////////////
 +     /////////////////////////////////////////////////////
      //////////////// API parameters /////////////////////
      /////////////////////////////////////////////////////
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
index 2f34c75,d51cdc5..d5cd62b
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java
@@@ -24,9 -20,8 +24,9 @@@ import org.apache.cloudstack.api.APICom
  import org.apache.cloudstack.api.ApiCommandJobType;
  import org.apache.cloudstack.api.ApiConstants;
  import org.apache.cloudstack.api.ApiErrorCode;
- import org.apache.cloudstack.api.BaseAsyncCmd;
+ import org.apache.cloudstack.api.BaseAsyncVolumeCmd;
  import org.apache.cloudstack.api.Parameter;
 +import org.apache.cloudstack.api.ResponseObject.ResponseView;
  import org.apache.cloudstack.api.ServerApiException;
  import org.apache.cloudstack.api.response.DiskOfferingResponse;
  import org.apache.cloudstack.api.response.VolumeResponse;
@@@ -40,10 -36,9 +40,10 @@@ import com.cloud.projects.Project
  import com.cloud.storage.Volume;
  import com.cloud.user.Account;
  
 -@APICommand(name = "resizeVolume", description = "Resizes a volume", responseObject = VolumeResponse.class,
 +
 +@APICommand(name = "resizeVolume", description = "Resizes a volume", responseObject = VolumeResponse.class, responseView = ResponseView.Restricted, entityType = {IAMEntityType.Volume},
          requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
- public class ResizeVolumeCmd extends BaseAsyncCmd {
+ public class ResizeVolumeCmd extends BaseAsyncVolumeCmd {
      public static final Logger s_logger = Logger.getLogger(ResizeVolumeCmd.class.getName());
  
      private static final String s_name = "resizevolumeresponse";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/UpdateVolumeCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
----------------------------------------------------------------------
diff --cc engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 6e55bd2,e36dc62..6aa1e36
--- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@@ -16,41 -16,6 +16,43 @@@
  // under the License.
  package org.apache.cloudstack.engine.orchestration;
  
++
 +import java.net.URI;
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Collections;
 +import java.util.Comparator;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.LinkedHashMap;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Set;
 +import java.util.UUID;
 +import java.util.concurrent.Executors;
 +import java.util.concurrent.ScheduledExecutorService;
 +import java.util.concurrent.TimeUnit;
 +
 +import javax.ejb.Local;
 +import javax.inject.Inject;
 +import javax.naming.ConfigurationException;
 +
- import org.apache.cloudstack.acl.IAMEntityType;
++import org.apache.log4j.Logger;
++
 +import org.apache.cloudstack.acl.ControlledEntity.ACLType;
++import org.apache.cloudstack.acl.IAMEntityType;
 +import org.apache.cloudstack.api.ApiConstants;
 +import org.apache.cloudstack.context.CallContext;
 +import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
 +import org.apache.cloudstack.framework.config.ConfigDepot;
 +import org.apache.cloudstack.framework.config.ConfigKey;
 +import org.apache.cloudstack.framework.config.Configurable;
 +import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 +import org.apache.cloudstack.framework.messagebus.MessageBus;
 +import org.apache.cloudstack.framework.messagebus.PublishScope;
 +import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 +import org.apache.cloudstack.region.PortableIpDao;
- import org.apache.log4j.Logger;
 +
  import com.cloud.agent.AgentManager;
  import com.cloud.agent.Listener;
  import com.cloud.agent.api.AgentControlAnswer;
@@@ -1082,16 -1067,42 +1085,42 @@@ public class NetworkOrchestrator extend
              }
          }
  
+         for (NetworkElement element : networkElements) {
+             if ((element instanceof AggregatedCommandExecutor) && (providersToImplement.contains(element.getProvider()))) {
+                 ((AggregatedCommandExecutor)element).prepareAggregatedExecution(network, dest);
+             }
+         }
+ 
+         try {
 -            // reapply all the firewall/staticNat/lb rules
 -            s_logger.debug("Reprogramming network " + network + " as a part of network implement");
 -            if (!reprogramNetworkRules(network.getId(), CallContext.current().getCallingAccount(), network)) {
 -                s_logger.warn("Failed to re-program the network as a part of network " + network + " implement");
 -                // see DataCenterVO.java
 -                ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class,
 -                        network.getDataCenterId());
 -                ex.addProxyObject(_entityMgr.findById(DataCenter.class, network.getDataCenterId()).getUuid());
 -                throw ex;
 -            }
 +        // reapply all the firewall/staticNat/lb rules
 +        s_logger.debug("Reprogramming network " + network + " as a part of network implement");
 +        if (!reprogramNetworkRules(network.getId(), CallContext.current().getCallingAccount(), network)) {
 +            s_logger.warn("Failed to re-program the network as a part of network " + network + " implement");
 +            // see DataCenterVO.java
 +            ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class,
 +                    network.getDataCenterId());
 +            ex.addProxyObject(_entityMgr.findById(DataCenter.class, network.getDataCenterId()).getUuid());
 +            throw ex;
 +        }
+             for (NetworkElement element : networkElements) {
+                 if ((element instanceof AggregatedCommandExecutor) && (providersToImplement.contains(element.getProvider()))) {
+                     if (!((AggregatedCommandExecutor)element).completeAggregatedExecution(network, dest)) {
+                         s_logger.warn("Failed to re-program the network as a part of network " + network + " implement due to aggregated commands execution failure!");
+                         // see DataCenterVO.java
+                         ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class,
+                                 network.getDataCenterId());
+                         ex.addProxyObject(_entityMgr.findById(DataCenter.class, network.getDataCenterId()).getUuid());
+                         throw ex;
+                     }
+                 }
+             }
+         } finally {
+             for (NetworkElement element : networkElements) {
+                 if ((element instanceof AggregatedCommandExecutor) && (providersToImplement.contains(element.getProvider()))) {
+                     ((AggregatedCommandExecutor)element).cleanupAggregatedExecution(network, dest);
+                 }
+             }
+         }
      }
  
      // This method re-programs the rules/ips for existing network

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/engine/schema/src/com/cloud/event/EventVO.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
----------------------------------------------------------------------
diff --cc plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
index 6e2d70d,fb08dc6..c0b9ee5
--- a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
+++ b/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/MockAccountManager.java
@@@ -370,10 -347,9 +370,15 @@@ public class MockAccountManager extend
      }
  
      @Override
 +    public void checkAccess(Account account, AccessType accessType, boolean sameOwner, String apiName,
 +            ControlledEntity... entities) throws PermissionDeniedException {
 +        // TODO Auto-generated method stub
++    }
 +
++    @Override
+     public Long finalyzeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly) {
+         // TODO Auto-generated method stub
+         return null;
      }
  
  }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/99bdc8d8/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/api/ApiDBUtils.java
index 859ca01,539eb70..432eb94
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@@ -727,6 -743,9 +743,8 @@@ public class ApiDBUtils 
          s_networkACLDao = networkACLDao;
          s_accountService = accountService;
          s_resourceDetailsService = resourceDetailsService;
+         s_hostGpuGroupsDao = hostGpuGroupsDao;
+         s_vgpuTypesDao = vgpuTypesDao;
 -
      }
  
      // ///////////////////////////////////////////////////////////