protected override void ExecuteCore(SelectedItemCollection selection) { Dictionary <SelectedItem, string> reasons = new Dictionary <SelectedItem, string>(); foreach (Host host in _hosts) { PoolJoinRules.Reason reason = PoolJoinRules.CanJoinPool(host.Connection, _pool.Connection, true, true, true); if (reason != PoolJoinRules.Reason.Allowed) { reasons[new SelectedItem(host)] = PoolJoinRules.ReasonMessage(reason); } } if (reasons.Count > 0) { string title = Messages.ERROR_DIALOG_ADD_TO_POOL_TITLE; string text = string.Format(Messages.ERROR_DIALOG_ADD_TO_POOL_TEXT, Helpers.GetName(_pool).Ellipsise(500)); new CommandErrorDialog(title, text, reasons).ShowDialog(Parent); return; } if (_confirm && !ShowConfirmationDialog()) { // Bail out if the user doesn't want to continue. return; } if (!Helpers.IsConnected(_pool)) { string message = _hosts.Count == 1 ? string.Format(Messages.ADD_HOST_TO_POOL_DISCONNECTED_POOL, Helpers.GetName(_hosts[0]).Ellipsise(500), Helpers.GetName(_pool).Ellipsise(500)) : string.Format(Messages.ADD_HOST_TO_POOL_DISCONNECTED_POOL_MULTIPLE, Helpers.GetName(_pool).Ellipsise(500)); using (var dlg = new ThreeButtonDialog( new ThreeButtonDialog.Details(SystemIcons.Error, message, Messages.XENCENTER))) { dlg.ShowDialog(Parent); } return; } // Check supp packs and warn List <string> badSuppPacks = PoolJoinRules.HomogeneousSuppPacksDiffering(_hosts, _pool); if (!HelpersGUI.GetPermissionFor(badSuppPacks, sp => true, Messages.ADD_HOST_TO_POOL_SUPP_PACK, Messages.ADD_HOST_TO_POOL_SUPP_PACKS, false, "PoolJoinSuppPacks")) { return; } // Are there any hosts which are forbidden from masking their CPUs for licensing reasons? // If so, we need to show upsell. Host master = Helpers.GetMaster(_pool); if (null != _hosts.Find(host => !PoolJoinRules.CompatibleCPUs(host, master, false) && Helpers.FeatureForbidden(host, Host.RestrictCpuMasking) && !PoolJoinRules.FreeHostPaidMaster(host, master, false))) // in this case we can upgrade the license and then mask the CPU { using (var dlg = new UpsellDialog(HiddenFeatures.LinkLabelHidden ? Messages.UPSELL_BLURB_CPUMASKING : Messages.UPSELL_BLURB_CPUMASKING + Messages.UPSELL_BLURB_CPUMASKING_MORE, InvisibleMessages.UPSELL_LEARNMOREURL_CPUMASKING)) dlg.ShowDialog(Parent); return; } // Get permission for any fix-ups: 1) Licensing free hosts; 2) CPU masking 3) Ad configuration 4) CPU feature levelling (Dundee or higher only) // (We already know that these things are fixable because we have been through CanJoinPool() above). if (!HelpersGUI.GetPermissionFor(_hosts, host => PoolJoinRules.FreeHostPaidMaster(host, master, false), Messages.ADD_HOST_TO_POOL_LICENSE_MESSAGE, Messages.ADD_HOST_TO_POOL_LICENSE_MESSAGE_MULTIPLE, true, "PoolJoinRelicensing") || !HelpersGUI.GetPermissionFor(_hosts, host => !PoolJoinRules.CompatibleCPUs(host, master, false), Messages.ADD_HOST_TO_POOL_CPU_MASKING_MESSAGE, Messages.ADD_HOST_TO_POOL_CPU_MASKING_MESSAGE_MULTIPLE, true, "PoolJoinCpuMasking") || !HelpersGUI.GetPermissionFor(_hosts, host => !PoolJoinRules.CompatibleAdConfig(host, master, false), Messages.ADD_HOST_TO_POOL_AD_MESSAGE, Messages.ADD_HOST_TO_POOL_AD_MESSAGE_MULTIPLE, true, "PoolJoinAdConfiguring") || !HelpersGUI.GetPermissionForCpuFeatureLevelling(_hosts, _pool)) { return; } MainWindowCommandInterface.SelectObjectInTree(_pool); List <AsyncAction> actions = new List <AsyncAction>(); foreach (Host host in _hosts) { string opaque_ref = host.opaque_ref; AddHostToPoolAction action = new AddHostToPoolAction(_pool, host, GetAdPrompt, NtolDialog, ApplyLicenseEditionCommand.ShowLicensingFailureDialog); action.Completed += s => Program.ShowObject(opaque_ref); actions.Add(action); // hide connection. If the action fails, re-show it. Program.HideObject(opaque_ref); } RunMultipleActions(actions, string.Format(Messages.ADDING_SERVERS_TO_POOL, _pool.Name), Messages.POOLCREATE_ADDING, Messages.POOLCREATE_ADDED, true); }
private void Connection_CachePopulated(IXenConnection c) { c.CachePopulated -= Connection_CachePopulated; MainWindowCommandInterface.TrySelectNewObjectInTree(c, true, true, false); }
protected override void ExecuteCore(SelectedItemCollection selection) { var con = selection.GetConnectionOfFirstItem(); MainWindowCommandInterface.ShowPerConnectionWizard(con, new ExportApplianceWizard(con, selection)); }
protected override void ExecuteCore(SelectedItemCollection selection) { VM template = (VM)selection[0].XenObject; MainWindowCommandInterface.ShowPerXenModelObjectWizard(template, new CopyVMDialog(template)); }
protected override void ExecuteCore(SelectedItemCollection selection) { MainWindowCommandInterface.ShowPerConnectionWizard(selection[0].Connection, VMGroup <T> .NewGroupWizard(Helpers.GetPoolOfOne(selection[0].Connection), selection.AsXenObjects <VM>())); }
private void Execute(IXenConnection connection, Host DefaultAffinity, VM DefaultTemplate) { MainWindowCommandInterface.ShowPerConnectionWizard(connection, new NewVMWizard(connection, DefaultTemplate, DefaultAffinity)); }
protected override void ExecuteCore(SelectedItemCollection selection) { var con = selection.GetConnectionOfFirstItem(); MainWindowCommandInterface.ShowPerConnectionWizard(con, new ImportWizard(con, selection.FirstAsXenObject, null, false)); }
protected override void ExecuteCore(SelectedItemCollection selection) { MainWindowCommandInterface.ShowForm(typeof(PatchingWizard)); }
protected override void ExecuteCore(SelectedItemCollection selection) { MainWindowCommandInterface.PutSelectedNodeIntoEditMode(); }
protected override void ExecuteCore(SelectedItemCollection selection) { MainWindowCommandInterface.ShowPerConnectionWizard(selection[0].Connection, new NewSRWizard(selection[0].Connection)); }
private AsyncAction GetAction(VM vm, List <VBD> deleteDisks, List <VM> deleteSnapshots) { MainWindowCommandInterface.AllowHistorySwitch(); return(new VMDestroyAction(vm, deleteDisks, deleteSnapshots)); }
protected override void ExecuteCore(SelectedItemCollection selection) { MainWindowCommandInterface.AllowHistorySwitch(); new HVMBootAction((VM)selection[0].XenObject).RunAsync(); }
private void Execute(Host host, string filepath) { MainWindowCommandInterface.BringToFront(); if (filepath == "") { // Showing this dialog has the (undocumented) side effect of changing the working directory // to that of the file selected. This means a handle to the directory persists, making // it undeletable until the program exits, or the working dir moves on. So, save and // restore the working dir... String oldDir = ""; try { oldDir = Directory.GetCurrentDirectory(); OpenFileDialog dialog = new OpenFileDialog(); dialog.AddExtension = true; dialog.Filter = string.Format("{0} (*.xbk)|*.xbk|{1} (*.*)|*.*", Messages.XS_BACKUP_FILES, Messages.ALL_FILES); dialog.FilterIndex = 0; dialog.RestoreDirectory = true; dialog.DefaultExt = "xbk"; dialog.CheckPathExists = false; if (dialog.ShowDialog(Parent) == DialogResult.Cancel) { return; } filepath = dialog.FileName; } finally { Directory.SetCurrentDirectory(oldDir); } } if (host == null) { SelectHostDialog hostdialog = new SelectHostDialog(); hostdialog.TheHost = host; hostdialog.DispString = Messages.BACKUP_SELECT_HOST; hostdialog.SetPicture = Properties.Resources.backup_restore_32; hostdialog.HelpString = "Backup"; // dont i18n hostdialog.Text = Messages.BACKUP_SELECT_HOST_TITLE; hostdialog.okbutton.Text = Messages.BACKUP_SELECT_HOST_BUTTON; hostdialog.FormClosed += delegate { if (hostdialog.DialogResult != DialogResult.OK) { return; } host = hostdialog.TheHost; MainWindowCommandInterface.AllowHistorySwitch(); HostBackupRestoreAction action = new HostBackupRestoreAction(host, HostBackupRestoreAction.HostBackupRestoreType.restore, filepath); action.Completed += RestoreAction_Completed; action.RunAsync(); }; hostdialog.Show(Parent); } else { MainWindowCommandInterface.AllowHistorySwitch(); HostBackupRestoreAction action = new HostBackupRestoreAction(host, HostBackupRestoreAction.HostBackupRestoreType.restore, filepath); action.Completed += RestoreAction_Completed; action.RunAsync(); } }
/// <summary> /// /// </summary> /// <param name="connection"></param> /// <param name="vm">The VM to export.</param> /// <param name="host">Used for filtering purposes. May be null.</param> private void Execute(IXenConnection connection, VM vm, Host host) { /* * These properties have not been copied over to the new save file dialog. * * dlg.AddExtension = true; * dlg.CheckPathExists = true; * dlg.CreatePrompt = false; * dlg.CheckFileExists = false; * dlg.OverwritePrompt = true; * dlg.ValidateNames = true;*/ string filename; bool verify; // Showing this dialog has the (undocumented) side effect of changing the working directory // to that of the file selected. This means a handle to the directory persists, making // it undeletable until the program exits, or the working dir moves on. So, save and // restore the working dir... String oldDir = ""; try { oldDir = Directory.GetCurrentDirectory(); while (true) { ExportVMDialog dlg = new ExportVMDialog(); dlg.DefaultExt = "xva"; dlg.Filter = Messages.MAINWINDOW_XVA_BLURB; dlg.Title = Messages.MAINWINDOW_XVA_TITLE; if (dlg.ShowDialog(Parent) != DialogResult.OK) { return; } filename = dlg.FileName; verify = dlg.Verify; // CA-12975: Warn the user if the export operation does not have enough disk space to // complete. This is an approximation only. Win32.DiskSpaceInfo diskSpaceInfo = Win32.GetDiskSpaceInfo(dlg.FileName); if (diskSpaceInfo == null) { // Could not determine free disk space. Carry on regardless. break; } else { ulong freeSpace = diskSpaceInfo.FreeBytesAvailable; decimal neededSpace = vm.GetRecommendedExportSpace(Properties.Settings.Default.ShowHiddenVMs); ulong spaceLeft = 100 * Util.BINARY_MEGA; // We want the user to be left with some disk space afterwards if (neededSpace >= freeSpace - spaceLeft) { string msg = string.Format(Messages.CONFIRM_EXPORT_NOT_ENOUGH_MEMORY, Util.DiskSizeString((long)neededSpace), Util.DiskSizeString((long)freeSpace), vm.Name); DialogResult dr = new ThreeButtonDialog( new ThreeButtonDialog.Details(SystemIcons.Warning, msg), "ExportVmDialogInsufficientDiskSpace", new ThreeButtonDialog.TBDButton(Messages.CONTINUE_WITH_EXPORT, DialogResult.OK), new ThreeButtonDialog.TBDButton(Messages.CHOOSE_ANOTHER_DESTINATION, DialogResult.Retry), ThreeButtonDialog.ButtonCancel).ShowDialog(Parent); if (dr == DialogResult.Retry) { continue; } else if (dr == DialogResult.Cancel) { return; } } if (diskSpaceInfo.IsFAT && neededSpace > (4 * Util.BINARY_GIGA) - 1) { string msg = string.Format(Messages.CONFIRM_EXPORT_FAT, Util.DiskSizeString((long)neededSpace), Util.DiskSizeString(4 * Util.BINARY_GIGA), vm.Name); DialogResult dr = new ThreeButtonDialog( new ThreeButtonDialog.Details(SystemIcons.Warning, msg), "ExportVmDialogFSLimitExceeded", new ThreeButtonDialog.TBDButton(Messages.CONTINUE_WITH_EXPORT, DialogResult.OK), new ThreeButtonDialog.TBDButton(Messages.CHOOSE_ANOTHER_DESTINATION, DialogResult.Retry), ThreeButtonDialog.ButtonCancel).ShowDialog(Parent); if (dr == DialogResult.Retry) { continue; } else if (dr == DialogResult.Cancel) { return; } } break; } } } finally { Directory.SetCurrentDirectory(oldDir); } MainWindowCommandInterface.AllowHistorySwitch(); new ExportVmAction(connection, host, vm, filename, verify).RunAsync(); }