mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-11-25 14:27:26 +01:00
4b0b83245f
* CA-34231: Replace negative language with `block list` in code and references Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `stop` in code and references Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `freezing` in code Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run/ran` in code comments Some paramater mentions have been renamed, as they will be renamed in future commits. Excluded mentions in XenAPI/Host.cs and XenAPI/VM.cs since code is autogenerated. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # CFUValidator/CommandLineOptions/CFUCommandLineOptionManager.cs # XenAdmin/Controls/Wlb/WlbOptModeScheduler.cs # XenAdmin/Dialogs/Wlb/WorkloadReports.cs * CA-34231: Replace negative language with `run` in Command.cs Run method Used Resharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/TabPages/GeneralTabPage.cs * CA-34231: Replace negative language with `run` in Command.cs CanRun method Used Resharper rename utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in Command.cs CanRunCore method Used ReSharper rename utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/DRConfigureCommand.cs # XenAdmin/Commands/DRDryrunCommand.cs # XenAdmin/Commands/DRFailbackCommand.cs # XenAdmin/Commands/DRFailoverCommand.cs # XenAdmin/Commands/DisasterRecoveryCommand.cs # XenAdmin/Commands/VMGroupCommand.cs * CA-34231: Replace negative language with `run` in Command.cs RunCore method Used ReSharper rename utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in Command.cs GetCantExecuteReasonCore method Used ReSharper rename utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in Command.cs GetCantRunReasons method Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `run` in Command.cs Also applied to related symbols. Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in methods named CanRun Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in methods in CrossPoolMigrateCommand.cs Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/CrossPoolMigrateCommand.cs * CA-34231: Replace negative language with `run` in remaining Run methods Also updated negative language in `DeleteVMCommand` Also updated in comment in `CrossPoolMigrateCommand` Also renamed missed instances of `CanRun` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in `CanRunCore` and `RunCore` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `run` in Commands folder Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `run` in XenAdmin/Controls folder Used ReSharper renaming utility. Had to rename `WlbReportView.xs:RunReport()` to `WlbReportView.xs:StartRunReport()` to resolve conflict with change from `WlbReportView:ExecuteReport()` to `WlbReportView:RunReport()` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Controls/Wlb/WlbOptModeScheduler.cs # XenAdmin/Dialogs/Wlb/WorkloadReports.cs # XenAdminTests/UnitTests/WlbTests/WlbScheduledTaskTests.cs * CA-34231: Replace all remaining negative language with `run` in code Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/Controls/WlbRecommendations.cs # XenAdminTests/UnitTests/WlbTests/WlbScheduledTaskTests.cs # XenModel/WLB/WlbScheduledTask.cs * CA-34231: Replace negative language with `supporter` or `bond member` in code strings Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `supporter` or `bond member` in Messages string Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/MainWindow.cs # XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs # XenModel/Messages.Designer.cs # XenModel/Messages.resx * CA-34231: Replace remaining negative language with `supporter` in .resx files Used ReSharper renaming utility. FriendlyErrorNames.resx has been excluded. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `supporter` or `bond member` in XenAdmin code Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.cs * CA-34231: Replace negative language with `supporter` or `bond member` in XenModel code Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in CFUValidator code Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # CFUValidator/CFUValidator.cs * CA-34231: Replace negative language with `coordinator` in solution's comments and hardcoded strings Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `Helpers:GetCoordinator` method Used ReSharper renaming utility. also renamed similarly named method in `ObjectChange.cs` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Alerts/Types/HotfixEligibilityAlert.cs # XenAdmin/Controls/CustomDataGraph/ArchiveMaintainer.cs * CA-34231: Replace negative language with `coordinator` in `EvacuateHostDialog.resx` Used ReSharper renaming utility. Excluded jp and zh resources Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/EvacuateHostDialog.resx * CA-34231: Replace negative language with `coordinator` in `EvacuateHostDialog.resx` Used ReSharper renaming utility. Excluded jp and zh resource files. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.resx * CA-34231: Rename missing language references for change to `coordinator` Misc files were not saved before last commits. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `Messages.resx`'s code Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/HACommand.cs # XenAdmin/TabPages/AdPage.cs # XenModel/Actions/Network/CreateBondAction.cs # XenModel/Actions/Network/NetworkAction.cs # XenModel/Messages.Designer.cs # XenModel/Messages.resx * CA-34231: Replace negative language with `coordinator` in `ExternalPluginAction.cs` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Commands` Used ReSharper renaming utility. Also replace negative language in missed comment in `ExternalPluginAction.cs` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/AddHostToPoolCommand.cs # XenAdmin/Commands/HACommand.cs * CA-34231: Replace negative language with `coordinator` in `Helpers.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `NetworkingHelper.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `PoolJoinRules.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.cs * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Commands`, `Controls`, and `Core` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/AddHostToPoolCommand.cs * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Diagnostics` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Dialogs` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.cs * CA-34231: Replace remaining negative language with `coordinator` in `XenAdmin` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/MainWindow.cs # XenAdmin/TabPages/GeneralTabPage.cs # XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs # XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeExtrasPage.cs # XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizard.cs # XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizardPrecheckPage.cs # XenAdmin/XenSearch/Columns.cs * CA-34231: Replace remaining negative language with `coordinator` in `XenModel\Actions` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenModel/Actions/Network/CreateBondAction.cs * CA-34231: Replace remaining negative language with `coordinator` in `XenModel` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative strings with `main` in `Messages.resx` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenModel/Messages.Designer.cs # XenModel/Messages.resx * CA-34231: Replace remaining negative string names with `main` in `Messages.resx` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/OptionsPages/SaveAndRestoreOptionsPage.cs # XenModel/Messages.resx * CA-34231: Rename dialogs to replace negative connotations with `main` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `SaveAndResoreOptionsPage.cs` Also updated its resx file. Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/OptionsPages/SaveAndRestoreOptionsPage.cs * CA-34231: Fix invalid reference in `SaveAndRestoreOptionsPage.Designer.cs` after renaming Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `EnterMainPasswordDialog.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `ChangeMainPasswordDialog.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Fix invalid reference not changed after renaming `EnterMainPasswordDialog.cs` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `main` in `XenAdmin/Dialogs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Update class names in HelpManager.resx Following renaming of main password dialog. Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `Metadata.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Remove remaning negative language with `coordinator` from `Messages.resx` Used ReSharper renaming Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Remove remaning negative language with `other pool member` from `Messages.resx` Used ReSharper Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language in solution Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Remove commented out code in VNCGraphicsClient.cs Code has only been improved partially as it's not strictly relevant to the PR Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend negative word replacement in XSVNCScreen.cs Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Simplify debug call formatting in NewPoolDialog.cs Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Add code mistakenly removed in MainWindow.cs Removed as part of `f155f9c8` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Revert renaming of constant related to Windows' API Considered external to CH Center Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend hotkey for Coordinator field in `NewPoolDialog` Previous ALT+<key> hotkey was conflicting with CreatePool Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Remove unecessary whitespace in EvacuateHostDialog.cs Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Update if block to exclude unecessary else in DRFailoverWizard.cs Not relevant to the PR, but the change is small enought to no need extra testing Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend typo in PoolJoinRules.cs supporer -> supporter Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace missing negative language with `coordinator` in `XenAPI-Extensions/Pool.cs` Variables and methods XenAPI-Extensions were mistakenly skipped Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace negative language in `XenApi-Extensions` with `coordinator/interface` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace negative language in `XenApi-Extensions` with `supporter/member` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace remaining negative language in `XenServerHealthCheckBugTool.cs` This is only used to format the string Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Change line-endings to CRLF in `Page_CloudConfigParamters.cs` Done in order to fix merge conflict into master Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend misc negative language renaming typos `XenServerHealthCheckBugTool` and `XenServerHealthCheckService` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com>
540 lines
20 KiB
C#
540 lines
20 KiB
C#
/* Copyright (c) Citrix Systems, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms,
|
|
* with or without modification, are permitted provided
|
|
* that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer in the documentation and/or other
|
|
* materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using XenAdmin.Actions;
|
|
using XenAdmin.Core;
|
|
using XenAdmin.Network;
|
|
using XenAPI;
|
|
using XenCenterLib;
|
|
|
|
namespace XenAdmin.Dialogs
|
|
{
|
|
public partial class IscsiDeviceConfigDialog : XenDialogBase
|
|
{
|
|
private ISCSIPopulateLunsAction IscsiPopulateLunsAction;
|
|
private ISCSIPopulateIQNsAction IscsiPopulateIqnsAction;
|
|
private bool LunInUse = false;
|
|
|
|
private readonly Dictionary<String, ISCSIInfo> LunMap = new Dictionary<String, ISCSIInfo>();
|
|
|
|
private readonly ToolTip TargetIqnToolTip = new ToolTip();
|
|
private readonly ToolTip TargetLunToolTip = new ToolTip();
|
|
|
|
public IscsiDeviceConfigDialog()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public IscsiDeviceConfigDialog(IXenConnection connection)
|
|
: base(connection)
|
|
{
|
|
InitializeComponent();
|
|
labelIscsiInvalidHost.Visible = false;
|
|
|
|
// IQN's can be very long, so we will show the value as a mouse over tooltip.
|
|
// Initialize the tooltip here.
|
|
TargetIqnToolTip.Active = true;
|
|
TargetIqnToolTip.AutomaticDelay = 0;
|
|
TargetIqnToolTip.AutoPopDelay = 50000;
|
|
TargetIqnToolTip.InitialDelay = 50;
|
|
TargetIqnToolTip.ReshowDelay = 50;
|
|
TargetIqnToolTip.ShowAlways = true;
|
|
|
|
|
|
// Initialize LUN's tooltip here.
|
|
TargetLunToolTip.Active = true;
|
|
TargetLunToolTip.AutomaticDelay = 0;
|
|
TargetLunToolTip.AutoPopDelay = 50000;
|
|
TargetLunToolTip.InitialDelay = 50;
|
|
TargetLunToolTip.ReshowDelay = 50;
|
|
TargetLunToolTip.ShowAlways = true;
|
|
}
|
|
|
|
private void textBoxIscsiHost_TextChanged(object sender, EventArgs e)
|
|
{
|
|
labelIscsiInvalidHost.Visible = false;
|
|
IScsiParams_TextChanged(null, null);
|
|
}
|
|
|
|
private void IscsiUseChapCheckBox_CheckedChanged(object sender, System.EventArgs e)
|
|
{
|
|
groupBoxChap.Enabled = IscsiUseChapCheckBox.Checked;
|
|
foreach (Control c in groupBoxChap.Controls)
|
|
{
|
|
c.Enabled = IscsiUseChapCheckBox.Checked;
|
|
}
|
|
lunInUseLabel.Text = "";
|
|
ChapSettings_Changed(null, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called when any of the iSCSI filer params change: resets the IQNs/LUNs.
|
|
/// Must be called on the event thread.
|
|
/// </summary>
|
|
private void IScsiParams_TextChanged(object sender, EventArgs e)
|
|
{
|
|
Program.AssertOnEventThread();
|
|
|
|
// User has changed filer hostname/username/password - clear IQN/LUN boxes
|
|
comboBoxIscsiIqns.Items.Clear();
|
|
comboBoxIscsiIqns.Enabled = false;
|
|
|
|
// Cancel pending IQN/LUN scans
|
|
if (IscsiPopulateIqnsAction != null)
|
|
{
|
|
IscsiPopulateIqnsAction.Cancel();
|
|
}
|
|
|
|
ChapSettings_Changed(null, null);
|
|
}
|
|
|
|
private void ChapSettings_Changed(object sender, EventArgs e)
|
|
{
|
|
comboBoxIscsiLuns.Items.Clear();
|
|
comboBoxIscsiLuns.Text = "";
|
|
comboBoxIscsiLuns.Enabled = false;
|
|
|
|
if (IscsiPopulateLunsAction != null)
|
|
{
|
|
IscsiPopulateLunsAction.Cancel();
|
|
}
|
|
|
|
UpdateButtons();
|
|
}
|
|
|
|
private void UpdateButtons()
|
|
{
|
|
UInt16 i;
|
|
bool portValid = UInt16.TryParse(textBoxIscsiPort.Text, out i);
|
|
|
|
buttonIscsiPopulateIQNs.Enabled =
|
|
!String.IsNullOrEmpty(getIscsiHost())
|
|
&& portValid;
|
|
|
|
buttonIscsiPopulateLUNs.Enabled =
|
|
!String.IsNullOrEmpty(getIscsiHost())
|
|
&& !String.IsNullOrEmpty(getIscsiIQN())
|
|
&& portValid;
|
|
|
|
buttonOk.Enabled = !String.IsNullOrEmpty(getIscsiLUN()) && !LunInUse;
|
|
}
|
|
|
|
private String getIscsiHost()
|
|
{
|
|
// If the user has selected an IQN, use the host from that IQN (due to multi-homing,
|
|
// this may differ from the host they first entered). Otherwise use the host
|
|
// they first entered,
|
|
ToStringWrapper<IScsiIqnInfo> wrapper = comboBoxIscsiIqns.SelectedItem as ToStringWrapper<IScsiIqnInfo>;
|
|
if (wrapper != null)
|
|
return wrapper.item.IpAddress;
|
|
return textBoxIscsiHost.Text.Trim();
|
|
}
|
|
|
|
private UInt16 getIscsiPort()
|
|
{
|
|
ToStringWrapper<IScsiIqnInfo> wrapper = comboBoxIscsiIqns.SelectedItem as ToStringWrapper<IScsiIqnInfo>;
|
|
if (wrapper != null)
|
|
return wrapper.item.Port;
|
|
|
|
// No combobox item was selected
|
|
UInt16 port;
|
|
if (UInt16.TryParse(textBoxIscsiPort.Text, out port))
|
|
{
|
|
return port;
|
|
}
|
|
return Util.DEFAULT_ISCSI_PORT;
|
|
}
|
|
|
|
private String getIscsiIQN()
|
|
{
|
|
ToStringWrapper<IScsiIqnInfo> wrapper = comboBoxIscsiIqns.SelectedItem as ToStringWrapper<IScsiIqnInfo>;
|
|
if (wrapper == null)
|
|
return "";
|
|
return wrapper.item.TargetIQN;
|
|
}
|
|
|
|
private String getIscsiLUN()
|
|
{
|
|
return comboBoxIscsiLuns.Text;
|
|
}
|
|
|
|
private void comboBoxIscsiIqns_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
ToStringWrapper<IScsiIqnInfo> wrapper = comboBoxIscsiIqns.SelectedItem as ToStringWrapper<IScsiIqnInfo>;
|
|
// Keep the IScsiTargetIqnComboBox tooltip in sync with the selected item
|
|
if (wrapper != null)
|
|
{
|
|
TargetIqnToolTip.SetToolTip(comboBoxIscsiIqns, wrapper.ToString());
|
|
}
|
|
else
|
|
{
|
|
TargetIqnToolTip.SetToolTip(comboBoxIscsiIqns, "");
|
|
}
|
|
// Clear the LUN map and ComboBox because the user has changed the IQN. The user
|
|
// must re-discover the LUNs for the new IQN.
|
|
ClearLunMapAndCombo();
|
|
}
|
|
|
|
private void comboBoxIscsiLuns_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
var selectedLun = comboBoxIscsiLuns.SelectedItem as string;
|
|
// Keep the tooltip in sync with the selected item
|
|
if (selectedLun != null)
|
|
{
|
|
TargetLunToolTip.SetToolTip(comboBoxIscsiLuns, selectedLun);
|
|
}
|
|
else
|
|
{
|
|
TargetLunToolTip.SetToolTip(comboBoxIscsiLuns, "");
|
|
}
|
|
|
|
try
|
|
{
|
|
SR sr = UniquenessCheck(ConnectionsManager.XenConnectionsCopy);
|
|
|
|
// LUN is not in use if sr != null
|
|
LunInUse = sr != null;
|
|
|
|
if (sr == null)
|
|
{
|
|
lunInUseLabel.Text = "";
|
|
return;
|
|
}
|
|
|
|
Pool pool = Helpers.GetPool(sr.Connection);
|
|
if (pool != null)
|
|
{
|
|
lunInUseLabel.Text = String.Format(Messages.NEWSR_LUN_IN_USE_ON_POOL,
|
|
sr.Name(), pool.Name());
|
|
return;
|
|
}
|
|
|
|
Host coordinator = Helpers.GetCoordinator(sr.Connection);
|
|
if (coordinator != null)
|
|
{
|
|
lunInUseLabel.Text = String.Format(Messages.NEWSR_LUN_IN_USE_ON_SERVER,
|
|
sr.Name(), coordinator.Name());
|
|
return;
|
|
}
|
|
|
|
lunInUseLabel.Text = Messages.NEWSR_LUN_IN_USE;
|
|
}
|
|
finally
|
|
{
|
|
UpdateButtons();
|
|
}
|
|
}
|
|
|
|
private void ClearLunMapAndCombo()
|
|
{
|
|
// Clear LUNs as they may no longer be valid
|
|
comboBoxIscsiLuns.Items.Clear();
|
|
comboBoxIscsiLuns.Text = "";
|
|
comboBoxIscsiLuns.Enabled = false;
|
|
LunMap.Clear();
|
|
LunInUse = false;
|
|
lunInUseLabel.Text = "";
|
|
|
|
UpdateButtons();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check the current config of the iSCSI sr in the wizard is unique across
|
|
/// all active connections.
|
|
/// </summary>
|
|
/// <returns>SR that uses this config if not unique, null if unique</returns>
|
|
private SR UniquenessCheck(List<IXenConnection> connections)
|
|
{
|
|
// Check currently selected lun is unique amongst other connected hosts.
|
|
foreach (IXenConnection connection in connections)
|
|
{
|
|
foreach (SR sr in connection.Cache.SRs)
|
|
{
|
|
if (sr.GetSRType(false) != SR.SRTypes.lvmoiscsi)
|
|
continue;
|
|
|
|
if (sr.PBDs.Count < 1)
|
|
continue;
|
|
|
|
PBD pbd = connection.Resolve(sr.PBDs[0]);
|
|
|
|
if (pbd == null)
|
|
continue;
|
|
|
|
if (UniquenessCheckMiami(connection, pbd))
|
|
return sr;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check currently LUN against miami host
|
|
/// </summary>
|
|
/// <param name="connection"></param>
|
|
/// <param name="pbd"></param>
|
|
/// <returns></returns>
|
|
private bool UniquenessCheckMiami(IXenConnection connection, PBD pbd)
|
|
{
|
|
if (!pbd.device_config.ContainsKey(SCSIID))
|
|
return false;
|
|
|
|
String scsiID = pbd.device_config[SCSIID];
|
|
String myLUN = getIscsiLUN();
|
|
|
|
if (!LunMap.ContainsKey(myLUN))
|
|
return false;
|
|
|
|
ISCSIInfo info = LunMap[myLUN];
|
|
|
|
return info.ScsiID == scsiID;
|
|
}
|
|
|
|
private const String TARGET = "target";
|
|
private const String PORT = "port";
|
|
private const String TARGETIQN = "targetIQN";
|
|
private const String LUNSERIAL = "LUNSerial";
|
|
private const String SCSIID = "SCSIid";
|
|
private const String LUNID = "LUNid";
|
|
private const String CHAPUSER = "chapuser";
|
|
private const String CHAPPASSWORD = "chappassword";
|
|
|
|
public Dictionary<String, String> DeviceConfig
|
|
{
|
|
get
|
|
{
|
|
Dictionary<String, String> dconf = new Dictionary<String, String>();
|
|
ToStringWrapper<IScsiIqnInfo> iqn = comboBoxIscsiIqns.SelectedItem as ToStringWrapper<IScsiIqnInfo>;
|
|
if (iqn == null)
|
|
return null;
|
|
|
|
// Reset target IP address to home address specified in IQN scan.
|
|
// Allows multi-homing - see CA-11607
|
|
dconf[TARGET] = iqn.item.IpAddress;
|
|
dconf[PORT] = iqn.item.Port.ToString();
|
|
dconf[TARGETIQN] = getIscsiIQN();
|
|
|
|
if (!LunMap.ContainsKey(getIscsiLUN()))
|
|
return null;
|
|
|
|
ISCSIInfo info = LunMap[getIscsiLUN()];
|
|
if (info.LunID == -1)
|
|
{
|
|
dconf[LUNSERIAL] = info.Serial;
|
|
}
|
|
else
|
|
{
|
|
dconf[SCSIID] = info.ScsiID;
|
|
}
|
|
|
|
if (IscsiUseChapCheckBox.Checked)
|
|
{
|
|
dconf[CHAPUSER] = IScsiChapUserTextBox.Text;
|
|
dconf[CHAPPASSWORD] = IScsiChapSecretTextBox.Text;
|
|
}
|
|
|
|
return dconf;
|
|
}
|
|
}
|
|
|
|
private void buttonIscsiPopulateIQNs_Click(object sender, EventArgs e)
|
|
{
|
|
buttonIscsiPopulateIQNs.Enabled = false;
|
|
// For this button to be enabled, we must be Miami or newer
|
|
comboBoxIscsiIqns.Items.Clear();
|
|
// Clear LUNs as they may no longer be valid
|
|
ClearLunMapAndCombo();
|
|
// Disable the Discover LUNs button because we have no IQNs
|
|
buttonIscsiPopulateLUNs.Enabled = false;
|
|
// Cancel any LUN scan in progress, as it is no longer meaningful
|
|
if (IscsiPopulateLunsAction != null)
|
|
{
|
|
IscsiPopulateLunsAction.Cancel();
|
|
}
|
|
|
|
if (IscsiUseChapCheckBox.Checked)
|
|
{
|
|
IscsiPopulateIqnsAction = new ISCSIPopulateIQNsAction(connection,
|
|
getIscsiHost(), getIscsiPort(), IScsiChapUserTextBox.Text, IScsiChapSecretTextBox.Text);
|
|
}
|
|
else
|
|
{
|
|
IscsiPopulateIqnsAction = new ISCSIPopulateIQNsAction(connection,
|
|
getIscsiHost(), getIscsiPort(), null, null);
|
|
}
|
|
|
|
IscsiPopulateIqnsAction.Completed += IscsiPopulateIqnsAction_Completed;
|
|
Dialogs.ActionProgressDialog dialog = new Dialogs.ActionProgressDialog(
|
|
IscsiPopulateIqnsAction, ProgressBarStyle.Marquee);
|
|
dialog.ShowCancel = true;
|
|
dialog.ShowDialog(this);
|
|
}
|
|
|
|
private void IscsiPopulateIqnsAction_Completed(ActionBase sender)
|
|
{
|
|
Program.Invoke(this, (System.Threading.WaitCallback)IscsiPopulateIqnsAction_Completed_, sender);
|
|
}
|
|
|
|
private void IscsiPopulateIqnsAction_Completed_(object o)
|
|
{
|
|
Program.AssertOnEventThread();
|
|
ISCSIPopulateIQNsAction action = (ISCSIPopulateIQNsAction)o;
|
|
|
|
if (action.Succeeded)
|
|
{
|
|
if (action.IQNs.Length == 0)
|
|
{
|
|
// Do nothing: ActionProgressDialog will show Messages.NEWSR_NO_IQNS_FOUND
|
|
}
|
|
else
|
|
{
|
|
int width = comboBoxIscsiIqns.Width;
|
|
foreach (Actions.IScsiIqnInfo iqnInfo in action.IQNs)
|
|
{
|
|
if (!String.IsNullOrEmpty(iqnInfo.TargetIQN))
|
|
{
|
|
String toString = String.Format("{0} ({1}:{2})", iqnInfo.TargetIQN, iqnInfo.IpAddress, iqnInfo.Port);
|
|
comboBoxIscsiIqns.Items.Add(new ToStringWrapper<IScsiIqnInfo>(iqnInfo, toString));
|
|
width = Math.Max(width, Drawing.MeasureText(toString, comboBoxIscsiIqns.Font).Width);
|
|
}
|
|
}
|
|
// Set the combo box dropdown width to accommodate the widest item (within reason)
|
|
comboBoxIscsiIqns.DropDownWidth = Math.Min(width, Int16.MaxValue);
|
|
|
|
if (comboBoxIscsiIqns.Items.Count > 0)
|
|
{
|
|
comboBoxIscsiIqns.SelectedItem = comboBoxIscsiIqns.Items[0];
|
|
comboBoxIscsiIqns.Enabled = true;
|
|
buttonIscsiPopulateLUNs.Enabled = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Failure failure = action.Exception as Failure;
|
|
if (failure != null && failure.ErrorDescription[0] == "SR_BACKEND_FAILURE_140")
|
|
{
|
|
labelIscsiInvalidHost.Visible = true;
|
|
textBoxIscsiHost.Focus();
|
|
}
|
|
}
|
|
buttonIscsiPopulateIQNs.Enabled = true;
|
|
}
|
|
|
|
private void buttonIscsiPopulateLUNs_Click(object sender, EventArgs e)
|
|
{
|
|
buttonIscsiPopulateLUNs.Enabled = false;
|
|
comboBoxIscsiLuns.Items.Clear();
|
|
LunMap.Clear();
|
|
|
|
if (IscsiUseChapCheckBox.Checked)
|
|
{
|
|
IscsiPopulateLunsAction = new Actions.ISCSIPopulateLunsAction(connection,
|
|
getIscsiHost(), getIscsiPort(), getIscsiIQN(), IScsiChapUserTextBox.Text, IScsiChapSecretTextBox.Text);
|
|
}
|
|
else
|
|
{
|
|
IscsiPopulateLunsAction = new Actions.ISCSIPopulateLunsAction(connection,
|
|
getIscsiHost(), getIscsiPort(), getIscsiIQN(), null, null);
|
|
}
|
|
|
|
IscsiPopulateLunsAction.Completed += IscsiPopulateLunsAction_Completed;
|
|
using (var dialog = new ActionProgressDialog(IscsiPopulateLunsAction, ProgressBarStyle.Marquee))
|
|
{
|
|
dialog.ShowCancel = true;
|
|
dialog.ShowDialog(this);
|
|
}
|
|
}
|
|
|
|
private void IscsiPopulateLunsAction_Completed(ActionBase sender)
|
|
{
|
|
Program.Invoke(this, (WaitCallback)IscsiPopulateLunsAction_Completed_, sender);
|
|
}
|
|
|
|
private void IscsiPopulateLunsAction_Completed_(object o)
|
|
{
|
|
Program.AssertOnEventThread();
|
|
ISCSIPopulateLunsAction action = (ISCSIPopulateLunsAction)o;
|
|
|
|
buttonIscsiPopulateLUNs.Enabled = true;
|
|
|
|
if (!action.Succeeded)
|
|
{
|
|
Failure failure = action.Exception as Failure;
|
|
if (failure != null && failure.ErrorDescription[0] == "SR_BACKEND_FAILURE_140")
|
|
{
|
|
labelIscsiInvalidHost.Visible = true;
|
|
textBoxIscsiHost.Focus();
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (action.LUNs.Length == 0)
|
|
{
|
|
// Do nothing: ActionProgressDialog will show Messages.NEWSR_NO_LUNS_FOUND
|
|
}
|
|
else
|
|
{
|
|
int width = comboBoxIscsiLuns.Width;
|
|
|
|
foreach (Actions.ISCSIInfo i in action.LUNs)
|
|
{
|
|
String label = "LUN";
|
|
if (i.LunID != -1)
|
|
label += String.Format(" {0}", i.LunID);
|
|
if (i.Serial != "")
|
|
label += String.Format(": {0}", i.Serial);
|
|
if (i.Size >= 0)
|
|
label += String.Format(": {0}", Util.DiskSizeString(i.Size));
|
|
if (i.Vendor != "")
|
|
label += String.Format(" ({0})", i.Vendor);
|
|
comboBoxIscsiLuns.Items.Add(label);
|
|
LunMap.Add(label, i);
|
|
|
|
width = Math.Max(width, Drawing.MeasureText(label, comboBoxIscsiLuns.Font).Width);
|
|
}
|
|
comboBoxIscsiLuns.SelectedItem = comboBoxIscsiLuns.Items[0];
|
|
comboBoxIscsiLuns.Enabled = true;
|
|
|
|
// Set the combo box dropdown width to accommodate the widest item (within reason)
|
|
comboBoxIscsiLuns.DropDownWidth = Math.Min(width, Int16.MaxValue);
|
|
}
|
|
|
|
UpdateButtons();
|
|
}
|
|
}
|
|
}
|