Repository: cloudstack
Updated Branches:
  refs/heads/ova-multiple-disks 140f37357 -> 17a08a023


CLOUDSTACK-4787 Support OVA with multiple volumes

Creating OVF file to pack vmdk corresponding to data disk in OVA.

Signed-off-by: Sateesh Chodapuneedi <[email protected]>


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

Branch: refs/heads/ova-multiple-disks
Commit: 17a08a0236ed9710ca10024e1a52d634bb58b9c3
Parents: 140f373
Author: Sateesh Chodapuneedi <[email protected]>
Authored: Wed Mar 12 13:33:04 2014 +0530
Committer: Sateesh Chodapuneedi <[email protected]>
Committed: Wed Mar 12 13:33:04 2014 +0530

----------------------------------------------------------------------
 .../vmware/mo/HypervisorHostHelper.java         | 45 ++++++++++++++++++++
 1 file changed, 45 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/17a08a02/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
----------------------------------------------------------------------
diff --git 
a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java 
b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
index 8e2254e..ab0ab66 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
@@ -17,6 +17,7 @@
 package com.cloud.hypervisor.vmware.mo;
 
 import java.io.File;
+import java.io.FileWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.InvalidParameterException;
@@ -50,8 +51,11 @@ import com.vmware.vim25.LongPolicy;
 import com.vmware.vim25.ManagedObjectReference;
 import com.vmware.vim25.MethodFault;
 import com.vmware.vim25.ObjectContent;
+import com.vmware.vim25.OvfCreateDescriptorParams;
+import com.vmware.vim25.OvfCreateDescriptorResult;
 import com.vmware.vim25.OvfCreateImportSpecParams;
 import com.vmware.vim25.OvfCreateImportSpecResult;
+import com.vmware.vim25.OvfFile;
 import com.vmware.vim25.OvfFileItem;
 import com.vmware.vim25.VMwareDVSConfigSpec;
 import com.vmware.vim25.VMwareDVSPortSetting;
@@ -1255,6 +1259,47 @@ public class HypervisorHostHelper {
         return ovfVolumeInfos;
     }
 
+    public static void createOvfFile(VmwareHypervisorHost host, String 
diskFileName, String ovfName, String dir, long size, ManagedObjectReference 
morDs) throws Exception {
+        VmwareContext context = host.getContext();
+        VirtualMachineMO workerVmMo = 
HypervisorHostHelper.createWorkerVM(host, new DatastoreMO(context, morDs), 
ovfName);
+        if (workerVmMo == null)
+            throw new Exception("Unable to find just-created worker VM");
+
+        String[] disks = {dir + File.separator + diskFileName};
+        boolean bSuccess = false;
+        try {
+            VirtualMachineConfigSpec vmConfigSpec = new 
VirtualMachineConfigSpec();
+            VirtualDeviceConfigSpec deviceConfigSpec = new 
VirtualDeviceConfigSpec();
+
+            VirtualDevice device = VmwareHelper.prepareDiskDevice(workerVmMo, 
null, -1, disks, morDs, -1, 1);
+
+            deviceConfigSpec.setDevice(device);
+            
deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
+            vmConfigSpec.getDeviceChange().add(deviceConfigSpec);
+            workerVmMo.configureVm(vmConfigSpec);
+            bSuccess = true;
+            OvfFile ovfFile = new OvfFile();
+            ovfFile.setPath(diskFileName);
+            ovfFile.setDeviceId("1000");
+            ovfFile.setSize(size);
+            // write OVF descriptor file
+            OvfCreateDescriptorParams ovfDescParams = new 
OvfCreateDescriptorParams();
+            ovfDescParams.getOvfFiles().add(ovfFile);
+            ManagedObjectReference morOvf = 
context.getServiceContent().getOvfManager();
+            OvfCreateDescriptorResult ovfCreateDescriptorResult = 
context.getService().createDescriptor(morOvf, workerVmMo.getMor(), 
ovfDescParams);
+
+            String ovfPath = dir + File.separator + ovfName + ".ovf";
+            FileWriter out = new FileWriter(ovfPath);
+            out.write(ovfCreateDescriptorResult.getOvfDescriptor());
+            out.close();
+        } finally {
+            if (!bSuccess) {
+                workerVmMo.detachAllDisks();
+                workerVmMo.destroy();
+            }
+        }
+    }
+
     public static VirtualMachineMO createWorkerVM(VmwareHypervisorHost 
hyperHost, DatastoreMO dsMo, String vmName) throws Exception {
 
         // Allow worker VM to float within cluster so that we will have better 
chance to

Reply via email to