protected override void Run() { VBD cdrom = VM.FindVMCDROM(); if (cdrom == null) { Description = Messages.NEW_DVD_DRIVE_CREATING; // could not find a cd, try and make one List<String> allowedDevices = new List<String>(XenAPI.VM.get_allowed_VBD_devices(Session, VM.opaque_ref)); XenAPI.VBD cdDrive = new XenAPI.VBD(); cdDrive.VM = new XenAPI.XenRef<XenAPI.VM>(VM.opaque_ref); cdDrive.VDI = null; cdDrive.bootable = false; cdDrive.device = ""; cdDrive.userdevice = allowedDevices.Contains("3") ? "3" : allowedDevices[0]; cdDrive.empty = true; cdDrive.type = XenAPI.vbd_type.CD; cdDrive.mode = XenAPI.vbd_mode.RO; VbdSaveAndPlugAction cdCreate = new VbdSaveAndPlugAction(VM, cdDrive, Messages.DVD_DRIVE, Session, InstallingTools, true,_showMustRebootBoxCD,_showVBDWarningBox); cdCreate.RunExternal(Session); Description = Messages.NEW_DVD_DRIVE_DONE; } }
protected override void Run() { // check the xstools sr is present, if not try and repair it foreach (SR sr in VM.Connection.Cache.SRs) { if (sr.IsToolsSR() && sr.IsBroken()) { try { SrRepairAction action = new SrRepairAction(sr.Connection, sr, false); action.RunExternal(Session); } catch (Failure f) { throw new Failure(Messages.XS_TOOLS_SR_NOT_FOUND, f); } } } // Check the version (if any) of the PV tools already on this host... VM_guest_metrics guestMetrics = Connection.Resolve(VM.guest_metrics); if (guestMetrics != null && !VM.HasNewVirtualisationStates() && guestMetrics.PV_drivers_installed() && guestMetrics.PV_drivers_up_to_date) { this.Description = Messages.INSTALLTOOLS_EXIST; return; } // Check that the VM has a cd-rom... XenAPI.VBD cdrom = VM.FindVMCDROM(); if (cdrom == null) { throw new Failure(Messages.INSTALLTOOLS_COULDNOTFIND_CD); } // Find the tools ISO... XenAPI.VDI winIso = findWinISO(_searchHiddenIsOs); if (winIso == null) { throw new Failure(Messages.INSTALLTOOLS_COULDNOTFIND_WIN); } Description = Messages.INSTALLTOOLS_STARTING; // Eject anything that's currently in the cd-rom... if (!cdrom.empty) { XenAPI.VBD.eject(Session, cdrom.opaque_ref); } // Insert the tools ISO... XenAPI.VBD.insert(Session, cdrom.opaque_ref, winIso.opaque_ref); // done here; installation continues on the VM Description = Messages.INSTALLTOOLS_DONE; }
public VbdSaveAndPlugAction(VM vm, XenAPI.VBD vbd, string vdiName, XenAPI.Session session, bool supress, Action showMustRebootBoxCD, Action showVBDWarningBox) : base(vm.Connection, string.Format(Messages.ATTACHING_VIRTUAL_DISK, vdiName, vm.Name), "", supress) { _ShowVBDWarningBox = showVBDWarningBox; _ShowMustRebootBoxCD = showMustRebootBoxCD; VM = vm; this.vbd = vbd; // Preserve existing session if provided. if (session != null) this.Session = session; ApiMethodsToRoleCheck.Add("vbd.async_plug"); ApiMethodsToRoleCheck.Add("vbd.set_userdevice"); }
public VbdSaveAndPlugAction(VM vm, XenAPI.VBD vbd, string vdiName, XenAPI.Session session, bool supress, Action showMustRebootBoxCD, Action showVBDWarningBox) : base(vm.Connection, string.Format(Messages.ATTACHING_VIRTUAL_DISK, vdiName, vm.Name), "", supress) { _ShowVBDWarningBox = showVBDWarningBox; _ShowMustRebootBoxCD = showMustRebootBoxCD; VM = vm; this.vbd = vbd; // Preserve existing session if provided. if (session != null) { this.Session = session; } ApiMethodsToRoleCheck.Add("vbd.async_plug"); ApiMethodsToRoleCheck.Add("vbd.set_userdevice"); }
protected override void Run() { VBD cdrom = VM.FindVMCDROM(); if (cdrom == null) { Description = Messages.NEW_DVD_DRIVE_CREATING; // could not find a cd, try and make one if (VM.VBDs.Count >= VM.MaxVBDsAllowed()) { throw new Exception(Messages.CDDRIVE_MAX_ALLOWED_VBDS); } List <String> allowedDevices = new List <String>(XenAPI.VM.get_allowed_VBD_devices(Session, VM.opaque_ref)); if (allowedDevices == null || allowedDevices.Count == 0) { throw new Exception(Messages.CDDRIVE_MAX_ALLOWED_VBDS); } XenAPI.VBD cdDrive = new XenAPI.VBD { VM = new XenAPI.XenRef <XenAPI.VM>(VM.opaque_ref), bootable = false, device = "", userdevice = allowedDevices.Contains("3") ? "3" : allowedDevices[0], empty = true, type = XenAPI.vbd_type.CD, mode = XenAPI.vbd_mode.RO }; var cdCreate = new VbdSaveAndPlugAction(VM, cdDrive, Messages.DVD_DRIVE, Session, true); cdCreate.ShowUserInstruction += msg => ShowUserInstruction?.Invoke(msg); cdCreate.RunExternal(Session); Description = Messages.NEW_DVD_DRIVE_DONE; } }
protected override void Run() { VBD cdrom = VM.FindVMCDROM(); if (cdrom == null) { Description = Messages.NEW_DVD_DRIVE_CREATING; // could not find a cd, try and make one if (VM.VBDs.Count >= VM.MaxVBDsAllowed) { throw new Exception(Messages.CDDRIVE_MAX_ALLOWED_VBDS); } List <String> allowedDevices = new List <String>(XenAPI.VM.get_allowed_VBD_devices(Session, VM.opaque_ref)); if (allowedDevices == null || allowedDevices.Count == 0) { throw new Exception(Messages.CDDRIVE_MAX_ALLOWED_VBDS); } XenAPI.VBD cdDrive = new XenAPI.VBD(); cdDrive.VM = new XenAPI.XenRef <XenAPI.VM>(VM.opaque_ref); cdDrive.VDI = null; cdDrive.bootable = false; cdDrive.device = ""; cdDrive.userdevice = allowedDevices.Contains("3") ? "3" : allowedDevices[0]; cdDrive.empty = true; cdDrive.type = XenAPI.vbd_type.CD; cdDrive.mode = XenAPI.vbd_mode.RO; VbdSaveAndPlugAction cdCreate = new VbdSaveAndPlugAction(VM, cdDrive, Messages.DVD_DRIVE, Session, InstallingTools, true, _showMustRebootBoxCD, _showVBDWarningBox); cdCreate.RunExternal(Session); Description = Messages.NEW_DVD_DRIVE_DONE; } }
private void OkButton_Click(object sender, EventArgs e) { if (SrListBox.SR == null || SelectionNull || NameTextBox.Text == "" || !connection.IsConnected) { return; } if (DontCreateVDI) { DialogResult = DialogResult.OK; Close(); return; } XenAPI.SR sr = SrListBox.SR; if (!sr.shared && TheVM != null && TheVM.HaPriorityIsRestart()) { if (new ThreeButtonDialog( new ThreeButtonDialog.Details(SystemIcons.Warning, Messages.NEW_SR_DIALOG_ATTACH_NON_SHARED_DISK_HA, Messages.XENCENTER), ThreeButtonDialog.ButtonYes, ThreeButtonDialog.ButtonNo).ShowDialog(Program.MainWindow) != DialogResult.Yes) { return; } new HAUnprotectVMAction(TheVM).RunExternal(TheVM.Connection.Session); } VDI vdi = NewDisk(); if (TheVM != null) { var alreadyHasBootableDisk = HasBootableDisk(TheVM); Actions.DelegatedAsyncAction action = new Actions.DelegatedAsyncAction(connection, string.Format(Messages.ACTION_DISK_ADDING_TITLE, NameTextBox.Text, sr.NameWithoutHost), Messages.ACTION_DISK_ADDING, Messages.ACTION_DISK_ADDED, delegate(XenAPI.Session session) { // Get legitimate unused userdevice numbers string[] uds = XenAPI.VM.get_allowed_VBD_devices(session, TheVM.opaque_ref); if (uds.Length == 0) { throw new Exception(FriendlyErrorNames.VBDS_MAX_ALLOWED); } string ud = uds[0]; string vdiref = VDI.create(session, vdi); XenAPI.VBD vbd = NewDevice(); vbd.VDI = new XenAPI.XenRef <XenAPI.VDI>(vdiref); vbd.VM = new XenAPI.XenRef <XenAPI.VM>(TheVM); // CA-44959: only make bootable if there aren't other bootable VBDs. vbd.bootable = ud == "0" && !alreadyHasBootableDisk; vbd.userdevice = ud; // Now try to plug the VBD. new XenAdmin.Actions.VbdSaveAndPlugAction(TheVM, vbd, vdi.Name, session, false, ShowMustRebootBoxCD, ShowVBDWarningBox).RunAsync(); }); action.VM = TheVM; new Dialogs.ActionProgressDialog(action, ProgressBarStyle.Blocks).ShowDialog(); if (!action.Succeeded) { return; } } else { CreateDiskAction action = new CreateDiskAction(vdi); new Dialogs.ActionProgressDialog(action, ProgressBarStyle.Marquee).ShowDialog(); if (!action.Succeeded) { return; } } DialogResult = DialogResult.OK; Close(); }
protected override void ProcessRecord() { GetSession(); if (Record == null && HashTable == null) { Record = new XenAPI.VBD(); Record.VM = VM == null ? null : new XenRef <XenAPI.VM>(VM.opaque_ref); Record.VDI = VDI == null ? null : new XenRef <XenAPI.VDI>(VDI.opaque_ref); Record.userdevice = Userdevice; Record.bootable = Bootable; Record.mode = Mode; Record.type = Type; Record.unpluggable = Unpluggable; Record.empty = Empty; Record.other_config = CommonCmdletFunctions.ConvertHashTableToDictionary <string, string>(OtherConfig); Record.qos_algorithm_type = QosAlgorithmType; Record.qos_algorithm_params = CommonCmdletFunctions.ConvertHashTableToDictionary <string, string>(QosAlgorithmParams); } else if (Record == null) { Record = new XenAPI.VBD(HashTable); } if (!ShouldProcess(session.Url, "VBD.create")) { return; } RunApiCall(() => { var contxt = _context as XenServerCmdletDynamicParameters; if (contxt != null && contxt.Async) { taskRef = XenAPI.VBD.async_create(session, Record); if (PassThru) { XenAPI.Task taskObj = null; if (taskRef != "OpaqueRef:NULL") { taskObj = XenAPI.Task.get_record(session, taskRef.opaque_ref); taskObj.opaque_ref = taskRef.opaque_ref; } WriteObject(taskObj, true); } } else { string objRef = XenAPI.VBD.create(session, Record); if (PassThru) { XenAPI.VBD obj = null; if (objRef != "OpaqueRef:NULL") { obj = XenAPI.VBD.get_record(session, objRef); obj.opaque_ref = objRef; } WriteObject(obj, true); } } }); UpdateSessions(); }
private void OkButton_Click(object sender, EventArgs e) { if (SrListBox.SR == null || SelectionNull || NameTextBox.Text == "" || !connection.IsConnected) { return; } if (DontCreateVDI) { DialogResult = DialogResult.OK; Close(); return; } XenAPI.SR sr = SrListBox.SR; if (!sr.shared && TheVM != null && TheVM.HaPriorityIsRestart()) { DialogResult dialogResult; using (var dlg = new ThreeButtonDialog( new ThreeButtonDialog.Details(SystemIcons.Warning, Messages.NEW_SR_DIALOG_ATTACH_NON_SHARED_DISK_HA, Messages.XENCENTER), ThreeButtonDialog.ButtonYes, ThreeButtonDialog.ButtonNo)) { dialogResult = dlg.ShowDialog(Program.MainWindow); } if (dialogResult != DialogResult.Yes) { return; } new HAUnprotectVMAction(TheVM).RunExternal(TheVM.Connection.Session); } VDI vdi = NewDisk(); if (TheVM != null) { if (sr.other_config.ContainsKey("scheduler")) { if (sr.other_config.ContainsKey("scheduler") && sr.other_config["scheduler"] == "cfq") { //获取原class值(优先级) List <XenRef <VBD> > origin_VBDs = TheVM.VBDs; foreach (VBD v in connection.ResolveAll <VBD>(origin_VBDs)) { if (v.type == vbd_type.CD) { continue; } if (XenAPI.VBD.get_qos_algorithm_params(TheVM.Connection.Session, v.opaque_ref).ContainsKey("class")) { if (XenAPI.VBD.get_qos_algorithm_params(sr.Connection.Session, v.opaque_ref)["class"] != "" && XenAPI.VBD.get_qos_algorithm_params(sr.Connection.Session, v.opaque_ref)["class"] != null) { _class = XenAPI.VBD.get_qos_algorithm_params(sr.Connection.Session, v.opaque_ref)["class"]; } } } } } } if (TheVM != null) { var alreadyHasBootableDisk = HasBootableDisk(TheVM); Actions.DelegatedAsyncAction action = new Actions.DelegatedAsyncAction(connection, string.Format(Messages.ACTION_DISK_ADDING_TITLE, NameTextBox.Text, sr.NameWithoutHost), Messages.ACTION_DISK_ADDING, Messages.ACTION_DISK_ADDED, delegate(XenAPI.Session session) { // Get legitimate unused userdevice numbers string[] uds = XenAPI.VM.get_allowed_VBD_devices(session, TheVM.opaque_ref); if (uds.Length == 0) { throw new Exception(FriendlyErrorNames.VBDS_MAX_ALLOWED); } string ud = uds[0]; string vdiref = VDI.create(session, vdi); XenAPI.VBD vbd = NewDevice(); vbd.VDI = new XenAPI.XenRef <XenAPI.VDI>(vdiref); vbd.VM = new XenAPI.XenRef <XenAPI.VM>(TheVM); // CA-44959: only make bootable if there aren't other bootable VBDs. vbd.bootable = ud == "0" && !alreadyHasBootableDisk; vbd.userdevice = ud; // Now try to plug the VBD. //new XenAdmin.Actions.VbdSaveAndPlugAction(TheVM, vbd, vdi.Name, session, false, ShowMustRebootBoxCD, ShowVBDWarningBox).RunAsync(); new XenAdmin.Actions.VbdSaveAndPlugAction(TheVM, vbd, vdi.Name, session, false, ShowMustRebootBoxCD, ShowVBDWarningBox).RunExternal(connection.Session); }); action.VM = TheVM; using (var dialog = new Dialogs.ActionProgressDialog(action, ProgressBarStyle.Blocks)) { dialog.ShowDialog(this); } if (!action.Succeeded) { return; } } else { CreateDiskAction action = new CreateDiskAction(vdi); new Dialogs.ActionProgressDialog(action, ProgressBarStyle.Marquee).ShowDialog(); if (!action.Succeeded) { return; } } DialogResult = DialogResult.OK; Close(); //若VM为空则不设置优先级 //若虚拟机启用了IO功能才进行下列操作 if (TheVM != null) { if (TheVM.other_config.ContainsKey("io_limit") || sr.other_config.ContainsKey("scheduler")) { foreach (VBD v in connection.ResolveAll <VBD>(TheVM.VBDs)) { if (v.type == vbd_type.CD) { continue; } if (XenAPI.VBD.get_qos_algorithm_params(connection.Session, v.opaque_ref).ContainsKey("class")) { XenAPI.VBD.remove_from_qos_algorithm_params(connection.Session, v.opaque_ref, "class"); } if (XenAPI.VBD.get_qos_algorithm_params(connection.Session, v.opaque_ref).ContainsKey("sched")) { XenAPI.VBD.remove_from_qos_algorithm_params(connection.Session, v.opaque_ref, "sched"); } if (XenAPI.VBD.get_qos_algorithm_type(connection.Session, v.opaque_ref) != null) { XenAPI.VBD.set_qos_algorithm_type(connection.Session, v.opaque_ref, ""); } XenAPI.VBD.set_qos_algorithm_type(connection.Session, v.opaque_ref, "ionice"); XenAPI.VBD.add_to_qos_algorithm_params(connection.Session, v.opaque_ref, "sched", "rt"); XenAPI.VBD.add_to_qos_algorithm_params(connection.Session, v.opaque_ref, "class", _class); } if (TheVM.power_state == vm_power_state.Running) { io_limit(); } } } }
public VbdSaveAndPlugAction(VM vm, XenAPI.VBD vbd, string vdiName, XenAPI.Session session, bool installingTools, bool supress, Action showMustRebootBoxCD, Action showVBDWarningBox) : this(vm, vbd, vdiName, session, supress, showMustRebootBoxCD, showVBDWarningBox) { InstallingTools = installingTools; }
protected override void ProcessRecord() { XenAPI.Session session = XenObject as XenAPI.Session; if (session != null) { WriteObject(new XenRef <XenAPI.Session>(session)); return; } XenAPI.Auth auth = XenObject as XenAPI.Auth; if (auth != null) { WriteObject(new XenRef <XenAPI.Auth>(auth)); return; } XenAPI.Subject subject = XenObject as XenAPI.Subject; if (subject != null) { WriteObject(new XenRef <XenAPI.Subject>(subject)); return; } XenAPI.Role role = XenObject as XenAPI.Role; if (role != null) { WriteObject(new XenRef <XenAPI.Role>(role)); return; } XenAPI.Task task = XenObject as XenAPI.Task; if (task != null) { WriteObject(new XenRef <XenAPI.Task>(task)); return; } XenAPI.Event evt = XenObject as XenAPI.Event; if (evt != null) { WriteObject(new XenRef <XenAPI.Event>(evt)); return; } XenAPI.Pool pool = XenObject as XenAPI.Pool; if (pool != null) { WriteObject(new XenRef <XenAPI.Pool>(pool)); return; } XenAPI.Pool_patch pool_patch = XenObject as XenAPI.Pool_patch; if (pool_patch != null) { WriteObject(new XenRef <XenAPI.Pool_patch>(pool_patch)); return; } XenAPI.Pool_update pool_update = XenObject as XenAPI.Pool_update; if (pool_update != null) { WriteObject(new XenRef <XenAPI.Pool_update>(pool_update)); return; } XenAPI.VM vm = XenObject as XenAPI.VM; if (vm != null) { WriteObject(new XenRef <XenAPI.VM>(vm)); return; } XenAPI.VM_metrics vm_metrics = XenObject as XenAPI.VM_metrics; if (vm_metrics != null) { WriteObject(new XenRef <XenAPI.VM_metrics>(vm_metrics)); return; } XenAPI.VM_guest_metrics vm_guest_metrics = XenObject as XenAPI.VM_guest_metrics; if (vm_guest_metrics != null) { WriteObject(new XenRef <XenAPI.VM_guest_metrics>(vm_guest_metrics)); return; } XenAPI.VMPP vmpp = XenObject as XenAPI.VMPP; if (vmpp != null) { WriteObject(new XenRef <XenAPI.VMPP>(vmpp)); return; } XenAPI.VMSS vmss = XenObject as XenAPI.VMSS; if (vmss != null) { WriteObject(new XenRef <XenAPI.VMSS>(vmss)); return; } XenAPI.VM_appliance vm_appliance = XenObject as XenAPI.VM_appliance; if (vm_appliance != null) { WriteObject(new XenRef <XenAPI.VM_appliance>(vm_appliance)); return; } XenAPI.DR_task dr_task = XenObject as XenAPI.DR_task; if (dr_task != null) { WriteObject(new XenRef <XenAPI.DR_task>(dr_task)); return; } XenAPI.Host host = XenObject as XenAPI.Host; if (host != null) { WriteObject(new XenRef <XenAPI.Host>(host)); return; } XenAPI.Host_crashdump host_crashdump = XenObject as XenAPI.Host_crashdump; if (host_crashdump != null) { WriteObject(new XenRef <XenAPI.Host_crashdump>(host_crashdump)); return; } XenAPI.Host_patch host_patch = XenObject as XenAPI.Host_patch; if (host_patch != null) { WriteObject(new XenRef <XenAPI.Host_patch>(host_patch)); return; } XenAPI.Host_metrics host_metrics = XenObject as XenAPI.Host_metrics; if (host_metrics != null) { WriteObject(new XenRef <XenAPI.Host_metrics>(host_metrics)); return; } XenAPI.Host_cpu host_cpu = XenObject as XenAPI.Host_cpu; if (host_cpu != null) { WriteObject(new XenRef <XenAPI.Host_cpu>(host_cpu)); return; } XenAPI.Network network = XenObject as XenAPI.Network; if (network != null) { WriteObject(new XenRef <XenAPI.Network>(network)); return; } XenAPI.VIF vif = XenObject as XenAPI.VIF; if (vif != null) { WriteObject(new XenRef <XenAPI.VIF>(vif)); return; } XenAPI.VIF_metrics vif_metrics = XenObject as XenAPI.VIF_metrics; if (vif_metrics != null) { WriteObject(new XenRef <XenAPI.VIF_metrics>(vif_metrics)); return; } XenAPI.PIF pif = XenObject as XenAPI.PIF; if (pif != null) { WriteObject(new XenRef <XenAPI.PIF>(pif)); return; } XenAPI.PIF_metrics pif_metrics = XenObject as XenAPI.PIF_metrics; if (pif_metrics != null) { WriteObject(new XenRef <XenAPI.PIF_metrics>(pif_metrics)); return; } XenAPI.Bond bond = XenObject as XenAPI.Bond; if (bond != null) { WriteObject(new XenRef <XenAPI.Bond>(bond)); return; } XenAPI.VLAN vlan = XenObject as XenAPI.VLAN; if (vlan != null) { WriteObject(new XenRef <XenAPI.VLAN>(vlan)); return; } XenAPI.SM sm = XenObject as XenAPI.SM; if (sm != null) { WriteObject(new XenRef <XenAPI.SM>(sm)); return; } XenAPI.SR sr = XenObject as XenAPI.SR; if (sr != null) { WriteObject(new XenRef <XenAPI.SR>(sr)); return; } XenAPI.LVHD lvhd = XenObject as XenAPI.LVHD; if (lvhd != null) { WriteObject(new XenRef <XenAPI.LVHD>(lvhd)); return; } XenAPI.VDI vdi = XenObject as XenAPI.VDI; if (vdi != null) { WriteObject(new XenRef <XenAPI.VDI>(vdi)); return; } XenAPI.VBD vbd = XenObject as XenAPI.VBD; if (vbd != null) { WriteObject(new XenRef <XenAPI.VBD>(vbd)); return; } XenAPI.VBD_metrics vbd_metrics = XenObject as XenAPI.VBD_metrics; if (vbd_metrics != null) { WriteObject(new XenRef <XenAPI.VBD_metrics>(vbd_metrics)); return; } XenAPI.PBD pbd = XenObject as XenAPI.PBD; if (pbd != null) { WriteObject(new XenRef <XenAPI.PBD>(pbd)); return; } XenAPI.Crashdump crashdump = XenObject as XenAPI.Crashdump; if (crashdump != null) { WriteObject(new XenRef <XenAPI.Crashdump>(crashdump)); return; } XenAPI.VTPM vtpm = XenObject as XenAPI.VTPM; if (vtpm != null) { WriteObject(new XenRef <XenAPI.VTPM>(vtpm)); return; } XenAPI.Console console = XenObject as XenAPI.Console; if (console != null) { WriteObject(new XenRef <XenAPI.Console>(console)); return; } XenAPI.User user = XenObject as XenAPI.User; if (user != null) { WriteObject(new XenRef <XenAPI.User>(user)); return; } XenAPI.Data_source data_source = XenObject as XenAPI.Data_source; if (data_source != null) { WriteObject(new XenRef <XenAPI.Data_source>(data_source)); return; } XenAPI.Blob blob = XenObject as XenAPI.Blob; if (blob != null) { WriteObject(new XenRef <XenAPI.Blob>(blob)); return; } XenAPI.Message message = XenObject as XenAPI.Message; if (message != null) { WriteObject(new XenRef <XenAPI.Message>(message)); return; } XenAPI.Secret secret = XenObject as XenAPI.Secret; if (secret != null) { WriteObject(new XenRef <XenAPI.Secret>(secret)); return; } XenAPI.Tunnel tunnel = XenObject as XenAPI.Tunnel; if (tunnel != null) { WriteObject(new XenRef <XenAPI.Tunnel>(tunnel)); return; } XenAPI.PCI pci = XenObject as XenAPI.PCI; if (pci != null) { WriteObject(new XenRef <XenAPI.PCI>(pci)); return; } XenAPI.PGPU pgpu = XenObject as XenAPI.PGPU; if (pgpu != null) { WriteObject(new XenRef <XenAPI.PGPU>(pgpu)); return; } XenAPI.GPU_group gpu_group = XenObject as XenAPI.GPU_group; if (gpu_group != null) { WriteObject(new XenRef <XenAPI.GPU_group>(gpu_group)); return; } XenAPI.VGPU vgpu = XenObject as XenAPI.VGPU; if (vgpu != null) { WriteObject(new XenRef <XenAPI.VGPU>(vgpu)); return; } XenAPI.VGPU_type vgpu_type = XenObject as XenAPI.VGPU_type; if (vgpu_type != null) { WriteObject(new XenRef <XenAPI.VGPU_type>(vgpu_type)); return; } XenAPI.PVS_site pvs_site = XenObject as XenAPI.PVS_site; if (pvs_site != null) { WriteObject(new XenRef <XenAPI.PVS_site>(pvs_site)); return; } XenAPI.PVS_server pvs_server = XenObject as XenAPI.PVS_server; if (pvs_server != null) { WriteObject(new XenRef <XenAPI.PVS_server>(pvs_server)); return; } XenAPI.PVS_proxy pvs_proxy = XenObject as XenAPI.PVS_proxy; if (pvs_proxy != null) { WriteObject(new XenRef <XenAPI.PVS_proxy>(pvs_proxy)); return; } XenAPI.PVS_cache_storage pvs_cache_storage = XenObject as XenAPI.PVS_cache_storage; if (pvs_cache_storage != null) { WriteObject(new XenRef <XenAPI.PVS_cache_storage>(pvs_cache_storage)); return; } XenAPI.Feature feature = XenObject as XenAPI.Feature; if (feature != null) { WriteObject(new XenRef <XenAPI.Feature>(feature)); return; } XenAPI.SDN_controller sdn_controller = XenObject as XenAPI.SDN_controller; if (sdn_controller != null) { WriteObject(new XenRef <XenAPI.SDN_controller>(sdn_controller)); return; } XenAPI.Vdi_nbd_server_info vdi_nbd_server_info = XenObject as XenAPI.Vdi_nbd_server_info; if (vdi_nbd_server_info != null) { WriteObject(new XenRef <XenAPI.Vdi_nbd_server_info>(vdi_nbd_server_info)); return; } XenAPI.PUSB pusb = XenObject as XenAPI.PUSB; if (pusb != null) { WriteObject(new XenRef <XenAPI.PUSB>(pusb)); return; } XenAPI.USB_group usb_group = XenObject as XenAPI.USB_group; if (usb_group != null) { WriteObject(new XenRef <XenAPI.USB_group>(usb_group)); return; } XenAPI.VUSB vusb = XenObject as XenAPI.VUSB; if (vusb != null) { WriteObject(new XenRef <XenAPI.VUSB>(vusb)); return; } }