You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/07/03 02:46:52 UTC
[9/9] adding runbook and publican-cloudstack to docs
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ae274a4/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
index 155a3a7..6dd6475 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java
@@ -27,38 +27,38 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSession;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.hypervisor.vmware.mo.DatacenterMO;
-import com.cloud.hypervisor.vmware.mo.DatastoreFile;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.hypervisor.vmware.mo.DatacenterMO;
+import com.cloud.hypervisor.vmware.mo.DatastoreFile;
import com.cloud.utils.ActionDelegate;
-import com.vmware.apputils.version.ExtendedAppUtil;
-import com.vmware.apputils.vim25.ServiceConnection;
-import com.vmware.apputils.vim25.ServiceUtil;
-import com.vmware.vim25.ManagedObjectReference;
-import com.vmware.vim25.ObjectContent;
-import com.vmware.vim25.ObjectSpec;
-import com.vmware.vim25.PropertyFilterSpec;
-import com.vmware.vim25.PropertySpec;
-import com.vmware.vim25.SelectionSpec;
-import com.vmware.vim25.ServiceContent;
-import com.vmware.vim25.TaskInfo;
-import com.vmware.vim25.TraversalSpec;
-import com.vmware.vim25.VimPortType;
-
-public class VmwareContext {
+import com.vmware.apputils.version.ExtendedAppUtil;
+import com.vmware.apputils.vim25.ServiceConnection;
+import com.vmware.apputils.vim25.ServiceUtil;
+import com.vmware.vim25.ManagedObjectReference;
+import com.vmware.vim25.ObjectContent;
+import com.vmware.vim25.ObjectSpec;
+import com.vmware.vim25.PropertyFilterSpec;
+import com.vmware.vim25.PropertySpec;
+import com.vmware.vim25.SelectionSpec;
+import com.vmware.vim25.ServiceContent;
+import com.vmware.vim25.TaskInfo;
+import com.vmware.vim25.TraversalSpec;
+import com.vmware.vim25.VimPortType;
+
+public class VmwareContext {
private static final Logger s_logger = Logger.getLogger(VmwareContext.class);
private static int MAX_CONNECT_RETRY = 5;
@@ -69,229 +69,229 @@ public class VmwareContext {
private Map<String, Object> _stockMap = new HashMap<String, Object>();
private int _CHUNKSIZE = 1*1024*1024; // 1M
-
- static {
- try {
- javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
- javax.net.ssl.TrustManager tm = new TrustAllManager();
- trustAllCerts[0] = tm;
- javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
- sc.init(null, trustAllCerts, null);
- javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
- } catch (Exception e) {
- s_logger.error("Unexpected exception ", e);
- }
- }
-
- public VmwareContext(ExtendedAppUtil appUtil, String address) {
- assert(appUtil != null) : "Invalid parameter in constructing VmwareContext object";
-
- _appUtil = appUtil;
- _serverAddress = address;
- }
-
- public void registerStockObject(String name, Object obj) {
- synchronized(_stockMap) {
- _stockMap.put(name, obj);
- }
- }
-
- public void uregisterStockObject(String name) {
- synchronized(_stockMap) {
- _stockMap.remove(name);
- }
- }
-
- @SuppressWarnings("unchecked")
- public <T> T getStockObject(String name) {
- synchronized(_stockMap) {
- return (T)_stockMap.get(name);
- }
- }
-
- public String getServerAddress() {
- return _serverAddress;
- }
-
- public ServiceConnection getServiceConnection() {
- return _appUtil.getServiceConnection3();
- }
-
- public VimPortType getService() {
- return getServiceConnection().getService();
- }
-
- public ServiceContent getServiceContent() {
- return getServiceConnection().getServiceContent();
- }
-
- public ServiceUtil getServiceUtil() {
- return _appUtil.getServiceUtil3();
- }
-
- public ManagedObjectReference getRootFolder() {
- return getServiceContent().getRootFolder();
- }
-
- public ManagedObjectReference getHostMorByPath(String inventoryPath) throws Exception {
- assert(inventoryPath != null);
-
- String[] tokens;
- if(inventoryPath.startsWith("/"))
- tokens = inventoryPath.substring(1).split("/");
- else
- tokens = inventoryPath.split("/");
-
- ManagedObjectReference mor = getRootFolder();
- for(int i=0; i < tokens.length;i++) {
- String token = tokens[i];
- ObjectContent[] ocs;
- if(mor.getType().equalsIgnoreCase("Datacenter")) {
- PropertySpec pSpec = new PropertySpec();
- pSpec.setType("ManagedEntity");
- pSpec.setPathSet(new String[] { "name" });
-
- TraversalSpec dcHostFolderTraversal = new TraversalSpec();
- dcHostFolderTraversal.setType("Datacenter");
- dcHostFolderTraversal.setPath("hostFolder");
- dcHostFolderTraversal.setName("dcHostFolderTraversal");
-
- ObjectSpec oSpec = new ObjectSpec();
- oSpec.setObj(mor);
- oSpec.setSkip(Boolean.TRUE);
- oSpec.setSelectSet(new SelectionSpec[] { dcHostFolderTraversal });
-
- PropertyFilterSpec pfSpec = new PropertyFilterSpec();
- pfSpec.setPropSet(new PropertySpec[] { pSpec });
- pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
- ocs = getService().retrieveProperties(
- getServiceContent().getPropertyCollector(),
- new PropertyFilterSpec[] { pfSpec });
-
- } else if(mor.getType().equalsIgnoreCase("Folder")) {
- PropertySpec pSpec = new PropertySpec();
- pSpec.setType("ManagedEntity");
- pSpec.setPathSet(new String[] { "name" });
-
- TraversalSpec folderChildrenTraversal = new TraversalSpec();
- folderChildrenTraversal.setType("Folder");
- folderChildrenTraversal.setPath("childEntity");
- folderChildrenTraversal.setName("folderChildrenTraversal");
-
- ObjectSpec oSpec = new ObjectSpec();
- oSpec.setObj(mor);
- oSpec.setSkip(Boolean.TRUE);
- oSpec.setSelectSet(new SelectionSpec[] { folderChildrenTraversal });
-
- PropertyFilterSpec pfSpec = new PropertyFilterSpec();
- pfSpec.setPropSet(new PropertySpec[] { pSpec });
- pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
-
- ocs = getService().retrieveProperties(
- getServiceContent().getPropertyCollector(),
- new PropertyFilterSpec[] { pfSpec });
- } else if(mor.getType().equalsIgnoreCase("ClusterComputeResource")) {
- PropertySpec pSpec = new PropertySpec();
- pSpec.setType("ManagedEntity");
- pSpec.setPathSet(new String[] { "name" });
-
- TraversalSpec clusterHostTraversal = new TraversalSpec();
- clusterHostTraversal.setType("ClusterComputeResource");
- clusterHostTraversal.setPath("host");
- clusterHostTraversal.setName("folderChildrenTraversal");
-
- ObjectSpec oSpec = new ObjectSpec();
- oSpec.setObj(mor);
- oSpec.setSkip(Boolean.TRUE);
- oSpec.setSelectSet(new SelectionSpec[] { clusterHostTraversal });
-
- PropertyFilterSpec pfSpec = new PropertyFilterSpec();
- pfSpec.setPropSet(new PropertySpec[] { pSpec });
- pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
-
- ocs = getService().retrieveProperties(
- getServiceContent().getPropertyCollector(),
- new PropertyFilterSpec[] { pfSpec });
- } else {
- s_logger.error("Invalid inventory path, path element can only be datacenter and folder");
- return null;
- }
-
- if(ocs != null && ocs.length > 0) {
- boolean found = false;
- for(ObjectContent oc : ocs) {
- String name = oc.getPropSet()[0].getVal().toString();
- if(name.equalsIgnoreCase(token) || name.equalsIgnoreCase("host")) {
- mor = oc.getObj();
- found = true;
- if (name.equalsIgnoreCase("host"))
- i--;
- break;
- }
- }
- if(!found) {
- s_logger.error("Path element points to an un-existing inventory entity");
- return null;
- }
- } else {
- s_logger.error("Path element points to an un-existing inventory entity");
- return null;
- }
- }
- return mor;
- }
-
- // path in format of <datacenter name>/<datastore name>
- public ManagedObjectReference getDatastoreMorByPath(String inventoryPath) throws Exception {
- assert(inventoryPath != null);
-
- String[] tokens;
- if(inventoryPath.startsWith("/"))
- tokens = inventoryPath.substring(1).split("/");
- else
- tokens = inventoryPath.split("/");
-
- if(tokens == null || tokens.length != 2) {
- s_logger.error("Invalid datastore inventory path. path: " + inventoryPath);
- return null;
- }
-
- DatacenterMO dcMo = new DatacenterMO(this, tokens[0]);
- if(dcMo.getMor() == null) {
- s_logger.error("Unable to locate the datacenter specified in path: " + inventoryPath);
- return null;
- }
-
- return dcMo.findDatastore(tokens[1]);
- }
-
- public void waitForTaskProgressDone(ManagedObjectReference morTask) throws Exception {
- while(true) {
- TaskInfo tinfo = (TaskInfo)getServiceUtil().getDynamicProperty(morTask, "info");
- Integer progress = tinfo.getProgress();
- if(progress == null)
- break;
-
- if(progress.intValue() >= 100)
- break;
-
- Thread.sleep(1000);
- }
- }
-
- public void getFile(String urlString, String localFileFullName) throws Exception {
- HttpURLConnection conn = getHTTPConnection(urlString);
-
- InputStream in = conn.getInputStream();
- OutputStream out = new FileOutputStream(new File(localFileFullName));
- byte[] buf = new byte[_CHUNKSIZE];
- int len = 0;
- while ((len = in.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- in.close();
- out.close();
- }
+
+ static {
+ try {
+ javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
+ javax.net.ssl.TrustManager tm = new TrustAllManager();
+ trustAllCerts[0] = tm;
+ javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
+ sc.init(null, trustAllCerts, null);
+ javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+ } catch (Exception e) {
+ s_logger.error("Unexpected exception ", e);
+ }
+ }
+
+ public VmwareContext(ExtendedAppUtil appUtil, String address) {
+ assert(appUtil != null) : "Invalid parameter in constructing VmwareContext object";
+
+ _appUtil = appUtil;
+ _serverAddress = address;
+ }
+
+ public void registerStockObject(String name, Object obj) {
+ synchronized(_stockMap) {
+ _stockMap.put(name, obj);
+ }
+ }
+
+ public void uregisterStockObject(String name) {
+ synchronized(_stockMap) {
+ _stockMap.remove(name);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> T getStockObject(String name) {
+ synchronized(_stockMap) {
+ return (T)_stockMap.get(name);
+ }
+ }
+
+ public String getServerAddress() {
+ return _serverAddress;
+ }
+
+ public ServiceConnection getServiceConnection() {
+ return _appUtil.getServiceConnection3();
+ }
+
+ public VimPortType getService() {
+ return getServiceConnection().getService();
+ }
+
+ public ServiceContent getServiceContent() {
+ return getServiceConnection().getServiceContent();
+ }
+
+ public ServiceUtil getServiceUtil() {
+ return _appUtil.getServiceUtil3();
+ }
+
+ public ManagedObjectReference getRootFolder() {
+ return getServiceContent().getRootFolder();
+ }
+
+ public ManagedObjectReference getHostMorByPath(String inventoryPath) throws Exception {
+ assert(inventoryPath != null);
+
+ String[] tokens;
+ if(inventoryPath.startsWith("/"))
+ tokens = inventoryPath.substring(1).split("/");
+ else
+ tokens = inventoryPath.split("/");
+
+ ManagedObjectReference mor = getRootFolder();
+ for(int i=0; i < tokens.length;i++) {
+ String token = tokens[i];
+ ObjectContent[] ocs;
+ if(mor.getType().equalsIgnoreCase("Datacenter")) {
+ PropertySpec pSpec = new PropertySpec();
+ pSpec.setType("ManagedEntity");
+ pSpec.setPathSet(new String[] { "name" });
+
+ TraversalSpec dcHostFolderTraversal = new TraversalSpec();
+ dcHostFolderTraversal.setType("Datacenter");
+ dcHostFolderTraversal.setPath("hostFolder");
+ dcHostFolderTraversal.setName("dcHostFolderTraversal");
+
+ ObjectSpec oSpec = new ObjectSpec();
+ oSpec.setObj(mor);
+ oSpec.setSkip(Boolean.TRUE);
+ oSpec.setSelectSet(new SelectionSpec[] { dcHostFolderTraversal });
+
+ PropertyFilterSpec pfSpec = new PropertyFilterSpec();
+ pfSpec.setPropSet(new PropertySpec[] { pSpec });
+ pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
+ ocs = getService().retrieveProperties(
+ getServiceContent().getPropertyCollector(),
+ new PropertyFilterSpec[] { pfSpec });
+
+ } else if(mor.getType().equalsIgnoreCase("Folder")) {
+ PropertySpec pSpec = new PropertySpec();
+ pSpec.setType("ManagedEntity");
+ pSpec.setPathSet(new String[] { "name" });
+
+ TraversalSpec folderChildrenTraversal = new TraversalSpec();
+ folderChildrenTraversal.setType("Folder");
+ folderChildrenTraversal.setPath("childEntity");
+ folderChildrenTraversal.setName("folderChildrenTraversal");
+
+ ObjectSpec oSpec = new ObjectSpec();
+ oSpec.setObj(mor);
+ oSpec.setSkip(Boolean.TRUE);
+ oSpec.setSelectSet(new SelectionSpec[] { folderChildrenTraversal });
+
+ PropertyFilterSpec pfSpec = new PropertyFilterSpec();
+ pfSpec.setPropSet(new PropertySpec[] { pSpec });
+ pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
+
+ ocs = getService().retrieveProperties(
+ getServiceContent().getPropertyCollector(),
+ new PropertyFilterSpec[] { pfSpec });
+ } else if(mor.getType().equalsIgnoreCase("ClusterComputeResource")) {
+ PropertySpec pSpec = new PropertySpec();
+ pSpec.setType("ManagedEntity");
+ pSpec.setPathSet(new String[] { "name" });
+
+ TraversalSpec clusterHostTraversal = new TraversalSpec();
+ clusterHostTraversal.setType("ClusterComputeResource");
+ clusterHostTraversal.setPath("host");
+ clusterHostTraversal.setName("folderChildrenTraversal");
+
+ ObjectSpec oSpec = new ObjectSpec();
+ oSpec.setObj(mor);
+ oSpec.setSkip(Boolean.TRUE);
+ oSpec.setSelectSet(new SelectionSpec[] { clusterHostTraversal });
+
+ PropertyFilterSpec pfSpec = new PropertyFilterSpec();
+ pfSpec.setPropSet(new PropertySpec[] { pSpec });
+ pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
+
+ ocs = getService().retrieveProperties(
+ getServiceContent().getPropertyCollector(),
+ new PropertyFilterSpec[] { pfSpec });
+ } else {
+ s_logger.error("Invalid inventory path, path element can only be datacenter and folder");
+ return null;
+ }
+
+ if(ocs != null && ocs.length > 0) {
+ boolean found = false;
+ for(ObjectContent oc : ocs) {
+ String name = oc.getPropSet()[0].getVal().toString();
+ if(name.equalsIgnoreCase(token) || name.equalsIgnoreCase("host")) {
+ mor = oc.getObj();
+ found = true;
+ if (name.equalsIgnoreCase("host"))
+ i--;
+ break;
+ }
+ }
+ if(!found) {
+ s_logger.error("Path element points to an un-existing inventory entity");
+ return null;
+ }
+ } else {
+ s_logger.error("Path element points to an un-existing inventory entity");
+ return null;
+ }
+ }
+ return mor;
+ }
+
+ // path in format of <datacenter name>/<datastore name>
+ public ManagedObjectReference getDatastoreMorByPath(String inventoryPath) throws Exception {
+ assert(inventoryPath != null);
+
+ String[] tokens;
+ if(inventoryPath.startsWith("/"))
+ tokens = inventoryPath.substring(1).split("/");
+ else
+ tokens = inventoryPath.split("/");
+
+ if(tokens == null || tokens.length != 2) {
+ s_logger.error("Invalid datastore inventory path. path: " + inventoryPath);
+ return null;
+ }
+
+ DatacenterMO dcMo = new DatacenterMO(this, tokens[0]);
+ if(dcMo.getMor() == null) {
+ s_logger.error("Unable to locate the datacenter specified in path: " + inventoryPath);
+ return null;
+ }
+
+ return dcMo.findDatastore(tokens[1]);
+ }
+
+ public void waitForTaskProgressDone(ManagedObjectReference morTask) throws Exception {
+ while(true) {
+ TaskInfo tinfo = (TaskInfo)getServiceUtil().getDynamicProperty(morTask, "info");
+ Integer progress = tinfo.getProgress();
+ if(progress == null)
+ break;
+
+ if(progress.intValue() >= 100)
+ break;
+
+ Thread.sleep(1000);
+ }
+ }
+
+ public void getFile(String urlString, String localFileFullName) throws Exception {
+ HttpURLConnection conn = getHTTPConnection(urlString);
+
+ InputStream in = conn.getInputStream();
+ OutputStream out = new FileOutputStream(new File(localFileFullName));
+ byte[] buf = new byte[_CHUNKSIZE];
+ int len = 0;
+ while ((len = in.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ in.close();
+ out.close();
+ }
public void uploadFile(String urlString, String localFileFullName) throws Exception {
uploadFile(urlString, new File(localFileFullName));
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ae274a4/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
index 746b714..47ff8e2 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package com.cloud.hypervisor.vmware.util;
+package com.cloud.hypervisor.vmware.util;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
@@ -108,9 +108,9 @@ public class VmwareHelper {
nic.setAddressType("Manual");
nic.setConnectable(connectInfo);
nic.setMacAddress(macAddress);
- nic.setUnitNumber(deviceNumber);
- nic.setKey(-contextNumber);
- return nic;
+ nic.setUnitNumber(deviceNumber);
+ nic.setKey(-contextNumber);
+ return nic;
}
public static VirtualDevice prepareDvNicDevice(VirtualMachineMO vmMo, ManagedObjectReference morNetwork, VirtualEthernetCardType deviceType,
@@ -160,93 +160,93 @@ public class VmwareHelper {
nic.setKey(-contextNumber);
return nic;
}
-
- // vmdkDatastorePath: [datastore name] vmdkFilePath
- public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath,
- int sizeInMb, ManagedObjectReference morDs, int deviceNumber, int contextNumber) throws Exception {
-
- VirtualDisk disk = new VirtualDisk();
-
- VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo();
- backingInfo.setDiskMode(VirtualDiskMode.persistent.toString());
- backingInfo.setThinProvisioned(true);
- backingInfo.setEagerlyScrub(false);
- backingInfo.setDatastore(morDs);
- backingInfo.setFileName(vmdkDatastorePath);
- disk.setBacking(backingInfo);
+
+ // vmdkDatastorePath: [datastore name] vmdkFilePath
+ public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath,
+ int sizeInMb, ManagedObjectReference morDs, int deviceNumber, int contextNumber) throws Exception {
+
+ VirtualDisk disk = new VirtualDisk();
+
+ VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo();
+ backingInfo.setDiskMode(VirtualDiskMode.persistent.toString());
+ backingInfo.setThinProvisioned(true);
+ backingInfo.setEagerlyScrub(false);
+ backingInfo.setDatastore(morDs);
+ backingInfo.setFileName(vmdkDatastorePath);
+ disk.setBacking(backingInfo);
if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey();
if(deviceNumber < 0)
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
disk.setControllerKey(controllerKey);
-
- disk.setKey(-contextNumber);
- disk.setUnitNumber(deviceNumber);
- disk.setCapacityInKB(sizeInMb*1024);
-
- VirtualDeviceConnectInfo connectInfo = new VirtualDeviceConnectInfo();
- connectInfo.setConnected(true);
- connectInfo.setStartConnected(true);
- disk.setConnectable(connectInfo);
-
- return disk;
+
+ disk.setKey(-contextNumber);
+ disk.setUnitNumber(deviceNumber);
+ disk.setCapacityInKB(sizeInMb*1024);
+
+ VirtualDeviceConnectInfo connectInfo = new VirtualDeviceConnectInfo();
+ connectInfo.setConnected(true);
+ connectInfo.setStartConnected(true);
+ disk.setConnectable(connectInfo);
+
+ return disk;
}
- // vmdkDatastorePath: [datastore name] vmdkFilePath, create delta disk based on disk from template
- public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath,
- int sizeInMb, ManagedObjectReference morDs, VirtualDisk templateDisk, int deviceNumber, int contextNumber) throws Exception {
-
- assert(templateDisk != null);
- VirtualDeviceBackingInfo parentBacking = templateDisk.getBacking();
- assert(parentBacking != null);
-
- // TODO Not sure if we need to check if the disk in template and the new disk needs to share the
- // same datastore
- VirtualDisk disk = new VirtualDisk();
- if(parentBacking instanceof VirtualDiskFlatVer1BackingInfo) {
- VirtualDiskFlatVer1BackingInfo backingInfo = new VirtualDiskFlatVer1BackingInfo();
- backingInfo.setDiskMode(((VirtualDiskFlatVer1BackingInfo)parentBacking).getDiskMode());
- backingInfo.setDatastore(morDs);
- backingInfo.setFileName(vmdkDatastorePath);
- backingInfo.setParent((VirtualDiskFlatVer1BackingInfo)parentBacking);
- disk.setBacking(backingInfo);
- } else if(parentBacking instanceof VirtualDiskFlatVer2BackingInfo) {
- VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo();
- backingInfo.setDiskMode(((VirtualDiskFlatVer2BackingInfo)parentBacking).getDiskMode());
- backingInfo.setDatastore(morDs);
- backingInfo.setFileName(vmdkDatastorePath);
- backingInfo.setParent((VirtualDiskFlatVer2BackingInfo)parentBacking);
- disk.setBacking(backingInfo);
- } else if(parentBacking instanceof VirtualDiskRawDiskMappingVer1BackingInfo) {
- VirtualDiskRawDiskMappingVer1BackingInfo backingInfo = new VirtualDiskRawDiskMappingVer1BackingInfo();
- backingInfo.setDiskMode(((VirtualDiskRawDiskMappingVer1BackingInfo)parentBacking).getDiskMode());
- backingInfo.setDatastore(morDs);
- backingInfo.setFileName(vmdkDatastorePath);
- backingInfo.setParent((VirtualDiskRawDiskMappingVer1BackingInfo)parentBacking);
- disk.setBacking(backingInfo);
- } else if(parentBacking instanceof VirtualDiskSparseVer1BackingInfo) {
- VirtualDiskSparseVer1BackingInfo backingInfo = new VirtualDiskSparseVer1BackingInfo();
- backingInfo.setDiskMode(((VirtualDiskSparseVer1BackingInfo)parentBacking).getDiskMode());
- backingInfo.setDatastore(morDs);
- backingInfo.setFileName(vmdkDatastorePath);
- backingInfo.setParent((VirtualDiskSparseVer1BackingInfo)parentBacking);
- disk.setBacking(backingInfo);
- } else if(parentBacking instanceof VirtualDiskSparseVer2BackingInfo) {
- VirtualDiskSparseVer2BackingInfo backingInfo = new VirtualDiskSparseVer2BackingInfo();
- backingInfo.setDiskMode(((VirtualDiskSparseVer2BackingInfo)parentBacking).getDiskMode());
- backingInfo.setDatastore(morDs);
- backingInfo.setFileName(vmdkDatastorePath);
- backingInfo.setParent((VirtualDiskSparseVer2BackingInfo)parentBacking);
- disk.setBacking(backingInfo);
- } else {
- throw new Exception("Unsupported disk backing: " + parentBacking.getClass().getCanonicalName());
- }
-
- if(controllerKey < 0)
- controllerKey = vmMo.getIDEDeviceControllerKey();
- disk.setControllerKey(controllerKey);
- if(deviceNumber < 0)
+ // vmdkDatastorePath: [datastore name] vmdkFilePath, create delta disk based on disk from template
+ public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath,
+ int sizeInMb, ManagedObjectReference morDs, VirtualDisk templateDisk, int deviceNumber, int contextNumber) throws Exception {
+
+ assert(templateDisk != null);
+ VirtualDeviceBackingInfo parentBacking = templateDisk.getBacking();
+ assert(parentBacking != null);
+
+ // TODO Not sure if we need to check if the disk in template and the new disk needs to share the
+ // same datastore
+ VirtualDisk disk = new VirtualDisk();
+ if(parentBacking instanceof VirtualDiskFlatVer1BackingInfo) {
+ VirtualDiskFlatVer1BackingInfo backingInfo = new VirtualDiskFlatVer1BackingInfo();
+ backingInfo.setDiskMode(((VirtualDiskFlatVer1BackingInfo)parentBacking).getDiskMode());
+ backingInfo.setDatastore(morDs);
+ backingInfo.setFileName(vmdkDatastorePath);
+ backingInfo.setParent((VirtualDiskFlatVer1BackingInfo)parentBacking);
+ disk.setBacking(backingInfo);
+ } else if(parentBacking instanceof VirtualDiskFlatVer2BackingInfo) {
+ VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo();
+ backingInfo.setDiskMode(((VirtualDiskFlatVer2BackingInfo)parentBacking).getDiskMode());
+ backingInfo.setDatastore(morDs);
+ backingInfo.setFileName(vmdkDatastorePath);
+ backingInfo.setParent((VirtualDiskFlatVer2BackingInfo)parentBacking);
+ disk.setBacking(backingInfo);
+ } else if(parentBacking instanceof VirtualDiskRawDiskMappingVer1BackingInfo) {
+ VirtualDiskRawDiskMappingVer1BackingInfo backingInfo = new VirtualDiskRawDiskMappingVer1BackingInfo();
+ backingInfo.setDiskMode(((VirtualDiskRawDiskMappingVer1BackingInfo)parentBacking).getDiskMode());
+ backingInfo.setDatastore(morDs);
+ backingInfo.setFileName(vmdkDatastorePath);
+ backingInfo.setParent((VirtualDiskRawDiskMappingVer1BackingInfo)parentBacking);
+ disk.setBacking(backingInfo);
+ } else if(parentBacking instanceof VirtualDiskSparseVer1BackingInfo) {
+ VirtualDiskSparseVer1BackingInfo backingInfo = new VirtualDiskSparseVer1BackingInfo();
+ backingInfo.setDiskMode(((VirtualDiskSparseVer1BackingInfo)parentBacking).getDiskMode());
+ backingInfo.setDatastore(morDs);
+ backingInfo.setFileName(vmdkDatastorePath);
+ backingInfo.setParent((VirtualDiskSparseVer1BackingInfo)parentBacking);
+ disk.setBacking(backingInfo);
+ } else if(parentBacking instanceof VirtualDiskSparseVer2BackingInfo) {
+ VirtualDiskSparseVer2BackingInfo backingInfo = new VirtualDiskSparseVer2BackingInfo();
+ backingInfo.setDiskMode(((VirtualDiskSparseVer2BackingInfo)parentBacking).getDiskMode());
+ backingInfo.setDatastore(morDs);
+ backingInfo.setFileName(vmdkDatastorePath);
+ backingInfo.setParent((VirtualDiskSparseVer2BackingInfo)parentBacking);
+ disk.setBacking(backingInfo);
+ } else {
+ throw new Exception("Unsupported disk backing: " + parentBacking.getClass().getCanonicalName());
+ }
+
+ if(controllerKey < 0)
+ controllerKey = vmMo.getIDEDeviceControllerKey();
+ disk.setControllerKey(controllerKey);
+ if(deviceNumber < 0)
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
disk.setKey(-contextNumber);
@@ -285,19 +285,19 @@ public class VmwareHelper {
if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey();
- if(deviceNumber < 0)
- deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
-
- disk.setControllerKey(controllerKey);
- disk.setKey(-contextNumber);
- disk.setUnitNumber(deviceNumber);
-
- VirtualDeviceConnectInfo connectInfo = new VirtualDeviceConnectInfo();
- connectInfo.setConnected(true);
- connectInfo.setStartConnected(true);
- disk.setConnectable(connectInfo);
-
- return disk;
+ if(deviceNumber < 0)
+ deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
+
+ disk.setControllerKey(controllerKey);
+ disk.setKey(-contextNumber);
+ disk.setUnitNumber(deviceNumber);
+
+ VirtualDeviceConnectInfo connectInfo = new VirtualDeviceConnectInfo();
+ connectInfo.setConnected(true);
+ connectInfo.setStartConnected(true);
+ disk.setConnectable(connectInfo);
+
+ return disk;
}
public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey,
@@ -339,23 +339,23 @@ public class VmwareHelper {
return disk;
}
-
- private static void setParentBackingInfo(VirtualDiskFlatVer2BackingInfo backingInfo,
- ManagedObjectReference morDs, String[] parentDatastorePathList) {
-
- VirtualDiskFlatVer2BackingInfo parentBacking = new VirtualDiskFlatVer2BackingInfo();
- parentBacking.setDatastore(morDs);
- parentBacking.setDiskMode(VirtualDiskMode.persistent.toString());
-
- if(parentDatastorePathList.length > 1) {
- String[] nextDatastorePathList = new String[parentDatastorePathList.length -1];
- for(int i = 0; i < parentDatastorePathList.length -1; i++)
- nextDatastorePathList[i] = parentDatastorePathList[i + 1];
- setParentBackingInfo(parentBacking, morDs, nextDatastorePathList);
- }
- parentBacking.setFileName(parentDatastorePathList[0]);
-
- backingInfo.setParent(parentBacking);
+
+ private static void setParentBackingInfo(VirtualDiskFlatVer2BackingInfo backingInfo,
+ ManagedObjectReference morDs, String[] parentDatastorePathList) {
+
+ VirtualDiskFlatVer2BackingInfo parentBacking = new VirtualDiskFlatVer2BackingInfo();
+ parentBacking.setDatastore(morDs);
+ parentBacking.setDiskMode(VirtualDiskMode.persistent.toString());
+
+ if(parentDatastorePathList.length > 1) {
+ String[] nextDatastorePathList = new String[parentDatastorePathList.length -1];
+ for(int i = 0; i < parentDatastorePathList.length -1; i++)
+ nextDatastorePathList[i] = parentDatastorePathList[i + 1];
+ setParentBackingInfo(parentBacking, morDs, nextDatastorePathList);
+ }
+ parentBacking.setFileName(parentDatastorePathList[0]);
+
+ backingInfo.setParent(parentBacking);
}
private static void setParentBackingInfo(VirtualDiskFlatVer2BackingInfo backingInfo,
@@ -375,14 +375,14 @@ public class VmwareHelper {
backingInfo.setParent(parentBacking);
}
-
- public static Pair<VirtualDevice, Boolean> prepareIsoDevice(VirtualMachineMO vmMo, String isoDatastorePath, ManagedObjectReference morDs,
- boolean connect, boolean connectAtBoot, int deviceNumber, int contextNumber) throws Exception {
-
- boolean newCdRom = false;
- VirtualCdrom cdRom = (VirtualCdrom )vmMo.getIsoDevice();
- if(cdRom == null) {
- newCdRom = true;
+
+ public static Pair<VirtualDevice, Boolean> prepareIsoDevice(VirtualMachineMO vmMo, String isoDatastorePath, ManagedObjectReference morDs,
+ boolean connect, boolean connectAtBoot, int deviceNumber, int contextNumber) throws Exception {
+
+ boolean newCdRom = false;
+ VirtualCdrom cdRom = (VirtualCdrom )vmMo.getIsoDevice();
+ if(cdRom == null) {
+ newCdRom = true;
cdRom = new VirtualCdrom();
assert(vmMo.getIDEDeviceControllerKey() >= 0);