You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/06/27 22:57:51 UTC

[49/50] [abbrv] git commit: updated refs/heads/vmsync to 3c2aa18

Another merge from master to bring over fixes to bugs that broke the bvt


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

Branch: refs/heads/vmsync
Commit: 262352a1c60ef39cca9607fabd8a3d8b5ff186b5
Parents: cbca4bb 6ea38bf
Author: Alex Huang <al...@gmail.com>
Authored: Thu Jun 27 11:16:32 2013 -0700
Committer: Alex Huang <al...@gmail.com>
Committed: Thu Jun 27 11:16:32 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/network/PhysicalNetwork.java  |    3 +-
 api/src/com/cloud/storage/Storage.java          |    1 +
 api/src/com/cloud/vm/VmDiskStats.java           |    8 +-
 .../org/apache/cloudstack/api/ApiConstants.java |    1 +
 .../api/BaseUpdateTemplateOrIsoCmd.java         |    7 +
 .../user/address/AssociateIPAddrCmd.java        |   14 +
 .../user/template/RegisterTemplateCmd.java      |    7 +
 .../user/template/UpdateTemplateCmd.java        |    1 +
 .../command/user/volume/CreateVolumeCmd.java    |   13 +-
 .../classes/resources/messages_ja.properties    |   48 +-
 .../classes/resources/messages_zh_CN.properties |    4 +
 client/pom.xml                                  |    9 +-
 client/tomcatconf/componentContext.xml.in       |   15 +
 .../com/cloud/agent/api/VmDiskStatsEntry.java   |   26 +-
 docs/en-US/acquire-new-ip-address.xml           |   38 +-
 docs/en-US/management-server-install-client.xml |    2 +-
 docs/en-US/portable-ip.xml                      |   94 +-
 .../com/cloud/capacity/dao/CapacityDaoImpl.java |   19 +-
 engine/schema/src/com/cloud/dc/VlanVO.java      |    4 +
 .../src/com/cloud/network/dao/IPAddressVO.java  |    4 +
 .../cloud/storage/dao/VMTemplateDaoImpl.java    |   19 +-
 .../com/cloud/upgrade/dao/Upgrade410to420.java  |   22 +-
 .../src/com/cloud/usage/UsageVMInstanceVO.java  |   12 +-
 .../storage/image/store/TemplateObject.java     |   51 +-
 .../datastore/DataObjectManagerImpl.java        |   62 +-
 .../datastore/ObjectInDataStoreManager.java     |    3 +-
 .../datastore/ObjectInDataStoreManagerImpl.java |   34 +-
 .../storage/volume/VolumeServiceImpl.java       |    2 +-
 patches/systemvm/debian/README                  |    5 +
 patches/systemvm/debian/buildsystemvm.sh        |    6 +-
 .../kvm/resource/LibvirtComputingResource.java  |    8 +-
 .../vmware/manager/VmwareManagerImpl.java       |   16 +-
 .../vmware/resource/VmwareResource.java         |  191 ++-
 .../com/cloud/network/VmwareTrafficLabel.java   |    5 +-
 .../hypervisor/xen/resource/CitrixHelper.java   |  772 ++++++++-
 .../xen/resource/XenServer56FP1Resource.java    |   33 +-
 .../xen/resource/XenServer56SP2Resource.java    |   29 +
 .../xen/resource/XenServer600Resource.java      |   29 +
 .../xen/resource/XenServer602Resource.java      |   28 +
 .../xen/resource/XenServer610Resource.java      |   30 +
 .../xen/resource/XenServerConnectionPool.java   |    2 +-
 .../network-elements/stratosphere-ssp/pom.xml   |   31 +
 .../src/com/cloud/api/commands/AddSspCmd.java   |  138 ++
 .../com/cloud/api/commands/DeleteSspCmd.java    |   74 +
 .../src/com/cloud/api/response/SspResponse.java |   77 +
 .../com/cloud/network/dao/SspCredentialDao.java |   33 +
 .../cloud/network/dao/SspCredentialDaoImpl.java |   42 +
 .../com/cloud/network/dao/SspCredentialVO.java  |   67 +
 .../src/com/cloud/network/dao/SspTenantDao.java |   34 +
 .../com/cloud/network/dao/SspTenantDaoImpl.java |   48 +
 .../src/com/cloud/network/dao/SspTenantVO.java  |   55 +
 .../src/com/cloud/network/dao/SspUuidDao.java   |   36 +
 .../com/cloud/network/dao/SspUuidDaoImpl.java   |  116 ++
 .../src/com/cloud/network/dao/SspUuidVO.java    |   73 +
 .../com/cloud/network/element/SspClient.java    |  272 +++
 .../com/cloud/network/element/SspElement.java   |  617 +++++++
 .../com/cloud/network/element/SspManager.java   |   71 +
 .../com/cloud/network/element/SspService.java   |   46 +
 .../cloud/network/guru/SspGuestNetworkGuru.java |  171 ++
 .../stratosphere-ssp/sspmock/sspmock.py         |   85 +
 .../cloud/network/element/SspClientTest.java    |   92 ++
 .../cloud/network/element/SspElementTest.java   |  152 ++
 plugins/pom.xml                                 |    5 +-
 .../cloud/agent/manager/AgentManagerImpl.java   |   23 +-
 .../cloud/api/query/dao/UserVmJoinDaoImpl.java  |   21 +-
 server/src/com/cloud/configuration/Config.java  |    1 -
 .../configuration/ConfigurationManagerImpl.java |   17 +-
 .../com/cloud/network/NetworkManagerImpl.java   |   25 +-
 .../src/com/cloud/network/NetworkModelImpl.java |    3 +
 .../cloud/network/rules/RulesManagerImpl.java   |    3 +
 .../network/vpc/NetworkACLManagerImpl.java      |   17 +-
 .../com/cloud/network/vpc/VpcManagerImpl.java   |    4 +
 .../com/cloud/server/ManagementServerImpl.java  |   20 +-
 server/src/com/cloud/server/StatsCollector.java |    2 +
 .../src/com/cloud/storage/TemplateProfile.java  |   12 +-
 .../src/com/cloud/template/TemplateAdapter.java |    4 +-
 .../com/cloud/template/TemplateAdapterBase.java |   15 +-
 .../com/cloud/template/TemplateManagerImpl.java |    9 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |    5 +-
 .../src/com/cloud/vm/UserVmStateListener.java   |    2 +-
 setup/db/db/schema-410to420.sql                 |   23 +
 .../component/test_affinity_groups.py           | 1547 ++++++++++++++++++
 test/integration/smoke/test_routers.py          |   80 +-
 test/integration/smoke/test_vm_life_cycle.py    |    2 +-
 tools/appliance/README.md                       |   18 +
 tools/appliance/build.sh                        |   23 +-
 tools/marvin/marvin/integration/lib/base.py     |   38 +-
 ui/css/cloudstack3.css                          |    4 +
 ui/scripts/network.js                           |   12 +-
 ui/scripts/sharedFunctions.js                   |    4 +
 ui/scripts/system.js                            |   12 +-
 ui/scripts/ui-custom/zoneWizard.js              |   15 +-
 ui/scripts/ui/widgets/detailView.js             |    3 +-
 ui/scripts/ui/widgets/tagger.js                 |    2 +
 ui/scripts/vpc.js                               |   95 +-
 usage/src/com/cloud/usage/UsageManagerImpl.java |   15 +-
 utils/pom.xml                                   |    1 +
 vmware-base/pom.xml                             |    5 +
 .../vmware/mo/HypervisorHostHelper.java         | 1133 +++++++------
 99 files changed, 6257 insertions(+), 970 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/api/src/com/cloud/network/PhysicalNetwork.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
index 4dc1c44,c97a5e4..8c1f27d
--- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java
@@@ -50,7 -49,9 +51,8 @@@ import com.cloud.exception.ResourceUnav
  import com.cloud.network.IpAddress;
  import com.cloud.network.Network;
  import com.cloud.network.vpc.Vpc;
+ import com.cloud.projects.Project;
  import com.cloud.user.Account;
 -import com.cloud.user.UserContext;
  
  @APICommand(name = "associateIpAddress", description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class)
  public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
@@@ -195,7 -196,19 +197,19 @@@
          if (accountName != null && domainId != null) {
              Account account = _accountService.finalizeOwner(caller, accountName, domainId, projectId);
              return account.getId();
+         } else if (projectId != null) {
+             Project project = _projectService.getProject(projectId);
+             if (project != null) {
+                 if (project.getState() == Project.State.Active) {
+                     return project.getProjectAccountId();
+                 } else {
+                     throw new PermissionDeniedException("Can't add resources to the project with specified projectId in state="
+                            + project.getState() + " as it's no longer active");
+                 }
+             } else {
+                 throw new InvalidParameterValueException("Unable to find project by id");
+             }
 -       } else if (networkId != null){
 +        } else if (networkId != null){
              Network network = _networkService.getNetwork(networkId);
              return network.getAccountId();
          } else if (vpcId != null) {

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

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/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 f8f70a9,6f0bf3a..eff874c
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@@ -133,8 -132,9 +133,9 @@@ public class CreateVolumeCmd extends Ba
          return "volume";
      }
  
+     @Override
 -    public AsyncJob.Type getInstanceType() {
 -        return AsyncJob.Type.Volume;
 +    public ApiCommandJobType getInstanceType() {
 +        return ApiCommandJobType.Volume;
      }
  
      @Override
@@@ -160,10 -160,10 +161,10 @@@
      @Override
      public void create() throws ResourceAllocationException{
  
--        Volume volume = this._volumeService.allocVolume(this);
++        Volume volume = _volumeService.allocVolume(this);
          if (volume != null) {
--            this.setEntityId(volume.getId());
--            this.setEntityUuid(volume.getUuid());
++            setEntityId(volume.getId());
++            setEntityUuid(volume.getUuid());
          } else {
              throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create volume");
          }
@@@ -189,7 -189,7 +190,7 @@@
                  }
              }
              response.setResponseName(getCommandName());
--            this.setResponseObject(response);
++            setResponseObject(response);
          } else {
              throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a volume");
          }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --cc engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index 95ca968,e9316ff..3f6c4be
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@@ -331,11 -328,11 +331,11 @@@ public class VolumeServiceImpl implemen
                  dataStore, template, future, templateOnPrimaryStoreObj);
          AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this);
          caller.setCallback(caller.getTarget().copyBaseImageCallback(null, null)).setContext(context);
 -
 +        
          try {
 -            templateOnPrimaryStoreObj.processEvent(Event.CreateOnlyRequested);
 +        templateOnPrimaryStoreObj.processEvent(Event.CreateOnlyRequested);
          } catch (Exception e) {
-             s_logger.info("Got exception in case of multi-thread");
+             s_logger.info("Multiple threads are trying to copy template to primary storage, current thread should just wait");
              try {
                  templateOnPrimaryStoreObj = waitForTemplateDownloaded(dataStore, template);
              } catch (Exception e1) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/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 a5548c5,b1bc99d..d5cbe97
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@@ -3451,17 -3446,17 +3451,17 @@@ ServerResource 
  
              }
  
+             if (data instanceof VolumeObjectTO) {
 -                VolumeObjectTO volumeObjectTO = (VolumeObjectTO)data;
 -                if ((volumeObjectTO.getBytesReadRate() != null) && (volumeObjectTO.getBytesReadRate()  > 0))
 -                    disk.setBytesReadRate(volumeObjectTO.getBytesReadRate());
 -                if ((volumeObjectTO.getBytesWriteRate() != null) && (volumeObjectTO.getBytesWriteRate() > 0))
 -                    disk.setBytesWriteRate(volumeObjectTO.getBytesWriteRate());
 -                if ((volumeObjectTO.getIopsReadRate() != null) && (volumeObjectTO.getIopsReadRate() > 0))
 -                    disk.setIopsReadRate(volumeObjectTO.getIopsReadRate());
 -                if ((volumeObjectTO.getIopsWriteRate() != null) && (volumeObjectTO.getIopsWriteRate() > 0))
 -                    disk.setIopsWriteRate(volumeObjectTO.getIopsWriteRate());
 +            VolumeObjectTO volumeObjectTO = (VolumeObjectTO)data;
- 
 +            if ((volumeObjectTO.getBytesReadRate() != null) && (volumeObjectTO.getBytesReadRate()  > 0))
 +                disk.setBytesReadRate(volumeObjectTO.getBytesReadRate());
 +            if ((volumeObjectTO.getBytesWriteRate() != null) && (volumeObjectTO.getBytesWriteRate() > 0))
 +                disk.setBytesWriteRate(volumeObjectTO.getBytesWriteRate());
 +            if ((volumeObjectTO.getIopsReadRate() != null) && (volumeObjectTO.getIopsReadRate() > 0))
 +                disk.setIopsReadRate(volumeObjectTO.getIopsReadRate());
 +            if ((volumeObjectTO.getIopsWriteRate() != null) && (volumeObjectTO.getIopsWriteRate() > 0))
 +                disk.setIopsWriteRate(volumeObjectTO.getIopsWriteRate());
- 
+             }
              vm.getDevices().addDevice(disk);
          }
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 4620aca,5c51585..7fa9c5d
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@@ -43,51 -40,6 +43,49 @@@ import java.util.UUID
  import javax.inject.Inject;
  import javax.naming.ConfigurationException;
  
 +import org.apache.log4j.Logger;
 +import org.apache.log4j.NDC;
 +
 +import com.google.gson.Gson;
 +import com.vmware.vim25.AboutInfo;
 +import com.vmware.vim25.ClusterDasConfigInfo;
 +import com.vmware.vim25.ComputeResourceSummary;
 +import com.vmware.vim25.DatastoreSummary;
 +import com.vmware.vim25.DynamicProperty;
 +import com.vmware.vim25.GuestInfo;
 +import com.vmware.vim25.HostCapability;
 +import com.vmware.vim25.HostFirewallInfo;
 +import com.vmware.vim25.HostFirewallRuleset;
- import com.vmware.vim25.HostNetworkTrafficShapingPolicy;
- import com.vmware.vim25.HostPortGroupSpec;
 +import com.vmware.vim25.ManagedObjectReference;
 +import com.vmware.vim25.ObjectContent;
 +import com.vmware.vim25.OptionValue;
 +import com.vmware.vim25.PerfCounterInfo;
 +import com.vmware.vim25.PerfEntityMetric;
 +import com.vmware.vim25.PerfEntityMetricBase;
 +import com.vmware.vim25.PerfMetricId;
 +import com.vmware.vim25.PerfMetricIntSeries;
 +import com.vmware.vim25.PerfMetricSeries;
 +import com.vmware.vim25.PerfQuerySpec;
 +import com.vmware.vim25.PerfSampleInfo;
 +import com.vmware.vim25.RuntimeFaultFaultMsg;
 +import com.vmware.vim25.ToolsUnavailableFaultMsg;
 +import com.vmware.vim25.VimPortType;
 +import com.vmware.vim25.VirtualDevice;
 +import com.vmware.vim25.VirtualDeviceConfigSpec;
 +import com.vmware.vim25.VirtualDeviceConfigSpecOperation;
 +import com.vmware.vim25.VirtualDisk;
 +import com.vmware.vim25.VirtualEthernetCard;
 +import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo;
 +import com.vmware.vim25.VirtualLsiLogicController;
 +import com.vmware.vim25.VirtualMachineConfigSpec;
 +import com.vmware.vim25.VirtualMachineFileInfo;
 +import com.vmware.vim25.VirtualMachineGuestOsIdentifier;
 +import com.vmware.vim25.VirtualMachinePowerState;
 +import com.vmware.vim25.VirtualMachineRelocateSpec;
 +import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator;
 +import com.vmware.vim25.VirtualMachineRuntimeInfo;
 +import com.vmware.vim25.VirtualSCSISharing;
 +
  import org.apache.cloudstack.storage.command.DeleteCommand;
  import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
  import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
@@@ -2698,22 -2750,44 +2749,44 @@@ public class VmwareResource implements 
  
              // pass boot arguments through machine.id & perform customized options to VMX
  
-             Map<String, String> vmDetailOptions = validateVmDetails(vmSpec.getDetails());
-             OptionValue[] extraOptions = new OptionValue[2 + vmDetailOptions.size()];
-             extraOptions[0] = new OptionValue();
-             extraOptions[0].setKey("machine.id");
-             extraOptions[0].setValue(vmSpec.getBootArgs());
- 
-             extraOptions[1] = new OptionValue();
-             extraOptions[1].setKey("devices.hotplug");
-             extraOptions[1].setValue("true");
+             ArrayList<OptionValue> extraOptions = new ArrayList<OptionValue>();
+             OptionValue newVal = new OptionValue();
+             newVal.setKey("machine.id");
+             newVal.setValue(vmSpec.getBootArgs());
+             extraOptions.add(newVal);
+ 
+             newVal = new OptionValue();
+             newVal.setKey("devices.hotplug");
+             newVal.setValue("true");
+             extraOptions.add(newVal);
 -            
++
+             /**
+              * Extra Config : nvp.vm-uuid = uuid
+              *  - Required for Nicira NVP integration
+              */
+             newVal = new OptionValue();
+             newVal.setKey("nvp.vm-uuid");
+             newVal.setValue(vmSpec.getUuid());
+             extraOptions.add(newVal);
+             
+             /**
+              * Extra Config : nvp.iface-id<num> = uuid
+              *  - Required for Nicira NVP integration
+              */
+             int nicNum = 0;
+             for (NicTO nicTo : sortNicsByDeviceId(nics)) {
+                 newVal = new OptionValue();
+                 newVal.setKey("nvp.iface-id" + nicNum);
+                 newVal.setValue(nicTo.getUuid());
+                 extraOptions.add(newVal);
+                 nicNum++;
+             }
 -            
 +
-             int j = 2;
-             for(Map.Entry<String, String> entry : vmDetailOptions.entrySet()) {
-                 extraOptions[j] = new OptionValue();
-                 extraOptions[j].setKey(entry.getKey());
-                 extraOptions[j].setValue(entry.getValue());
-                 j++;
+             for(Map.Entry<String, String> entry : validateVmDetails(vmSpec.getDetails()).entrySet()) {
+                 newVal = new OptionValue();
+                 newVal.setKey(entry.getKey());
+                 newVal.setValue(entry.getValue());
+                 extraOptions.add(newVal);
              }
  
              String keyboardLayout = null;
@@@ -2919,7 -2993,8 +2992,8 @@@
                  svlanId = getPvlanInfo(nicTo);
              }
              networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, vlanId, svlanId,
-                     nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, switchType, _portsPerDvPortGroup, nicTo.getGateway(), configureVServiceInNexus);
 -                    nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, switchType, 
++                    nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, switchType,
+                     _portsPerDvPortGroup, nicTo.getGateway(), configureVServiceInNexus, nicTo.getBroadcastType());
          }
  
          return networkInfo;
@@@ -5282,74 -5356,7 +5360,7 @@@
          return VirtualMachineGuestOsIdentifier.OTHER_GUEST;
      }
  
-     private void prepareNetworkForVmTargetHost(HostMO hostMo, VirtualMachineMO vmMo) throws Exception {
-         assert (vmMo != null);
-         assert (hostMo != null);
- 
-         String[] networks = vmMo.getNetworks();
-         for (String networkName : networks) {
-             HostPortGroupSpec portGroupSpec = hostMo.getHostPortGroupSpec(networkName);
-             HostNetworkTrafficShapingPolicy shapingPolicy = null;
-             if (portGroupSpec != null) {
-                 shapingPolicy = portGroupSpec.getPolicy().getShapingPolicy();
-             }
- 
-             if (networkName.startsWith("cloud.private")) {
-                 String[] tokens = networkName.split("\\.");
-                 if (tokens.length == 3) {
-                     Integer networkRateMbps = null;
-                     if (shapingPolicy != null && shapingPolicy.isEnabled() != null && shapingPolicy.isEnabled().booleanValue()) {
-                         networkRateMbps = (int) (shapingPolicy.getPeakBandwidth().longValue() / (1024 * 1024));
-                     }
-                     String vlanId = null;
-                     if(!"untagged".equalsIgnoreCase(tokens[2]))
-                         vlanId = tokens[2];
- 
-                     HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private",
-                             hostMo, vlanId, networkRateMbps, null, _ops_timeout, false);
-                 } else {
-                     s_logger.info("Skip suspecious cloud network " + networkName);
-                 }
-             } else if (networkName.startsWith("cloud.public")) {
-                 String[] tokens = networkName.split("\\.");
-                 if (tokens.length == 3) {
-                     Integer networkRateMbps = null;
-                     if (shapingPolicy != null && shapingPolicy.isEnabled() != null && shapingPolicy.isEnabled().booleanValue()) {
-                         networkRateMbps = (int) (shapingPolicy.getPeakBandwidth().longValue() / (1024 * 1024));
-                     }
-                     String vlanId = null;
-                     if(!"untagged".equalsIgnoreCase(tokens[2]))
-                         vlanId = tokens[2];
- 
-                     HypervisorHostHelper.prepareNetwork(_publicTrafficInfo.getVirtualSwitchName(), "cloud.public",
-                             hostMo, vlanId, networkRateMbps, null, _ops_timeout, false);
-                 } else {
-                     s_logger.info("Skip suspecious cloud network " + networkName);
-                 }
-             } else if (networkName.startsWith("cloud.guest")) {
-                 String[] tokens = networkName.split("\\.");
-                 if (tokens.length >= 3) {
-                     Integer networkRateMbps = null;
-                     if (shapingPolicy != null && shapingPolicy.isEnabled() != null && shapingPolicy.isEnabled().booleanValue()) {
-                         networkRateMbps = (int) (shapingPolicy.getPeakBandwidth().longValue() / (1024 * 1024));
-                     }
- 
-                     String vlanId = null;
-                     if(!"untagged".equalsIgnoreCase(tokens[2]))
-                         vlanId = tokens[2];
- 
-                     HypervisorHostHelper.prepareNetwork(_guestTrafficInfo.getVirtualSwitchName(), "cloud.guest",
-                             hostMo, vlanId, networkRateMbps, null, _ops_timeout, false);
-                 } else {
-                     s_logger.info("Skip suspecious cloud network " + networkName);
-                 }
-             } else {
-                 s_logger.info("Skip non-cloud network " + networkName + " when preparing target host");
-             }
-         }
-     }
- 
 -    private HashMap<String, State> getVmStates() throws Exception {
 +    private HashMap<String, PowerState> getVmStates() throws Exception {
          VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext());
          ObjectContent[] ocs = hyperHost.getVmPropertiesOnHyperHost(new String[] { "name", "runtime.powerState", "config.template" });
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/agent/manager/AgentManagerImpl.java
index ccf3761,b24a238..90558a9
--- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
@@@ -129,19 -126,22 +129,22 @@@ import edu.emory.mathcs.backport.java.u
  /**
   * Implementation of the Agent Manager. This class controls the connection to the agents.
   *
-  * @config {@table || Param Name | Description | Values | Default || || port | port to listen on for agent connection. | Integer
-  *         | 8250 || || workers | # of worker threads | Integer | 5 || || router.template.id | default id for template | Integer
-  *         | 1 || || router.ram.size | default ram for router vm in mb | Integer | 128 || || router.ip.address | ip address for
-  *         the router | ip | 10.1.1.1 || || wait | Time to wait for control commands to return | seconds | 1800 || || domain |
-  *         domain for domain routers| String | foo.com || || alert.wait | time to wait before alerting on a disconnected agent |
-  *         seconds | 1800 || || update.wait | time to wait before alerting on a updating agent | seconds | 600 || ||
-  *         ping.interval | ping interval in seconds | seconds | 60 || || instance.name | Name of the deployment String |
-  *         required || || start.retry | Number of times to retry start | Number | 2 || || ping.timeout | multiplier to
-  *         ping.interval before announcing an agent has timed out | float | 2.0x || || router.stats.interval | interval to
-  *         report router statistics | seconds | 300s || * }
+  * @config {@table  || Param Name | Description | Values | Default ||
+  *                  || port | port to listen on for agent connection. | Integer | 8250 ||
+  *                  || workers | # of worker threads | Integer | 5 || || router.ram.size | default ram for router vm in mb | Integer | 128 ||
+  *                  || router.ip.address | ip address for the router | ip | 10.1.1.1 ||
+  *                  || wait | Time to wait for control commands to return | seconds | 1800 ||
+  *                  || domain | domain for domain routers| String | foo.com ||
+  *                  || alert.wait | time to wait before alerting on a disconnected agent | seconds | 1800 ||
+  *                  || update.wait | time to wait before alerting on a updating agent | seconds | 600 ||
+  *                  || ping.interval | ping interval in seconds | seconds | 60 ||
+  *                  || instance.name | Name of the deployment String | required ||
+  *                  || start.retry | Number of times to retry start | Number | 2 ||
+  *                  || ping.timeout | multiplier to ping.interval before announcing an agent has timed out | float | 2.0x ||
+  *                  || router.stats.interval | interval to report router statistics | seconds | 300s || }
   **/
  @Local(value = { AgentManager.class })
 -public class AgentManagerImpl extends ManagerBase implements AgentManager, HandlerFactory {
 +public class AgentManagerImpl extends ManagerBase implements AgentManager, HandlerFactory, AttacheHandler {
      private static final Logger s_logger = Logger.getLogger(AgentManagerImpl.class);
      private static final Logger status_logger = Logger.getLogger(Status.class);
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 560a673,041f29a..a27c103
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@@ -3507,13 -3504,14 +3510,14 @@@ public class ConfigurationManagerImpl e
  
          // A Public IP range can only be dedicated to one account at a time
          if (_accountVlanMapDao.remove(acctVln.get(0).getId())) {
-             // generate usage events to remove dedication for every ip in the
-             // range
+             // generate usage events to remove dedication for every ip in the range that has been disassociated
              for (IPAddressVO ip : ips) {
+                 if (!ipsInUse.contains(ip)) {
 -                    UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_RELEASE, acctVln.get(0).getAccountId(), ip
 -                            .getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlan
 -                            .getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid());
 -                }
 +                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_RELEASE, acctVln.get(0).getAccountId(), ip
 +                        .getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlan
 +                        .getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid());
 +            }
+             }
              // decrement resource count for dedicated public ip's
              _resourceLimitMgr.decrementResourceCount(acctVln.get(0).getAccountId(), ResourceType.public_ip, new Long(
                      ips.size()));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/rules/RulesManagerImpl.java
index 41b9e09,0f733fb..ba1a443
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@@ -160,8 -159,11 +160,11 @@@ public class RulesManagerImpl extends M
  
          // validate that userVM is in the same availability zone as the IP address
          if (ipAddress.getDataCenterId() != userVm.getDataCenterId()) {
+             //make an exception for portable IP
+             if (!ipAddress.isPortable()) {
 -                throw new InvalidParameterValueException("Unable to create ip forwarding rule, IP address " + ipAddress + " is not in the same availability zone as virtual machine " + userVm.toString());
 -            }
 +            throw new InvalidParameterValueException("Unable to create ip forwarding rule, IP address " + ipAddress + " is not in the same availability zone as virtual machine " + userVm.toString());
 +        }
+         }
  
      }
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ManagementServerImpl.java
index fd0122c,40bc437..173973f
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@@ -515,8 -484,9 +515,9 @@@ import com.cloud.storage.GuestOSCategor
  import com.cloud.storage.GuestOSVO;
  import com.cloud.storage.GuestOsCategory;
  import com.cloud.storage.Storage.ImageFormat;
++import com.cloud.storage.Storage.TemplateType;
  import com.cloud.storage.StorageManager;
  import com.cloud.storage.StoragePool;
 -import com.cloud.storage.Storage.TemplateType;
  import com.cloud.storage.VMTemplateVO;
  import com.cloud.storage.Volume;
  import com.cloud.storage.VolumeManager;
@@@ -1768,7 -1736,8 +1772,8 @@@ public class ManagementServerImpl exten
          Boolean bootable = cmd.isBootable();
          Integer sortKey = cmd.getSortKey();
          Boolean isDynamicallyScalable = cmd.isDynamicallyScalable();
+         Boolean isRoutingTemplate = cmd.isRoutingType();
 -        Account account = UserContext.current().getCaller();
 +        Account account = CallContext.current().getCallingAccount();
  
          // verify that template exists
          VMTemplateVO template = _templateDao.findById(id);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/template/TemplateAdapterBase.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/template/TemplateAdapterBase.java
index 8e01063,7835680..25b2984
--- a/server/src/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/com/cloud/template/TemplateAdapterBase.java
@@@ -106,18 -106,18 +106,18 @@@ public abstract class TemplateAdapterBa
              Boolean isExtractable, String format, Long guestOSId, Long zoneId, HypervisorType hypervisorType,
              String accountName, Long domainId, String chksum, Boolean bootable, Map details) throws ResourceAllocationException {
  	    return prepare(isIso, userId, name, displayText, bits, passwordEnabled, requiresHVM, url, isPublic, featured, isExtractable, format, guestOSId, zoneId, hypervisorType,
- 	            chksum, bootable, null, null, details, false, null, false);
+ 	            chksum, bootable, null, null, details, false, null, false, TemplateType.USER);
  	}
 -
 +	
  	@Override
 -    public TemplateProfile prepare(boolean isIso, long userId, String name, String displayText, Integer bits,
 +	public TemplateProfile prepare(boolean isIso, long userId, String name, String displayText, Integer bits,
  			Boolean passwordEnabled, Boolean requiresHVM, String url, Boolean isPublic, Boolean featured,
  			Boolean isExtractable, String format, Long guestOSId, Long zoneId, HypervisorType hypervisorType,
  			String chksum, Boolean bootable, String templateTag, Account templateOwner, Map details, Boolean sshkeyEnabled,
- 			String imageStoreUuid, Boolean isDynamicallyScalable) throws ResourceAllocationException {
+ 			String imageStoreUuid, Boolean isDynamicallyScalable, TemplateType templateType) throws ResourceAllocationException {
  		//Long accountId = null;
  		// parameters verification
 -
 +		
  		if (isPublic == null) {
  			isPublic = Boolean.FALSE;
  		}
@@@ -211,48 -211,51 +211,51 @@@
                  throw new IllegalArgumentException("Cannot use reserved names for templates");
              }
          }
 -
 +        
          Long id = _tmpltDao.getNextInSequence(Long.class, "id");
 -        UserContext.current().setEventDetails("Id: " +id+ " name: " + name);
 -        return new TemplateProfile(id, userId, name, displayText, bits, passwordEnabled, requiresHVM, url, isPublic,
 +        CallContext.current().setEventDetails("Id: " +id+ " name: " + name);
 +		return new TemplateProfile(id, userId, name, displayText, bits, passwordEnabled, requiresHVM, url, isPublic,
- 				featured, isExtractable, imgfmt, guestOSId, zoneId, hypervisorType, templateOwner.getAccountName(), templateOwner.getDomainId(), templateOwner.getAccountId(), chksum, bootable, templateTag, details, sshkeyEnabled, null, isDynamicallyScalable);
+                 featured, isExtractable, imgfmt, guestOSId, zoneId, hypervisorType, templateOwner.getAccountName(), templateOwner.getDomainId(),
+                 templateOwner.getAccountId(), chksum, bootable, templateTag, details, sshkeyEnabled, null, isDynamicallyScalable, templateType);
  
  	}
 -
 +	
  	@Override
  	public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
  	    //check if the caller can operate with the template owner
 -        Account caller = UserContext.current().getCaller();
 +        Account caller = CallContext.current().getCallingAccount();
          Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
          _accountMgr.checkAccess(caller, null, true, owner);
 +	    
  
 -
 -
 -    return prepare(false, UserContext.current().getCallerUserId(), cmd.getTemplateName(), cmd.getDisplayText(),
 -                cmd.getBits(), cmd.isPasswordEnabled(), cmd.getRequiresHvm(), cmd.getUrl(), cmd.isPublic(), cmd.isFeatured(),
 -                cmd.isExtractable(), cmd.getFormat(), cmd.getOsTypeId(), cmd.getZoneId(), HypervisorType.getType(cmd.getHypervisor()),
 +        
 +		return prepare(false, CallContext.current().getCallingUserId(), cmd.getTemplateName(), cmd.getDisplayText(),
 +				cmd.getBits(), cmd.isPasswordEnabled(), cmd.getRequiresHvm(), cmd.getUrl(), cmd.isPublic(), cmd.isFeatured(),
 +				cmd.isExtractable(), cmd.getFormat(), cmd.getOsTypeId(), cmd.getZoneId(), HypervisorType.getType(cmd.getHypervisor()),
- 				cmd.getChecksum(), true, cmd.getTemplateTag(), owner, cmd.getDetails(), cmd.isSshKeyEnabled(), null, cmd.isDynamicallyScalable());
+                 cmd.getChecksum(), true, cmd.getTemplateTag(), owner, cmd.getDetails(), cmd.isSshKeyEnabled(), null, cmd.isDynamicallyScalable(),
+                 cmd.isRoutingType() ? TemplateType.ROUTING : TemplateType.USER);
  
  	}
  
  	@Override
 -    public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
 +	public TemplateProfile prepare(RegisterIsoCmd cmd) throws ResourceAllocationException {
  	    //check if the caller can operate with the template owner
 -	    Account caller = UserContext.current().getCaller();
 +	    Account caller = CallContext.current().getCallingAccount();
  	    Account owner = _accountMgr.getAccount(cmd.getEntityOwnerId());
  	    _accountMgr.checkAccess(caller, null, true, owner);
 -
 -        return prepare(true, UserContext.current().getCallerUserId(), cmd.getIsoName(), cmd.getDisplayText(), 64, false,
 -                true, cmd.getUrl(), cmd.isPublic(), cmd.isFeatured(), cmd.isExtractable(), ImageFormat.ISO.toString(), cmd.getOsTypeId(),
 +	   
 +		return prepare(true, CallContext.current().getCallingUserId(), cmd.getIsoName(), cmd.getDisplayText(), 64, false,
 +					true, cmd.getUrl(), cmd.isPublic(), cmd.isFeatured(), cmd.isExtractable(), ImageFormat.ISO.toString(), cmd.getOsTypeId(),
- 					cmd.getZoneId(), HypervisorType.None, cmd.getChecksum(), cmd.isBootable(), null, owner, null, false, cmd.getImageStoreUuid(), cmd.isDynamicallyScalable());
+                 cmd.getZoneId(), HypervisorType.None, cmd.getChecksum(), cmd.isBootable(), null, owner, null, false, cmd.getImageStoreUuid(), cmd.isDynamicallyScalable(),
+                 TemplateType.USER);
  	}
 -
 +	
  	protected VMTemplateVO persistTemplate(TemplateProfile profile) {
  		Long zoneId = profile.getZoneId();
  		VMTemplateVO template = new VMTemplateVO(profile.getTemplateId(), profile.getName(), profile.getFormat(), profile.getIsPublic(),
- 				profile.getFeatured(), profile.getIsExtractable(), TemplateType.USER, profile.getUrl(), profile.getRequiresHVM(),
+ 				profile.getFeatured(), profile.getIsExtractable(), profile.getTemplateType(), profile.getUrl(), profile.getRequiresHVM(),
  				profile.getBits(), profile.getAccountId(), profile.getCheckSum(), profile.getDisplayText(),
 -				profile.getPasswordEnabled(), profile.getGuestOsId(), profile.getBootable(), profile.getHypervisorType(), profile.getTemplateTag(),
 +				profile.getPasswordEnabled(), profile.getGuestOsId(), profile.getBootable(), profile.getHypervisorType(), profile.getTemplateTag(), 
  				profile.getDetails(), profile.getSshKeyEnabled());
  
  

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/template/TemplateManagerImpl.java
index 2528b54,f70d44d..6f8f992
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@@ -334,24 -347,29 +333,29 @@@ public class TemplateManagerImpl extend
      @Override
      @ActionEvent(eventType = EventTypes.EVENT_TEMPLATE_CREATE, eventDescription = "creating template")
      public VirtualMachineTemplate registerTemplate(RegisterTemplateCmd cmd) throws URISyntaxException, ResourceAllocationException {
 -        Account account = UserContext.current().getCaller();
++        Account account = CallContext.current().getCallingAccount();
          if (cmd.getTemplateTag() != null) {
-             Account account = CallContext.current().getCallingAccount();
              if (!_accountService.isRootAdmin(account.getType())) {
                  throw new PermissionDeniedException("Parameter templatetag can only be specified by a Root Admin, permission denied");
              }
          }
+         if(cmd.isRoutingType() != null){
+             if(!_accountService.isRootAdmin(account.getType())){
+                 throw new PermissionDeniedException("Parameter isrouting can only be specified by a Root Admin, permission denied");
+             }
+         }
 -
 -        TemplateAdapter adapter = getAdapter(HypervisorType.getType(cmd.getHypervisor()));
 -        TemplateProfile profile = adapter.prepare(cmd);
 -        VMTemplateVO template = adapter.create(profile);
 -
 +        
 +    	TemplateAdapter adapter = getAdapter(HypervisorType.getType(cmd.getHypervisor()));
 +    	TemplateProfile profile = adapter.prepare(cmd);
 +    	VMTemplateVO template = adapter.create(profile);
 +    	
          if (template != null) {
 -            return template;
 +        	return template;
          } else {
 -            throw new CloudRuntimeException("Failed to create a template");
 +        	throw new CloudRuntimeException("Failed to create a template");
          }
      }
 -
 +    
      @Override
      public DataStore getImageStore(String storeUuid, Long zoneId) {
          DataStore imageStore = null;
@@@ -803,9 -821,8 +807,8 @@@
  
      @Override
      public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
 -
 +        
          final Map<String, String> configs = _configDao.getConfiguration("AgentManager", params);
-         _routerTemplateId = NumbersUtil.parseInt(configs.get("router.template.id"), 1);
  
          String value = _configDao.getValue(Config.PrimaryStorageDownloadWait.toString());
          _primaryStorageDownloadWait = NumbersUtil.parseInt(value, Integer.parseInt(Config.PrimaryStorageDownloadWait.getDefaultValue()));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/vm/UserVmManagerImpl.java
index ae96297,3cef182..c9bd37c
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@@ -3374,10 -3388,9 +3374,9 @@@ public class UserVmManagerImpl extends 
  
      @Override
      public void collectVmDiskStatistics (UserVmVO userVm) {
-         // support KVM and XenServer only
-         if (!userVm.getHypervisorType().equals(HypervisorType.XenServer)
-                 && !userVm.getHypervisorType().equals(HypervisorType.KVM))
+         // support KVM only util 2013.06.25
+         if (!userVm.getHypervisorType().equals(HypervisorType.KVM))
 -            return;        
 +            return;
      	// Collect vm disk statistics from host before stopping Vm
      	long hostId = userVm.getHostId();
      	List<String> vmNames = new ArrayList<String>();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/262352a1/utils/pom.xml
----------------------------------------------------------------------