public VirtualDeviceConfigSpec createVirtualDisk(String volName, int diskCtlrKey, ManagedObjectReference datastoreRef, int diskSizeMB) { String volumeName = getVolumeName(volName); VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec(); diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create; diskSpec.fileOperationSpecified = true; diskSpec.operation = VirtualDeviceConfigSpecOperation.add; diskSpec.operationSpecified = true; VirtualDisk disk = new VirtualDisk(); VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo(); diskfileBacking.fileName = volumeName; diskfileBacking.diskMode = "persistent"; disk.key = 0; disk.controllerKey = diskCtlrKey; disk.unitNumber = 0; disk.backing = diskfileBacking; disk.capacityInKB = diskSizeMB; disk.controllerKeySpecified = true; disk.unitNumberSpecified = true; diskSpec.device = disk; return(diskSpec); }
private static VirtualDeviceConfigSpec GetDisk(ref int key, string path, int controllerKey, int unitnumber) { VirtualDeviceConfigSpec devicespec = new VirtualDeviceConfigSpec(); VirtualDiskFlatVer2BackingInfo diskbacking = new VirtualDiskFlatVer2BackingInfo(); diskbacking.fileName = path; diskbacking.diskMode = "persistent"; VirtualDisk disk = new VirtualDisk(); disk.key = key--; disk.backing = diskbacking; disk.controllerKey = controllerKey; disk.controllerKeySpecified = true; disk.connectable = new VirtualDeviceConnectInfo(); disk.connectable.connected = true; disk.connectable.startConnected = true; disk.unitNumber = unitnumber; disk.unitNumberSpecified = true; devicespec = new VirtualDeviceConfigSpec(); devicespec.device = disk; devicespec.operation = VirtualDeviceConfigSpecOperation.add; devicespec.operationSpecified = true; return(devicespec); }
public VirtualDeviceConfigSpec Disk(VMWare oVMWare, string _name, string _datastore, string _size, int _unit_number, int _controller_key, string _suffix) { // Get Datastores ManagedObjectReference datastoreRef = null; PropertySpec[] psDCarray = new PropertySpec[] { new PropertySpec() }; psDCarray[0].all = false; psDCarray[0].allSpecified = true; psDCarray[0].pathSet = new string[] { "datastore" }; psDCarray[0].type = "Datacenter"; PropertyFilterSpec spec = new PropertyFilterSpec(); spec.propSet = psDCarray; spec.objectSet = new ObjectSpec[] { new ObjectSpec() }; spec.objectSet[0].obj = oVMWare.GetDataCenter(); spec.objectSet[0].skip = true; ObjectContent[] ocary = oVMWare.GetService().RetrieveProperties(oVMWare.GetSic().propertyCollector, new PropertyFilterSpec[] { spec }); ManagedObjectReference[] datastores = null; foreach (ObjectContent oc in ocary) { datastores = (ManagedObjectReference[])oc.propSet[0].val; } if (datastores != null) { datastoreRef = datastores[0]; } // Create disk VirtualDisk disk = new VirtualDisk(); disk.key = 2000; disk.controllerKey = _controller_key; disk.controllerKeySpecified = true; disk.unitNumber = _unit_number; disk.unitNumberSpecified = true; VirtualDiskFlatVer2BackingInfo diskBack = new VirtualDiskFlatVer2BackingInfo(); diskBack.diskMode = "persistent"; diskBack.fileName = "[" + _datastore + "] " + _name.ToLower() + "/" + _name.ToLower() + _suffix + ".vmdk"; diskBack.datastore = datastoreRef; diskBack.thinProvisioned = false; diskBack.thinProvisionedSpecified = true; diskBack.writeThrough = false; diskBack.writeThroughSpecified = true; disk.backing = diskBack; disk.capacityInKB = long.Parse(_size); VirtualDeviceConfigSpec dcs = new VirtualDeviceConfigSpec(); dcs.device = disk; dcs.fileOperation = VirtualDeviceConfigSpecFileOperation.create; dcs.fileOperationSpecified = true; dcs.operation = VirtualDeviceConfigSpecOperation.add; dcs.operationSpecified = true; return(dcs); }
public List <Disk> GetDisks(P2PBackup.Common.Node vm) { //Logger.Append("HUBRN", Severity.TRIVIA, "Searching for vm with uuid '"+vm.InternalId+"' disks..."); List <Disk> vmRawDisks = new List <Disk>(); //try{ string[] props = new string[] { "config" }; ObjectContent[] vmObjects = GetObjectProperties("VirtualMachine", props, GetVmMoRef(vm)); ObjectContent oc = null; ManagedObjectReference mor = null; DynamicProperty[] pcary = null; DynamicProperty pc = null; for (int oci = 0; oci < vmObjects.Length; oci++) { oc = vmObjects[oci]; mor = oc.obj; pcary = oc.propSet; if (mor.type != "VirtualMachine" || pcary == null) { continue; } //Console.WriteLine("Id : " + mor.Value); // VM MoRef for (int i = 0; i < pcary.Length; i++) { pc = pcary[i]; if (pc.val is VirtualMachineConfigInfo) { VirtualMachineConfigInfo vmci = (VirtualMachineConfigInfo)pc.val; //VmConfig = vmci; /*Console.WriteLine("\t Version : " + vmci.version); * Console.WriteLine("\t files.vmPathName : " + vmci.files.vmPathName); * // changeTrackingEnabled * Console.WriteLine("\t guestId : " + vmci.guestId); * Console.WriteLine("\t disk devices : ");*/ foreach (VirtualDevice vDev in vmci.hardware.device) { //Console.WriteLine("\t\t"+vDev.deviceInfo.label+" "+vDev.deviceInfo.dynamicProperty.ToString()); //if (vDev.backing is if (vDev.backing is VirtualDiskFlatVer2BackingInfo || vDev.backing is VirtualDiskFlatVer1BackingInfo || vDev.backing is VirtualDiskSparseVer2BackingInfo || vDev.backing is VirtualDiskRawDiskMappingVer1BackingInfo || vDev.backing is VirtualDiskRawDiskVer2BackingInfo ) { Disk rawDrive = new Disk(); VirtualDiskFlatVer2BackingInfo vDisk = (VirtualDiskFlatVer2BackingInfo)vDev.backing; //rawDrive.BlockDevice = vDisk.fileName; //rawDrive.DriveType = System.IO.DriveType.Fixed; //rawDrive.DriveFormat = "VMFS"; rawDrive.SnapshotType = SnapshotType.VADP; rawDrive.Path = vDisk.fileName; //.Substring(vDisk.fileName.IndexOf("]"+1)); if (LogEvent != null) { LogEvent(this, new LogEventArgs(0, Severity.TRIVIA, "Found disk '" + vDev.deviceInfo.label + "' with path '" + rawDrive.Path + "'")); } // independant_persistent disks are not part of snapshots, thus unbackupable if (vDisk.diskMode == "independent_persistent" || vDisk.dynamicType != null ) { if (LogEvent != null) { LogEvent(this, new LogEventArgs(0, Severity.INFO, "The disk '" + vDisk.fileName + "' won't be accessible : mode=" + vDisk.diskMode + ", dynamic=" + vDisk.dynamicType)); } rawDrive.Enabled = false; } else if (vDev.backing is VirtualDiskRawDiskMappingVer1BackingInfo) { if (((VirtualDiskRawDiskMappingVer1BackingInfo)vDev.backing).compatibilityMode == "physical") { if (LogEvent != null) { LogEvent(this, new LogEventArgs(0, Severity.INFO, "The disk '" + vDisk.fileName + "' won't be accessible since it's a physical RDM")); } rawDrive.Enabled = false; } } else { rawDrive.Enabled = true; } /*Console.WriteLine("\t\t diskMode: " + vDisk.diskMode); * Console.WriteLine("\t\t fileName: " + vDisk.fileName); * String dataStoreName = vDisk.fileName.Substring(vDisk.fileName.IndexOf("[")+1, vDisk.fileName.LastIndexOf("]") - 1); * //Console.WriteLine("\t\t fileName: " + vDisk.dynamicProperty); * Console.WriteLine("\t\t dynamic: " + vDisk.dynamicType);*/ /*if (vDisk.dynamicProperty == null) continue; * foreach (DynamicProperty dp in vDisk.dynamicProperty){ * Console.WriteLine("\t\t* " + dp.name + " : " + dp.val); * }*/ vmRawDisks.Add(rawDrive); } } } } // end for } //} //catch(Exception ex){ //Logger.Append("HUBRN", Severity.ERROR, "Could not get vm disks : "+ex.ToString()); //} return(vmRawDisks); }
private List <VMwareDisk> Disks() { List <VMwareDisk> disks = new List <VMwareDisk>(); VMWare oVMWare = new VMWare(0, dsn); string name = "WSCLV223A"; DataSet dsGuest = oVMWare.GetGuest(name); if (dsGuest.Tables[0].Rows.Count > 0) { DataRow drGuest = dsGuest.Tables[0].Rows[0]; int intDatastore = Int32.Parse(drGuest["datastoreid"].ToString()); int intHost = Int32.Parse(drGuest["hostid"].ToString()); int intCluster = Int32.Parse(oVMWare.GetHost(intHost, "clusterid")); int intFolder = Int32.Parse(oVMWare.GetCluster(intCluster, "folderid")); int intDataCenter = Int32.Parse(oVMWare.GetFolder(intFolder, "datacenterid")); string strDataCenter = oVMWare.GetDatacenter(intDataCenter, "name"); int intVirtualCenter = Int32.Parse(oVMWare.GetDatacenter(intDataCenter, "virtualcenterid")); string strVirtualCenter = oVMWare.GetVirtualCenter(intVirtualCenter, "name"); string strVirtualCenterURL = oVMWare.GetVirtualCenter(intVirtualCenter, "url"); int intVirtualCenterEnv = Int32.Parse(oVMWare.GetVirtualCenter(intVirtualCenter, "environment")); string strConnect = oVMWare.ConnectDEBUG(strVirtualCenterURL, intVirtualCenterEnv, strDataCenter); VimService _service = oVMWare.GetService(); ServiceContent _sic = oVMWare.GetSic(); try { ManagedObjectReference oVM = oVMWare.GetVM(name); if (oVM != null) { VirtualMachineConfigInfo vminfo = (VirtualMachineConfigInfo)oVMWare.getObjectProperty(oVM, "config"); VirtualDevice[] devices = vminfo.hardware.device; List <VMwareController> controllers = new List <VMwareController>(); foreach (VirtualDevice device in devices) { // Try to cast to Controller try { VirtualController controller = (VirtualController)device; VMwareController Controller = new VMwareController(); Controller.busNumber = controller.busNumber; Controller.key = controller.key; controllers.Add(Controller); } catch { } // Try to cast to Disk try { VirtualDisk disk = (VirtualDisk)device; bool boolShared = false; string strLunID = null; try { VirtualDiskFlatVer2BackingInfo backingNonShared = (VirtualDiskFlatVer2BackingInfo)disk.backing; boolShared = false; strLunID = ""; } catch { // Not flat disk, so don't worry about it } if (strLunID != null) { VMwareDisk Disk = new VMwareDisk(); Disk.controllerKey = disk.controllerKey; Disk.label = disk.deviceInfo.label; Disk.capacityInKB = disk.capacityInKB; Disk.unitNumber = disk.unitNumber; Disk.lunUuid = strLunID; Disk.Shared = boolShared; disks.Add(Disk); } } catch { } } Storage oStorage = new Storage(0, dsn); // Match up disks with controllers for bus numbers foreach (VMwareDisk disk in disks) { disk.capacityInKB = ((disk.capacityInKB / 1024) / 1024); // convert KB to GB foreach (VMwareController controller in controllers) { if (disk.controllerKey == controller.key) { disk.busNumber = controller.busNumber; disk.Name = disk.capacityInKB.ToString() + " GB - SCSI(" + disk.busNumber.ToString() + ":" + disk.unitNumber.ToString() + ") " + disk.label; oStorage.AddLunDisk(0, disk.busNumber, disk.unitNumber, disk.lunUuid); break; } } } } } catch { } finally { if (_service != null) { _service.Abort(); if (_service.Container != null) { _service.Container.Dispose(); } try { _service.Logout(_sic.sessionManager); } catch { } _service.Dispose(); _service = null; _sic = null; } } } return(disks); }
public VirtualDeviceConfigSpec createVirtualDisk(String volName, int diskCtlrKey, ManagedObjectReference datastoreRef, int diskSizeMB) { String volumeName = getVolumeName(volName); VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec(); diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create; diskSpec.fileOperationSpecified = true; diskSpec.operation = VirtualDeviceConfigSpecOperation.add; diskSpec.operationSpecified = true; VirtualDisk disk = new VirtualDisk(); VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo(); diskfileBacking.fileName = volumeName; diskfileBacking.diskMode = "persistent"; disk.key = 0; disk.controllerKey = diskCtlrKey; disk.unitNumber = 0; disk.backing = diskfileBacking; disk.capacityInKB = diskSizeMB; disk.controllerKeySpecified = true; disk.unitNumberSpecified = true; diskSpec.device = disk; return diskSpec; }
private VirtualDeviceConfigSpec getDiskDeviceConfigSpec() { String ops = cb.get_option("operation"); VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec(); VirtualMachineConfigInfo vmConfigInfo = (VirtualMachineConfigInfo)cb.getServiceUtil().GetDynamicProperty( _virtualMachine,"config"); if(ops.Equals("add")) { VirtualDisk disk = new VirtualDisk(); VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo(); String dsName = getDataStoreName(int.Parse(cb.get_option("disksize"))); int ckey = -1; int unitNumber = 0; VirtualDevice [] test = vmConfigInfo.hardware.device; for(int k=0;k<test.Length;k++){ if(test[k].deviceInfo.label.Equals( "SCSI Controller 0")){ ckey = test[k].key; } } unitNumber = test.Length + 1; String fileName = "["+dsName+"] "+ cb.get_option("vmname") + "/"+cb.get_option("value")+".vmdk"; diskfileBacking.fileName=fileName; diskfileBacking.diskMode=cb.get_option("diskmode"); disk.controllerKey = ckey; disk.unitNumber=unitNumber; disk.controllerKeySpecified = true; disk.unitNumberSpecified = true; disk.backing= diskfileBacking; int size = 1024 * (int.Parse(cb.get_option("disksize"))); disk.capacityInKB= size; disk.key= 0; diskSpec.operation=VirtualDeviceConfigSpecOperation.add; diskSpec.fileOperation=VirtualDeviceConfigSpecFileOperation.create; diskSpec.fileOperationSpecified = true; diskSpec.operationSpecified = true; diskSpec.device=disk; } else if(ops.Equals("remove")) { VirtualDisk disk = null; VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo(); VirtualDevice [] test = vmConfigInfo.hardware.device; for(int k=0;k<test.Length;k++){ if(test[k].deviceInfo.label.Equals( cb.get_option("value"))){ disk = (VirtualDisk)test[k]; } } if(disk != null) { diskSpec.operation=VirtualDeviceConfigSpecOperation.remove; diskSpec.operationSpecified = true; diskSpec.fileOperation=VirtualDeviceConfigSpecFileOperation.destroy; diskSpec.fileOperationSpecified = true; diskSpec.device=disk; } else { Console.WriteLine("No device found " + cb.get_option("value")); return null; } } return diskSpec; }
private VirtualDeviceConfigSpec getDiskDeviceConfigSpec() { String ops = cb.get_option("operation"); VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec(); VirtualMachineConfigInfo vmConfigInfo = (VirtualMachineConfigInfo)cb.getServiceUtil().GetDynamicProperty( _virtualMachine, "config"); if (ops.Equals("add")) { VirtualDisk disk = new VirtualDisk(); VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo(); String dsName = getDataStoreName(int.Parse(cb.get_option("disksize"))); int ckey = -1; int unitNumber = 0; VirtualDevice [] test = vmConfigInfo.hardware.device; for (int k = 0; k < test.Length; k++) { if (test[k].deviceInfo.label.Equals( "SCSI Controller 0")) { ckey = test[k].key; } } unitNumber = test.Length + 1; String fileName = "[" + dsName + "] " + cb.get_option("vmname") + "/" + cb.get_option("value") + ".vmdk"; diskfileBacking.fileName = fileName; diskfileBacking.diskMode = cb.get_option("diskmode"); disk.controllerKey = ckey; disk.unitNumber = unitNumber; disk.controllerKeySpecified = true; disk.unitNumberSpecified = true; disk.backing = diskfileBacking; int size = 1024 * (int.Parse(cb.get_option("disksize"))); disk.capacityInKB = size; disk.key = 0; diskSpec.operation = VirtualDeviceConfigSpecOperation.add; diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create; diskSpec.fileOperationSpecified = true; diskSpec.operationSpecified = true; diskSpec.device = disk; } else if (ops.Equals("remove")) { VirtualDisk disk = null; VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo(); VirtualDevice [] test = vmConfigInfo.hardware.device; for (int k = 0; k < test.Length; k++) { if (test[k].deviceInfo.label.Equals( cb.get_option("value"))) { disk = (VirtualDisk)test[k]; } } if (disk != null) { diskSpec.operation = VirtualDeviceConfigSpecOperation.remove; diskSpec.operationSpecified = true; diskSpec.fileOperation = VirtualDeviceConfigSpecFileOperation.destroy; diskSpec.fileOperationSpecified = true; diskSpec.device = disk; } else { Console.WriteLine("No device found " + cb.get_option("value")); return(null); } } return(diskSpec); }