You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by se...@apache.org on 2014/06/20 13:31:53 UTC

git commit: updated refs/heads/ovmsupport to ed47763

Repository: cloudstack
Updated Branches:
  refs/heads/ovmsupport c108d7f0d -> ed47763e2


CLOUDSTACK-6968: Initial OVM3 drop

Signed-off-by: Sebastien Goasguen <ru...@gmail.com>


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

Branch: refs/heads/ovmsupport
Commit: ed47763e2525a21fa4578d199492462d0fb1c7ef
Parents: c108d7f
Author: Funs <fu...@barred.org>
Authored: Fri Jun 20 13:22:19 2014 +0200
Committer: Sebastien Goasguen <ru...@gmail.com>
Committed: Fri Jun 20 07:31:29 2014 -0400

----------------------------------------------------------------------
 api/src/com/cloud/hypervisor/Hypervisor.java    |  5 ++
 api/src/com/cloud/network/NetworkService.java   |  4 +-
 .../network/PhysicalNetworkTrafficType.java     |  2 +
 .../org/apache/cloudstack/api/ApiConstants.java |  4 +
 .../command/admin/cluster/AddClusterCmd.java    | 18 +++-
 .../command/admin/usage/AddTrafficTypeCmd.java  | 11 ++-
 .../admin/usage/UpdateTrafficTypeCmd.java       | 11 ++-
 .../api/response/ClusterResponse.java           | 12 +++
 .../api/response/TrafficTypeResponse.java       | 12 +++
 .../classes/resources/messages.properties       |  4 +
 client/pom.xml                                  |  5 ++
 .../dao/PhysicalNetworkTrafficTypeDaoImpl.java  |  9 ++
 .../dao/PhysicalNetworkTrafficTypeVO.java       | 16 +++-
 .../storage/snapshot/SnapshotObject.java        |  9 +-
 plugins/hypervisors/ovm3                        |  1 +
 plugins/pom.xml                                 |  1 +
 .../storage/secondary/cloud-install-sys-tmplt   | 27 +++---
 scripts/storage/secondary/createtmplt.sh        |  2 +-
 server/src/com/cloud/configuration/Config.java  | 10 ++-
 .../configuration/ConfigurationManagerImpl.java |  2 +-
 .../src/com/cloud/network/NetworkModelImpl.java | 13 ++-
 .../com/cloud/network/NetworkServiceImpl.java   | 12 ++-
 .../VirtualNetworkApplianceManagerImpl.java     |  4 +
 .../com/cloud/resource/ResourceManagerImpl.java |  8 ++
 .../com/cloud/server/ManagementServerImpl.java  |  7 +-
 .../storage/listener/StoragePoolMonitor.java    |  3 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java  |  6 +-
 .../com/cloud/vpc/MockNetworkManagerImpl.java   |  6 +-
 setup/db/create-schema.sql                      |  3 +
 setup/db/db/schema-410to420.sql                 |  3 +-
 setup/db/templates.sql                          | 20 ++++-
 ui/dictionary.jsp                               |  3 +
 ui/scripts/docs.js                              | 12 +++
 ui/scripts/system.js                            | 89 ++++++++++++++++++--
 ui/scripts/templates.js                         |  6 ++
 ui/scripts/zoneWizard.js                        | 43 +++++++++-
 36 files changed, 358 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/com/cloud/hypervisor/Hypervisor.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/hypervisor/Hypervisor.java b/api/src/com/cloud/hypervisor/Hypervisor.java
index f8b98cf..f8868af 100644
--- a/api/src/com/cloud/hypervisor/Hypervisor.java
+++ b/api/src/com/cloud/hypervisor/Hypervisor.java
@@ -31,6 +31,7 @@ public class Hypervisor {
         BareMetal,
         Simulator,
         Ovm,
+        Ovm3,
         LXC,
 
         Any; /*If you don't care about the hypervisor type*/
@@ -57,6 +58,8 @@ public class Hypervisor {
                 return HypervisorType.Simulator;
             } else if (hypervisor.equalsIgnoreCase("Ovm")) {
                 return HypervisorType.Ovm;
+            } else if (hypervisor.equalsIgnoreCase("Ovm3")) {
+                return HypervisorType.Ovm3;
             } else if (hypervisor.equalsIgnoreCase("LXC")) {
                 return HypervisorType.LXC;
             } else if (hypervisor.equalsIgnoreCase("Any")) {
@@ -81,6 +84,8 @@ public class Hypervisor {
                 return ImageFormat.OVA;
             } else if (hyperType == HypervisorType.Ovm) {
                 return ImageFormat.RAW;
+            } else if (hyperType == HypervisorType.Ovm3) {
+                return ImageFormat.RAW;
             } else {
                 return null;
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/com/cloud/network/NetworkService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java
index 250121e..20066d8 100755
--- a/api/src/com/cloud/network/NetworkService.java
+++ b/api/src/com/cloud/network/NetworkService.java
@@ -111,11 +111,11 @@ public interface NetworkService {
     long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType);
 
     PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel,
-        String simulatorLabel, String vlan, String hypervLabel);
+        String simulatorLabel, String vlan, String hypervLabel, String ovm3Label);
 
     PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id);
 
-    PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel, String hypervLabel);
+    PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel, String hypervLabel, String ovm3Label);
 
     boolean deletePhysicalNetworkTrafficType(Long id);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/com/cloud/network/PhysicalNetworkTrafficType.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java
index a50aa37..9676bad 100644
--- a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java
+++ b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java
@@ -39,4 +39,6 @@ public interface PhysicalNetworkTrafficType extends InternalIdentity, Identity {
     String getSimulatorNetworkLabel();
 
     String getHypervNetworkLabel();
+
+    String getOvm3NetworkLabel();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index 287fff3..47e3a7f 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -355,6 +355,7 @@ public class ApiConstants {
     public static final String LOCAL_STORAGE_ENABLED = "localstorageenabled";
     public static final String GUEST_IP_TYPE = "guestiptype";
     public static final String XEN_NETWORK_LABEL = "xennetworklabel";
+    public static final String OVM3_NETWORK_LABEL = "ovm3networklabel";
     public static final String KVM_NETWORK_LABEL = "kvmnetworklabel";
     public static final String VMWARE_NETWORK_LABEL = "vmwarenetworklabel";
     public static final String HYPERV_NETWORK_LABEL = "hypervnetworklabel";
@@ -436,6 +437,9 @@ public class ApiConstants {
     public static final String VSM_CONFIG_MODE = "vsmconfigmode";
     public static final String VSM_CONFIG_STATE = "vsmconfigstate";
     public static final String VSM_DEVICE_STATE = "vsmdevicestate";
+    public static final String OVM3_POOL = "ovm3pool";
+    public static final String OVM3_CLUSTER = "ovm3cluster";
+    public static final String OVM3_VIP = "ovm3vip";
     public static final String VCENTER = "vcenter";
     public static final String ADD_VSM_FLAG = "addvsmflag";
     public static final String END_POINT = "endpoint";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
index d0e7380..83f342d 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java
@@ -65,7 +65,7 @@ public class AddClusterCmd extends BaseCmd {
     @Parameter(name = ApiConstants.HYPERVISOR,
                type = CommandType.STRING,
                required = true,
-               description = "hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator")
+               description = "hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator,Ovm3")
     private String hypervisor;
 
     @Parameter(name = ApiConstants.CLUSTER_TYPE, type = CommandType.STRING, required = true, description = "type of the cluster: CloudManaged, ExternalManaged")
@@ -74,6 +74,22 @@ public class AddClusterCmd extends BaseCmd {
     @Parameter(name = ApiConstants.ALLOCATION_STATE, type = CommandType.STRING, description = "Allocation state of this cluster for allocation of new resources")
     private String allocationState;
 
+    @Parameter(name = ApiConstants.OVM3_POOL, type = CommandType.STRING, required = false, description = "Ovm3 native pooling enabled for cluster")
+    private String ovm3pool;
+    @Parameter(name = ApiConstants.OVM3_CLUSTER, type = CommandType.STRING, required = false, description = "Ovm3 native OCFS2 clustering enabled for cluster")
+    private String ovm3cluster;
+    @Parameter(name = ApiConstants.OVM3_VIP, type = CommandType.STRING, required = false,  description = "Ovm3 vip to use for pool (and cluster)")
+    private String ovm3vip;
+    public String getOvm3Pool() {
+        return ovm3pool;
+    }
+    public String getOvm3Cluster() {
+        return ovm3cluster;
+    }
+    public String getOvm3Vip() {
+        return ovm3vip;
+    }
+
     @Parameter(name = ApiConstants.VSM_USERNAME, type = CommandType.STRING, required = false, description = "the username for the VSM associated with this cluster")
     private String vsmusername;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
index e6e18cb..1a227d6 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java
@@ -64,6 +64,11 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
                description = "The network name label of the physical device dedicated to this traffic on a KVM host")
     private String kvmLabel;
 
+    @Parameter(name = ApiConstants.OVM3_NETWORK_LABEL,
+               type = CommandType.STRING,
+               description = "The network name of the physical device dedicated to this traffic on an OVM3 host")
+    private String ovm3Label;
+
     @Parameter(name = ApiConstants.VMWARE_NETWORK_LABEL,
                type = CommandType.STRING,
                description = "The network name label of the physical device dedicated to this traffic on a VMware host")
@@ -97,6 +102,10 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
         return kvmLabel;
     }
 
+    public String getOvm3Label() {
+        return ovm3Label;
+    }
+
     public String getVmwareLabel() {
         return vmwareLabel;
     }
@@ -149,7 +158,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd {
     public void create() throws ResourceAllocationException {
         PhysicalNetworkTrafficType result =
             _networkService.addTrafficTypeToPhysicalNetwork(getPhysicalNetworkId(), getTrafficType(), getXenLabel(), getKvmLabel(), getVmwareLabel(),
-                getSimulatorLabel(), getVlan(), getHypervLabel());
+                getSimulatorLabel(), getVlan(), getHypervLabel(), getOvm3Label());
         if (result != null) {
             setEntityId(result.getId());
             setEntityUuid(result.getUuid());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
index 2ad470e..6bef9b9 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java
@@ -54,6 +54,11 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd {
                description = "The network name label of the physical device dedicated to this traffic on a KVM host")
     private String kvmLabel;
 
+    @Parameter(name = ApiConstants.OVM3_NETWORK_LABEL,
+               type = CommandType.STRING,
+               description = "The network name of the physical device dedicated to this traffic on an OVM3 host")
+    private String ovm3Label;
+
     @Parameter(name = ApiConstants.VMWARE_NETWORK_LABEL,
                type = CommandType.STRING,
                description = "The network name label of the physical device dedicated to this traffic on a VMware host")
@@ -80,6 +85,10 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd {
         return kvmLabel;
     }
 
+    public String getOvm3Label() {
+        return ovm3Label;
+    }
+
     public String getVmwareLabel() {
         return vmwareLabel;
     }
@@ -104,7 +113,7 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd {
 
     @Override
     public void execute() {
-        PhysicalNetworkTrafficType result = _networkService.updatePhysicalNetworkTrafficType(getId(), getXenLabel(), getKvmLabel(), getVmwareLabel(), getHypervLabel());
+        PhysicalNetworkTrafficType result = _networkService.updatePhysicalNetworkTrafficType(getId(), getXenLabel(), getKvmLabel(), getVmwareLabel(), getHypervLabel(), getOvm3Label());
         if (result != null) {
             TrafficTypeResponse response = _responseGenerator.createTrafficTypeResponse(result);
             response.setResponseName(getCommandName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/org/apache/cloudstack/api/response/ClusterResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java
index 0890309..df01e09 100644
--- a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java
@@ -82,6 +82,10 @@ public class ClusterResponse extends BaseResponse {
     @Param(description = "The memory overcommit ratio of the cluster")
     private String memoryovercommitratio;
 
+    @SerializedName("ovm3vip")
+    @Param(description = "Ovm3 VIP to use for pooling and/or clustering")
+    private String ovm3vip;
+
     public String getId() {
         return id;
     }
@@ -185,4 +189,12 @@ public class ClusterResponse extends BaseResponse {
     public String getMemoryOvercommitRatio() {
         return memoryovercommitratio;
     }
+
+    public void setOvm3Vip(String ovm3vip) {
+        this.ovm3vip = ovm3vip;
+    }
+
+    public String getOvm3Vip() {
+        return ovm3vip;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
index 69dd062..de7d57c 100644
--- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
@@ -48,6 +48,10 @@ public class TrafficTypeResponse extends BaseResponse {
     @Param(description = "The network name label of the physical device dedicated to this traffic on a KVM host")
     private String kvmNetworkLabel;
 
+    @SerializedName(ApiConstants.OVM3_NETWORK_LABEL)
+    @Param(description = "The network name of the physical device dedicated to this traffic on an OVM3 host")
+    private String ovm3NetworkLabel;
+
     @SerializedName(ApiConstants.VMWARE_NETWORK_LABEL)
     @Param(description = "The network name label of the physical device dedicated to this traffic on a VMware host")
     private String vmwareNetworkLabel;
@@ -93,6 +97,10 @@ public class TrafficTypeResponse extends BaseResponse {
         return kvmNetworkLabel;
     }
 
+    public String getOvm3Label() {
+        return ovm3NetworkLabel;
+    }
+
     public String getHypervLabel() {
         return hypervNetworkLabel;
     }
@@ -109,6 +117,10 @@ public class TrafficTypeResponse extends BaseResponse {
         this.kvmNetworkLabel = kvmLabel;
     }
 
+    public void setOvm3Label(String ovm3Label) {
+        this.ovm3NetworkLabel = ovm3Label;
+    }
+
     public void setVmwareLabel(String vmwareNetworkLabel) {
         this.vmwareNetworkLabel = vmwareNetworkLabel;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index f186fbf..1cf9d54 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -374,6 +374,10 @@ label.affinity.groups=Affinity Groups
 label.affinity=Affinity
 label.agent.password=Agent Password
 label.agent.username=Agent Username
+label.agent.port=Agent Port
+label.ovm3.vip=Master Vip IP
+label.ovm3.pool=Native Pooling
+label.ovm3.cluster=Native Clustering
 label.agree=Agree
 label.alert=Alert
 label.algorithm=Algorithm

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 5215e0c..189ca9e 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -157,6 +157,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-plugin-hypervisor-ovm3</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cloudstack</groupId>
       <artifactId>cloud-plugin-hypervisor-kvm</artifactId>
       <version>${project.version}</version>
       <exclusions>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java b/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
index 4e8e017..fe7d49c 100755
--- a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeDaoImpl.java
@@ -43,6 +43,7 @@ public class PhysicalNetworkTrafficTypeDaoImpl extends GenericDaoBase<PhysicalNe
     final GenericSearchBuilder<PhysicalNetworkTrafficTypeVO, String> simulatorAllFieldsSearch;
     final GenericSearchBuilder<PhysicalNetworkTrafficTypeVO, String> ovmAllFieldsSearch;
     final GenericSearchBuilder<PhysicalNetworkTrafficTypeVO, String> hypervAllFieldsSearch;
+    final GenericSearchBuilder<PhysicalNetworkTrafficTypeVO, String> ovm3AllFieldsSearch;
 
     protected PhysicalNetworkTrafficTypeDaoImpl() {
         super();
@@ -86,6 +87,12 @@ public class PhysicalNetworkTrafficTypeDaoImpl extends GenericDaoBase<PhysicalNe
         ovmAllFieldsSearch.and("trafficType", ovmAllFieldsSearch.entity().getTrafficType(), Op.EQ);
         ovmAllFieldsSearch.selectFields(ovmAllFieldsSearch.entity().getSimulatorNetworkLabel());
         ovmAllFieldsSearch.done();
+
+        ovm3AllFieldsSearch = createSearchBuilder(String.class);
+        ovm3AllFieldsSearch.and("physicalNetworkId", ovm3AllFieldsSearch.entity().getPhysicalNetworkId(), Op.EQ);
+        ovm3AllFieldsSearch.and("trafficType", ovm3AllFieldsSearch.entity().getTrafficType(), Op.EQ);
+        ovm3AllFieldsSearch.selectFields(ovm3AllFieldsSearch.entity().getOvm3NetworkLabel());
+        ovm3AllFieldsSearch.done();
     }
 
     @Override
@@ -124,6 +131,8 @@ public class PhysicalNetworkTrafficTypeDaoImpl extends GenericDaoBase<PhysicalNe
             return null;
         } else if (hType == HypervisorType.Hyperv) {
             sc = hypervAllFieldsSearch.create();
+        } else if (hType == HypervisorType.Ovm3) {
+            sc = ovm3AllFieldsSearch.create();
         } else {
             assert (false) : "We don't handle this hypervisor type";
             return null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java b/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
index 395a4e3..8c47fcc 100644
--- a/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
+++ b/engine/schema/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java
@@ -54,6 +54,10 @@ public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType
     @Column(name = "kvm_network_label")
     private String kvmNetworkLabel;
 
+    /* should perhaps have it's own label ? */
+    @Column(name = "ovm_network_label")
+    private String ovm3NetworkLabel;
+
     @Column(name = "vmware_network_label")
     private String vmwareNetworkLabel;
 
@@ -70,7 +74,7 @@ public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType
     }
 
     public PhysicalNetworkTrafficTypeVO(long physicalNetworkId, TrafficType trafficType, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel,
-            String vlan, String hypervLabel) {
+            String vlan, String hypervLabel, String ovm3Label) {
         this.physicalNetworkId = physicalNetworkId;
         this.trafficType = trafficType;
         this.xenNetworkLabel = xenLabel;
@@ -78,6 +82,7 @@ public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType
         this.vmwareNetworkLabel = vmwareLabel;
         this.simulatorNetworkLabel = simulatorLabel;
         this.hypervNetworkLabel = hypervLabel;
+        this.ovm3NetworkLabel = ovm3Label;
         this.setVlan(vlan);
         this.uuid = UUID.randomUUID().toString();
     }
@@ -160,4 +165,13 @@ public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType
         return hypervNetworkLabel;
     }
 
+    public void setOvm3NetworkLabel(String ovm3NetworkLabel) {
+        this.ovm3NetworkLabel = ovm3NetworkLabel;
+
+    }
+
+    @Override
+    public String getOvm3NetworkLabel() {
+        return ovm3NetworkLabel;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
index 9cac20d..268ad08 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
@@ -286,7 +286,14 @@ public class SnapshotObject implements SnapshotInfo {
             } else if (answer instanceof CopyCmdAnswer) {
                 SnapshotObjectTO snapshotTO = (SnapshotObjectTO)((CopyCmdAnswer)answer).getNewData();
                 snapshotStore.setInstallPath(snapshotTO.getPath());
-                snapshotStore.setSize(snapshotTO.getPhysicalSize());
+                // DEBUG [o.a.c.s.s.SnapshotServiceImpl] (Job-Executor-10:ctx-edd5ff44 ctx-822f2b0b) Failed to update snapshot state
+                // java.lang.NullPointerException
+                //         at org.apache.cloudstack.storage.snapshot.SnapshotObject.processEvent(SnapshotObject.java:289)
+                if (snapshotTO.getPhysicalSize() == null) {
+                    snapshotStore.setSize(0L);
+                } else {
+                    snapshotStore.setSize(snapshotTO.getPhysicalSize());
+                }
                 if (snapshotTO.getParentSnapshotPath() == null) {
                     snapshotStore.setParentSnapshotId(0L);
                 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/plugins/hypervisors/ovm3
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/ovm3 b/plugins/hypervisors/ovm3
new file mode 160000
index 0000000..bd64f2d
--- /dev/null
+++ b/plugins/hypervisors/ovm3
@@ -0,0 +1 @@
+Subproject commit bd64f2dbf461847a3f7056693bf34e80e4f7af73

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/plugins/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/pom.xml b/plugins/pom.xml
index 85a7bbe..bbf3ccc 100755
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -36,6 +36,7 @@
     <module>host-allocators/random</module>
     <module>dedicated-resources</module>
     <module>hypervisors/ovm</module>
+    <module>hypervisors/ovm3</module>
     <module>hypervisors/xen</module>
     <module>hypervisors/kvm</module>
     <module>event-bus/rabbitmq</module>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/scripts/storage/secondary/cloud-install-sys-tmplt
----------------------------------------------------------------------
diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt
index 96b11de..a6de3ad 100755
--- a/scripts/storage/secondary/cloud-install-sys-tmplt
+++ b/scripts/storage/secondary/cloud-install-sys-tmplt
@@ -20,9 +20,9 @@
 
 
 usage() {
-  printf "Usage: %s: -m <secondary storage mount point> -f <system vm template file> [-h <hypervisor name: kvm|vmware|xenserver|hyperv> ] [ -s <mgmt server secret key, if you specified any when running cloudstack-setup-database, default is password>][-u <Url to system vm template>] [-F <clean up system templates of specified hypervisor>] [-e <Template suffix, e.g vhd, ova, qcow2>] [-o <Database server hostname or ip, e.g localhost>] [-r <Database user name, e.g root>] [-d <Database password. Fllowed by nothing if the password is empty>]\n" $(basename $0) >&2
+  printf "Usage: %s: -m <secondary storage mount point> -f <system vm template file> [-h <hypervisor name: kvm|vmware|xenserver|hyperv|ovm3> ] [ -s <mgmt server secret key, if you specified any when running cloudstack-setup-database, default is password>][-u <Url to system vm template>] [-F <clean up system templates of specified hypervisor>] [-e <Template suffix, e.g vhd, ova, qcow2, raw>] [-o <Database server hostname or ip, e.g localhost>] [-r <Database user name, e.g root>] [-d <Database password. Fllowed by nothing if the password is empty>]\n" $(basename $0) >&2
   printf "or\n" >&2
-  printf "%s: -m <secondary storage mount point> -u <http url for system vm template> [-h <hypervisor name: kvm|vmware|xenserver|hyperv> ] [ -s <mgmt server secret key>]\n" $(basename $0) >&2
+  printf "%s: -m <secondary storage mount point> -u <http url for system vm template> [-h <hypervisor name: kvm|vmware|xenserver|hyperv|ovm3> ] [ -s <mgmt server secret key>]\n" $(basename $0) >&2
 }
 
 failed() {
@@ -36,7 +36,7 @@ ext="vhd"
 templateId=
 hyper=
 msKey=password
-DISKSPACE=5120000  #free disk space required in kilobytes
+DISKSPACE=512000  #free disk space required in kilobytes
 dbHost=
 dbUser=
 dbPassword=
@@ -48,7 +48,7 @@ do
 		mntpoint="$OPTARG"
 		;;
   f)	fflag=1
-		tmpltimg="$OPTARG"
+		mytmpltimg="$OPTARG"
 		;;
   u)	uflag=1
 		url="$OPTARG"
@@ -96,9 +96,9 @@ then
   failed 4
 fi
 
-if [[ "$fflag" == "1" && ! -f $tmpltimg ]] 
+if [[ "$fflag" == "1" && ! -f $mytmpltimg ]] 
 then
-  echo "template image file $tmpltimg doesn't exist"
+  echo "template image file $mytmpltimg doesn't exist"
   failed 3
 fi
 
@@ -165,6 +165,10 @@ then
    then
       ext="vhd"
       templateId=(`mysql -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"Hyperv\" and removed is null"`)
+   elif [ "$hyper" == "ovm3" ]
+   then
+      ext="raw"
+      templateId=(`mysql -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"Ovm3\" and removed is null"`)
    else
       usage
       failed 2
@@ -177,7 +181,10 @@ then
 	failed 8
 fi
 
-localfile=$(uuidgen).$ext
+_uuid=$(uuidgen)
+localfile=$_uuid.$ext
+
+_res=(`mysql -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "update cloud.vm_template set uuid=\"$_uuid\" where id=\"$templateId\""`)
 
 mntpoint=`echo "$mntpoint" | sed 's|/*$||'`
 
@@ -242,7 +249,7 @@ fi
 
 if [ "$fflag" == "1" ]
 then
-  cp $tmpltimg $tmpfile
+  cp $mytmpltimg $tmpfile
   if [ $? -ne 0 ]
   then
     printf "Failed to create temporary file in directory $(dirname $0) -- is it read-only or full?\n"
@@ -255,7 +262,7 @@ installrslt=$($(dirname $0)/createtmplt.sh -s 2 -d 'SystemVM Template' -n $local
 
 if [ $? -ne 0 ]
 then
-  echo "Failed to install system vm template $tmpltimg to $destdir: $installrslt"
+  echo "Failed to install system vm template $mytmpltimg to $destdir: $installrslt"
   failed 7
 fi
 
@@ -276,4 +283,4 @@ echo "$ext.virtualsize=$tmpltsize" >> $destdir/template.properties
 echo "virtualsize=$tmpltsize" >> $destdir/template.properties
 echo "$ext.size=$tmpltsize" >> $destdir/template.properties
 
-echo "Successfully installed system VM template $tmpltimg to $destdir"
+echo "Successfully installed system VM template $_uuid to $destdir"

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/scripts/storage/secondary/createtmplt.sh
----------------------------------------------------------------------
diff --git a/scripts/storage/secondary/createtmplt.sh b/scripts/storage/secondary/createtmplt.sh
index 6b31232..838ce92 100755
--- a/scripts/storage/secondary/createtmplt.sh
+++ b/scripts/storage/secondary/createtmplt.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/bash
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java
index 0c58141..43d0297 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -706,7 +706,7 @@ public enum Config {
             String.class,
             "system.vm.default.hypervisor",
             null,
-            "Hypervisor type used to create system vm, valid values are: XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, BareMetal, Ovm, LXC, Any",
+            "Hypervisor type used to create system vm, valid values are: XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, BareMetal, Ovm, Ovm3, LXC, Any",
             null),
     SystemVMRandomPassword(
             "Advanced",
@@ -723,7 +723,7 @@ public enum Config {
             String.class,
             "hypervisor.list",
             HypervisorType.Hyperv + "," + HypervisorType.KVM + "," + HypervisorType.XenServer + "," + HypervisorType.VMware + "," + HypervisorType.BareMetal + "," +
-                HypervisorType.Ovm + "," + HypervisorType.LXC,
+                HypervisorType.Ovm + "," + HypervisorType.Ovm3 + "," + HypervisorType.LXC,
             "The list of hypervisors that this deployment will use.",
             "hypervisorList"),
     ManagementNetwork("Advanced", ManagementServer.class, String.class, "management.network.cidr", null, "The cidr of management server network", null),
@@ -1069,6 +1069,12 @@ public enum Config {
     OvmPrivateNetwork("Hidden", ManagementServer.class, String.class, "ovm.private.network.device", null, "Specify the private bridge on host for private network", null),
     OvmGuestNetwork("Hidden", ManagementServer.class, String.class, "ovm.guest.network.device", null, "Specify the private bridge on host for private network", null),
 
+    // Ovm3
+    Ovm3PublicNetwork("Hidden", ManagementServer.class, String.class, "ovm3.public.network.device", null, "Specify the public bridge on host for public network", null),
+    Ovm3PrivateNetwork("Hidden", ManagementServer.class, String.class, "ovm3.private.network.device", null, "Specify the private bridge on host for private network", null),
+    Ovm3GuestNetwork("Hidden", ManagementServer.class, String.class, "ovm3.guest.network.device", null, "Specify the guest bridge on host for guest network", null),
+    Ovm3StorageNetwork("Hidden", ManagementServer.class, String.class, "ovm3.storage.network.device", null, "Specify the storage bridge on host for storage network", null),
+
     // XenServer
     XenPublicNetwork(
             "Hidden",

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 9d148fa..9e291e0 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -1691,7 +1691,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
                                 PhysicalNetworkTrafficTypeVO mgmtTraffic = _trafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management);
                                 _networkSvc.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(), TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(),
                                         mgmtTraffic.getKvmNetworkLabel(), mgmtTraffic.getVmwareNetworkLabel(), mgmtTraffic.getSimulatorNetworkLabel(), mgmtTraffic.getVlan(),
-                                        mgmtTraffic.getHypervNetworkLabel());
+                                        mgmtTraffic.getHypervNetworkLabel(), mgmtTraffic.getOvm3NetworkLabel());
                                 s_logger.info("No storage traffic type was specified by admin, create default storage traffic on physical network " + mgmtPhyNetwork.getId()
                                         + " with same configure of management traffic type");
                             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java
index 52a08e1..582c135 100755
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -1194,6 +1194,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
                     case Hyperv:
                         label = mgmtTraffic.getHypervNetworkLabel();
                         break;
+                    case Ovm3:
+                        label = mgmtTraffic.getOvm3NetworkLabel();
+                        break;
                 }
                 return label;
             }
@@ -1226,6 +1229,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
                     case Hyperv:
                         label = storageTraffic.getHypervNetworkLabel();
                         break;
+                    case Ovm3:
+                        label = storageTraffic.getOvm3NetworkLabel();
+                        break;
                 }
                 return label;
             }
@@ -1580,6 +1586,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
                     case Hyperv:
                         label = publicTraffic.getHypervNetworkLabel();
                         break;
+                    case Ovm3:
+                        label = publicTraffic.getOvm3NetworkLabel();
+                        break;
                 }
                 return label;
             }
@@ -1612,7 +1621,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
                     case Hyperv:
                         label = guestTraffic.getHypervNetworkLabel();
                         break;
-
+                    case Ovm3:
+                        label = guestTraffic.getOvm3NetworkLabel();
+                        break;
                 }
                 return label;
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index 056190f..fbceeba 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -3527,7 +3527,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", create = true)
     public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel,
-            String simulatorLabel, String vlan, String hypervLabel) {
+            String simulatorLabel, String vlan, String hypervLabel, String ovm3Label) {
 
         // verify input parameters
         PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId);
@@ -3579,7 +3579,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
                 xenLabel = getDefaultXenNetworkLabel(trafficType);
             }
             PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel, simulatorLabel,
-                    vlan, hypervLabel);
+                    vlan, hypervLabel, ovm3Label);
             pNetworktrafficType = _pNTrafficTypeDao.persist(pNetworktrafficType);
 
             return pNetworktrafficType;
@@ -3623,7 +3623,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_UPDATE, eventDescription = "Updating physical network TrafficType", async = true)
-    public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel, String hypervLabel) {
+    public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel, String hypervLabel, String ovm3Label) {
 
         PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id);
 
@@ -3656,6 +3656,12 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
             }
             trafficType.setHypervNetworkLabel(hypervLabel);
         }
+        if (ovm3Label != null) {
+            if ("".equals(ovm3Label)) {
+                ovm3Label = null;
+            }
+            trafficType.setOvm3NetworkLabel(ovm3Label);
+        }
         _pNTrafficTypeDao.update(id, trafficType);
 
         return trafficType;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 82332b7..3dbdbd6 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2631,6 +2631,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 result = false;
             }
         } else {
+            s_logger.warn("answer was null or no CHeckAnswerwhile ssh to the VM: " + answer.getDetails());
             result = false;
         }
         if (result == false) {
@@ -2653,6 +2654,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         }
 
         if (!result) {
+            s_logger.warn("no result while ssh to the VM");
             return result;
         }
 
@@ -2663,11 +2665,13 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 s_logger.warn("Unable to get the template/scripts version of router " + router.getInstanceName() + " due to: " + versionAnswer.getDetails());
                 result = false;
             } else {
+                s_logger.warn("Domrversion for VM: " + versionAnswer.getTemplateVersion());
                 router.setTemplateVersion(versionAnswer.getTemplateVersion());
                 router.setScriptsVersion(versionAnswer.getScriptsVersion());
                 router = _routerDao.persist(router, guestNetworks);
             }
         } else {
+            s_logger.warn("no domrversion for VM: " + answer.getDetails());
             result = false;
         }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index c9e2e7a..ec2066f 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -409,6 +409,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
             throw new InvalidParameterValueException("Unable to resolve " + cmd.getHypervisor() + " to a supported ");
         }
 
+        /* check if OVM3 supports this */
         if (zone.isSecurityGroupEnabled() && zone.getNetworkType().equals(NetworkType.Advanced)) {
             if (hypervisorType != HypervisorType.KVM && hypervisorType != HypervisorType.XenServer && hypervisorType != HypervisorType.Simulator) {
                 throw new InvalidParameterValueException("Don't support hypervisor type " + hypervisorType + " in advanced security enabled zone");
@@ -467,6 +468,13 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
 
         if (clusterType == Cluster.ClusterType.CloudManaged) {
             Map<String, String> details = new HashMap<String, String>();
+            // should do this nicer perhaps ?
+            if (hypervisorType == HypervisorType.Ovm3) {
+                Map<String, String> allParams = cmd.getFullUrlParams();
+                details.put("ovm3vip", allParams.get("ovm3vip"));
+                details.put("ovm3pool", allParams.get("ovm3pool"));
+                details.put("ovm3cluster", allParams.get("ovm3cluster"));
+            }
             details.put("cpuOvercommitRatio", CapacityManager.CpuOverprovisioningFactor.value().toString());
             details.put("memoryOvercommitRatio", CapacityManager.MemOverprovisioningFactor.value().toString());
             _clusterDetailsDao.persist(cluster.getId(), details);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index a015b4b..dac51f5 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -1073,11 +1073,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
         }
 
         if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM)
-                && !vm.getHypervisorType().equals(HypervisorType.Ovm) && !vm.getHypervisorType().equals(HypervisorType.Hyperv)) {
+                && !vm.getHypervisorType().equals(HypervisorType.Ovm) && !vm.getHypervisorType().equals(HypervisorType.Hyperv)
+                && !vm.getHypervisorType().equals(HypervisorType.Ovm3)) {
             if (s_logger.isDebugEnabled()) {
-                s_logger.debug(vm + " is not XenServer/VMware/KVM/OVM/Hyperv, cannot migrate this VM.");
+                s_logger.debug(vm + " is not XenServer/VMware/KVM/OVM/Hyperv/Ovm3, cannot migrate this VM.");
             }
-            throw new InvalidParameterValueException("Unsupported Hypervisor Type for VM migration, we support " + "XenServer/VMware/KVM/Ovm/Hyperv only");
+            throw new InvalidParameterValueException("Unsupported Hypervisor Type for VM migration, we support " + "XenServer/VMware/KVM/Ovm/Hyperv/Ovm3 only");
         }
 
         long srcHostId = vm.getHostId();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
index 9f6b5fb..812aadd 100755
--- a/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
+++ b/server/src/com/cloud/storage/listener/StoragePoolMonitor.java
@@ -76,7 +76,8 @@ public class StoragePoolMonitor implements Listener {
             StartupRoutingCommand scCmd = (StartupRoutingCommand)cmd;
             if (scCmd.getHypervisorType() == HypervisorType.XenServer || scCmd.getHypervisorType() ==  HypervisorType.KVM ||
                 scCmd.getHypervisorType() == HypervisorType.VMware || scCmd.getHypervisorType() ==  HypervisorType.Simulator ||
-                scCmd.getHypervisorType() == HypervisorType.Ovm || scCmd.getHypervisorType() == HypervisorType.Hyperv) {
+                scCmd.getHypervisorType() == HypervisorType.Ovm || scCmd.getHypervisorType() == HypervisorType.Hyperv ||
+                scCmd.getHypervisorType() == HypervisorType.Ovm3) {
                 List<StoragePoolVO> pools = _poolDao.listBy(host.getDataCenterId(), host.getPodId(), host.getClusterId(), ScopeType.CLUSTER);
                 List<StoragePoolVO> zoneStoragePoolsByTags = _poolDao.findZoneWideStoragePoolsByTags(host.getDataCenterId(), null);
                 List<StoragePoolVO> zoneStoragePoolsByHypervisor = _poolDao.findZoneWideStoragePoolsByHypervisor(host.getDataCenterId(), scCmd.getHypervisorType());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index e9cccc4..490e6eb 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -3862,11 +3862,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
         }
         if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM)
                 && !vm.getHypervisorType().equals(HypervisorType.Ovm) && !vm.getHypervisorType().equals(HypervisorType.Hyperv)
-                && !vm.getHypervisorType().equals(HypervisorType.Simulator)) {
+                && !vm.getHypervisorType().equals(HypervisorType.Simulator) && !vm.getHypervisorType().equals(HypervisorType.Ovm3)) {
             if (s_logger.isDebugEnabled()) {
-                s_logger.debug(vm + " is not XenServer/VMware/KVM/Ovm/Hyperv, cannot migrate this VM.");
+                s_logger.debug(vm + " is not XenServer/VMware/KVM/Ovm/Hyperv/Ovm3, cannot migrate this VM.");
             }
-            throw new InvalidParameterValueException("Unsupported Hypervisor Type for VM migration, we support XenServer/VMware/KVM/Ovm/Hyperv only");
+            throw new InvalidParameterValueException("Unsupported Hypervisor Type for VM migration, we support XenServer/VMware/KVM/Ovm/Hyperv/Ovm3 only");
         }
 
         if (isVMUsingLocalStorage(vm)) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
index 846e2f5..c167ab6 100644
--- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java
@@ -404,11 +404,11 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkOrches
     }
 
     /* (non-Javadoc)
-     * @see com.cloud.network.NetworkService#addTrafficTypeToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+     * @see com.cloud.network.NetworkService#addTrafficTypeToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
      */
     @Override
     public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel,
-        String simulatorLabel, String vlan, String hypervLabel) {
+        String simulatorLabel, String vlan, String hypervLabel, String ovm3Label) {
         // TODO Auto-generated method stub
         return null;
     }
@@ -426,7 +426,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkOrches
      * @see com.cloud.network.NetworkService#updatePhysicalNetworkTrafficType(java.lang.Long, java.lang.String, java.lang.String, java.lang.String)
      */
     @Override
-    public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel, String hypervLabel) {
+    public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel, String hypervLabel, String ovm3Label) {
         // TODO Auto-generated method stub
         return null;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 2a53a71..b140c3a 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -1683,6 +1683,9 @@ INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor
 INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES ('KVM', 'default', 50, 1);
 INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES ('Ovm', 'default', 25, 1);
 INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES ('Ovm', '2.3', 25, 1);
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES ('Ovm3', 'default', 25, 1);$
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES ('Ovm3', '3.0', 50, 1);$
+
 
 CREATE TABLE  `cloud`.`launch_permission` (
   `id` bigint unsigned NOT NULL auto_increment,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index ebbcfef..4a74db7 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -546,6 +546,7 @@ update  `cloud`.`volumes` v,  `cloud`.`storage_pool` s,  `cloud`.`cluster` c  se
 update  `cloud`.`volumes` v,  `cloud`.`storage_pool` s,  `cloud`.`cluster` c  set v.format='OVA' where v.pool_id=s.id and s.cluster_id=c.id and c.hypervisor_type='VMware';
 update  `cloud`.`volumes` v,  `cloud`.`storage_pool` s,  `cloud`.`cluster` c  set v.format='QCOW2' where v.pool_id=s.id and s.cluster_id=c.id and c.hypervisor_type='KVM';
 update  `cloud`.`volumes` v,  `cloud`.`storage_pool` s,  `cloud`.`cluster` c  set v.format='RAW' where v.pool_id=s.id and s.cluster_id=c.id and c.hypervisor_type='Ovm';
+update  `cloud`.`volumes` v,  `cloud`.`storage_pool` s,  `cloud`.`cluster` c  set v.format='RAW' where v.pool_id=s.id and s.cluster_id=c.id and c.hypervisor_type='Ovm3';
 
 ALTER TABLE `cloud`.`networks` ADD COLUMN `display_network` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Should network be displayed to the end user';
 
@@ -666,7 +667,7 @@ ALTER TABLE `cloud`.`remote_access_vpn` ADD COLUMN `uuid` varchar(40) UNIQUE;
 INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES (UUID(), 'LXC', 'default', 50, 1);
 ALTER TABLE `cloud`.`physical_network_traffic_types` ADD COLUMN `lxc_network_label` varchar(255) DEFAULT 'cloudbr0' COMMENT 'The network name label of the physical device dedicated to this traffic on a LXC host';
  
-UPDATE configuration SET value='KVM,XenServer,VMware,BareMetal,Ovm,LXC' WHERE name='hypervisor.list';
+UPDATE configuration SET value='KVM,XenServer,VMware,BareMetal,Ovm,Ovm3,LXC' WHERE name='hypervisor.list';
  
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
      VALUES (10, UUID(), 'routing-10', 'SystemVM Template (LXC)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, 'SystemVM Template (LXC)', 'QCOW2', 15, 0, 1, 'LXC');

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/setup/db/templates.sql
----------------------------------------------------------------------
diff --git a/setup/db/templates.sql b/setup/db/templates.sql
index 20180f5..9e5b0de 100755
--- a/setup/db/templates.sql
+++ b/setup/db/templates.sql
@@ -30,6 +30,9 @@ INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created,
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type, extractable)
     VALUES (5, UUID(), 'centos56-x86_64-xen', 'CentOS 5.6(64-bit) no GUI (XenServer)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2', '905cec879afd9c9d22ecc8036131a180', 0, 'CentOS 5.6(64-bit) no GUI (XenServer)', 'VHD', 142, 1, 1, 'XenServer', 1);
 
+-- INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
+--    VALUES (6, UUID(), 'centos64-x64', 'CentOS 6.4(64-bit) GUI (Hyperv)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/4.3/centos6_4_64bit.vhd.bz2', 'eef6b9940ea3ed01221d963d4a012d0a', 0, 'CentOS 6.4 (64-bit) GUI (Hyperv)', 'VHD', 182, 1, 1, 'Hyperv', 1);
+
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type, extractable)
     VALUES (7, UUID(), 'centos53-x64', 'CentOS 5.3(64-bit) no GUI (vSphere)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova', 'f6f881b7f2292948d8494db837fe0f47', 0, 'CentOS 5.3(64-bit) no GUI (vSphere)', 'OVA', 12, 1, 1, 'VMware', 1);
 
@@ -39,8 +42,9 @@ INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created,
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
     VALUES (9, UUID(), 'routing-9', 'SystemVM Template (HyperV)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/4.3/systemvm64template-2013-12-23-hyperv.vhd.bz2', '5df45ee6ebe1b703a8805f4e1f4d0818', 0, 'SystemVM Template (HyperV)', 'VHD', 15, 0, 1, 'Hyperv' );
 
-INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text,  format, guest_os_id, featured, cross_zones, hypervisor_type, extractable)
-    VALUES (6, UUID(), 'centos64-x64', 'CentOS 6.4(64-bit) GUI (Hyperv)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/4.3/centos6_4_64bit.vhd.bz2', 'eef6b9940ea3ed01221d963d4a012d0a', 0, 'CentOS 6.4 (64-bit) GUI (Hyperv)', 'VHD', 182, 1, 1, 'Hyperv', 1);
+-- 1- already taken, the upgrade 410 to 420 breaks...
+INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
+    VALUES (11, UUID(), 'routing-11', 'SystemVM Template (Ovm3)', 0, now(), 'SYSTEM', 0, 32, 1, 'http://nibbler/~funs/iso/systemvmtemplate-4.2-ovm.vhd.bz2', '4425688804dbcf0abc9e9e56c53070d7', 0, 'SystemVM Template (Ovm3)', 'RAW', 183, 0, 1, 'Ovm3' );
 
 INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (1, UUID(), 'CentOS');
 INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (2, UUID(), 'Debian');
@@ -589,3 +593,15 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest
 INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Other', 60);
 INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Other', 103);
 
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Sun Solaris 10(32-bit)', 79);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Sun Solaris 10(64-bit)', 80);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Sun Solaris 11(32-bit)', 158);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Sun Solaris 11(64-bit)', 159);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Other Linux (32-bit)', 98);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Other Linux (64-bit)', 99);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ('Ovm3', 'Other PV (32-bit)', 139);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ('Ovm3', 'Other PV (64-bit)', 140);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ('Ovm3', 'DOS', 102);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Windows 8 (32-bit)', 165);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Windows 8 (64-bit)', 166);
+INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES  ("Ovm3", 'Windows Server 2012 (64-bit)', 167);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/ui/dictionary.jsp
----------------------------------------------------------------------
diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp
index 16ecbab..7e82028 100644
--- a/ui/dictionary.jsp
+++ b/ui/dictionary.jsp
@@ -380,6 +380,9 @@ dictionary = {
 'label.affinity.groups': '<fmt:message key="label.affinity.groups" />',
 'label.agent.password': '<fmt:message key="label.agent.password" />',
 'label.agent.username': '<fmt:message key="label.agent.username" />',
+'label.ovm3.pool': '<fmt:message key="label.ovm3.pool" />',
+'label.ovm3.cluster': '<fmt:message key="label.ovm3.cluster" />',
+'label.ovm3.vip': '<fmt:message key="label.ovm3.vip" />',
 'label.agree': '<fmt:message key="label.agree" />',
 'label.alert': '<fmt:message key="label.alert" />',
 'label.algorithm': '<fmt:message key="label.algorithm" />',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/ui/scripts/docs.js
----------------------------------------------------------------------
diff --git a/ui/scripts/docs.js b/ui/scripts/docs.js
index 32237f3..0bb05ef 100755
--- a/ui/scripts/docs.js
+++ b/ui/scripts/docs.js
@@ -1211,5 +1211,17 @@ cloudStack.docs = {
     helpLdapGroupName: {
         desc: 'The group name from which you want to import LDAP users',
         externalLink: ''
+    },
+    helpOvm3pool: {
+        desc: 'Pool the Ovm3 nodes in this cluster, required for vm node migrations',
+        externalLink: ''
+    },
+    helpOvm3cluster: {
+        desc: 'Use the native Ovm3 OCFS2 clustering, required for native HA and requires pooling',
+        externalLink: ''
+    },
+    helpOvm3Vip: {
+        desc: 'The VIP used by the pool and cluster',
+        externalLink: ''
     }
 };

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 64e4f5c..7def0f6 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -12439,7 +12439,12 @@
                                             'vsmpassword_req'];
                                             return $.inArray($(this).attr('rel'), nexusDvsReqFields) > -1;
                                         });
-                                        
+                                        if ($form.find('.form-item[rel=hypervisor] select').val() == 'Ovm3') {
+                                            $form.find('.form-item[rel=ovm3pool]').css('display', 'inline-block');
+                                            $form.find('.form-item[rel=ovm3cluster]').css('display', 'inline-block');
+                                            $form.find('.form-item[rel=ovm3vip]').css('display', 'inline-block');
+                                        }
+
                                         if ($form.find('.form-item[rel=hypervisor] select').val() == 'VMware') {
                                             $form.find('.form-item[rel=vCenterHost]').css('display', 'inline-block');
                                             $form.find('.form-item[rel=vCenterUsername]').css('display', 'inline-block');
@@ -12685,6 +12690,30 @@
                                             required: false
                                         }
                                     },
+
+                                    //hypervisor==Ovm3 begins here
+                                    ovm3pool: {
+                                        label: 'label.ovm3.pool',
+                                        isHidden: true,
+                                        isBoolean: true,
+                                        isChecked: true,
+                                        docID: 'helpOvm3pool'
+                                    },
+                                    ovm3cluster: {
+                                        label: 'label.ovm3.cluster',
+                                        isHidden: true,
+                                        isBoolean: true,
+                                        isChecked: false,
+                                        docID: 'helpOvm3cluster'
+                                    },
+                                    ovm3vip: {
+                                        label: 'label.ovm3.vip',
+                                        isHidden: true,
+                                        docID: 'helpOvm3Vip',
+                                        validation: {
+                                            required: false
+                                        }
+                                    },
                                     
                                     //hypervisor==VMWare begins here
                                     vCenterHost: {
@@ -12725,7 +12754,6 @@
                                         docID: 'helpOverridePublicNetwork'
                                     },
                                     
-                                    
                                     vSwitchPublicType: {
                                         label: 'Public Traffic vSwitch Type',
                                         select: function (args) {
@@ -12915,7 +12943,11 @@
                                 array1.push("&podId=" + args.data.podId);
                                 
                                 var clusterName = args.data.name;
-                                
+                                if (args.data.hypervisor == "Ovm3") {
+                                    array1.push("&ovm3pool=" + todb(args.data.ovm3pool));
+                                    array1.push("&ovm3cluster=" + todb(args.data.ovm3cluster));
+                                    array1.push("&ovm3vip=" + todb(args.data.ovm3vip));
+                                }
                                 if (args.data.hypervisor == "VMware") {
                                     array1.push("&username=" + todb(args.data.vCenterUsername));
                                     array1.push("&password=" + todb(args.data.vCenterPassword));
@@ -13953,6 +13985,18 @@
                                                     $form.find('.form-item[rel=agentUsername]').css('display', 'inline-block');
                                                     $form.find('.form-item[rel=agentUsername]').find('input').val("oracle");
                                                     $form.find('.form-item[rel=agentPassword]').css('display', 'inline-block');
+                                                } else if (selectedClusterObj.hypervisortype == "Ovm3") {
+                                                    //$('li[input_group="general"]', $dialogAddHost).show();
+                                                    $form.find('.form-item[rel=hostname]').css('display', 'inline-block');
+                                                    $form.find('.form-item[rel=username]').css('display', 'inline-block');
+                                                    $form.find('.form-item[rel=password]').css('display', 'inline-block');
+
+                                                     //$('li[input_group="Ovm3"]', $dialogAddHost).show();
+                                                    $form.find('.form-item[rel=agentUsername]').css('display', 'inline-block');
+                                                    $form.find('.form-item[rel=agentUsername]').find('input').val("oracle");
+                                                    $form.find('.form-item[rel=agentPassword]').css('display', 'inline-block');
+                                                    $form.find('.form-item[rel=agentPort]').css('display', 'inline-block');
+                                                    $form.find('.form-item[rel=agentPort]').find('input').val("8899");
                                                 } else {
                                                     //$('li[input_group="general"]', $dialogAddHost).show();
                                                     $form.find('.form-item[rel=hostname]').css('display', 'inline-block');
@@ -14115,6 +14159,16 @@
                                         isPassword: true
                                     },
                                     //input_group="OVM" ends here
+
+                                    //input_group="OVM3" starts here
+                                    agentPort: {
+                                        label: 'label.agent.port',
+                                        validation: {
+                                            required: false
+                                        },
+                                        isHidden: true
+                                    },
+                                    //input_group="OVM3" ends here
                                     
                                     //always appear (begin)
                                     hosttags: {
@@ -14179,9 +14233,16 @@
                                     } else if (selectedClusterObj.hypervisortype == "Ovm") {
                                         $.extend(data, {
                                             agentusername: args.data.agentUsername,
-                                            agentpassword: args.data.agentPassword
-                                        });
-                                    }
+                                            agentpassword: args.data.agentPassword,
+                                       });
+                                    } else if (selectedClusterObj.hypervisortype == "Ovm3") {
+                                        $.extend(data, {
+                                            agentusername: args.data.agentUsername,
+                                            agentpassword: args.data.agentPassword,
+                                            agentport: args.data.agentPort,
+                                       });
+                                    } 
+
                                 }
                                 
                                 var hostId = null;
@@ -15101,6 +15162,22 @@
                                                 args.response.success({
                                                     data: items
                                                 });
+                                            } else if (selectedClusterObj.hypervisortype == "Ovm3") {
+                                                var items =[];
+                                                items.push({
+                                                    id: "nfs",
+                                                    description: "nfs"
+                                                });
+                                                /*
+                                                items.push({
+                                                    id: "ocfs2",
+                                                    description: "ocfs2"
+                                                });
+                                                */
+                                                args.response.success({
+                                                    data: items
+                                                });
+
                                             } else if (selectedClusterObj.hypervisortype == "LXC") {
                                                 var items =[];
                                                 items.push({

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/ui/scripts/templates.js
----------------------------------------------------------------------
diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js
index 8c63ce2..085fe9d 100644
--- a/ui/scripts/templates.js
+++ b/ui/scripts/templates.js
@@ -385,6 +385,12 @@
                                                     id: 'RAW',
                                                     description: 'RAW'
                                                 });
+                                            } else if (args.hypervisor == "Ovm3") {
+                                                //formatSelect.append("<option value='RAW'>RAW</option>");
+                                                items.push({
+                                                    id: 'RAW',
+                                                    description: 'RAW'
+                                                });  
                                             } else if (args.hypervisor == "LXC") {
                                                 //formatSelect.append("<option value='TAR'>TAR</option>");
                                                 items.push({

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ed47763e/ui/scripts/zoneWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index 13630c1..6751f16 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -88,6 +88,9 @@
             case 'Ovm':
                 hypervisorAttr = 'ovmnetworklabel';
                 break;
+            case 'Ovm3':
+                hypervisorAttr = 'ovmnetworklabel';
+                break;
             case 'LXC':
                 hypervisorAttr = 'lxcnetworklabel';
                 break;
@@ -474,6 +477,7 @@
                                         nonSupportedHypervisors["BareMetal"] = 1;
                                         nonSupportedHypervisors["Hyperv"] = 1;
                                         nonSupportedHypervisors["Ovm"] = 1;
+                                        nonSupportedHypervisors["Ovm3"] = 1;
                                         nonSupportedHypervisors["LXC"] = 1;
                                     }
 
@@ -936,6 +940,15 @@
                                     return $.inArray($(this).attr('rel'), vsmFields) > -1;
                                 });
 
+                                if ($(this).val() == "Ovm3") {
+                                    $form.find('.form-item[rel=ovm3pool]').css('display', 'inline-block');
+                                    $form.find('.form-item[rel=ovm3pool]').find('input[type=checkbox]').removeAttr('checked');
+
+                                    $form.find('.form-item[rel=ovm3cluster]').css('display', 'inline-block');
+                                    $form.find('.form-item[rel=ovm3cluster]').find('input[type=checkbox]').removeAttr('checked');
+                                    $form.find('[rel=ovm3vip]').css('display', 'block');$
+                                }
+
                                 if ($(this).val() == "VMware") {
                                     //$('li[input_sub_group="external"]', $dialogAddCluster).show();
                                     if (dvSwitchEnabled) {
@@ -1288,6 +1301,18 @@
                         $form.find('[rel=agentUsername]').css('display', 'block');
                         $form.find('[rel=agentUsername]').find('input').val("oracle");
                         $form.find('[rel=agentPassword]').css('display', 'block');
+                    } else if (selectedClusterObj.hypervisortype == "Ovm3") {   
+                        //$('li[input_group="general"]', $dialogAddHost).show();
+                        $form.find('.form-item[rel=hostname]').css('display', 'inline-block');
+                        $form.find('.form-item[rel=username]').css('display', 'inline-block');
+                        $form.find('.form-item[rel=password]').css('display', 'inline-block');
+
+                        //$('li[input_group="Ovm3"]', $dialogAddHost).show();
+                        $form.find('.form-item[rel=agentUsername]').css('display', 'inline-block');
+                        $form.find('.form-item[rel=agentUsername]').find('input').val("oracle");
+                        $form.find('.form-item[rel=agentPassword]').css('display', 'inline-block');
+                        $form.find('.form-item[rel=agentPort]').css('display', 'inline-block');
+                        $form.find('.form-item[rel=agentPort]').find('input').val("8899");
                     } else {
                         //$('li[input_group="general"]', $dialogAddHost).show();
                         $form.find('[rel=hostname]').css('display', 'block');
@@ -1394,6 +1419,16 @@
                     },
                     //input_group="OVM" ends here
 
+                    //input_group="OVM3" starts here
+                    agentPort: {
+                        label: 'label.agent.port',
+                        validation: {
+                            required: false
+                        },
+                        isHidden: true
+                    },
+                    //input_group="OVM3" ends here
+
                     //always appear (begin)
                     hosttags: {
                         label: 'label.host.tags',
@@ -1528,7 +1563,7 @@
                             	args.response.success({
                                     data: items
                                 });
-                            } else if (selectedClusterObj.hypervisortype == "Ovm") {
+                            } else if (selectedClusterObj.hypervisortype == "Ovm" || selectedClusterObj.hypervisortype == "Ovm3") {
                                 var items = [];
                                 items.push({
                                     id: "nfs",
@@ -4364,6 +4399,12 @@
                             agentusername: args.data.host.agentUsername,
                             agentpassword: args.data.host.agentPassword
                         });
+                    } else if (selectedClusterObj.hypervisortype == "Ovm3") {
+                        $.extend(data, {
+                            agentusername: args.data.agentUsername,
+                            agentpassword: args.data.agentPassword,
+                            agentport: args.data.agentPort,
+                        });
                     }
 
                     $.ajax({