diff --git a/XenAdmin/Actions/GUIActions/ExternalPluginAction.cs b/XenAdmin/Actions/GUIActions/ExternalPluginAction.cs index e8c6cd7e9..ba28de1af 100644 --- a/XenAdmin/Actions/GUIActions/ExternalPluginAction.cs +++ b/XenAdmin/Actions/GUIActions/ExternalPluginAction.cs @@ -188,7 +188,7 @@ namespace XenAdmin.Actions { ShellCmd cmd = _menuItemFeature.ShellCmd; RbacMethodList methodsToCheck = cmd.RequiredMethods.Count == 0 ? _menuItemFeature.GetMethodList(cmd.RequiredMethodList) : cmd.RequiredMethods; - if (methodsToCheck == null || xenConnection.Session == null || xenConnection.Session.IsLocalSuperuser || !Helpers.MidnightRideOrGreater(xenConnection)) + if (methodsToCheck == null || xenConnection.Session == null || xenConnection.Session.IsLocalSuperuser) { return; } diff --git a/XenAdmin/Actions/GUIActions/Wlb/WlbOptimizePoolAction.cs b/XenAdmin/Actions/GUIActions/Wlb/WlbOptimizePoolAction.cs index 70467fcdc..3b6b73adf 100644 --- a/XenAdmin/Actions/GUIActions/Wlb/WlbOptimizePoolAction.cs +++ b/XenAdmin/Actions/GUIActions/Wlb/WlbOptimizePoolAction.cs @@ -72,7 +72,6 @@ namespace XenAdmin.Actions.Wlb ApiMethodsToRoleCheck.Add("pool.sync_database"); ApiMethodsToRoleCheck.Add("pool.set_ha_host_failures_to_tolerate"); ApiMethodsToRoleCheck.Add("vm.set_ha_restart_priority"); - ApiMethodsToRoleCheck.Add("vm.set_ha_always_run"); ApiMethodsToRoleCheck.Add("vm.assert_can_boot_here"); ApiMethodsToRoleCheck.Add("vm.assert_agile"); @@ -405,12 +404,6 @@ namespace XenAdmin.Actions.Wlb /// progress bar end point private static void SetHaProtection(bool protect, AsyncAction action, VM vm, int start, int end) { - if (!Helpers.BostonOrGreater(vm.Connection)) - { - // Enable or disable HA protection for the VM. - XenAPI.VM.set_ha_always_run(action.Session, vm.opaque_ref, protect); - } - // Do database sync. Helps to ensure that the change persists over master failover. action.RelatedTask = XenAPI.Pool.async_sync_database(action.Session); action.PollToCompletion(start, end); diff --git a/XenAdmin/Actions/SetCslgCredentialsAction.cs b/XenAdmin/Actions/SetCslgCredentialsAction.cs index 23a81e5ea..d9edc5fee 100644 --- a/XenAdmin/Actions/SetCslgCredentialsAction.cs +++ b/XenAdmin/Actions/SetCslgCredentialsAction.cs @@ -51,7 +51,7 @@ namespace XenAdmin.Actions { Util.ThrowIfEnumerableParameterNullOrEmpty(connections, "connections"); - _connections = Util.GetList(connections).FindAll(c => c.IsConnected && Helpers.GetPoolOfOne(c) != null && Helpers.MidnightRideOrGreater(c) && !Helpers.FeatureForbidden(c, XenAPI.Host.RestrictStorageChoices)); + _connections = Util.GetList(connections).FindAll(c => c.IsConnected && Helpers.GetPoolOfOne(c) != null && !Helpers.FeatureForbidden(c, XenAPI.Host.RestrictStorageChoices)); _host = host; _username = username; _password = password; diff --git a/XenAdmin/Actions/SetCslgCredentialsToPoolAction.cs b/XenAdmin/Actions/SetCslgCredentialsToPoolAction.cs index 86e9719aa..b36344b70 100644 --- a/XenAdmin/Actions/SetCslgCredentialsToPoolAction.cs +++ b/XenAdmin/Actions/SetCslgCredentialsToPoolAction.cs @@ -64,11 +64,6 @@ namespace XenAdmin.Actions throw new ArgumentException("Pool not licensed.", "host"); } - if (!Helpers.MidnightRideOrGreater(connection)) - { - throw new ArgumentException("Pool must by Midnight Ride or later.", "host"); - } - XenAPI.Pool pool = Helpers.GetPool(Connection); if (pool != null) diff --git a/XenAdmin/Commands/DRConfigureCommand.cs b/XenAdmin/Commands/DRConfigureCommand.cs index 4a247e80a..b8a9358e0 100644 --- a/XenAdmin/Commands/DRConfigureCommand.cs +++ b/XenAdmin/Commands/DRConfigureCommand.cs @@ -124,7 +124,7 @@ namespace XenAdmin.Commands protected override bool CanExecuteCore(SelectedItemCollection selection) { - return selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && selection.FirstAsXenObject.Connection.IsConnected && Helpers.BostonOrGreater(selection.FirstAsXenObject.Connection) + return selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && selection.FirstAsXenObject.Connection.IsConnected && (selection.PoolAncestor != null || selection.HostAncestor != null); //CA-61207: this check ensures there's no cross-pool selection } diff --git a/XenAdmin/Commands/DRDryrunCommand.cs b/XenAdmin/Commands/DRDryrunCommand.cs index 365550b0d..bd364ffae 100644 --- a/XenAdmin/Commands/DRDryrunCommand.cs +++ b/XenAdmin/Commands/DRDryrunCommand.cs @@ -100,7 +100,7 @@ namespace XenAdmin.Commands protected override bool CanExecuteCore(SelectedItemCollection selection) { - return selection.Count == 1 && selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && Helpers.BostonOrGreater(selection.FirstAsXenObject.Connection); + return selection.Count == 1 && selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null; } public override string ContextMenuText diff --git a/XenAdmin/Commands/DRFailbackCommand.cs b/XenAdmin/Commands/DRFailbackCommand.cs index 5aeec6732..9d311bd20 100644 --- a/XenAdmin/Commands/DRFailbackCommand.cs +++ b/XenAdmin/Commands/DRFailbackCommand.cs @@ -103,7 +103,7 @@ namespace XenAdmin.Commands protected override bool CanExecuteCore(SelectedItemCollection selection) { - return selection.Count == 1 && selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && Helpers.BostonOrGreater(selection.FirstAsXenObject.Connection); + return selection.Count == 1 && selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null; } public override string ContextMenuText diff --git a/XenAdmin/Commands/DRFailoverCommand.cs b/XenAdmin/Commands/DRFailoverCommand.cs index e7b6f9633..001b99a84 100644 --- a/XenAdmin/Commands/DRFailoverCommand.cs +++ b/XenAdmin/Commands/DRFailoverCommand.cs @@ -100,7 +100,7 @@ namespace XenAdmin.Commands protected override bool CanExecuteCore(SelectedItemCollection selection) { - return selection.Count==1&&selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && Helpers.BostonOrGreater(selection.FirstAsXenObject.Connection); + return selection.Count==1 && selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null; } public override string ContextMenuText diff --git a/XenAdmin/Commands/DestroyBondCommand.cs b/XenAdmin/Commands/DestroyBondCommand.cs index 5fd7b08e5..4d05a2be9 100644 --- a/XenAdmin/Commands/DestroyBondCommand.cs +++ b/XenAdmin/Commands/DestroyBondCommand.cs @@ -82,20 +82,7 @@ namespace XenAdmin.Commands // We just want one, so that we can name it. PIF pif = pifs[0]; - string new_name; - string msg; - if (network != null && !Helpers.BostonOrGreater(network.Connection) && network.Connection.ResolveAll(network.VIFs).Count > 0) - { - // We have a live pre-Boston network. Tell the user that we're going to rename it. - new_name = Helpers.MakeUniqueName(Messages.RENAMED_BOND, GetAllNetworkNames(network.Connection)); - msg = string.Format(Messages.DELETE_BOND_WITH_VIFS_MESSAGE, pif.Name, new_name); - } - else - { - // It's not in use -- delete the network as well as the bonds and PIFs. - new_name = null; - msg = string.Format(Messages.DELETE_BOND_MESSAGE, pif.Name); - } + string msg = string.Format(Messages.DELETE_BOND_MESSAGE, pif.Name); bool will_disturb_primary = NetworkingHelper.ContainsPrimaryManagement(pifs); bool will_disturb_secondary = NetworkingHelper.ContainsSecondaryManagement(pifs); @@ -147,7 +134,7 @@ namespace XenAdmin.Commands // done the right thing and that the bond hasn't been deleted in the meantime. (CA-27436). Bond bond = pif.BondMasterOf; if (bond != null) - new Actions.DestroyBondAction(bond, new_name).RunAsync(); + new Actions.DestroyBondAction(bond, null).RunAsync(); } } } diff --git a/XenAdmin/Commands/DisasterRecoveryCommand.cs b/XenAdmin/Commands/DisasterRecoveryCommand.cs index ec1958a01..6c3e795fc 100644 --- a/XenAdmin/Commands/DisasterRecoveryCommand.cs +++ b/XenAdmin/Commands/DisasterRecoveryCommand.cs @@ -97,7 +97,7 @@ namespace XenAdmin.Commands protected override bool CanExecuteCore(SelectedItemCollection selection) { - return selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && selection.FirstAsXenObject.Connection.IsConnected && Helpers.BostonOrGreater(selection.FirstAsXenObject.Connection) + return selection.FirstAsXenObject != null && selection.FirstAsXenObject.Connection != null && selection.FirstAsXenObject.Connection.IsConnected && (selection.PoolAncestor != null || selection.HostAncestor != null); //CA-61207: this check ensures there's no cross-pool selection } @@ -137,14 +137,5 @@ namespace XenAdmin.Commands return Messages.DISASTER_RECOVERY_CONTEXT_MENU; } } - - protected override string GetCantExecuteReasonCore(SelectedItem item) - { - if (!Helpers.BostonOrGreater(item.XenObject.Connection)) - return Messages.ONLY_IN_BOSTON_OR_LATER; - - - return base.GetCantExecuteReasonCore(item); - } } } diff --git a/XenAdmin/Commands/DisconnectWlbServerCommand.cs b/XenAdmin/Commands/DisconnectWlbServerCommand.cs index 0c562f388..46b179bc6 100644 --- a/XenAdmin/Commands/DisconnectWlbServerCommand.cs +++ b/XenAdmin/Commands/DisconnectWlbServerCommand.cs @@ -103,14 +103,5 @@ namespace XenAdmin.Commands } return false; } - - protected override string GetCantExecuteReasonCore(SelectedItem item) - { - IXenConnection connection = item.Connection; - Host best_host = item.HostAncestor ?? (connection == null ? null : Helpers.GetMaster(connection)); - bool george_or_greater = best_host != null && Helpers.GeorgeOrGreater(best_host); - - return george_or_greater ? base.GetCantExecuteReasonCore(item) : string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_GEORGE, Messages.WLB); - } } } diff --git a/XenAdmin/Commands/HACommand.cs b/XenAdmin/Commands/HACommand.cs index 72b108bcd..2d90a0816 100644 --- a/XenAdmin/Commands/HACommand.cs +++ b/XenAdmin/Commands/HACommand.cs @@ -79,7 +79,7 @@ namespace XenAdmin.Commands if (pool == null) return; - if (Helpers.FeatureForbidden(pool, Host.RestrictHAFloodgate)) + if (Helpers.FeatureForbidden(pool, Host.RestrictHA)) { // Show upsell dialog UpsellDialog dlg = new UpsellDialog(Messages.UPSELL_BLURB_HA, InvisibleMessages.UPSELL_LEARNMOREURL_HA); @@ -113,7 +113,7 @@ namespace XenAdmin.Commands { Host master = Helpers.GetMaster(poolAncestor.Connection); - if (master == null || master.RestrictHAOrlando || HelpersGUI.FindActiveHaAction(poolAncestor.Connection) != null || poolAncestor.Locked) + if (master == null || HelpersGUI.FindActiveHaAction(poolAncestor.Connection) != null || poolAncestor.Locked) { return false; } @@ -135,7 +135,7 @@ namespace XenAdmin.Commands { Host master = Helpers.GetMaster(poolAncestor.Connection); - if (master == null || master.RestrictHAOrlando) + if (master == null) { return Messages.FIELD_DISABLED; } diff --git a/XenAdmin/Commands/HostReconnectAsCommand.cs b/XenAdmin/Commands/HostReconnectAsCommand.cs index ec555fa3c..a91c58d00 100644 --- a/XenAdmin/Commands/HostReconnectAsCommand.cs +++ b/XenAdmin/Commands/HostReconnectAsCommand.cs @@ -73,8 +73,6 @@ namespace XenAdmin.Commands if (selection.Count == 1) { IXenConnection connection = selection[0].Connection; - if (!XenAdmin.Core.Helpers.GeorgeOrGreater(connection)) - return false; bool connected = connection != null && connection.IsConnected; Host host = selection[0].XenObject as Host; bool is_host = (host != null); diff --git a/XenAdmin/Commands/InstallToolsCommand.cs b/XenAdmin/Commands/InstallToolsCommand.cs index caa609a55..32ead573a 100644 --- a/XenAdmin/Commands/InstallToolsCommand.cs +++ b/XenAdmin/Commands/InstallToolsCommand.cs @@ -310,8 +310,6 @@ namespace XenAdmin.Commands if (xenConnection.Session == null) return false; - if (!Helpers.MidnightRideOrGreater(xenConnection)) - return true; RbacMethodList r = new RbacMethodList("http/connect_console"); if (Role.CanPerform(r, xenConnection, false)) return true; diff --git a/XenAdmin/Commands/PoolReconnectAsCommand.cs b/XenAdmin/Commands/PoolReconnectAsCommand.cs index 323a8f878..feacecbda 100644 --- a/XenAdmin/Commands/PoolReconnectAsCommand.cs +++ b/XenAdmin/Commands/PoolReconnectAsCommand.cs @@ -74,8 +74,6 @@ namespace XenAdmin.Commands if (selection.Count == 1) { IXenConnection connection = selection[0].Connection; - if (!XenAdmin.Core.Helpers.GeorgeOrGreater(connection)) - return false; bool connected = connection != null && connection.IsConnected; bool inPool = selection[0].PoolAncestor != null; diff --git a/XenAdmin/Commands/TakeSnapshotCommand.cs b/XenAdmin/Commands/TakeSnapshotCommand.cs index 16c4738f7..e5568afc2 100644 --- a/XenAdmin/Commands/TakeSnapshotCommand.cs +++ b/XenAdmin/Commands/TakeSnapshotCommand.cs @@ -131,7 +131,7 @@ namespace XenAdmin.Commands private static bool CanExecute(VM vm) { - return vm != null && !vm.is_a_template && !vm.Locked && Helpers.GeorgeOrGreater(vm.Connection) && (vm.allowed_operations.Contains(vm_operations.snapshot) || vm.allowed_operations.Contains(vm_operations.checkpoint)); + return vm != null && !vm.is_a_template && !vm.Locked && (vm.allowed_operations.Contains(vm_operations.snapshot) || vm.allowed_operations.Contains(vm_operations.checkpoint)); } protected override bool CanExecuteCore(SelectedItemCollection selection) @@ -153,23 +153,6 @@ namespace XenAdmin.Commands } } - protected override string GetCantExecuteReasonCore(SelectedItem item) - { - Host host = item.HostAncestor; - - if (host == null && item.Connection != null) - { - host = Helpers.GetMaster(item.Connection); - } - - if (host == null || !Helpers.GeorgeOrGreater(host)) - { - return Messages.SNAPSHOT_REQUIRE_GEORGE; - } - - return base.GetCantExecuteReasonCore(item); - } - public override string MenuText { get diff --git a/XenAdmin/Commands/VMGroupCommand.cs b/XenAdmin/Commands/VMGroupCommand.cs index 3ea1e43fb..630adf56e 100644 --- a/XenAdmin/Commands/VMGroupCommand.cs +++ b/XenAdmin/Commands/VMGroupCommand.cs @@ -98,19 +98,6 @@ namespace XenAdmin.Commands && (selection.PoolAncestor != null || selection.HostAncestor != null); //CA-61207: this check ensures there's no cross-pool selection } - protected override string GetCantExecuteReasonCore(SelectedItem item) - { - Pool poolAncestor = item.PoolAncestor; - - if (poolAncestor != null) - { - string reason = VMGroup.CantExecuteReason(poolAncestor.Connection); - if (!string.IsNullOrEmpty(reason)) - return reason; - } - return base.GetCantExecuteReasonCore(item); - } - public override string ContextMenuText { get diff --git a/XenAdmin/Commands/ViewWorkloadReportsCommand.cs b/XenAdmin/Commands/ViewWorkloadReportsCommand.cs index 94be45419..de2b8b62f 100644 --- a/XenAdmin/Commands/ViewWorkloadReportsCommand.cs +++ b/XenAdmin/Commands/ViewWorkloadReportsCommand.cs @@ -123,14 +123,5 @@ namespace XenAdmin.Commands } return false; } - - protected override string GetCantExecuteReasonCore(SelectedItem item) - { - IXenConnection connection = item.Connection; - Host best_host = item.HostAncestor ?? (connection == null ? null : Helpers.GetMaster(connection)); - bool george_or_greater = best_host != null && Helpers.GeorgeOrGreater(best_host); - - return george_or_greater ? base.GetCantExecuteReasonCore(item) : string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_GEORGE, Messages.WLB); - } } } diff --git a/XenAdmin/Controls/AD/LoggedInLabel.cs b/XenAdmin/Controls/AD/LoggedInLabel.cs index b0240a687..49d1b6f9f 100644 --- a/XenAdmin/Controls/AD/LoggedInLabel.cs +++ b/XenAdmin/Controls/AD/LoggedInLabel.cs @@ -118,8 +118,7 @@ namespace XenAdmin.Controls labelLoggedInAs.Visible = true; // get the logged in username from the session to update the logged in label - if (connection.Session.IsLocalSuperuser || XenAdmin.Core.Helpers.GetMaster(connection).external_auth_type != Auth.AUTH_TYPE_AD || - !Helpers.MidnightRideOrGreater(Connection)) + if (connection.Session.IsLocalSuperuser || XenAdmin.Core.Helpers.GetMaster(connection).external_auth_type != Auth.AUTH_TYPE_AD) { labelUsername.Text = connection.Session.UserFriendlyName; } diff --git a/XenAdmin/Controls/BondDetails.Designer.cs b/XenAdmin/Controls/BondDetails.Designer.cs index bf9cbbff8..10f9278ca 100644 --- a/XenAdmin/Controls/BondDetails.Designer.cs +++ b/XenAdmin/Controls/BondDetails.Designer.cs @@ -214,7 +214,6 @@ namespace XenAdmin.Controls this.tableLayoutPanelBondMode.Controls.Add(this.radioButtonLacpSrcMac, 0, 3); this.tableLayoutPanelBondMode.Controls.Add(this.radioButtonBalanceSlb, 0, 0); this.tableLayoutPanelBondMode.Controls.Add(this.radioButtonActiveBackup, 0, 1); - this.tableLayoutPanelBondMode.MinimumSize = new System.Drawing.Size(0, 40); this.tableLayoutPanelBondMode.Name = "tableLayoutPanelBondMode"; // // radioButtonLacpTcpudpPorts diff --git a/XenAdmin/Controls/BondDetails.cs b/XenAdmin/Controls/BondDetails.cs index 4b29979fe..bed166145 100644 --- a/XenAdmin/Controls/BondDetails.cs +++ b/XenAdmin/Controls/BondDetails.cs @@ -215,22 +215,13 @@ namespace XenAdmin.Controls private void ShowHideControls() { - labelMTU.Visible = numericUpDownMTU.Visible = Helpers.CowleyOrGreater(Connection); - groupBoxBondMode.Visible = Helpers.BostonOrGreater(Connection); radioButtonLacpSrcMac.Visible = radioButtonLacpTcpudpPorts.Visible = Helpers.SupportsLinkAggregationBond(Connection); } private string PIFDescription(PIF pif) { Bond bond = pif.BondSlaveOf; - if (bond != null) - return string.Format(Messages.ALREADY_IN_BOND, bond.Name); - - XenAPI.Network network = Connection.Resolve(pif.network); - if (network != null && !Helpers.BostonOrGreater(network.Connection) && network.HasActiveVIFs) // in Boston, can make a bond even if there are active VMs (PR-1006) - return Messages.PIF_IN_USE_BY_VMS; - - return ""; + return bond == null ? "" : string.Format(Messages.ALREADY_IN_BOND, bond.Name); } internal DialogResult ShowCreationWarning() diff --git a/XenAdmin/Controls/BondDetails.resx b/XenAdmin/Controls/BondDetails.resx index bf413811f..6ef04d688 100644 --- a/XenAdmin/Controls/BondDetails.resx +++ b/XenAdmin/Controls/BondDetails.resx @@ -112,20 +112,20 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Bottom, Left - + True - + TopLeft @@ -169,7 +169,7 @@ label1 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panelLACPWarning @@ -199,7 +199,7 @@ pictureBox1 - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panelLACPWarning @@ -229,7 +229,7 @@ panelLACPWarning - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -250,7 +250,7 @@ numericUpDownMTU - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -261,7 +261,7 @@ Top, Bottom, Left, Right - + True @@ -270,7 +270,7 @@ 5 - + True @@ -279,7 +279,7 @@ 50 - + True @@ -288,7 +288,7 @@ 55 - + True @@ -297,7 +297,7 @@ 85 - + True @@ -306,7 +306,7 @@ 63 - + True @@ -315,7 +315,7 @@ 65 - + True @@ -324,7 +324,7 @@ 66 - + True @@ -333,7 +333,7 @@ 66 - + True @@ -355,7 +355,7 @@ dataGridView1 - System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -391,7 +391,7 @@ labelMTU - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -436,7 +436,7 @@ radioButtonLacpTcpudpPorts - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanelBondMode @@ -466,7 +466,7 @@ radioButtonLacpSrcMac - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanelBondMode @@ -496,7 +496,7 @@ radioButtonBalanceSlb - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanelBondMode @@ -526,7 +526,7 @@ radioButtonActiveBackup - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanelBondMode @@ -543,6 +543,9 @@ 0, 0, 0, 0 + + 0, 40 + 4 @@ -556,7 +559,7 @@ tableLayoutPanelBondMode - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupBoxBondMode @@ -592,7 +595,7 @@ groupBoxBondMode - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -619,7 +622,7 @@ tableLayoutPanel1 - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -655,7 +658,7 @@ cbxAutomatic - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -708,7 +711,7 @@ PCI Bus Path - + True @@ -721,108 +724,108 @@ ColumnCheckBox - System.Windows.Forms.DataGridViewCheckBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewCheckBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnNic - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnMac - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnLinkStatus - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnSpeed - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnDuplex - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnVendor - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnDevice - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnPci - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn1 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn2 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn3 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn4 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn5 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn6 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn7 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 dataGridViewTextBoxColumn8 - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 BondDetails - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/XenAdmin/Controls/ConsolePanel.cs b/XenAdmin/Controls/ConsolePanel.cs index 5605fe456..445495298 100644 --- a/XenAdmin/Controls/ConsolePanel.cs +++ b/XenAdmin/Controls/ConsolePanel.cs @@ -221,7 +221,7 @@ namespace XenAdmin.Controls public static bool RbacDenied(VM source, out List AllowedRoles) { - if (source == null || source.Connection == null || !Helpers.MidnightRideOrGreater(source.Connection)) + if (source == null || source.Connection == null) { AllowedRoles = null; return false; diff --git a/XenAdmin/Controls/CustomDataGraph/GraphList.cs b/XenAdmin/Controls/CustomDataGraph/GraphList.cs index 5e274bc0e..d855d5b17 100644 --- a/XenAdmin/Controls/CustomDataGraph/GraphList.cs +++ b/XenAdmin/Controls/CustomDataGraph/GraphList.cs @@ -455,7 +455,6 @@ namespace XenAdmin.Controls.CustomDataGraph get { return !XenObject.Connection.Session.IsLocalSuperuser && - Helpers.MidnightRideOrGreater(XenObject.Connection) && !Registry.DontSudo; } } diff --git a/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.Designer.cs b/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.Designer.cs index e3c1e5019..72eba4a6a 100644 --- a/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.Designer.cs +++ b/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.Designer.cs @@ -42,7 +42,6 @@ resources.ApplyResources(this.panelWithBorder, "panelWithBorder"); this.panelWithBorder.BackColor = System.Drawing.Color.Transparent; this.panelWithBorder.Controls.Add(this.containerPanel); - this.panelWithBorder.MinimumSize = new System.Drawing.Size(755, 30); this.panelWithBorder.Name = "panelWithBorder"; // // containerPanel @@ -50,7 +49,6 @@ resources.ApplyResources(this.containerPanel, "containerPanel"); this.containerPanel.Controls.Add(this.placementPolicyLabel); this.containerPanel.Controls.Add(this.editPlacementPolicyButton); - this.containerPanel.MinimumSize = new System.Drawing.Size(755, 33); this.containerPanel.Name = "containerPanel"; // // placementPolicyLabel @@ -73,7 +71,6 @@ this.BackColor = System.Drawing.Color.Transparent; this.Controls.Add(this.panelWithBorder); this.DoubleBuffered = true; - this.MinimumSize = new System.Drawing.Size(400, 32); this.Name = "GpuPlacementPolicyPanel"; this.VisibleChanged += new System.EventHandler(this.GpuPlacementPolicyPanel_VisibleChanged); this.panelWithBorder.ResumeLayout(false); diff --git a/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.resx b/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.resx index 3659bfed0..a597c86b0 100644 --- a/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.resx +++ b/XenAdmin/Controls/GPU/GpuPlacementPolicyPanel.resx @@ -112,16 +112,16 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - + GrowAndShrink @@ -140,7 +140,7 @@ NoControl - + 3, 7 @@ -160,7 +160,7 @@ placementPolicyLabel - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 containerPanel @@ -193,7 +193,7 @@ editPlacementPolicyButton - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 containerPanel @@ -204,6 +204,9 @@ 1, 1 + + 755, 33 + 1046, 33 @@ -217,7 +220,7 @@ containerPanel - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panelWithBorder @@ -234,6 +237,9 @@ 0, 0, 0, 0 + + 755, 30 + 755, 35 @@ -252,7 +258,7 @@ 0 - + True @@ -264,6 +270,9 @@ 0, 0, 0, 0 + + 400, 32 + 464, 35 @@ -271,6 +280,6 @@ GpuPlacementPolicyPanel - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/XenAdmin/Controls/MainWindowControls/NavigationPane.cs b/XenAdmin/Controls/MainWindowControls/NavigationPane.cs index 43ccdb737..49cb06838 100644 --- a/XenAdmin/Controls/MainWindowControls/NavigationPane.cs +++ b/XenAdmin/Controls/MainWindowControls/NavigationPane.cs @@ -114,7 +114,9 @@ namespace XenAdmin.Controls.MainWindowControls Search.SearchesChanged += PopulateSearchDropDown; PopulateSearchDropDown(); - buttonInfraBig.Checked = true; + // TODO: Remove + // comment markers + // buttonInfraBig.Checked = true; } protected override void OnResize(EventArgs e) diff --git a/XenAdmin/Controls/NetworkingTab/NetworkList.cs b/XenAdmin/Controls/NetworkingTab/NetworkList.cs index 457ac32d0..13e563666 100644 --- a/XenAdmin/Controls/NetworkingTab/NetworkList.cs +++ b/XenAdmin/Controls/NetworkingTab/NetworkList.cs @@ -167,7 +167,8 @@ namespace XenAdmin.Controls.NetworkingTab this.VlanColumn, this.AutoColumn, this.LinkStatusColumn, - this.NetworkMacColumn}); + this.NetworkMacColumn, + this.MtuColumn}); //CA-47050: the Description column should be autosized to Fill, but should not become smaller than a minimum //width, which here is chosen to be the column header width. To find what this width is set temporarily the @@ -176,10 +177,6 @@ namespace XenAdmin.Controls.NetworkingTab int storedWidth = this.DescriptionColumn.Width; this.DescriptionColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; this.DescriptionColumn.MinimumWidth = storedWidth; - - // add MTU to grid view on Network tab for pools and hosts, for Cowley or greater only (CA-45643) - if (Helpers.CowleyOrGreater(_xenObject.Connection)) - NetworksGridView.Columns.Add(this.MtuColumn); } finally { @@ -904,12 +901,9 @@ namespace XenAdmin.Controls.NetworkingTab VlanCell, AutoCell, LinkStatusCell, - MacCell); + MacCell, + MtuCell); - // add MTU to grid view on Network tab for pools and hosts, for Cowley or greater only (CA-45643) - if (Helpers.CowleyOrGreater(Xmo.Connection)) - Cells.Add(this.MtuCell); - Network.PropertyChanged += Server_PropertyChanged; Program.Invoke(Program.MainWindow, UpdateDetails); diff --git a/XenAdmin/Controls/Wlb/WlbOptimizePool.cs b/XenAdmin/Controls/Wlb/WlbOptimizePool.cs index 57b5da140..e2ead2fa7 100644 --- a/XenAdmin/Controls/Wlb/WlbOptimizePool.cs +++ b/XenAdmin/Controls/Wlb/WlbOptimizePool.cs @@ -837,8 +837,6 @@ namespace XenAdmin.Controls.Wlb private bool PassedRbacChecks() { - if (!Helpers.MidnightRideOrGreater(_pool.Connection)) - return true; return Role.CanPerform(WLB_PERMISSION_CHECKS, this._pool.Connection); } #endregion diff --git a/XenAdmin/Core/VMGroup.cs b/XenAdmin/Core/VMGroup.cs index 217d9db91..ed037f455 100644 --- a/XenAdmin/Core/VMGroup.cs +++ b/XenAdmin/Core/VMGroup.cs @@ -182,23 +182,8 @@ namespace XenAdmin.Core return false; return typeof(T) == typeof(VMPP) ? - Helpers.CowleyOrGreater(connection) && Registry.VMPRFeatureEnabled : - Helpers.BostonOrGreater(connection); - } - - internal static string CantExecuteReason(IXenConnection connection) - { - if (typeof(T) == typeof(VMPP)) - { - if (!Helpers.CowleyOrGreater(connection)) - return Messages.ONLY_IN_COWLEY_OR_LATER; - } - else - { - if (!Helpers.BostonOrGreater(connection)) - return Messages.ONLY_IN_BOSTON_OR_LATER; - } - return null; + Registry.VMPRFeatureEnabled : + true; } internal static Predicate FeatureRestricted diff --git a/XenAdmin/Diagnostics/Checks/HostHasHotfixCheck.cs b/XenAdmin/Diagnostics/Checks/HostHasHotfixCheck.cs index d153277e1..a376aede0 100644 --- a/XenAdmin/Diagnostics/Checks/HostHasHotfixCheck.cs +++ b/XenAdmin/Diagnostics/Checks/HostHasHotfixCheck.cs @@ -64,23 +64,12 @@ namespace XenAdmin.Diagnostics.Checks return new HostDoesNotHaveHotfix(this, Host); } - if (Helpers.BostonOrGreater(Host) && !Helpers.SanibelOrGreater(Host) + if (!Helpers.SanibelOrGreater(Host) && hotfixFactory.Hotfix(HotfixFactory.HotfixableServerVersion.Boston).ShouldBeAppliedTo(Host)) { return new HostDoesNotHaveHotfix(this, Host); } - if (Helpers.CowleyOrGreater(Host) && !Helpers.BostonOrGreater(Host) - && hotfixFactory.Hotfix(HotfixFactory.HotfixableServerVersion.Cowley).ShouldBeAppliedTo(Host)) - { - return new HostDoesNotHaveHotfix(this, Host); - } - - if (Helpers.MidnightRideOrGreater(Host) && !Helpers.CowleyOrGreater(Host) - && hotfixFactory.Hotfix(HotfixFactory.HotfixableServerVersion.MNR).ShouldBeAppliedTo(Host)) - { - return new HostDoesNotHaveHotfix(this, Host); - } return null; } diff --git a/XenAdmin/Diagnostics/Hotfixing/HotfixFactory.cs b/XenAdmin/Diagnostics/Hotfixing/HotfixFactory.cs index f2e5e14e6..350d130e3 100644 --- a/XenAdmin/Diagnostics/Hotfixing/HotfixFactory.cs +++ b/XenAdmin/Diagnostics/Hotfixing/HotfixFactory.cs @@ -94,12 +94,8 @@ namespace XenAdmin.Diagnostics.Hotfixing return Hotfix(HotfixableServerVersion.Creedence); if (Helpers.SanibelOrGreater(host) && !Helpers.CreedenceOrGreater(host)) return Hotfix(HotfixableServerVersion.SanibelToClearwater); - if (Helpers.BostonOrGreater(host) && !Helpers.SanibelOrGreater(host)) + if (!Helpers.SanibelOrGreater(host)) return Hotfix(HotfixableServerVersion.Boston); - if (Helpers.CowleyOrGreater(host) && !Helpers.BostonOrGreater(host)) - return Hotfix(HotfixableServerVersion.Cowley); - if (Helpers.MidnightRideOrGreater(host) && !Helpers.CowleyOrGreater(host)) - return Hotfix(HotfixableServerVersion.MNR); return null; } diff --git a/XenAdmin/Dialogs/ChangeStorageLinkPasswordDialog.resx b/XenAdmin/Dialogs/ChangeStorageLinkPasswordDialog.resx index 5640b1f89..88e833375 100644 --- a/XenAdmin/Dialogs/ChangeStorageLinkPasswordDialog.resx +++ b/XenAdmin/Dialogs/ChangeStorageLinkPasswordDialog.resx @@ -112,16 +112,16 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Right - + Segoe UI, 9pt @@ -134,7 +134,7 @@ 75, 23 - + 12 @@ -145,7 +145,7 @@ btnCancel - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 flowLayoutPanel2 @@ -178,7 +178,7 @@ btnOK - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 flowLayoutPanel2 @@ -202,7 +202,7 @@ pictureBox1 - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 flowLayoutPanel1 @@ -253,7 +253,7 @@ label1 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 flowLayoutPanel1 @@ -280,7 +280,7 @@ flowLayoutPanel1 - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -316,7 +316,7 @@ flowLayoutPanel2 - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -355,7 +355,7 @@ label2 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -391,7 +391,7 @@ label3 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -427,7 +427,7 @@ label4 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -463,7 +463,7 @@ label5 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -493,7 +493,7 @@ UsernameTextBox - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -523,7 +523,7 @@ OldPasswordTextBox - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -553,7 +553,7 @@ NewPasswordTextBox - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -583,7 +583,7 @@ ConfirmPasswordTextBox - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -613,7 +613,7 @@ tableLayoutPanel2 - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 @@ -646,7 +646,7 @@ tableLayoutPanel1 - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -657,7 +657,7 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="flowLayoutPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="flowLayoutPanel2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,Percent,100,AutoSize,0" /></TableLayoutSettings> - + True diff --git a/XenAdmin/Dialogs/EvacuateHostDialog.cs b/XenAdmin/Dialogs/EvacuateHostDialog.cs index d40743760..a32e6a9e8 100644 --- a/XenAdmin/Dialogs/EvacuateHostDialog.cs +++ b/XenAdmin/Dialogs/EvacuateHostDialog.cs @@ -813,7 +813,6 @@ namespace XenAdmin.Dialogs List validRoles = new List(); if (!connection.Session.IsLocalSuperuser - && Helpers.MidnightRideOrGreater(connection) && !Registry.DontSudo && !Role.CanPerform(new RbacMethodList(rbacMethods), connection, out validRoles)) { diff --git a/XenAdmin/Dialogs/ImportStorageLinkVolumeDialog.cs b/XenAdmin/Dialogs/ImportStorageLinkVolumeDialog.cs index 877ad830e..3f82df522 100644 --- a/XenAdmin/Dialogs/ImportStorageLinkVolumeDialog.cs +++ b/XenAdmin/Dialogs/ImportStorageLinkVolumeDialog.cs @@ -144,7 +144,7 @@ namespace XenAdmin.Dialogs } var dontShow = new List(); - foreach (IXenConnection c in ConnectionsManager.XenConnectionsCopy.FindAll(c => c.IsConnected && Helpers.MidnightRideOrGreater(c))) + foreach (IXenConnection c in ConnectionsManager.XenConnectionsCopy.FindAll(c => c.IsConnected)) { foreach (VDI vdi in c.Cache.VDIs) { diff --git a/XenAdmin/Dialogs/LicenseManager/LicenseActivationRequest.cs b/XenAdmin/Dialogs/LicenseManager/LicenseActivationRequest.cs index 838c416e7..ab77aa36b 100644 --- a/XenAdmin/Dialogs/LicenseManager/LicenseActivationRequest.cs +++ b/XenAdmin/Dialogs/LicenseManager/LicenseActivationRequest.cs @@ -66,7 +66,7 @@ namespace XenAdmin.Dialogs //This check used to be "_expiresText != Messages.LICENSE_NEVER" but I've swapped it for //"!host.isOEM" according to the ticket CA-37336 where this 3rd part of the check was added //OEM licenses (< XS ver 5.5) have perpetual (2036) expiry dates - return host.IsFreeLicense() && host.IsFloodgateOrLater() && !host.isOEM && !Helpers.ClearwaterOrGreater(host); + return host.IsFreeLicense() && !host.isOEM && !Helpers.ClearwaterOrGreater(host); } public static bool CanActivate(Pool pool) diff --git a/XenAdmin/Dialogs/NameAndConnectionPrompt.cs b/XenAdmin/Dialogs/NameAndConnectionPrompt.cs index 4e38da9a5..6902a37d8 100644 --- a/XenAdmin/Dialogs/NameAndConnectionPrompt.cs +++ b/XenAdmin/Dialogs/NameAndConnectionPrompt.cs @@ -86,7 +86,6 @@ namespace XenAdmin.Dialogs IXenObject xo = comboBox.Items[i] as IXenObject; if (xo != null && (xo.Connection.Session.IsLocalSuperuser - || !Helpers.MidnightRideOrGreater(xo.Connection) || !XenAdmin.Commands.CrossConnectionCommand.IsReadOnly(xo.Connection))) { nonReadOnlyIndex = i; diff --git a/XenAdmin/Dialogs/PropertiesDialog.cs b/XenAdmin/Dialogs/PropertiesDialog.cs index 2c6dec873..231996b6b 100644 --- a/XenAdmin/Dialogs/PropertiesDialog.cs +++ b/XenAdmin/Dialogs/PropertiesDialog.cs @@ -150,17 +150,7 @@ namespace XenAdmin.Dialogs { ShowTab(VCpuMemoryEditPage = new CPUMemoryEditPage()); ShowTab(StartupOptionsEditPage = new BootOptionsEditPage()); - - if (!Helpers.BostonOrGreater(xenObjectCopy.Connection) && Helpers.FeatureForbidden(xenObjectCopy, Host.RestrictHAFloodgate)) - { - VMHAUpsellEditPage = new UpsellPage {Image = Properties.Resources._001_PowerOn_h32bit_16, Text = Messages.START_UP_OPTIONS}; - VMHAUpsellEditPage.SetAllTexts(Messages.UPSELL_BLURB_HA, InvisibleMessages.UPSELL_LEARNMOREURL_HA); - ShowTab(VMHAUpsellEditPage); - } - else - { - ShowTab(VMHAEditPage = new VMHAEditPage {VerticalTabs = verticalTabs}); - } + ShowTab(VMHAEditPage = new VMHAEditPage {VerticalTabs = verticalTabs}); } if (is_vm || is_host || (is_sr && Helpers.ClearwaterOrGreater(connection))) @@ -189,24 +179,16 @@ namespace XenAdmin.Dialogs { ShowTab(PerfmonAlertOptionsEditPage = new PerfmonAlertOptionsPage()); } - - if (!Helpers.FeatureForbidden(xenObjectCopy, Host.RestrictStorageChoices) - && !Helpers.BostonOrGreater(xenObjectCopy.Connection) - && Helpers.MidnightRideOrGreater(xenObjectCopy.Connection)) - ShowTab(StorageLinkPage = new StorageLinkEditPage()); } if (is_host) { ShowTab(hostMultipathPage1 = new HostMultipathPage()); - - if (Helpers.MidnightRideOrGreater(xenObject.Connection)) - ShowTab(HostPowerONEditPage = new HostPowerONEditPage()); - + ShowTab(HostPowerONEditPage = new HostPowerONEditPage()); ShowTab(LogDestinationEditPage = new LogDestinationEditPage()); } - if (is_pool && Helpers.MidnightRideOrGreater(xenObject.Connection)) + if (is_pool) ShowTab(PoolPowerONEditPage = new PoolPowerONEditPage()); if ((is_pool_or_standalone && Helpers.VGpuCapability(xenObjectCopy.Connection)) @@ -226,18 +208,15 @@ namespace XenAdmin.Dialogs if (is_vm && ((VM)xenObjectCopy).CanHaveGpu) { - if (Helpers.BostonOrGreater(xenObject.Connection)) + if (Helpers.FeatureForbidden(xenObjectCopy, Host.RestrictGpu)) { - if (Helpers.FeatureForbidden(xenObjectCopy, Host.RestrictGpu)) - { - GpuUpsellEditPage = new UpsellPage { Image = Properties.Resources._000_GetMemoryInfo_h32bit_16, Text = Messages.GPU }; - GpuUpsellEditPage.SetAllTexts(Messages.UPSELL_BLURB_GPU, InvisibleMessages.UPSELL_LEARNMOREURL_GPU); - ShowTab(GpuUpsellEditPage); - } - else - { - ShowTab(GpuEditPage = new GpuEditPage()); - } + GpuUpsellEditPage = new UpsellPage { Image = Properties.Resources._000_GetMemoryInfo_h32bit_16, Text = Messages.GPU }; + GpuUpsellEditPage.SetAllTexts(Messages.UPSELL_BLURB_GPU, InvisibleMessages.UPSELL_LEARNMOREURL_GPU); + ShowTab(GpuUpsellEditPage); + } + else + { + ShowTab(GpuEditPage = new GpuEditPage()); } } diff --git a/XenAdmin/Dialogs/VmSnapshotDialog.cs b/XenAdmin/Dialogs/VmSnapshotDialog.cs index 0f6d7f2cb..ed54f9483 100644 --- a/XenAdmin/Dialogs/VmSnapshotDialog.cs +++ b/XenAdmin/Dialogs/VmSnapshotDialog.cs @@ -145,9 +145,7 @@ namespace XenAdmin.Dialogs private void pictureBoxQuiesceInfo_Click(object sender, EventArgs e) { string tt; - if (!Helpers.MidnightRideOrGreater(_VM.Connection)) - tt = string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_MR_PLURAL, Messages.QUIESCED_SNAPSHOTS); - else if (Helpers.FeatureForbidden(_VM, Host.RestrictVss)) + if (Helpers.FeatureForbidden(_VM, Host.RestrictVss)) tt = Messages.FIELD_DISABLED; else if (_VM.power_state != vm_power_state.Running) tt = Messages.INFO_QUIESCE_MODE_POWER_STATE.Replace("\\n", "\n"); @@ -176,9 +174,7 @@ namespace XenAdmin.Dialogs private void CheckpointInfoPictureBox_Click(object sender, EventArgs e) { string tt; - if (!Helpers.MidnightRideOrGreater(_VM.Connection)) - tt = string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_MR_ENTERPRISE_OR_PLATINUM_PLURAL.Replace("\\n", "\n"), Messages.DISKMEMORY_SNAPSHOTS); - else if (Helpers.FeatureForbidden(_VM, Host.RestrictCheckpoint)) + if (Helpers.FeatureForbidden(_VM, Host.RestrictCheckpoint)) tt = string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_ENTERPRISE_OR_PLATINUM_PLURAL.Replace("\\n", "\n"), Messages.DISKMEMORY_SNAPSHOTS); else if (_VM.power_state != vm_power_state.Running) tt = Messages.INFO_DISKMEMORY_MODE_POWER_STATE.Replace("\\n", "\n"); diff --git a/XenAdmin/MainWindow.cs b/XenAdmin/MainWindow.cs index f2d9c76f6..cd4fa3681 100644 --- a/XenAdmin/MainWindow.cs +++ b/XenAdmin/MainWindow.cs @@ -1322,13 +1322,9 @@ namespace XenAdmin // 'Home' tab is only visible if the 'Overview' tree node is selected, or if the tree is // empty (i.e. at startup). bool show_home = SelectionManager.Selection.Count == 1 && SelectionManager.Selection[0].Value == null; - // Only show the HA tab if the host's license has the HA flag set - bool has_ha_license_flag = selectionMaster != null && !selectionMaster.RestrictHAOrlando; - bool george_or_greater = Helpers.GeorgeOrGreater(selectionConnection); - bool mr_or_greater = Helpers.MidnightRideOrGreater(selectionConnection); // The upsell pages use the first selected XenObject: but they're only shown if there is only one selected object (see calls to ShowTab() below). bool dmc_upsell = Helpers.FeatureForbidden(SelectionManager.Selection.FirstAsXenObject, Host.RestrictDMC); - bool ha_upsell = Helpers.FeatureForbidden(SelectionManager.Selection.FirstAsXenObject, Host.RestrictHAFloodgate); + bool ha_upsell = Helpers.FeatureForbidden(SelectionManager.Selection.FirstAsXenObject, Host.RestrictHA); bool wlb_upsell = Helpers.FeatureForbidden(SelectionManager.Selection.FirstAsXenObject, Host.RestrictWLB); bool is_connected = selectionConnection != null && selectionConnection.IsConnected; @@ -1350,7 +1346,7 @@ namespace XenAdmin NewTabCount = 0; ShowTab(TabPageHome, !SearchMode && show_home); ShowTab(TabPageGeneral, !multi && !SearchMode && (isVMSelected || (isHostSelected && (isHostLive || !is_connected)) || isPoolSelected || isSRSelected || isStorageLinkSelected || isDockerContainerSelected)); - ShowTab(dmc_upsell ? TabPageBallooningUpsell : TabPageBallooning, !multi && !SearchMode && mr_or_greater && (isVMSelected || (isHostSelected && isHostLive) || isPoolSelected)); + ShowTab(dmc_upsell ? TabPageBallooningUpsell : TabPageBallooning, !multi && !SearchMode && (isVMSelected || (isHostSelected && isHostLive) || isPoolSelected)); ShowTab(TabPageStorage, !multi && !SearchMode && (isRealVMSelected || (isTemplateSelected && !selectedTemplateHasProvisionXML))); ShowTab(TabPageSR, !multi && !SearchMode && (isSRSelected || isStorageLinkSRSelected)); ShowTab(TabPagePhysicalStorage, !multi && !SearchMode && ((isHostSelected && isHostLive) || isPoolSelected)); @@ -1374,14 +1370,14 @@ namespace XenAdmin ShowTab(TabPageConsole, !shownConsoleReplacement && !multi && !SearchMode && (isRealVMSelected || (isHostSelected && isHostLive))); ShowTab(TabPagePeformance, !multi && !SearchMode && (isRealVMSelected || (isHostSelected && isHostLive))); - ShowTab(ha_upsell ? TabPageHAUpsell : TabPageHA, !multi && !SearchMode && isPoolSelected && has_ha_license_flag); - ShowTab(TabPageSnapshots, !multi && !SearchMode && george_or_greater && isRealVMSelected); + ShowTab(ha_upsell ? TabPageHAUpsell : TabPageHA, !multi && !SearchMode && isPoolSelected); + ShowTab(TabPageSnapshots, !multi && !SearchMode && isRealVMSelected); //Any Clearwater XenServer, or WLB is not licensed on XenServer, the WLB tab and any WLB menu items disappear completely. if(!(SelectionManager.Selection.All(s => Helpers.IsClearwater(s.Connection)) || wlb_upsell )) - ShowTab(TabPageWLB, !multi && !SearchMode && isPoolSelected && george_or_greater); + ShowTab(TabPageWLB, !multi && !SearchMode && isPoolSelected); - ShowTab(TabPageAD, !multi && !SearchMode && (isPoolSelected || isHostSelected && isHostLive) && george_or_greater); + ShowTab(TabPageAD, !multi && !SearchMode && (isPoolSelected || isHostSelected && isHostLive)); foreach (TabPageFeature f in pluginManager.GetAllFeatures(f => !f.IsConsoleReplacement && !multi && f.ShowTab)) ShowTab(f.TabPage, true); @@ -1609,9 +1605,6 @@ namespace XenAdmin IXenConnection connection = SelectionManager.Selection.GetConnectionOfFirstItem(); bool vm = SelectionManager.Selection.FirstIsRealVM && !((VM)SelectionManager.Selection.First).Locked; - Host best_host = hostAncestor ?? (connection == null ? null : Helpers.GetMaster(connection)); - bool george_or_greater = best_host != null && Helpers.GeorgeOrGreater(best_host); - exportSettingsToolStripMenuItem.Enabled = ConnectionsManager.XenConnectionsCopy.Count > 0; this.MenuShortcuts = true; @@ -1619,7 +1612,7 @@ namespace XenAdmin startOnHostToolStripMenuItem.Available = startOnHostToolStripMenuItem.Enabled; resumeOnToolStripMenuItem.Available = resumeOnToolStripMenuItem.Enabled; relocateToolStripMenuItem.Available = relocateToolStripMenuItem.Enabled; - storageLinkToolStripMenuItem.Available = storageLinkToolStripMenuItem.Enabled; + storageLinkToolStripMenuItem.Available = true;// storageLinkToolStripMenuItem.Enabled; sendCtrlAltDelToolStripMenuItem.Enabled = (TheTabControl.SelectedTab == TabPageConsole) && vm && ((VM)SelectionManager.Selection.First).power_state == vm_power_state.Running; templatesToolStripMenuItem1.Checked = Properties.Settings.Default.DefaultTemplatesVisible; diff --git a/XenAdmin/Network/SSL.cs b/XenAdmin/Network/SSL.cs index f958ee86c..8322f35ed 100644 --- a/XenAdmin/Network/SSL.cs +++ b/XenAdmin/Network/SSL.cs @@ -128,7 +128,7 @@ namespace XenAdmin.Network if (AcceptCertificate) log.Debug("Adding cert after confirmation"); else - log.Debug("User refejected new cert"); + log.Debug("User rejected new cert"); return AcceptCertificate; } } diff --git a/XenAdmin/Network/StorageLinkConnectionManager.cs b/XenAdmin/Network/StorageLinkConnectionManager.cs index a56f5122d..5f8ac3381 100644 --- a/XenAdmin/Network/StorageLinkConnectionManager.cs +++ b/XenAdmin/Network/StorageLinkConnectionManager.cs @@ -148,7 +148,7 @@ namespace XenAdmin.Network.StorageLink { Pool pool = Helpers.GetPoolOfOne(c); - if (c.IsConnected && pool != null && Helpers.MidnightRideOrGreater(c) && !Helpers.FeatureForbidden(c, Host.RestrictStorageChoices)) + if (c.IsConnected && pool != null && !Helpers.FeatureForbidden(c, Host.RestrictStorageChoices)) { Settings.CslgCredentials localCreds = null; Invoke(() => localCreds = Settings.GetCslgCredentials(c)); @@ -190,29 +190,6 @@ namespace XenAdmin.Network.StorageLink private List GetAllStorageLinkCredentials() { var output = new List(); - - foreach (IXenConnection connection in GetXenConnectionsCopy()) - { - if (connection.IsConnected && !Helpers.FeatureForbidden(connection, XenAPI.Host.RestrictStorageChoices) && !Helpers.BostonOrGreater(connection) && Helpers.CowleyOrGreater(connection)) - { - Pool pool = Helpers.GetPoolOfOne(connection); - - if (pool != null) // can be null if still connecting. - { - var allCreds = new List { pool.GetStorageLinkCredentials() }; - allCreds.AddRange(Array.ConvertAll(connection.Cache.PBDs, p => p.GetStorageLinkCredentials())); - allCreds.RemoveAll(c => c == null || !c.IsValid || string.IsNullOrEmpty(c.Password)); - - foreach (StorageLinkCredentials creds in allCreds) - { - if (null == output.Find(c => c.Host == creds.Host && c.Username == creds.Username)) - { - output.Add(creds); - } - } - } - } - } return output; } diff --git a/XenAdmin/SettingsPanels/BootOptionsEditPage.Designer.cs b/XenAdmin/SettingsPanels/BootOptionsEditPage.Designer.cs index d0a5b2925..10a1b4857 100644 --- a/XenAdmin/SettingsPanels/BootOptionsEditPage.Designer.cs +++ b/XenAdmin/SettingsPanels/BootOptionsEditPage.Designer.cs @@ -32,6 +32,8 @@ namespace XenAdmin.SettingsPanels this.m_textBoxOsParams = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.m_autoHeightLabelHvm = new XenAdmin.Controls.Common.AutoHeightLabel(); + this.m_autoHeightLabelNonHvm = new XenAdmin.Controls.Common.AutoHeightLabel(); this.m_tlpHvm = new System.Windows.Forms.TableLayoutPanel(); this.label1 = new System.Windows.Forms.Label(); this.m_buttonUp = new System.Windows.Forms.Button(); @@ -40,9 +42,6 @@ namespace XenAdmin.SettingsPanels this.m_tlpNonHvm = new System.Windows.Forms.TableLayoutPanel(); this.label2 = new System.Windows.Forms.Label(); this.m_comboBoxBootDevice = new System.Windows.Forms.ComboBox(); - this.m_checkBoxAutoBoot = new System.Windows.Forms.CheckBox(); - this.m_autoHeightLabelHvm = new XenAdmin.Controls.Common.AutoHeightLabel(); - this.m_autoHeightLabelNonHvm = new XenAdmin.Controls.Common.AutoHeightLabel(); this.tableLayoutPanel1.SuspendLayout(); this.m_tlpHvm.SuspendLayout(); this.m_tlpNonHvm.SuspendLayout(); @@ -63,11 +62,22 @@ namespace XenAdmin.SettingsPanels resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.Controls.Add(this.m_autoHeightLabelHvm, 0, 0); this.tableLayoutPanel1.Controls.Add(this.m_autoHeightLabelNonHvm, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.m_tlpHvm, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.m_tlpNonHvm, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.m_checkBoxAutoBoot, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.m_tlpHvm, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.m_tlpNonHvm, 0, 4); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // + // m_autoHeightLabelHvm + // + resources.ApplyResources(this.m_autoHeightLabelHvm, "m_autoHeightLabelHvm"); + this.tableLayoutPanel1.SetColumnSpan(this.m_autoHeightLabelHvm, 4); + this.m_autoHeightLabelHvm.Name = "m_autoHeightLabelHvm"; + // + // m_autoHeightLabelNonHvm + // + resources.ApplyResources(this.m_autoHeightLabelNonHvm, "m_autoHeightLabelNonHvm"); + this.tableLayoutPanel1.SetColumnSpan(this.m_autoHeightLabelNonHvm, 3); + this.m_autoHeightLabelNonHvm.Name = "m_autoHeightLabelNonHvm"; + // // m_tlpHvm // resources.ApplyResources(this.m_tlpHvm, "m_tlpHvm"); @@ -127,24 +137,6 @@ namespace XenAdmin.SettingsPanels this.m_comboBoxBootDevice.Name = "m_comboBoxBootDevice"; this.m_comboBoxBootDevice.SelectedIndexChanged += new System.EventHandler(this.m_comboBoxBootDevice_SelectedIndexChanged); // - // m_checkBoxAutoBoot - // - resources.ApplyResources(this.m_checkBoxAutoBoot, "m_checkBoxAutoBoot"); - this.m_checkBoxAutoBoot.Name = "m_checkBoxAutoBoot"; - this.m_checkBoxAutoBoot.UseVisualStyleBackColor = true; - // - // m_autoHeightLabelHvm - // - resources.ApplyResources(this.m_autoHeightLabelHvm, "m_autoHeightLabelHvm"); - this.tableLayoutPanel1.SetColumnSpan(this.m_autoHeightLabelHvm, 4); - this.m_autoHeightLabelHvm.Name = "m_autoHeightLabelHvm"; - // - // m_autoHeightLabelNonHvm - // - resources.ApplyResources(this.m_autoHeightLabelNonHvm, "m_autoHeightLabelNonHvm"); - this.tableLayoutPanel1.SetColumnSpan(this.m_autoHeightLabelNonHvm, 3); - this.m_autoHeightLabelNonHvm.Name = "m_autoHeightLabelNonHvm"; - // // BootOptionsEditPage // resources.ApplyResources(this, "$this"); @@ -177,8 +169,7 @@ namespace XenAdmin.SettingsPanels private System.Windows.Forms.Label label1; private System.Windows.Forms.Button m_buttonUp; private System.Windows.Forms.Button m_buttonDown; - private System.Windows.Forms.CheckedListBox m_checkedListBox; - private System.Windows.Forms.CheckBox m_checkBoxAutoBoot; + private System.Windows.Forms.CheckedListBox m_checkedListBox; } } diff --git a/XenAdmin/SettingsPanels/BootOptionsEditPage.cs b/XenAdmin/SettingsPanels/BootOptionsEditPage.cs index 48f868721..8c1fbbcc2 100644 --- a/XenAdmin/SettingsPanels/BootOptionsEditPage.cs +++ b/XenAdmin/SettingsPanels/BootOptionsEditPage.cs @@ -79,8 +79,7 @@ namespace XenAdmin.SettingsPanels { get { - bool autoBootChanged = Helpers.BostonOrGreater(vm.Connection) ? false : m_checkBoxAutoBoot.Checked != vm.AutoPowerOn; - return autoBootChanged || (vm.IsHVM && GetOrder() != vm.BootOrder) || (m_textBoxOsParams.Text != vm.PV_args) || (VMPVBootableDVD() != bootFromCD); + return (vm.IsHVM && GetOrder() != vm.BootOrder) || (m_textBoxOsParams.Text != vm.PV_args) || (VMPVBootableDVD() != bootFromCD); } } @@ -88,9 +87,6 @@ namespace XenAdmin.SettingsPanels { vm.BootOrder = GetOrder(); - if (!Helpers.BostonOrGreater(vm.Connection)) - vm.AutoPowerOn = m_checkBoxAutoBoot.Checked; - vm.PV_args = m_textBoxOsParams.Text; return new DelegatedAsyncAction(vm.Connection, "Change VBDs bootable", "Change VBDs bootable", null, @@ -163,16 +159,10 @@ namespace XenAdmin.SettingsPanels string order = String.Join(", ", driveLetters.ToArray()); - if (!Helpers.BostonOrGreater(vm.Connection) && m_checkBoxAutoBoot.Checked) - return String.Format(Messages.BOOTORDER_AUTOSTART, order); - else - return String.Format(Messages.BOOTORDER, order); + return String.Format(Messages.BOOTORDER, order); } - if (!Helpers.BostonOrGreater(vm.Connection) && m_checkBoxAutoBoot.Checked) - return Messages.AUTOSTART; - else - return Messages.NONE_DEFINED; + return Messages.NONE_DEFINED; } } @@ -194,14 +184,6 @@ namespace XenAdmin.SettingsPanels private void Repopulate() { - if (Helpers.BostonOrGreater(vm.Connection)) - m_checkBoxAutoBoot.Visible = false; - else - { - m_checkBoxAutoBoot.Visible = true; - m_checkBoxAutoBoot.Checked = vm.AutoPowerOn; - } - BootDeviceAndOrderEnabled(vm.IsHVM); if (vm.IsHVM) diff --git a/XenAdmin/SettingsPanels/BootOptionsEditPage.resx b/XenAdmin/SettingsPanels/BootOptionsEditPage.resx index 79d9a162f..d5ac2e55e 100644 --- a/XenAdmin/SettingsPanels/BootOptionsEditPage.resx +++ b/XenAdmin/SettingsPanels/BootOptionsEditPage.resx @@ -379,7 +379,7 @@ Fill - 3, 144 + 3, 101 4 @@ -478,13 +478,13 @@ Fill - 3, 258 + 3, 215 4 - 444, 165 + 444, 208 5 @@ -504,36 +504,6 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label3" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="m_textBoxOsParams" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="label2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="m_comboBoxBootDevice" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,65,Percent,35" /><Rows Styles="AutoSize,0,Absolute,20,AutoSize,0,Percent,100,Absolute,20,Absolute,20" /></TableLayoutSettings> - - True - - - NoControl - - - 3, 101 - - - 142, 17 - - - 3 - - - Auto-start on server boot - - - m_checkBoxAutoBoot - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 4 - Fill @@ -541,7 +511,7 @@ 0, 0 - 7 + 5 450, 426 @@ -562,7 +532,7 @@ 0 - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="m_autoHeightLabelHvm" Row="0" RowSpan="1" Column="0" ColumnSpan="4" /><Control Name="m_autoHeightLabelNonHvm" Row="1" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="m_tlpHvm" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="m_tlpNonHvm" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="m_checkBoxAutoBoot" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,Absolute,20,AutoSize,0,Absolute,20,AutoSize,0,AutoSize,0" /></TableLayoutSettings> + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="m_autoHeightLabelHvm" Row="0" RowSpan="1" Column="0" ColumnSpan="4" /><Control Name="m_autoHeightLabelNonHvm" Row="1" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="m_tlpHvm" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="m_tlpNonHvm" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,Absolute,20,AutoSize,0,AutoSize,0,Absolute,20,Absolute,20" /></TableLayoutSettings> True diff --git a/XenAdmin/SettingsPanels/CPUMemoryEditPage.cs b/XenAdmin/SettingsPanels/CPUMemoryEditPage.cs index 5b6bf2145..65b6c87e6 100644 --- a/XenAdmin/SettingsPanels/CPUMemoryEditPage.cs +++ b/XenAdmin/SettingsPanels/CPUMemoryEditPage.cs @@ -177,8 +177,7 @@ namespace XenAdmin.SettingsPanels public void SetXenObjects(IXenObject orig, IXenObject clone) { vm = (VM)clone; - MROrGreater = Helpers.MidnightRideOrGreater(vm.Connection); - ShowMemory = !MROrGreater || Helpers.FeatureForbidden(vm, Host.RestrictDMC); + ShowMemory = Helpers.FeatureForbidden(vm, Host.RestrictDMC); Repopulate(); } diff --git a/XenAdmin/SettingsPanels/EditNetworkPage.cs b/XenAdmin/SettingsPanels/EditNetworkPage.cs index df237e523..9c54af174 100644 --- a/XenAdmin/SettingsPanels/EditNetworkPage.cs +++ b/XenAdmin/SettingsPanels/EditNetworkPage.cs @@ -329,7 +329,7 @@ namespace XenAdmin.SettingsPanels HostPNICList.SelectedItem = pif.Name; } - bool hasBondMode = HasBondMode; + bool hasBondMode = network.IsBond; groupBoxBondMode.Visible = hasBondMode; bool supportsLinkAggregation = Helpers.SupportsLinkAggregationBond(network.Connection); @@ -679,17 +679,6 @@ namespace XenAdmin.SettingsPanels return null; } - /// - /// Does the network being edited support bond mode (i.e., is it a bond of Boston or later)? - /// - private bool HasBondMode - { - get - { - return network.IsBond && Helpers.BostonOrGreater(network.Connection); - } - } - /// /// The mode of the bond associated with this network. Assumes HasBondMode has already been tested, /// and that the Bond objects on each host have the same mode. diff --git a/XenAdmin/SettingsPanels/GpuEditPage.cs b/XenAdmin/SettingsPanels/GpuEditPage.cs index 7ccbb1bfb..ab7b650bb 100644 --- a/XenAdmin/SettingsPanels/GpuEditPage.cs +++ b/XenAdmin/SettingsPanels/GpuEditPage.cs @@ -94,7 +94,6 @@ namespace XenAdmin.SettingsPanels public void SetXenObjects(IXenObject orig, IXenObject clone) { Trace.Assert(clone is VM); // only VMs should show this page - Trace.Assert(Helpers.BostonOrGreater(clone.Connection)); // If not Boston or greater, we shouldn't see this page Trace.Assert(!Helpers.FeatureForbidden(clone, Host.RestrictGpu)); // If license insufficient, we show upsell page instead vm = (VM)clone; diff --git a/XenAdmin/SettingsPanels/StorageLinkEditPage.cs b/XenAdmin/SettingsPanels/StorageLinkEditPage.cs index 8ab2f6777..6a4806a88 100644 --- a/XenAdmin/SettingsPanels/StorageLinkEditPage.cs +++ b/XenAdmin/SettingsPanels/StorageLinkEditPage.cs @@ -57,7 +57,7 @@ namespace XenAdmin.SettingsPanels private static List GetValidConnections() { - return ConnectionsManager.XenConnectionsCopy.FindAll(c => c.IsConnected && Helpers.GetPoolOfOne(c) != null && Helpers.MidnightRideOrGreater(c) && !Helpers.FeatureForbidden(c, Host.RestrictStorageChoices)); + return ConnectionsManager.XenConnectionsCopy.FindAll(c => c.IsConnected && Helpers.GetPoolOfOne(c) != null && !Helpers.FeatureForbidden(c, Host.RestrictStorageChoices)); } #region IEditPage Members @@ -81,7 +81,7 @@ namespace XenAdmin.SettingsPanels _xenObjectCopy = clone; allServersCheckBox.Checked = true; - if (_xenObjectCopy != null && Helpers.MidnightRideOrGreater(_xenObjectCopy.Connection)) + if (_xenObjectCopy != null) { Pool pool = Helpers.GetPoolOfOne(_xenObjectCopy.Connection); diff --git a/XenAdmin/SettingsPanels/VMHAEditPage.cs b/XenAdmin/SettingsPanels/VMHAEditPage.cs index f28775f12..ab66636b5 100644 --- a/XenAdmin/SettingsPanels/VMHAEditPage.cs +++ b/XenAdmin/SettingsPanels/VMHAEditPage.cs @@ -74,8 +74,6 @@ namespace XenAdmin.SettingsPanels /// private readonly List hostMetrics = new List(); - private static bool showStartOrderAndDelay; - private readonly CollectionChangeEventHandler Host_CollectionChangedWithInvoke; #endregion @@ -105,13 +103,6 @@ namespace XenAdmin.SettingsPanels if (vm == null) return ""; - // Disable editing if pool master doesn't have HA license flag - Host host = Helpers.GetMaster(vm.Connection); - if (host == null || host.RestrictHAOrlando) - { - return Messages.HA_LICENSE_DISABLED; - } - Pool pool = Helpers.GetPool(vm.Connection); if (pool == null) { @@ -339,16 +330,9 @@ namespace XenAdmin.SettingsPanels private void UpdateEnablement() { - // hide start order and delay for pre-Boston VMs - showStartOrderAndDelay = !Helpers.HaIgnoreStartupOptions(vm.Connection); - if (!showStartOrderAndDelay) - { - groupBoxStartupOptions.Visible = false; - } - // Disable editing if pool master doesn't have HA license flag Host host = Helpers.GetMaster(vm.Connection); - if (host == null || host.RestrictHA) + if (host == null || Host.RestrictHA(host)) { m_labelHaStatus.Text = Messages.HA_LICENSE_DISABLED; m_tlpPriority.Visible = false; @@ -420,7 +404,7 @@ namespace XenAdmin.SettingsPanels private bool ChangesMadeInStartupOptions() { - return showStartOrderAndDelay && (nudOrder.Value != origOrder || nudStartDelay.Value != origStartDelay); + return nudOrder.Value != origOrder || nudStartDelay.Value != origStartDelay; } public VM.HA_Restart_Priority SelectedPriority { get; private set; } @@ -551,7 +535,7 @@ namespace XenAdmin.SettingsPanels // If skankPanel is disabled, so is editing var validToSaveHA = !IsHaEditable() || this.vm != null && !haNtolIndicator.UpdateInProgress && haNtolIndicator.Ntol >= 0; - var validToSaveStartupOptions = !showStartOrderAndDelay || this.vm != null; + var validToSaveStartupOptions = this.vm != null; return validToSaveHA && validToSaveStartupOptions; } @@ -606,10 +590,6 @@ namespace XenAdmin.SettingsPanels { if (pool == null) return; - Host master = Helpers.GetMaster(pool.Connection); - if (master == null || master.RestrictHAOrlando) - return; - HAPage.EditHA(pool); } diff --git a/XenAdmin/SettingsPanels/Wlb/WlbAutomationPage.cs b/XenAdmin/SettingsPanels/Wlb/WlbAutomationPage.cs index 74e91959d..a26d2ba82 100644 --- a/XenAdmin/SettingsPanels/Wlb/WlbAutomationPage.cs +++ b/XenAdmin/SettingsPanels/Wlb/WlbAutomationPage.cs @@ -92,57 +92,46 @@ namespace XenAdmin.SettingsPanels // Set up the Automation checkboxes checkBoxUseAutomation.Checked = _poolConfiguration.AutoBalanceEnabled; - if (Helpers.MidnightRideOrGreater(_connection)) + checkBoxEnablePowerManagement.Checked = _poolConfiguration.PowerManagementEnabled; + checkBoxEnablePowerManagement.Enabled = checkBoxUseAutomation.Checked; + + this.decentGroupBoxPowerManagementHosts.Enabled = true; + + // Set up the Power Management Host enlistment listview + listViewExPowerManagementHosts.Columns.Clear(); + listViewExPowerManagementHosts.Columns.Add(String.Empty, 25); + listViewExPowerManagementHosts.Columns.Add(Messages.WLB_HOST_SERVER, 220); // "Host Server" + listViewExPowerManagementHosts.Columns.Add(Messages.WLB_POWERON_MODE, 95); // "PowerOn Mode" + listViewExPowerManagementHosts.Columns.Add(Messages.WLB_LAST_POWERON_SUCCEEDED, 135); // "Tested" + + foreach (Host host in _connection.Cache.Hosts) { - checkBoxEnablePowerManagement.Checked = _poolConfiguration.PowerManagementEnabled; - checkBoxEnablePowerManagement.Enabled = checkBoxUseAutomation.Checked; + bool participatesInPowerManagement = false; + string powerManagementTested = Messages.NO; - this.decentGroupBoxPowerManagementHosts.Enabled = true; - - // Set up the Power Management Host enlistment listview - listViewExPowerManagementHosts.Columns.Clear(); - listViewExPowerManagementHosts.Columns.Add(String.Empty, 25); - listViewExPowerManagementHosts.Columns.Add(Messages.WLB_HOST_SERVER, 220); // "Host Server" - listViewExPowerManagementHosts.Columns.Add(Messages.WLB_POWERON_MODE, 95); // "PowerOn Mode" - listViewExPowerManagementHosts.Columns.Add(Messages.WLB_LAST_POWERON_SUCCEEDED, 135); // "Tested" - - foreach (Host host in _connection.Cache.Hosts) + if (_poolConfiguration.HostConfigurations.ContainsKey(host.uuid)) { - bool participatesInPowerManagement = false; - string powerManagementTested = Messages.NO; - - if (_poolConfiguration.HostConfigurations.ContainsKey(host.uuid)) - { - participatesInPowerManagement = _poolConfiguration.HostConfigurations[host.uuid].ParticipatesInPowerManagement; - powerManagementTested = _poolConfiguration.HostConfigurations[host.uuid].LastPowerOnSucceeded ? Messages.YES : Messages.NO; - } - - ListViewItem thisItem = new ListViewItem(); - thisItem.Tag = host; - thisItem.Checked = participatesInPowerManagement; - if (host.IsMaster()) - { - thisItem.SubItems.Add(string.Format("{0} ({1})", host.Name, Messages.POOL_MASTER)); - } - else - { - thisItem.SubItems.Add(host.Name); - } - if (Helpers.MidnightRideOrGreater(_connection)) - { - thisItem.SubItems.Add(GetHostPowerOnMode(host.power_on_mode)); - } - thisItem.SubItems.Add(powerManagementTested); - listViewExPowerManagementHosts.Items.Add(thisItem); + participatesInPowerManagement = _poolConfiguration.HostConfigurations[host.uuid].ParticipatesInPowerManagement; + powerManagementTested = _poolConfiguration.HostConfigurations[host.uuid].LastPowerOnSucceeded ? Messages.YES : Messages.NO; } - labelNoHosts.Visible = (listViewExPowerManagementHosts.Items.Count == 0); - } - else - { - this.checkBoxEnablePowerManagement.Enabled = false; - this.decentGroupBoxPowerManagementHosts.Enabled = false; + ListViewItem thisItem = new ListViewItem(); + thisItem.Tag = host; + thisItem.Checked = participatesInPowerManagement; + if (host.IsMaster()) + { + thisItem.SubItems.Add(string.Format("{0} ({1})", host.Name, Messages.POOL_MASTER)); + } + else + { + thisItem.SubItems.Add(host.Name); + } + thisItem.SubItems.Add(GetHostPowerOnMode(host.power_on_mode)); + thisItem.SubItems.Add(powerManagementTested); + listViewExPowerManagementHosts.Items.Add(thisItem); } + + labelNoHosts.Visible = (listViewExPowerManagementHosts.Items.Count == 0); _loading = false; } @@ -204,15 +193,7 @@ namespace XenAdmin.SettingsPanels _hasChanged = true; } - if (Helpers.MidnightRideOrGreater(_connection)) - { - checkBoxEnablePowerManagement.Enabled = checkBoxUseAutomation.Checked; - } - else - { - this.checkBoxEnablePowerManagement.Enabled = false; - } - + checkBoxEnablePowerManagement.Enabled = checkBoxUseAutomation.Checked; } private void checkBoxEnablePowerManagement_CheckedChanged(object sender, EventArgs e) @@ -288,7 +269,7 @@ namespace XenAdmin.SettingsPanels private bool HostCannotParticipateInPowerManagement(Host host) { - return host.IsMaster() || (string.IsNullOrEmpty(host.power_on_mode) && Helpers.MidnightRideOrGreater(_connection)); + return host.IsMaster() || string.IsNullOrEmpty(host.power_on_mode); } private void listViewExPowerManagementHosts_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) diff --git a/XenAdmin/TabPages/AdPage.Designer.cs b/XenAdmin/TabPages/AdPage.Designer.cs index 7978ebbc4..9297aed45 100644 --- a/XenAdmin/TabPages/AdPage.Designer.cs +++ b/XenAdmin/TabPages/AdPage.Designer.cs @@ -154,14 +154,13 @@ namespace XenAdmin.TabPages dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; this.GridViewSubjectList.DefaultCellStyle = dataGridViewCellStyle5; - this.GridViewSubjectList.MaximumSize = new System.Drawing.Size(900, 500); this.GridViewSubjectList.Name = "GridViewSubjectList"; this.GridViewSubjectList.RowHeadersVisible = false; this.GridViewSubjectList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.GridViewSubjectList.SortCompare += new System.Windows.Forms.DataGridViewSortCompareEventHandler(this.GridViewSubjectList_SortCompare); - this.GridViewSubjectList.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GridViewSubjectList_MouseClick); this.GridViewSubjectList.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.GridViewSubjectList_CellMouseClick); this.GridViewSubjectList.SelectionChanged += new System.EventHandler(this.GridViewSubjectList_SelectionChanged); + this.GridViewSubjectList.SortCompare += new System.Windows.Forms.DataGridViewSortCompareEventHandler(this.GridViewSubjectList_SortCompare); + this.GridViewSubjectList.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GridViewSubjectList_MouseClick); // // ColumnExpand // @@ -246,7 +245,6 @@ namespace XenAdmin.TabPages resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); this.tableLayoutPanel2.Controls.Add(this.labelBlurb, 0, 0); this.tableLayoutPanel2.Controls.Add(this.buttonJoinLeave, 0, 1); - this.tableLayoutPanel2.MaximumSize = new System.Drawing.Size(900, 100); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; // // labelBlurb @@ -316,7 +314,6 @@ namespace XenAdmin.TabPages this.panel1.Controls.Add(this.panel2); this.panel1.Controls.Add(this.LabelGridViewDisabled); resources.ApplyResources(this.panel1, "panel1"); - this.panel1.MaximumSize = new System.Drawing.Size(900, 540); this.panel1.Name = "panel1"; // // panel2 diff --git a/XenAdmin/TabPages/AdPage.cs b/XenAdmin/TabPages/AdPage.cs index 20f6529ed..f45db7096 100644 --- a/XenAdmin/TabPages/AdPage.cs +++ b/XenAdmin/TabPages/AdPage.cs @@ -80,7 +80,6 @@ namespace XenAdmin.TabPages if (_xenObject == null) return; - SetRbacVisible(Helpers.MidnightRideOrGreater(_xenObject.Connection)); pool = Helpers.GetPoolOfOne(_xenObject.Connection); if (pool == null) { @@ -167,17 +166,6 @@ namespace XenAdmin.TabPages pool.Connection.Session.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(Session_PropertyChanged); } - /// - /// Toggles whether the RBAC controls are visible on this control - /// - /// - private void SetRbacVisible(bool p) - { - ButtonChangeRoles.Visible = p; - toolStripMenuItemChangeRoles.Visible = p; - GridViewSubjectList.Columns["ColumnRoles"].Visible = p; - } - /// /// We keep track of the actions in currently running so we can disable the tab if we are in the middle of configuring AD. /// @@ -637,27 +625,20 @@ namespace XenAdmin.TabPages } else { - if (!Helpers.MidnightRideOrGreater(subject.Connection)) + //Generate the role list + string s = ""; + List roles = subject.Connection.ResolveAll(subject.roles); + roles.Sort(); + roles.Reverse(); + foreach (Role r in roles) { - expandedRoles = contractedRoles = ""; + s = String.Format("{0}\n{1}", s, r.FriendlyName); } - else - { - //Generate the role list - string s = ""; - List roles = subject.Connection.ResolveAll(subject.roles); - roles.Sort(); - roles.Reverse(); - foreach (Role r in roles) - { - s = String.Format("{0}\n{1}", s, r.FriendlyName); - } - expandedRoles = s; - contractedRoles = roles.Count > 0 ? - roles.Count > 1 ? roles[0].FriendlyName.AddEllipsis() : roles[0].FriendlyName - : ""; + expandedRoles = s; + contractedRoles = roles.Count > 0 ? + roles.Count > 1 ? roles[0].FriendlyName.AddEllipsis() : roles[0].FriendlyName + : ""; - } contractedSubjectInfo = new List>(); contractedSubjectInfo.Add(new KeyValuePair(subject.DisplayName ?? subject.SubjectName ?? "", "")); expandedSubjectInfo = Subject.ExtractKvpInfo(subject); diff --git a/XenAdmin/TabPages/AdPage.resx b/XenAdmin/TabPages/AdPage.resx index 4ca8615f3..fd6dd36ef 100644 --- a/XenAdmin/TabPages/AdPage.resx +++ b/XenAdmin/TabPages/AdPage.resx @@ -112,19 +112,19 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 25 - + True - + Qk32AgAAAAAAADYAAAAoAAAADgAAABAAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAAAA @@ -151,7 +151,7 @@ 20 - + True @@ -163,19 +163,19 @@ 50 - + True Subject - + True Roles - + True @@ -184,7 +184,7 @@ 50 - + True @@ -196,7 +196,7 @@ 5 - + 17, 17 @@ -233,9 +233,9 @@ contextMenuStripADBox - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Fill @@ -251,6 +251,9 @@ 0, 0, 0, 0 + + 900, 500 + 900, 475 @@ -261,7 +264,7 @@ GridViewSubjectList - System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -291,7 +294,7 @@ buttonAdd - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 flowLayoutPanel1 @@ -324,7 +327,7 @@ ButtonRemove - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tTipRemoveButton @@ -381,7 +384,7 @@ ButtonLogout - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tTipLogoutButton @@ -438,7 +441,7 @@ ButtonChangeRoles - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tTipChangeRole @@ -486,7 +489,7 @@ flowLayoutPanel1 - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -519,7 +522,7 @@ label2 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel2 @@ -543,7 +546,7 @@ panel2 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -579,7 +582,7 @@ LabelGridViewDisabled - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 @@ -593,6 +596,9 @@ 10, 94 + + 900, 540 + 900, 540 @@ -603,7 +609,7 @@ panel1 - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 pageContainerPanel @@ -639,7 +645,7 @@ label1 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 pageContainerPanel @@ -684,7 +690,7 @@ labelBlurb - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -714,7 +720,7 @@ buttonJoinLeave - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 @@ -731,6 +737,9 @@ 10, 10 + + 900, 100 + 2 @@ -744,7 +753,7 @@ tableLayoutPanel2 - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 pageContainerPanel @@ -765,20 +774,20 @@ pageContainerPanel - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 0 + 1 - - 25 - - + True + + 25 + 96, 96 @@ -789,67 +798,67 @@ addToolStripMenuItem - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripMenuItemRemove - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripMenuItemLogout - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripMenuItemChangeRoles - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnExpand - System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnTypeImage - System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnSubject - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnRoles - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnStatus - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnDummy - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 AdPage diff --git a/XenAdmin/TabPages/GeneralTabPage.cs b/XenAdmin/TabPages/GeneralTabPage.cs index c1c495d7b..ce8dac611 100644 --- a/XenAdmin/TabPages/GeneralTabPage.cs +++ b/XenAdmin/TabPages/GeneralTabPage.cs @@ -904,12 +904,6 @@ namespace XenAdmin.TabPages PDSection s = pdSectionBootOptions; - if (!Helpers.BostonOrGreater(vm.Connection)) - { - s.AddEntry(FriendlyName("VM.auto_boot"), Helpers.BoolToString(vm.AutoPowerOn), - new PropertiesToolStripMenuItem(new VmEditStartupOptionsCommand(Program.MainWindow, vm))); - } - if (vm.IsHVM) { s.AddEntry(FriendlyName("VM.BootOrder"), HVMBootOrder(vm), @@ -1158,7 +1152,7 @@ namespace XenAdmin.TabPages s.AddEntry(FriendlyName("host.uptime"), uptime == null ? "" : host.Uptime.ToString()); s.AddEntry(FriendlyName("host.agentUptime"), agentUptime == null ? "" : host.AgentUptime.ToString()); - if ((Helpers.GeorgeOrGreater(xenObject.Connection) && host.external_auth_type == Auth.AUTH_TYPE_AD)) + if (host.external_auth_type == Auth.AUTH_TYPE_AD) s.AddEntry(FriendlyName("host.external_auth_service_name"), host.external_auth_service_name); } else if (xenObject is VM) @@ -1169,12 +1163,12 @@ namespace XenAdmin.TabPages s.AddEntry(FriendlyName("VM.OperatingMode"), vm.IsHVM ? Messages.VM_OPERATING_MODE_HVM : Messages.VM_OPERATING_MODE_PV); - if (!vm.DefaultTemplate && Helpers.MidnightRideOrGreater(vm.Connection)) + if (!vm.DefaultTemplate) { s.AddEntry(Messages.BIOS_STRINGS_COPIED, vm.BiosStringsCopied ? Messages.YES : Messages.NO); } - if (Helpers.BostonOrGreater(vm.Connection) && vm.Connection != null) + if (vm.Connection != null) { var appl = vm.Connection.Resolve(vm.appliance); if (appl != null) diff --git a/XenAdmin/TabPages/HAPage.cs b/XenAdmin/TabPages/HAPage.cs index dfb0484e9..f0c8f94b2 100644 --- a/XenAdmin/TabPages/HAPage.cs +++ b/XenAdmin/TabPages/HAPage.cs @@ -267,15 +267,12 @@ namespace XenAdmin.TabPages private RbacMethodList HA_PERMISSION_CHECKS = new RbacMethodList( "pool.set_ha_host_failures_to_tolerate", "pool.sync_database", - "vm.set_ha_always_run", "vm.set_ha_restart_priority", "pool.ha_compute_hypothetical_max_host_failures_to_tolerate" ); private bool PassedRbacChecks() { - if (!Helpers.MidnightRideOrGreater(pool.Connection)) - return true; return Role.CanPerform(HA_PERMISSION_CHECKS, pool.Connection); } @@ -305,13 +302,6 @@ namespace XenAdmin.TabPages private void generatePoolHABox(Pool pool) { - Host master = Helpers.GetMaster(pool.Connection); - if (master == null || master.RestrictHAOrlando) - { - // Don't generate the box at all - return; - } - if (!pool.ha_enabled) return; @@ -543,13 +533,6 @@ namespace XenAdmin.TabPages private void generateSRHABox(SR sr) { - Host master = Helpers.GetMaster(sr.Connection); - if (master == null) - return; - if (master.RestrictHAOrlando) - // Don't generate the box at all - return; - CustomListRow header = CreateHeader(Messages.HA_CONFIGURATION_TITLE); customListPanel.AddRow(header); @@ -629,10 +612,6 @@ namespace XenAdmin.TabPages { if (pool == null) return; - Host master = Helpers.GetMaster(pool.Connection); - if (master == null || master.RestrictHAOrlando) - return; - EditHA(pool); } diff --git a/XenAdmin/TabPages/SnapshotsPage.cs b/XenAdmin/TabPages/SnapshotsPage.cs index 61939a395..15b2c1b46 100644 --- a/XenAdmin/TabPages/SnapshotsPage.cs +++ b/XenAdmin/TabPages/SnapshotsPage.cs @@ -56,7 +56,6 @@ namespace XenAdmin.TabPages private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private VM m_VM = null; private bool m_NeedToUpdate = false; - private bool m_TreeViewEnabled = false; private float defaultWidthProperties; private readonly ToolTip toolTipDescriptionLabel = new ToolTip(); @@ -138,34 +137,18 @@ namespace XenAdmin.TabPages VM_BatchCollectionChanged); m_VM.PropertyChanged += snapshot_PropertyChanged; //Version setup - m_TreeViewEnabled = Helpers.MidnightRideOrGreater(m_VM.Connection); - toolStripMenuItemScheduledSnapshots.Available = toolStripSeparatorView.Available = Helpers.CowleyOrGreater(m_VM.Connection) - && Registry.VMPRFeatureEnabled; - if (m_TreeViewEnabled && VM.SnapshotView != SnapshotsView.ListView) + toolStripMenuItemScheduledSnapshots.Available = toolStripSeparatorView.Available = Registry.VMPRFeatureEnabled; + if (VM.SnapshotView != SnapshotsView.ListView) TreeViewChecked(); else - { GridViewChecked(); - } - if (m_TreeViewEnabled) - { - toolStripButtonTreeView.Enabled = true; - toolStripButtonTreeView.ToolTipText = ""; + toolStripButtonTreeView.Enabled = true; + toolStripButtonTreeView.ToolTipText = ""; - revertButton.Enabled = true; - toolTipContainerRevertButton.SetToolTip(""); - } - else - { - toolStripButtonTreeView.Enabled = false; - toolStripButtonTreeView.ToolTipText = - string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_MR, Messages.SNAPSHOT_TREE_VIEW); + revertButton.Enabled = true; + toolTipContainerRevertButton.SetToolTip(""); - revertButton.Enabled = false; - toolTipContainerRevertButton.SetToolTip( - string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_MR, Messages.SNAPSHOT_REVERT)); - } //toolStripButtonListView.Enabled = toolStripButtonTreeView.Enabled = true; //Refresh items BuildList(); @@ -197,7 +180,7 @@ namespace XenAdmin.TabPages private void RefreshVMProtectionPanel() { - if (Helpers.CowleyOrGreater(VM.Connection) && Registry.VMPRFeatureEnabled && !Helpers.ClearwaterOrGreater(VM.Connection)) + if (Registry.VMPRFeatureEnabled && !Helpers.ClearwaterOrGreater(VM.Connection)) { panelVMPP.Visible = true; var vmpp = VM.Connection.Resolve(VM.protection_policy); @@ -307,16 +290,9 @@ namespace XenAdmin.TabPages } toolStripButtonListView.Enabled = true; IList roots = RefreshDataGridView(snapshots); - if (m_TreeViewEnabled) - { - toolStripButtonTreeView.Enabled = true; - RefreshTreeView(roots); - SelectPreviousItemVMTreeView(); - } - else - { - GridViewChecked(); - } + toolStripButtonTreeView.Enabled = true; + RefreshTreeView(roots); + SelectPreviousItemVMTreeView(); UpdateSpinningIcon(); } } @@ -634,17 +610,7 @@ namespace XenAdmin.TabPages private void EnableAllButtons() { - if (m_TreeViewEnabled) - { - revertButton.Enabled = true; - } - else - { - revertButton.Enabled = false; - toolTipContainerRevertButton.SetToolTip(string.Format( - Messages.FEATURE_NOT_AVAILABLE_NEED_MR, Messages.SNAPSHOT_REVERT)); - } - + revertButton.Enabled = true; saveButton.Enabled = true; deleteButton.Enabled = true; } @@ -1198,14 +1164,11 @@ namespace XenAdmin.TabPages { contextMenuStrip.Items.Clear(); - if (m_TreeViewEnabled) - { - contextMenuStrip.Items.AddRange(new ToolStripItem[] - { - revertToolStripMenuItem, - saveVMToolStripSeparator - }); - } + contextMenuStrip.Items.AddRange(new ToolStripItem[] + { + revertToolStripMenuItem, + saveVMToolStripSeparator + }); contextMenuStrip.Items.AddRange(new ToolStripItem[] { saveVMToolStripMenuItem, diff --git a/XenAdmin/TabPages/SrStoragePage.cs b/XenAdmin/TabPages/SrStoragePage.cs index 6a8d17b85..aea2ddd54 100644 --- a/XenAdmin/TabPages/SrStoragePage.cs +++ b/XenAdmin/TabPages/SrStoragePage.cs @@ -561,17 +561,8 @@ namespace XenAdmin.TabPages case 0: return VDI.Name; case 1: - if (Helpers.BostonOrGreater(VDI.Connection)) - { - string name; - if (VDI.sm_config.TryGetValue("displayname", out name)) - { - return name; - } - return string.Empty; - } - StorageLinkVolume volume = showStorageLink ? VDI.StorageLinkVolume(Program.StorageLinkConnections.GetCopy()) : null; - return volume == null ? string.Empty : volume.Name; + string name; + return VDI.sm_config.TryGetValue("displayname", out name) ? name : ""; case 2: return VDI.Description; case 3: diff --git a/XenAdmin/TabPages/VMStoragePage.cs b/XenAdmin/TabPages/VMStoragePage.cs index 253312cc6..fccc83461 100644 --- a/XenAdmin/TabPages/VMStoragePage.cs +++ b/XenAdmin/TabPages/VMStoragePage.cs @@ -626,17 +626,8 @@ namespace XenAdmin.TabPages case 3: return SR.Name; case 4: - if (Helpers.BostonOrGreater(VDI.Connection)) - { - string name; - if (VDI.sm_config.TryGetValue("displayname", out name)) - { - return name; - } - return string.Empty; - } - StorageLinkVolume vol = VDI.StorageLinkVolume(Program.StorageLinkConnections.GetCopy()); - return vol == null ? string.Empty : vol.Name; + string name; + return VDI.sm_config.TryGetValue("displayname", out name) ? name : ""; case 5: return VDI.SizeText; case 6: diff --git a/XenAdmin/TabPages/WLBPage.cs b/XenAdmin/TabPages/WLBPage.cs index b83ef3dd6..88270c54e 100644 --- a/XenAdmin/TabPages/WLBPage.cs +++ b/XenAdmin/TabPages/WLBPage.cs @@ -354,8 +354,6 @@ namespace XenAdmin.TabPages private bool PassedRbacChecks() { - if (!Helpers.MidnightRideOrGreater(_pool.Connection)) - return true; return Role.CanPerform(WLB_PERMISSION_CHECKS, _pool.Connection); } diff --git a/XenAdmin/Wizards/GenericPages/RBACWarningPage.cs b/XenAdmin/Wizards/GenericPages/RBACWarningPage.cs index 518a4f6c9..3b156935f 100644 --- a/XenAdmin/Wizards/GenericPages/RBACWarningPage.cs +++ b/XenAdmin/Wizards/GenericPages/RBACWarningPage.cs @@ -191,7 +191,7 @@ namespace XenAdmin.Wizards.GenericPages PermissionCheckHeaderRow headerRow = AddHeaderRow(connection); PermissionCheckResult checkResult = PermissionCheckResult.OK; - if (connection.Session.IsLocalSuperuser || connectionChecks.Value.Count == 0 || !Helpers.MidnightRideOrGreater(connection)) + if (connection.Session.IsLocalSuperuser || connectionChecks.Value.Count == 0) { SetNoWarnings(); } @@ -222,10 +222,10 @@ namespace XenAdmin.Wizards.GenericPages { Program.AssertOffEventThread(); - if (connection.Session.IsLocalSuperuser || !Helpers.MidnightRideOrGreater(connection)) + if (connection.Session.IsLocalSuperuser) { // We should not be here. - log.Warn("A pre RBAC user or local root account is being blocked access"); + log.Warn("A local root account is being blocked access"); } List roleList = connection.Session.Roles; diff --git a/XenAdmin/Wizards/HAWizard.cs b/XenAdmin/Wizards/HAWizard.cs index a575ab140..f7187f2f6 100644 --- a/XenAdmin/Wizards/HAWizard.cs +++ b/XenAdmin/Wizards/HAWizard.cs @@ -77,27 +77,6 @@ namespace XenAdmin.Wizards protected override void OnShown(EventArgs e) { - // Check all the hosts in the pool have xha licenses - List hostsWithoutLicense = new List(); - foreach (Host host in xenConnection.Cache.Hosts) - { - if (host.RestrictHAOrlando) - { - hostsWithoutLicense.Add(host.Name); - } - } - - if (hostsWithoutLicense.Count > 0) - { - new ThreeButtonDialog( - new ThreeButtonDialog.Details( - SystemIcons.Error, - String.Format(Messages.HA_HOSTS_LACK_LICENSE, String.Join("\n", hostsWithoutLicense.ToArray())), - Messages.HIGH_AVAILABILITY)).ShowDialog(this); - this.Close(); - return; - } - // Check for broken SRs List brokenSRs = new List(); foreach (SR sr in xenConnection.Cache.SRs) diff --git a/XenAdmin/Wizards/HAWizard_Pages/AssignPriorities.cs b/XenAdmin/Wizards/HAWizard_Pages/AssignPriorities.cs index cefa47c6e..96b69ad40 100644 --- a/XenAdmin/Wizards/HAWizard_Pages/AssignPriorities.cs +++ b/XenAdmin/Wizards/HAWizard_Pages/AssignPriorities.cs @@ -52,8 +52,6 @@ namespace XenAdmin.Wizards.HAWizard_Pages private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private IXenConnection connection; - private bool showStartOrderAndDelay; - private readonly CollectionChangeEventHandler VM_CollectionChangedWithInvoke; private readonly QueuedBackgroundWorker m_worker; @@ -74,16 +72,6 @@ namespace XenAdmin.Wizards.HAWizard_Pages RegisterEvents(); - showStartOrderAndDelay = !Helpers.HaIgnoreStartupOptions(connection); - if (!showStartOrderAndDelay) - { - colStartOrder.Visible = false; - colDelay.Visible = false; - - nudOrder.Visible = nudStartDelay.Visible = false; - labelStartOrder.Visible = labelStartDelay.Visible = labelStartDelayUnits.Visible = false; - } - UpdateMenuItems(); PopulateVMs(); @@ -532,11 +520,8 @@ namespace XenAdmin.Wizards.HAWizard_Pages { m_dropDownButtonRestartPriority.Enabled = false; m_dropDownButtonRestartPriority.Text = ""; - if (showStartOrderAndDelay) - { - nudOrder.Enabled = nudStartDelay.Enabled = false; - nudOrder.Text = nudStartDelay.Text = ""; - } + nudOrder.Enabled = nudStartDelay.Enabled = false; + nudOrder.Text = nudStartDelay.Text = ""; return; } @@ -546,11 +531,8 @@ namespace XenAdmin.Wizards.HAWizard_Pages { m_dropDownButtonRestartPriority.Enabled = true; m_dropDownButtonRestartPriority.Text = ""; - if (showStartOrderAndDelay) - { - nudOrder.Enabled = nudStartDelay.Enabled = true; - nudOrder.Text = nudStartDelay.Text = ""; - } + nudOrder.Enabled = nudStartDelay.Enabled = true; + nudOrder.Text = nudStartDelay.Text = ""; return; } @@ -578,16 +560,13 @@ namespace XenAdmin.Wizards.HAWizard_Pages } // set the order and delay NUDs - if (showStartOrderAndDelay) - { - nudOrder.Enabled = nudStartDelay.Enabled = true; + nudOrder.Enabled = nudStartDelay.Enabled = true; - var orderDistList = (from row in selectedRows select row.StartOrder).Distinct(); - nudOrder.Text = orderDistList.Count() == 1 ? orderDistList.ElementAt(0).ToString() : ""; + var orderDistList = (from row in selectedRows select row.StartOrder).Distinct(); + nudOrder.Text = orderDistList.Count() == 1 ? orderDistList.ElementAt(0).ToString() : ""; - var delayDistList = (from row in selectedRows select row.StartDelay).Distinct(); - nudStartDelay.Text = delayDistList.Count() == 1 ? delayDistList.ElementAt(0).ToString() : ""; - } + var delayDistList = (from row in selectedRows select row.StartDelay).Distinct(); + nudStartDelay.Text = delayDistList.Count() == 1 ? delayDistList.ElementAt(0).ToString() : ""; // check that all the VMs selected in the list are agile and make sure the protect button is disabled with the relevant reason VmWithSettingsRow nonAgileRow = selectedRows.FirstOrDefault(r => !r.IsAgile); @@ -599,10 +578,7 @@ namespace XenAdmin.Wizards.HAWizard_Pages if (VM.HaPriorityIsRestart(connection, priority)) { - menuItem.Enabled = priority == VM.HA_Restart_Priority.AlwaysRestartHighPriority - ? (nonAgileRow == null && Helpers.CowleyOrGreater(connection)) - : (nonAgileRow == null); - + menuItem.Enabled = (nonAgileRow == null); menuItem.ToolTipText = (nonAgileRow == null) ? "" : nonAgileRow.FriendlyNonAgileReason; @@ -683,14 +659,14 @@ namespace XenAdmin.Wizards.HAWizard_Pages public override string Text { - get { return Messages.HAWIZARD_ASSIGNRIORITIESPAGE_TEXT; } + get { return Messages.HAWIZARD_ASSIGNPRIORITIESPAGE_TEXT; } } public override string PageTitle { get { - return showStartOrderAndDelay ? Messages.HAWIZARD_ASSIGNRIORITIESPAGE_TITLE : Messages.HAWIZARD_ASSIGNRIORITIESPAGE_TITLE_NOORDER; + return Messages.HAWIZARD_ASSIGNPRIORITIESPAGE_TITLE; } } diff --git a/XenAdmin/Wizards/HAWizard_Pages/HAFinishPage.cs b/XenAdmin/Wizards/HAWizard_Pages/HAFinishPage.cs index 02fed64ed..20e1282d8 100644 --- a/XenAdmin/Wizards/HAWizard_Pages/HAFinishPage.cs +++ b/XenAdmin/Wizards/HAWizard_Pages/HAFinishPage.cs @@ -80,21 +80,12 @@ namespace XenAdmin.Wizards.HAWizard_Pages break; } } - if (Helpers.BostonOrGreater(Connection)) - labelSummary.Text = String.Format(Messages.HAWIZ_SUMMARY_NEW, - HeartbeatSrName.Ellipsise(50), - Ntol, - GetVmNumber(alwaysRestart), - GetVmNumber(bestEffort), - GetVmNumber(doNotRestart)); - else - labelSummary.Text = String.Format(Messages.HAWIZ_SUMMARY, - HeartbeatSrName.Ellipsise(50), - Ntol, - GetVmNumber(alwaysRestartHighPriority), - GetVmNumber(alwaysRestart), - GetVmNumber(bestEffort), - GetVmNumber(doNotRestart)); + labelSummary.Text = String.Format(Messages.HAWIZ_SUMMARY_NEW, + HeartbeatSrName.Ellipsise(50), + Ntol, + GetVmNumber(alwaysRestart), + GetVmNumber(bestEffort), + GetVmNumber(doNotRestart)); // If the user hasn't protected any VMs, show a warning. labelNoVmsProtected.Visible = (bestEffort + alwaysRestart + alwaysRestartHighPriority == 0) && doNotRestart > 0; diff --git a/XenAdmin/Wizards/NewNetworkWizard.cs b/XenAdmin/Wizards/NewNetworkWizard.cs index b932ca246..522ae18d5 100644 --- a/XenAdmin/Wizards/NewNetworkWizard.cs +++ b/XenAdmin/Wizards/NewNetworkWizard.cs @@ -207,13 +207,10 @@ namespace XenAdmin.Wizards result.name_label = pageName.NetworkName; result.name_description = pageName.NetworkDescription; result.AutoPlug = (pageNetworkType.SelectedNetworkType == NetworkTypes.CHIN ? pageChinDetails.isAutomaticAddNicToVM : pageNetworkDetails.isAutomaticAddNicToVM); - if (Helpers.CowleyOrGreater(xenConnection)) - { - if (pageNetworkType.SelectedNetworkType == NetworkTypes.CHIN) - result.MTU = pageChinDetails.MTU; - else if (pageNetworkDetails.MTU.HasValue) //Custom MTU may not be allowed if we are making a virtual network or something - result.MTU = pageNetworkDetails.MTU.Value; - } + if (pageNetworkType.SelectedNetworkType == NetworkTypes.CHIN) + result.MTU = pageChinDetails.MTU; + else if (pageNetworkDetails.MTU.HasValue) //Custom MTU may not be allowed if we are making a virtual network or something + result.MTU = pageNetworkDetails.MTU.Value; return result; } diff --git a/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWDetails.cs b/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWDetails.cs index 86b7c8d69..a75ea6ac8 100644 --- a/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWDetails.cs +++ b/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWDetails.cs @@ -136,7 +136,7 @@ namespace XenAdmin.Wizards.NewNetworkWizard_Pages comboBoxNICList.Visible = external; labelVLAN.Visible = external; numericUpDownVLAN.Visible = external; - numericUpDownMTU.Visible = labelMTU.Visible = (external && Helpers.CowleyOrGreater(host)); + numericUpDownMTU.Visible = labelMTU.Visible = external; labelNIC.Visible = external; if (comboBoxNICList.Items.Count > 0) comboBoxNICList.SelectedIndex = external ? comboBoxNICList.Items.Count - 1 : -1; diff --git a/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWTypeSelect.cs b/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWTypeSelect.cs index f59cc8811..a32caceaf 100644 --- a/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWTypeSelect.cs +++ b/XenAdmin/Wizards/NewNetworkWizard_Pages/NetWTypeSelect.cs @@ -105,7 +105,7 @@ namespace XenAdmin.Wizards.NewNetworkWizard_Pages rbtnCHIN.Enabled = labelCHIN.Enabled = false; labelWarningChinOption.Text = - !Helpers.CowleyOrGreater(connection) || Helpers.FeatureForbidden(connection, Host.RestrictVSwitchController) ? + Helpers.FeatureForbidden(connection, Host.RestrictVSwitchController) ? string.Format(Messages.FEATURE_NOT_AVAILABLE_NEED_COWLEY_ENTERPRISE_OR_PLATINUM_PLURAL, Messages.CHINS) : Messages.CHINS_NEED_VSWITCHCONTROLLER; diff --git a/XenAdmin/Wizards/NewSRWizard.cs b/XenAdmin/Wizards/NewSRWizard.cs index 755f662a4..0e90e00f9 100644 --- a/XenAdmin/Wizards/NewSRWizard.cs +++ b/XenAdmin/Wizards/NewSRWizard.cs @@ -331,11 +331,7 @@ namespace XenAdmin.Wizards else if (m_srWizardType is SrWizardType_Cslg) { AddPage(xenTabPageCslg); - - if (Helpers.BostonOrGreater(xenConnection)) - AddPages(xenTabPageCslgLocation, xenTabPageCslgSettings); - else - AddPages(new XenTabPage { Text = "" }); + AddPages(xenTabPageCslgLocation, xenTabPageCslgSettings); } else if (m_srWizardType is SrWizardType_NetApp || m_srWizardType is SrWizardType_EqualLogic) { @@ -432,55 +428,12 @@ namespace XenAdmin.Wizards } else if (senderPagetype == typeof(CSLG)) { - #region - if (Helpers.BostonOrGreater(xenConnection)) - { - xenTabPageCslgLocation.SelectedStorageAdapter = xenTabPageCslg.SelectedStorageAdapter; - xenTabPageCslgSettings.SelectedStorageAdapter = xenTabPageCslg.SelectedStorageAdapter; - NotifyNextPagesOfChange(xenTabPageCslgLocation, xenTabPageCslgSettings); - } - else - { - RemovePagesFrom(_rbac ? 4 : 3); - - if (xenTabPageCslg.SelectedStorageSystem != null) - { - AddPages(xenTabPageCslgSettings); - xenTabPageCslgSettings.SystemStorage = xenTabPageCslg.SelectedStorageSystem; - xenTabPageCslgSettings.StoragePools = xenTabPageCslg.StoragePools; - NotifyNextPagesOfChange(xenTabPageCslgLocation); - } - else if (xenTabPageCslg.NetAppSelected || xenTabPageCslg.DellSelected) - { - AddPage(xenTabPageFilerDetails); - NotifyNextPagesOfChange(xenTabPageFilerDetails); - - if (xenTabPageCslg.NetAppSelected) - { - if (m_srWizardType is SrWizardType_Cslg) - { - m_srWizardType = ((SrWizardType_Cslg)m_srWizardType).ToNetApp(); - xenTabPageCslg.SrWizardType = m_srWizardType; - } - xenTabPageFilerDetails.IsNetApp = true; - AddPage(xenTabPageNetApp); - } - else if (xenTabPageCslg.DellSelected) - { - if (m_srWizardType is SrWizardType_Cslg) - { - m_srWizardType = ((SrWizardType_Cslg)m_srWizardType).ToEqualLogic(); - xenTabPageCslg.SrWizardType = m_srWizardType; - } - xenTabPageFilerDetails.IsNetApp = false; - AddPage(xentabPageEqualLogic); - } - } - } + xenTabPageCslgLocation.SelectedStorageAdapter = xenTabPageCslg.SelectedStorageAdapter; + xenTabPageCslgSettings.SelectedStorageAdapter = xenTabPageCslg.SelectedStorageAdapter; + NotifyNextPagesOfChange(xenTabPageCslgLocation, xenTabPageCslgSettings); foreach (var entry in xenTabPageCslg.DeviceConfigParts) m_srWizardType.DeviceConfig[entry.Key] = entry.Value; - #endregion } else if (senderPagetype == typeof(CslgLocation)) { @@ -857,11 +810,8 @@ namespace XenAdmin.Wizards return; } - if (_srToReattach.type == "cslg" && Helpers.BostonOrGreater(_srToReattach.Connection) - && xenTabPageCslg.SelectedStorageAdapter != null) - { + if (_srToReattach.type == "cslg" && xenTabPageCslg.SelectedStorageAdapter != null) NextStep(); - } } protected override string WizardPaneHelpID() diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CSLG.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CSLG.cs index fc1e68846..63f08b1b8 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CSLG.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CSLG.cs @@ -99,28 +99,9 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends get { var dconf = new Dictionary(); - - if (Helpers.BostonOrGreater(Connection)) - { - var adapter = comboBoxStorageSystem.SelectedItem as StorageLinkAdapterBoston; - if (adapter != null) - dconf[ADAPTER_ID] = adapter.Id; - } - else - { - var system = comboBoxStorageSystem.SelectedItem as CslgSystemStorage; - if (system != null) - dconf[STORAGE_SYSTEM_ID] = system.StorageSystemId; - - StorageLinkCredentials credentials = GetStorageLinkCredentials(Connection); - if (credentials != null) - { - dconf["target"] = credentials.Host; - dconf["username"] = credentials.Username; - dconf["password"] = credentials.Password; - } - } - + var adapter = comboBoxStorageSystem.SelectedItem as StorageLinkAdapterBoston; + if (adapter != null) + dconf[ADAPTER_ID] = adapter.Id; return dconf; } } @@ -140,7 +121,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends { var credsList = new List(); - foreach (IXenConnection c in ConnectionsManager.XenConnectionsCopy.FindAll(c => c.IsConnected && Helpers.MidnightRideOrGreater(c) && !Helpers.FeatureForbidden(c, Host.RestrictStorageChoices))) + foreach (IXenConnection c in ConnectionsManager.XenConnectionsCopy.FindAll(c => c.IsConnected && !Helpers.FeatureForbidden(c, Host.RestrictStorageChoices))) { var p = Helpers.GetPoolOfOne(c); credsList.Add(p.GetStorageLinkCredentials()); @@ -150,53 +131,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends return credsList; } - private StorageLinkCredentials GetStorageLinkCredentials(IXenConnection connection) - { - if (Helpers.BostonOrGreater(connection)) - return null; - - if (_storageLinkObject != null) - { - return GetAllValidStorageLinkCreds().Find(c => - c.Host == _storageLinkObject.StorageLinkConnection.Host && - c.Username == _storageLinkObject.StorageLinkConnection.Username && - c.Password == _storageLinkObject.StorageLinkConnection.Password); - } - else - { - // just do a check that local creds have been correctly moved the server pool object. - Settings.CslgCredentials localCreds = Settings.GetCslgCredentials(connection); - Debug.Assert(localCreds == null || string.IsNullOrEmpty(localCreds.Host)); - - Pool pool = Helpers.GetPoolOfOne(connection); - - if (pool != null) - { - StorageLinkCredentials creds = pool.GetStorageLinkCredentials(); - - if (creds != null && creds.IsValid) - { - return creds; - } - else - { - // if there aren't any creds then try importing from another pool. The user will probably only - // have one set of CSLG creds and they just haven't set the creds to this pool yet. Do it for them. - - var credsList = GetAllValidStorageLinkCreds(); - - if (credsList.Count > 0 && !Helpers.BostonOrGreater(Connection)) - { - var action = new SetCslgCredentialsToPoolAction(pool.Connection, credsList[0].Host, credsList[0].Username, credsList[0].Password); - new ActionProgressDialog(action, ProgressBarStyle.Marquee).ShowDialog(this); - return pool.GetStorageLinkCredentials(); - } - } - } - return null; - } - } - public void SetStorageLinkObject(IStorageLinkObject storageLinkObject) { _storageLinkObject = storageLinkObject; @@ -209,74 +143,37 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends public bool PerformStorageSystemScan() { var items = new List(); - StorageLinkCredentials credentials = null; - SrCslgStorageSystemScanAction scanAction = null; - if (_storageLinkObject != null || (Connection.IsConnected && !Helpers.FeatureForbidden(Connection, Host.RestrictStorageChoices) && Helpers.MidnightRideOrGreater(Connection))) + if (_storageLinkObject != null || (Connection.IsConnected && !Helpers.FeatureForbidden(Connection, Host.RestrictStorageChoices))) { if (_srToReattach == null || _srToReattach.type == "cslg") { - credentials = GetStorageLinkCredentials(Connection); - - if (credentials != null && credentials.IsValid) + var action = new SrCslgAdaptersScanAction(Connection); + var dialog = new ActionProgressDialog(action, ProgressBarStyle.Marquee); + // never show the error message if it fails. + action.Completed += s => { - scanAction = new SrCslgStorageSystemScanAction(Program.MainWindow, Connection, - Program.StorageLinkConnections.GetCopy(), - credentials.Host, credentials.Username, - credentials.PasswordSecret); - } - else if (Helpers.BostonOrGreater(Connection)) - { - - var action = new SrCslgAdaptersScanAction(Connection); - var dialog = new ActionProgressDialog(action, ProgressBarStyle.Marquee); - // never show the error message if it fails. - action.Completed += s => + if (!action.Succeeded) { - if (!action.Succeeded) - { - Program.Invoke(dialog, dialog.Close); - } - }; - - dialog.ShowDialog(this); - if (action.Succeeded) - { - var adapters = action.GetAdapters(); - items.AddRange(Util.PopulateList(adapters)); - items.Sort((x, y) => x.ToString().CompareTo(y.ToString())); + Program.Invoke(dialog, dialog.Close); } - else - return false; - } - if (scanAction != null) + }; + + dialog.ShowDialog(this); + if (action.Succeeded) { - var dialog = new ActionProgressDialog(scanAction, ProgressBarStyle.Marquee); - - // never show the error message if it fails. - scanAction.Completed += s => - { - if (!scanAction.Succeeded) - { - Program.Invoke(dialog, dialog.Close); - } - }; - - dialog.ShowDialog(this); - - if (scanAction.Succeeded) - { - _storages = scanAction.CslgSystemStorages; - items.AddRange(Util.PopulateList(_storages)); - items.Sort((x, y) => x.ToString().CompareTo(y.ToString())); - } + var adapters = action.GetAdapters(); + items.AddRange(Util.PopulateList(adapters)); + items.Sort((x, y) => x.ToString().CompareTo(y.ToString())); } + else + return false; } } bool bostonHasDell = false; bool bostonHasNetapp = false; - if (Helpers.BostonOrGreater(Connection) && items != null) + if (items != null) { bostonHasDell = (items.Find(item => ((StorageLinkAdapterBoston)item).Id == "DELL_EQUALLOGIC") != null); bostonHasNetapp = (items.Find(item => ((StorageLinkAdapterBoston)item).Id == "NETAPP") != null); @@ -286,30 +183,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends if (_storageLinkObject != null) { - // the wizard was launched with a storagelink-server, storage-system or storage-pool selected. - if (scanAction != null && scanAction.Succeeded) - { - comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(string.Format(Messages.CSLG_STORAGELINK_SERVER, credentials.Host), true)); - comboBoxStorageSystem.Items.AddRange(items.ToArray()); - comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(Messages.ADD_HOST, false)); - - // if a specific storage-system was selected when the wizard was launched then select that storage-system - // in the combo-box here. - var system = _storageLinkObject as StorageLinkSystem; - - if (system == null) - { - // if a specific storage-pool was selected when the wizard was launched then select the storage-system - // of that storage-pool here. - var storagePool = _storageLinkObject as StorageLinkPool; - system = storagePool == null ? null : storagePool.StorageLinkSystem; - } - - if (system != null) - { - comboBoxStorageSystem.SelectedItem = items.Find(o => ((CslgSystemStorage)o).StorageSystemId == system.opaque_ref); - } - } + ; } else if (_srToReattach != null) { @@ -323,46 +197,20 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends // a direct-connect NetApp is being reattached. Only add this item. comboBoxStorageSystem.Items.Add(Messages.CSLG_NETAPP_DIRECT); } - else if (credentials != null) - { - // credentials can be null if we don't have a license which supports CSLG. - - // re-attaching StorageLink SR - Debug.Assert(_srToReattach.type == "cslg"); - comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(string.Format(Messages.CSLG_STORAGELINK_SERVER, credentials.Host), true)); - comboBoxStorageSystem.Items.AddRange(items.ToArray()); - } } else { // a pool or host was selected in the mainwindow tree when the wizard was launched. - bool canAdd = scanAction != null && scanAction.Succeeded && scanAction.StorageLinkConnection != null; - bool showHeaders = scanAction != null && scanAction.Succeeded && (items.Count > 0 || scanAction.StorageLinkConnection != null); - - if (showHeaders || Helpers.BostonOrGreater(Connection)) - { - if (!bostonHasDell || !bostonHasNetapp) - comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(Messages.CSLG_DIRECT_CONNECTION, true)); - } + if (!bostonHasDell || !bostonHasNetapp) + comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(Messages.CSLG_DIRECT_CONNECTION, true)); if (!bostonHasDell) comboBoxStorageSystem.Items.Add(Messages.CSLG_DELL_DIRECT); if (!bostonHasNetapp) comboBoxStorageSystem.Items.Add(Messages.CSLG_NETAPP_DIRECT); - - if (showHeaders) - { - comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(string.Format(Messages.CSLG_STORAGELINK_SERVER, credentials.Host), true)); - comboBoxStorageSystem.Items.AddRange(items.ToArray()); - } - - if (canAdd) - { - comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(Messages.ADD_HOST, false)); - } } - if (Helpers.BostonOrGreater(Connection) && items != null && items.Count > 0) + if (items != null && items.Count > 0) { if (!bostonHasDell || !bostonHasNetapp) comboBoxStorageSystem.Items.Add(new NonSelectableComboBoxItem(Messages.CSLG_STORAGELINK_ADAPTERS, true)); @@ -373,8 +221,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends { // select the first selectable item if nothing's already been selected. comboBoxStorageSystem.SelectedItem = Util.PopulateList(comboBoxStorageSystem.Items).Find(s => !(s is NonSelectableComboBoxItem)); - if (_srToReattach != null && _srToReattach.type == "cslg" && - Helpers.BostonOrGreater(Connection)) + if (_srToReattach != null && _srToReattach.type == "cslg") { comboBoxStorageSystem.SelectedItem = Util.PopulateList(comboBoxStorageSystem.Items).Find(s => @@ -404,7 +251,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends private bool PerformStoragePoolScan() { - StorageLinkCredentials credentials = GetStorageLinkCredentials(Connection); + StorageLinkCredentials credentials = null; var scanAction = new SrCslgStoragePoolScanAction(Connection, Program.StorageLinkConnections.GetCopy(), credentials.Host, credentials.Username, credentials.PasswordSecret, SelectedStorageSystem.StorageSystemId); @@ -418,42 +265,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends return scanAction.Succeeded; } - private void AddStorageSystem() - { - StorageLinkConnection slCon = Program.StorageLinkConnections.GetCopy().Find(s => s.Host == GetStorageLinkCredentials(Connection).Host); - - if (slCon == null) - return; - - var systemsBefore = new List(slCon.Cache.StorageSystems); - AddStorageLinkSystemCommand command = new AddStorageLinkSystemCommand(Program.MainWindow, slCon.Cache.Server, Parent); - - command.Completed += (s, ee) => - { - if (ee.Success) - { - var systemsAfter = new List(slCon.Cache.StorageSystems); - - ThreadPool.QueueUserWorkItem(o => - { - Program.Invoke(Program.MainWindow, () => - { - PerformStorageSystemScan(); - - if (systemsAfter.Count > systemsBefore.Count) - { - // the new item should be selected. - comboBoxStorageSystem.SelectedItem = systemsAfter.Find(ss => !systemsBefore.Contains(ss)); - comboBoxStorageSystem.DroppedDown = true; - } - }); - }); - } - }; - - command.Execute(); - } - #region XenTabPage overrides public override void PageLeave(PageLoadedDirection direction, ref bool cancel) @@ -466,29 +277,27 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends public override void PopulatePage() { - linkLabelGotoStorageLinkProperties.Visible = Helpers.MidnightRideOrGreater(Connection) && _storageLinkObject == null; + linkLabelGotoStorageLinkProperties.Visible = _storageLinkObject == null; labelStorageLinkPropertiesLinkBlurb.Visible = linkLabelGotoStorageLinkProperties.Visible; - labelAdapter.Visible = Helpers.BostonOrGreater(Connection); - labelSystem.Visible = flowLayoutPanel1.Visible = !Helpers.BostonOrGreater(Connection); - - if (Helpers.BostonOrGreater(Connection)) - labelStorageSystem.Text = Messages.CSLG_STORAGEADAPTER; + labelAdapter.Visible = true; + labelSystem.Visible = flowLayoutPanel1.Visible = false; + labelStorageSystem.Text = Messages.CSLG_STORAGEADAPTER; } public override string Text { - get { return Helpers.BostonOrGreater(Connection) ? Messages.STORAGE_ADAPTER : Messages.STORAGE_SYSTEM; } + get { return Messages.STORAGE_ADAPTER; } } public override string PageTitle { - get { return Helpers.BostonOrGreater(Connection) ? Messages.NEWSR_CSLG_ADAPTER_PAGE_TITLE : Messages.NEWSR_CSLG_PAGE_TITLE; } + get { return Messages.NEWSR_CSLG_ADAPTER_PAGE_TITLE; } } public override string HelpID { - get { return Helpers.BostonOrGreater(Connection) ? "SL_System" : "SL_System_PreBoston"; } + get { return "SL_System"; } } public override bool EnableNext() @@ -534,12 +343,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends { if (comboBoxStorageSystem.SelectedItem is NonSelectableComboBoxItem) { - if (comboBoxStorageSystem.SelectedItem.ToString() == Messages.ADD_HOST) - { - Program.BeginInvoke(Program.MainWindow, AddStorageSystem); - comboBoxStorageSystem.SelectedIndex = -1; - } - else if (comboBoxStorageSystem.SelectedIndex < comboBoxStorageSystem.Items.Count - 1 && + if (comboBoxStorageSystem.SelectedIndex < comboBoxStorageSystem.Items.Count - 1 && (_storageSystemComboLastSelectedIndex < comboBoxStorageSystem.SelectedIndex || comboBoxStorageSystem.SelectedIndex == 0)) { _storageSystemComboLastSelectedIndex = comboBoxStorageSystem.SelectedIndex; @@ -602,11 +406,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends e.Graphics.DrawImageUnscaled(Resources.sl_system_16, new Point(e.Bounds.X + indent, e.Bounds.Y + 1)); Drawing.DrawText(e.Graphics, item.ToString(), e.Font, textRect, e.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); } - else if (item.ToString() == Messages.ADD_HOST) - { - e.Graphics.DrawImageUnscaled(Resources.sl_add_storage_system_small_16, new Point(e.Bounds.X + indent, e.Bounds.Y + 1)); - Drawing.DrawText(e.Graphics, item.ToString(), e.Font, textRect, e.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); - } else if (nonSelectable != null) { // bold headings diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CslgLocation.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CslgLocation.cs index 7179411d1..a6211c2c0 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CslgLocation.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/CslgLocation.cs @@ -79,23 +79,11 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends { get { - var credentials = StorageLinkCredentials; var dconf = new Dictionary(); - - if (Helpers.BostonOrGreater(Connection)) - { - dconf[TARGET] = textBoxTarget.Text; - dconf[USERNAME] = textBoxUsername.Text; - dconf[PASSWORD] = textBoxPassword.Text; - dconf[STORAGE_SYSTEM_ID] = SystemStorage.StorageSystemId; - } - else if (credentials != null) - { - dconf[TARGET] = credentials.Host; - dconf[USERNAME] = credentials.Username; - dconf[PASSWORD] = credentials.Password; - } - + dconf[TARGET] = textBoxTarget.Text; + dconf[USERNAME] = textBoxUsername.Text; + dconf[PASSWORD] = textBoxPassword.Text; + dconf[STORAGE_SYSTEM_ID] = SystemStorage.StorageSystemId; return dconf; } } @@ -217,11 +205,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends e.Graphics.DrawImageUnscaled(Resources.sl_system_16, new Point(e.Bounds.X + indent, e.Bounds.Y + 1)); Drawing.DrawText(e.Graphics, item.ToString(), e.Font, textRect, e.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); } - else if (item.ToString() == Messages.ADD_HOST) - { - e.Graphics.DrawImageUnscaled(Resources.sl_add_storage_system_small_16, new Point(e.Bounds.X + indent, e.Bounds.Y + 1)); - Drawing.DrawText(e.Graphics, item.ToString(), e.Font, textRect, e.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); - } else if (nonSelectable != null) { // bold headings diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/NewSrWizardNamePage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/NewSrWizardNamePage.cs index 257209e6e..c27e8d13b 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/NewSrWizardNamePage.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/NewSrWizardNamePage.cs @@ -65,7 +65,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages public override bool EnableNext() { - return textBoxName.Text.Trim() != "" && ValidName(); + return textBoxName.Text.Trim() != ""; } public override bool EnablePrevious() @@ -113,17 +113,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages textBoxDescription.Enabled = labelDescription.Enabled = !checkBoxAutoDescription.Checked; } - private bool ValidName() - { - if (Helpers.BostonOrGreater(Connection)) - return true; - - if (m_srWizardType is SrWizardType_Cslg || m_srWizardType is SrWizardType_NetApp || m_srWizardType is SrWizardType_EqualLogic) - return _nameRegex.IsMatch(textBoxName.Text); - - return true; - } - public int MatchingFrontends { private get; set; } #region Event handlers @@ -136,7 +125,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages private void textBoxName_TextChanged(object sender, EventArgs e) { OnPageUpdated(); - labelInvalidName.Visible = textBoxName.Text.Length > 0 && !ValidName(); + labelInvalidName.Visible = false; } #endregion diff --git a/XenAdmin/Wizards/NewVMWizard/Page_CopyBiosStrings.cs b/XenAdmin/Wizards/NewVMWizard/Page_CopyBiosStrings.cs index 6ce7428ac..35a0da0a9 100644 --- a/XenAdmin/Wizards/NewVMWizard/Page_CopyBiosStrings.cs +++ b/XenAdmin/Wizards/NewVMWizard/Page_CopyBiosStrings.cs @@ -60,7 +60,7 @@ namespace XenAdmin.Wizards.NewVMWizard _template = template; ServersGridView.Rows.Clear(); - if (Helpers.MidnightRideOrGreater(Connection) && template.DefaultTemplate) + if (template.DefaultTemplate) { List hosts = new List(Connection.Cache.Hosts); hosts.Sort(); diff --git a/XenAdmin/Wizards/NewVMWizard/Page_CpuMem.cs b/XenAdmin/Wizards/NewVMWizard/Page_CpuMem.cs index 873b3e96a..fe910d134 100644 --- a/XenAdmin/Wizards/NewVMWizard/Page_CpuMem.cs +++ b/XenAdmin/Wizards/NewVMWizard/Page_CpuMem.cs @@ -77,7 +77,7 @@ namespace XenAdmin.Wizards.NewVMWizard initialising = true; Template = SelectedTemplate; - if (Template.has_ballooning && Helpers.MidnightRideOrGreater(Template.Connection) && !Helpers.FeatureForbidden(Template, Host.RestrictDMC)) + if (Template.has_ballooning && !Helpers.FeatureForbidden(Template, Host.RestrictDMC)) memoryMode = (Template.memory_dynamic_max == Template.memory_static_max ? 2 : 3); else memoryMode = 1; diff --git a/XenAdmin/Wizards/NewVMWizard/Page_Template.cs b/XenAdmin/Wizards/NewVMWizard/Page_Template.cs index 1d8caf386..27a1aabed 100644 --- a/XenAdmin/Wizards/NewVMWizard/Page_Template.cs +++ b/XenAdmin/Wizards/NewVMWizard/Page_Template.cs @@ -66,8 +66,6 @@ namespace XenAdmin.Wizards.NewVMWizard PopulateTemplatesBox(); templatesLoaded = true; - checkBoxCopyBiosStrings.Visible = Helpers.MidnightRideOrGreater(Connection); - if (m_selectedTemplate == null) return; diff --git a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_ModePage.cs b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_ModePage.cs index 80b6034aa..72c042349 100644 --- a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_ModePage.cs +++ b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_ModePage.cs @@ -89,16 +89,8 @@ namespace XenAdmin.Wizards.PatchingWizard case UpdateType.NewRetail: case UpdateType.Existing: textBoxLog.Text = PatchingWizardModeGuidanceBuilder.ModeRetailPatch(SelectedServers, Patch); - if (Helpers.MidnightRideOrGreater(SelectedServers[0].Connection)) - { - AutomaticRadioButton.Enabled = true; - AutomaticRadioButton.Checked = true; - } - else - { - AutomaticRadioButton.Enabled = false; - ManualRadioButton.Checked = true; - } + AutomaticRadioButton.Enabled = true; + AutomaticRadioButton.Checked = true; break; case UpdateType.NewOem: ManualRadioButton.Checked = true; diff --git a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs index 75b5dbbac..32bd583db 100644 --- a/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs +++ b/XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs @@ -236,7 +236,7 @@ namespace XenAdmin.Wizards.PatchingWizard //Do RBAC check foreach (Host master in masters) { - if(Helpers.MidnightRideOrGreater(master.Connection)&&!(Role.CanPerform(new RbacMethodList("pool_patch.apply"),master.Connection))) + if (!(Role.CanPerform(new RbacMethodList("pool_patch.apply"), master.Connection))) { string nameLabel = master.Name; Pool pool = Helpers.GetPoolOfOne(master.Connection); diff --git a/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizard.cs b/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizard.cs index a98d0e99b..8dd1f87ed 100644 --- a/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizard.cs +++ b/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizard.cs @@ -77,7 +77,6 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard protected override void FinishWizard() { var brokenSRs = RollingUpgradeWizardSelectPool.SelectedMasters - .Where(Helpers.BostonOrGreater) .Any(master => master != null && master.Connection.Cache.SRs.Any(sr => sr.IsBroken(true))); if(brokenSRs) { diff --git a/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizardSelectPool.cs b/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizardSelectPool.cs index 8186b60a1..16fe90ec5 100644 --- a/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizardSelectPool.cs +++ b/XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizardSelectPool.cs @@ -150,7 +150,7 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard private static bool IsNotAnUpgradeableVersion(Host host) { - return !Helpers.MidnightRideOrGreater(host); + return false; // currently, all supported versions are upgradable } public IList SelectedMasters diff --git a/XenAdmin/Wlb/WlbReports/WorkloadReports.cs b/XenAdmin/Wlb/WlbReports/WorkloadReports.cs index ced340654..fa6133244 100644 --- a/XenAdmin/Wlb/WlbReports/WorkloadReports.cs +++ b/XenAdmin/Wlb/WlbReports/WorkloadReports.cs @@ -456,10 +456,7 @@ namespace XenAdmin { // Adds the report node TreeNode currentReportTreeNode = GetReportTreeNode(currentNodes[i]); - - // Filter out Audit log report if it's early version than MidnightRide - if (Helpers.MidnightRideOrGreater(Pool.Connection) || (!Helpers.MidnightRideOrGreater(Pool.Connection) && !_midnightRideReports.Contains(currentReportTreeNode.Text))) - treeViewReportList.Nodes.Add(currentReportTreeNode); + treeViewReportList.Nodes.Add(currentReportTreeNode); // Add in each subscription for the current report if (_isMROrLater && _subscriptionCollection != null && !_isBostonOrLater) diff --git a/XenAdminTests/TabsAndMenus/TabsAndMenusGeorge.cs b/XenAdminTests/TabsAndMenus/TabsAndMenusGeorge.cs index fefb23e96..9c702214f 100644 --- a/XenAdminTests/TabsAndMenus/TabsAndMenusGeorge.cs +++ b/XenAdminTests/TabsAndMenus/TabsAndMenusGeorge.cs @@ -314,21 +314,16 @@ namespace XenAdminTests.TabsAndMenus new ExpectedSeparator(), new ExpectedTextMenuItem("&High Availability...", true) }; - if (Helpers.CowleyOrGreater(pool.Connection)) - expected.Add(new ExpectedTextMenuItem("VM Pr&otection Policies...", true)); - if (Helpers.BostonOrGreater(pool.Connection)) - { - expected.Add(new ExpectedTextMenuItem("Manage &vApps...", true)); - expected.Add(new ExpectedTextMenuItem("Di&saster Recovery", true, new ExpectedMenuItem[] - { - new ExpectedTextMenuItem( - "&Configure...", true), - new ExpectedTextMenuItem( - "&Disaster Recovery Wizard...", - true) - })); - } - + expected.Add(new ExpectedTextMenuItem("VM Pr&otection Policies...", true)); + expected.Add(new ExpectedTextMenuItem("Manage &vApps...", true)); + expected.Add(new ExpectedTextMenuItem("Di&saster Recovery", true, new ExpectedMenuItem[] + { + new ExpectedTextMenuItem( + "&Configure...", true), + new ExpectedTextMenuItem( + "&Disaster Recovery Wizard...", + true) + })); expected.AddRange(new List{ new ExpectedSeparator(), new ExpectedTextMenuItem("&Add Server", true, false, @@ -413,7 +408,7 @@ namespace XenAdminTests.TabsAndMenus })); expectedMenuItems.Add(new ExpectedSeparator()); } - else if (Helpers.CowleyOrGreater(vm.Connection) && vm.IsOnSharedStorage() == string.Empty || !Helpers.CowleyOrGreater(vm.Connection)) + else if (vm.IsOnSharedStorage() == string.Empty) { expectedMenuItems.Add(new ExpectedTextMenuItem("M&igrate to Server", true, false, new ExpectedMenuItem[] @@ -427,8 +422,7 @@ namespace XenAdminTests.TabsAndMenus expectedMenuItems.Add(new ExpectedTextMenuItem("Ta&ke a Snapshot...", true)); - if (Helpers.CowleyOrGreater(vm.Connection)) - expectedMenuItems.Add(new ExpectedTextMenuItem("Assign to VM Protection Polic&y", true, new ExpectedMenuItem[] { new ExpectedTextMenuItem("&New Policy...", true), new ExpectedSeparator(), new ExpectedTextMenuItem("&1 Ewan's backups", true), new ExpectedTextMenuItem("&2 grage", true) })); + expectedMenuItems.Add(new ExpectedTextMenuItem("Assign to VM Protection Polic&y", true, new ExpectedMenuItem[] { new ExpectedTextMenuItem("&New Policy...", true), new ExpectedSeparator(), new ExpectedTextMenuItem("&1 Ewan's backups", true), new ExpectedTextMenuItem("&2 grage", true) })); expectedMenuItems.Add(new ExpectedSeparator()); expectedMenuItems.Add(new ExpectedTextMenuItem("P&roperties", true)); @@ -547,9 +541,9 @@ namespace XenAdminTests.TabsAndMenus { var expected = new List(expectedForAll); - if (Helpers.CowleyOrGreater(snapshot.Connection) && snapshot.tags.Length > 0) + if (snapshot.tags.Length > 0) expected.Insert(5, new ExpectedTextMenuItem("Untag Ob&ject", true)); - if (Helpers.CowleyOrGreater(snapshot.Connection) && Folders.GetFolder(snapshot) != null) + if (Folders.GetFolder(snapshot) != null) expected.Insert(5, new ExpectedTextMenuItem("Remove from &folder", true)); VerifyContextMenu(snapshot, expected.ToArray()); } @@ -560,9 +554,9 @@ namespace XenAdminTests.TabsAndMenus { var expected = new List(expectedForAll); - if (Helpers.CowleyOrGreater(snapshot.Connection) && snapshot.tags.Length > 0) + if (snapshot.tags.Length > 0) expected.Insert(5, new ExpectedTextMenuItem("Untag Ob&ject", true)); - if (Helpers.CowleyOrGreater(snapshot.Connection) && Folders.GetFolder(snapshot) != null) + if (Folders.GetFolder(snapshot) != null) expected.Insert(5, new ExpectedTextMenuItem("Remove from &folder", true)); VerifyContextMenu(snapshot, expected.ToArray()); } diff --git a/XenModel/Actions/AsyncAction.cs b/XenModel/Actions/AsyncAction.cs index e598e68e0..86bb22666 100644 --- a/XenModel/Actions/AsyncAction.cs +++ b/XenModel/Actions/AsyncAction.cs @@ -306,7 +306,7 @@ namespace XenAdmin.Actions RbacMethodList rbacMethodList; - if (Connection.Session.IsLocalSuperuser || !Helpers.MidnightRideOrGreater(Connection) || XenAdminConfigManager.Provider.DontSudo) // don't need to / can't / don't want to sudo + if (Connection.Session.IsLocalSuperuser || XenAdminConfigManager.Provider.DontSudo) // don't need / want to sudo rbacMethodList = new RbacMethodList(); else rbacMethodList = GetApiMethodsToRoleCheck; diff --git a/XenModel/Actions/Host/LicensingHelper.cs b/XenModel/Actions/Host/LicensingHelper.cs index b566f2555..44251dc0a 100644 --- a/XenModel/Actions/Host/LicensingHelper.cs +++ b/XenModel/Actions/Host/LicensingHelper.cs @@ -98,14 +98,7 @@ namespace XenAdmin.Actions.HostActions public LicenseDataStruct(XenAPI.Host host) { - if (Helpers.MidnightRideOrGreater(host)) - { - Edition = host.edition; - } - else - { - Edition = host.license_params.ContainsKey("sku_type") ? host.license_params["sku_type"] : ""; - } + Edition = host.edition; ExpiryDate = host.license_params.ContainsKey("expiry") ? host.license_params["expiry"] : ""; } } @@ -194,14 +187,7 @@ namespace XenAdmin.Actions.HostActions string newEdition; if (String.IsNullOrEmpty(CurrentEdition)) { - if (Helpers.MidnightRideOrGreater(host)) - { - newEdition = host.edition; - } - else - { - newEdition = host.license_params.ContainsKey("sku_type") ? host.license_params["sku_type"] : ""; - } + newEdition = host.edition; } else { diff --git a/XenModel/Actions/Network/CreateBondAction.cs b/XenModel/Actions/Network/CreateBondAction.cs index d5437d3b7..a833dc4e3 100644 --- a/XenModel/Actions/Network/CreateBondAction.cs +++ b/XenModel/Actions/Network/CreateBondAction.cs @@ -65,7 +65,6 @@ namespace XenAdmin.Actions private readonly long mtu; private readonly bond_mode bondMode; private readonly Dictionary> PIFs = new Dictionary>(); - private readonly bool bostonOrGreater; // in Boston, most network configuration is done automatically by xapi (PR-1006) private readonly bool tampaOrGreater; private readonly Host Master; private readonly Bond.hashing_algoritm hashingAlgoritm; @@ -94,7 +93,6 @@ namespace XenAdmin.Actions if (Master == null) throw new Failure(Failure.INTERNAL_ERROR, "Pool master has gone away"); - bostonOrGreater = Helpers.BostonOrGreater(connection); tampaOrGreater = Helpers.TampaOrGreater(connection); foreach (Host host in Connection.Cache.Hosts) @@ -133,7 +131,7 @@ namespace XenAdmin.Actions new_bonds = new List(); network = null; Connection.ExpectDisruption = true; - int inc = 100 / (Connection.Cache.HostCount * 3 + 1); + int inc = 100 / (Connection.Cache.HostCount * 2 + 1); string network_ref = CreateNetwork(0, inc); try @@ -161,9 +159,7 @@ namespace XenAdmin.Actions RelatedTask = tampaOrGreater ? Bond.async_create(Session, network_ref, pif_refs, "", bondMode, bondProperties) : - bostonOrGreater ? - Bond.async_create(Session, network_ref, pif_refs, "", bondMode) : - Bond.async_create(Session, network_ref, pif_refs, ""); + Bond.async_create(Session, network_ref, pif_refs, "", bondMode); PollToCompletion(lo, lo + inc); lo += inc; @@ -188,13 +184,6 @@ namespace XenAdmin.Actions lo += inc; ReconfigureManagementInterfaces(new_bond.slaves, new_bond.master, lo); } - - foreach (NewBond new_bond in new_bonds) - { - lo += inc; - if (!bostonOrGreater) - NetworkingActionHelpers.Plug(this, new_bond.master, lo); - } } catch (Exception) { @@ -251,40 +240,10 @@ namespace XenAdmin.Actions foreach (PIF pif in slaves) { lo += inc; - - // In Boston and later, the only thing we need to do is move the ManagementPurpose - // (= management interface name) to the bond (see PR-1006/CP-2059). - if (bostonOrGreater) - { - NetworkingActionHelpers.MoveManagementInterfaceName(this, pif, new_master); - } - else if (pif.management) - { - log.DebugFormat("Moving primary management interface to {0}...", pif.uuid); - NetworkingActionHelpers.ReconfigureSinglePrimaryManagement(this, pif, new_master, lo); - log.DebugFormat("Moving primary management interface to {0} done.", pif.uuid); - } - else if (pif.IsSecondaryManagementInterface(true)) - { - log.DebugFormat("Moving secondary management interface to {0}...", pif.uuid); - ReconfigureSecondaryManagement(pif, new_master, lo); - log.DebugFormat("Moving secondary management interface to {0} done.", pif.uuid); - } + NetworkingActionHelpers.MoveManagementInterfaceName(this, pif, new_master); } } - private void ReconfigureSecondaryManagement(PIF src, PIF dest, int hi) - { - System.Diagnostics.Trace.Assert(!bostonOrGreater); - - int mid = (PercentComplete + hi) / 2; - - PIF new_dest = NetworkingHelper.CopyIPConfig(src, dest); - - NetworkingActionHelpers.BringDown(this, src, mid); - NetworkingActionHelpers.BringUp(this, new_dest, dest, hi); - } - /// /// Nothrow guarantee. /// @@ -307,22 +266,7 @@ namespace XenAdmin.Actions try { - if (bostonOrGreater) - { - NetworkingActionHelpers.MoveManagementInterfaceName(this, master, slave); - } - else if (master.management) - { - log.DebugFormat("Reverting primary management interface change for {0} as part of cleanup...", master.uuid); - NetworkingActionHelpers.ReconfigurePrimaryManagement(this, master, slave, PercentComplete); - log.DebugFormat("Reverting primary management interface change for {0} as part of cleanup done.", master.uuid); - } - else if (master.IsSecondaryManagementInterface(true)) - { - log.DebugFormat("Reverting secondary management interface change for {0} as part of cleanup...", master.uuid); - ReconfigureSecondaryManagement(master, slave, PercentComplete); - log.DebugFormat("Reverting secondary management interface change for {0} as part of cleanup done.", master.uuid); - } + NetworkingActionHelpers.MoveManagementInterfaceName(this, master, slave); } catch (Exception exn) { @@ -337,8 +281,7 @@ namespace XenAdmin.Actions XenAPI.Network network = new XenAPI.Network(); network.name_label = name_label; network.AutoPlug = autoplug; - if (Helpers.CowleyOrGreater(Connection)) - network.MTU = mtu; + network.MTU = mtu; if (network.other_config == null) network.other_config = new Dictionary(); network.other_config[XenAPI.Network.CREATE_IN_PROGRESS] = "true"; diff --git a/XenModel/Actions/Network/DestroyBondAction.cs b/XenModel/Actions/Network/DestroyBondAction.cs index 466c9f207..36844c596 100644 --- a/XenModel/Actions/Network/DestroyBondAction.cs +++ b/XenModel/Actions/Network/DestroyBondAction.cs @@ -90,11 +90,6 @@ namespace XenAdmin.Actions /// private readonly string Name; - /// - /// In Boston, most network configuration is done automatically by xapi (PR-1006) - /// - private readonly bool bostonOrGreater; - /// /// /// @@ -120,7 +115,6 @@ namespace XenAdmin.Actions Name = bond.Name; Pool = Helpers.GetPoolOfOne(Connection); - bostonOrGreater = Helpers.BostonOrGreater(Connection); foreach (Host host in Connection.Cache.Hosts) { @@ -145,10 +139,7 @@ namespace XenAdmin.Actions pif.Locked = true; } - if (bostonOrGreater) - { - FirstSlaves[master] = Connection.Resolve(b.primary_slave); - } + FirstSlaves[master] = Connection.Resolve(b.primary_slave); if (!FirstSlaves.ContainsKey(master) && slaves.Count != 0) FirstSlaves[master] = slaves[0]; @@ -173,25 +164,6 @@ namespace XenAdmin.Actions string old_network_name = Network == null ? "" : Network.Name; Exception e = null; - if (!bostonOrGreater) - { - if (Network != null && NewNetworkName != null) - { - // Unplug all active VIFs, because we can't fiddle with the PIFs on the network while the - // VIFs are active (xapi won't let us). - foreach (VIF vif in Connection.ResolveAll(Network.VIFs)) - { - if (vif.currently_attached) - { - log.DebugFormat("Unplugging VIF {0} from network {1}...", vif.uuid, old_network_name); - VIF.unplug(Session, vif.opaque_ref); - unplugged_vifs.Add(vif); - log.DebugFormat("VIF {0} unplugged from network {1}.", vif.uuid, old_network_name); - } - } - } - } - BestEffort(ref e, ReconfigureManagementInterfaces); if (e != null) @@ -199,7 +171,7 @@ namespace XenAdmin.Actions PercentComplete = 50; - int inc = 40 / (Bonds.Count + Masters.Count + Slaves.Count); + int inc = 40 / Bonds.Count; int lo = PercentComplete; foreach (Bond bond in Bonds) @@ -212,19 +184,6 @@ namespace XenAdmin.Actions lo += inc; } - foreach (PIF master in Secondaries) - { - if (!bostonOrGreater) - ReconfigureSecondaryManagement(master, PercentComplete + inc); - PercentComplete += inc; - } - - if (!bostonOrGreater) - { - foreach (PIF pif in Slaves) - NetworkingActionHelpers.Plug(this, pif, PercentComplete + inc); - } - if (Network != null) { if (NewNetworkName == null) @@ -249,20 +208,6 @@ namespace XenAdmin.Actions n.SaveChanges(Session); log.DebugFormat("Renaming network {0} ({1}) done.", NewNetworkName, n.uuid); }); - - // Replug all the VIFs that we unplugged before. - if (!bostonOrGreater) - { - foreach (VIF vif in unplugged_vifs) - { - log.DebugFormat("Replugging VIF {0} into network {1}...", vif.opaque_ref, NewNetworkName); - BestEffort(ref e, delegate() - { - VIF.plug(Session, vif.opaque_ref); - log.DebugFormat("Replugging VIF {0} into network {1} done.", vif.opaque_ref, NewNetworkName); - }); - } - } } } @@ -280,41 +225,10 @@ namespace XenAdmin.Actions foreach (PIF master in Masters) { progress += inc; - if (bostonOrGreater) - { - NetworkingActionHelpers.MoveManagementInterfaceName(this, master, FirstSlaves[master]); - } - else if (master.management) - { - ReconfigurePrimaryManagement(master, progress); - } - else if (master.IsSecondaryManagementInterface(true)) - { - DeconfigureSecondaryManagement(master, progress); - } + NetworkingActionHelpers.MoveManagementInterfaceName(this, master, FirstSlaves[master]); } } - private void ReconfigurePrimaryManagement(PIF master, int hi) - { - System.Diagnostics.Trace.Assert(!bostonOrGreater); - NetworkingActionHelpers.ReconfigureSinglePrimaryManagement(this, master, FirstSlaves[master], hi); - } - - private void DeconfigureSecondaryManagement(PIF master, int hi) - { - System.Diagnostics.Trace.Assert(!bostonOrGreater); - NewFirstSlaves[master] = NetworkingHelper.CopyIPConfig(master, FirstSlaves[master]); - NetworkingActionHelpers.BringDown(this, master, hi); - Secondaries.Add(master); - } - - private void ReconfigureSecondaryManagement(PIF master, int hi) - { - System.Diagnostics.Trace.Assert(!bostonOrGreater); - NetworkingActionHelpers.BringUp(this, NewFirstSlaves[master], FirstSlaves[master], hi); - } - private void UnlockAll() { foreach (Bond bond in Bonds) diff --git a/XenModel/Actions/Pool/EnableHAAction.cs b/XenModel/Actions/Pool/EnableHAAction.cs index cd918788e..ea4542f55 100644 --- a/XenModel/Actions/Pool/EnableHAAction.cs +++ b/XenModel/Actions/Pool/EnableHAAction.cs @@ -47,7 +47,6 @@ namespace XenAdmin.Actions private readonly Dictionary startupOptions; private readonly SR[] heartbeatSRs; private readonly long failuresToTolerate; - private readonly bool ignoreStartupOptions; // ignore start order and delay public EnableHAAction(Pool pool, Dictionary startupOptions, List heartbeatSRs, long failuresToTolerate) : base(pool.Connection, string.Format(Messages.ENABLING_HA_ON, Helpers.GetName(pool).Ellipsise(50)), Messages.ENABLING_HA, false) @@ -61,7 +60,6 @@ namespace XenAdmin.Actions this.startupOptions = startupOptions; this.heartbeatSRs = heartbeatSRs.ToArray(); this.failuresToTolerate = failuresToTolerate; - ignoreStartupOptions = Helpers.HaIgnoreStartupOptions(pool.Connection); } public List HeartbeatSRs @@ -83,14 +81,12 @@ namespace XenAdmin.Actions XenAPI.VM.SetHaRestartPriority(this.Session, vm, (VM.HA_Restart_Priority)startupOptions[vm].HaRestartPriority); // Set new VM order and start_delay - if (!ignoreStartupOptions) - { - log.DebugFormat("Setting start order on {0} to {1}", vm.Name, startupOptions[vm].Order); - XenAPI.VM.set_order(this.Session, vm.opaque_ref, startupOptions[vm].Order); + log.DebugFormat("Setting start order on {0} to {1}", vm.Name, startupOptions[vm].Order); + XenAPI.VM.set_order(this.Session, vm.opaque_ref, startupOptions[vm].Order); + + log.DebugFormat("Setting start order on {0} to {1}", vm.Name, startupOptions[vm].StartDelay); + XenAPI.VM.set_start_delay(this.Session, vm.opaque_ref, startupOptions[vm].StartDelay); - log.DebugFormat("Setting start order on {0} to {1}", vm.Name, startupOptions[vm].StartDelay); - XenAPI.VM.set_start_delay(this.Session, vm.opaque_ref, startupOptions[vm].StartDelay); - } this.PercentComplete = (int)(++i * increment); } } diff --git a/XenModel/Actions/StorageLink/SrCreateAction.cs b/XenModel/Actions/StorageLink/SrCreateAction.cs index 61be34d0b..27db61f0c 100644 --- a/XenModel/Actions/StorageLink/SrCreateAction.cs +++ b/XenModel/Actions/StorageLink/SrCreateAction.cs @@ -80,8 +80,6 @@ namespace XenAdmin.Actions _srIsShared = srIsShared; _dconf = dconf; _smconf = smconf; - if (_srType == SR.SRTypes.cslg && !Helpers.BostonOrGreater(connection)) - _SLConnection = copyStorageLinkConnections.Find(s => s.Host == _dconf["target"]); #region RBAC Dependencies ApiMethodsToRoleCheck.AddRange(StaticRBACDependencies); @@ -115,39 +113,18 @@ namespace XenAdmin.Actions log.DebugFormat("is shared='{0}'", _srIsShared); string secretuuid = null; - if (Helpers.MidnightRideOrGreater(Connection)) + string value; + if (_dconf.TryGetValue("cifspassword", out value)) { - string value; - if (_dconf.TryGetValue("cifspassword", out value)) - { - secretuuid = CreateSecret("cifspassword", value); - } - else if (_dconf.TryGetValue("password", out value)) - { - secretuuid = CreateSecret("password", value); - } - else if (_dconf.TryGetValue("chappassword", out value)) - { - secretuuid = CreateSecret("chappassword", value); - } + secretuuid = CreateSecret("cifspassword", value); } - - if (Helpers.MidnightRideOrGreater(Connection)) + else if (_dconf.TryGetValue("password", out value)) { - string tempvalue; - System.Diagnostics.Debug.Assert(!_dconf.TryGetValue("password", out tempvalue), "The device config contains 'password', but it should have already been removed!"); - System.Diagnostics.Debug.Assert(!_dconf.TryGetValue("cifspassword", out tempvalue), "The device config contains 'cifspassword', but it should have already been removed!"); - System.Diagnostics.Debug.Assert(!_dconf.TryGetValue("chappassword", out tempvalue), "The device config contains 'chappassword', but it should have already been removed!"); + secretuuid = CreateSecret("password", value); } - - if (_srType == SR.SRTypes.cslg && !Helpers.BostonOrGreater(Connection)) + else if (_dconf.TryGetValue("chappassword", out value)) { - // make sure this connection is added to the storagelink service. - StorageLinkConnection slCon = _SLConnection; - if (slCon != null) - { - slCon.AddXenConnection(Connection); - } + secretuuid = CreateSecret("chappassword", value); } Description = Messages.ACTION_SR_CREATING; diff --git a/XenModel/Actions/StorageLink/SrCslgScanAction.cs b/XenModel/Actions/StorageLink/SrCslgScanAction.cs index 500d76f50..0943d7940 100644 --- a/XenModel/Actions/StorageLink/SrCslgScanAction.cs +++ b/XenModel/Actions/StorageLink/SrCslgScanAction.cs @@ -70,15 +70,7 @@ namespace XenAdmin.Actions { // CA-40132 create a new secret based on the secret that was passed in to the constructor. This is required so that the // server doesn't associate the secret with a particular SR and then delete it when the SR is detached. - string newPasswordSecret = ""; - if (!Helpers.BostonOrGreater(Connection)) - { - string secretRef = Secret.get_by_uuid(Session, _passwordSecret); - string password = Secret.get_value(Session, secretRef); - newPasswordSecret = Secret.CreateSecret(Session, password); - } - else - newPasswordSecret = Secret.CreateSecret(Session, _passwordSecret); + string newPasswordSecret = Secret.CreateSecret(Session, _passwordSecret); dconf["password_secret"] = newPasswordSecret; try diff --git a/XenModel/Actions/StorageLink/SrCslgStoragePoolScanAction.cs b/XenModel/Actions/StorageLink/SrCslgStoragePoolScanAction.cs index 632c6fe74..a7d0a7d55 100644 --- a/XenModel/Actions/StorageLink/SrCslgStoragePoolScanAction.cs +++ b/XenModel/Actions/StorageLink/SrCslgStoragePoolScanAction.cs @@ -132,24 +132,19 @@ namespace XenAdmin.Actions provisioningTypes.Add(new CslgParameter(null, Messages.NEWSR_CSLG_DEFAULT_PROVISIONING)); } - if (Helpers.BostonOrGreater(Connection)) + uint capacity = 0; + uint usedSpace = 0; + try { - uint capacity = 0; - uint usedSpace = 0; - try - { - capacity = UInt32.Parse(GetXmlNodeInnerText(storagePoolInfo, "sizeInMB").Trim()); - usedSpace = capacity - UInt32.Parse(GetXmlNodeInnerText(storagePoolInfo, "freeSpaceInMB").Trim()); - } - catch { } - - StorageLinkPool storageLinkPool = new StorageLinkPool(null, storagePoolId, displayName, parentStoragePoolId, _storageSystemId, capacity, usedSpace, - (StorageLinkEnums.RaidType)Enum.Parse(typeof(StorageLinkEnums.RaidType), raidTypes[0].ToUpper()), - (StorageLinkEnums.ProvisioningType)Enum.Parse(typeof(StorageLinkEnums.ProvisioningType), provisioningTypes[0].Name.ToUpper())); - output.Add(new CslgStoragePool(displayName, storagePoolId, raidTypes, provisioningTypes, !string.IsNullOrEmpty(parentStoragePoolId), storageLinkPool)); + capacity = UInt32.Parse(GetXmlNodeInnerText(storagePoolInfo, "sizeInMB").Trim()); + usedSpace = capacity - UInt32.Parse(GetXmlNodeInnerText(storagePoolInfo, "freeSpaceInMB").Trim()); } - else - output.Add(new CslgStoragePool(displayName, storagePoolId, raidTypes, provisioningTypes, !string.IsNullOrEmpty(parentStoragePoolId), null)); + catch { } + + StorageLinkPool storageLinkPool = new StorageLinkPool(null, storagePoolId, displayName, parentStoragePoolId, _storageSystemId, capacity, usedSpace, + (StorageLinkEnums.RaidType)Enum.Parse(typeof(StorageLinkEnums.RaidType), raidTypes[0].ToUpper()), + (StorageLinkEnums.ProvisioningType)Enum.Parse(typeof(StorageLinkEnums.ProvisioningType), provisioningTypes[0].Name.ToUpper())); + output.Add(new CslgStoragePool(displayName, storagePoolId, raidTypes, provisioningTypes, !string.IsNullOrEmpty(parentStoragePoolId), storageLinkPool)); } return output; @@ -167,35 +162,9 @@ namespace XenAdmin.Actions dconf["adapterid"] = _adapterId; Log.DebugFormat("Attempting to find pools on {0}.", _storageSystemId); - if (Connection != null && ( - (!Helpers.CowleyOrGreater(Connection) && Helpers.MidnightRideOrGreater(Connection))) - || Helpers.BostonOrGreater(Connection) - ) - { - RunProbe(dconf); - if (!string.IsNullOrEmpty(Result)) - _cslgStoragePools = new ReadOnlyCollection(ParseStoragePoolXml(Util.GetContentsOfValueNode(Result))); - } - else - { - var slCon = _SLConnections.Find(c => c.Host == dconf["target"] && c.Username == dconf["username"]); - var pools = new List(); - - if (slCon != null) - { - pools = new List(slCon.Cache.StoragePools) - .FindAll(p => p.StorageLinkSystemId == _storageSystemId) - .ConvertAll(p => new CslgStoragePool( - p.FriendlyName, - p.opaque_ref, - GetRaidTypes(p.RaidTypes), - GetProvisioningTypes(p.ProvisioningTypes), - p.Parent != null, - p)); - - } - _cslgStoragePools = new ReadOnlyCollection(pools); - } + RunProbe(dconf); + if (!string.IsNullOrEmpty(Result)) + _cslgStoragePools = new ReadOnlyCollection(ParseStoragePoolXml(Util.GetContentsOfValueNode(Result))); } private static List GetRaidTypes(StorageLinkEnums.RaidType raidType) diff --git a/XenModel/Actions/StorageLink/SrCslgStorageSystemScanAction.cs b/XenModel/Actions/StorageLink/SrCslgStorageSystemScanAction.cs index cb7f8d5b1..9ec3a8d09 100644 --- a/XenModel/Actions/StorageLink/SrCslgStorageSystemScanAction.cs +++ b/XenModel/Actions/StorageLink/SrCslgStorageSystemScanAction.cs @@ -75,8 +75,6 @@ namespace XenAdmin.Actions public SrCslgStorageSystemScanAction(IXenConnection connection, string adapterid, string target, string user, string password) : base(connection, target, user, password) { - if (!Helpers.BostonOrGreater(connection)) - throw new ArgumentException(@"Invalid connection, it has to be a boston or greater connection", connection.Name); _adapterid = adapterid; } @@ -101,105 +99,12 @@ namespace XenAdmin.Actions Log.DebugFormat("Attempting to find SRs on CSLG {0}.", dconf["target"]); - if (Connection != null && Helpers.MidnightRideOrGreater(Connection) && !Helpers.CowleyOrGreater(Connection)) - { - RunProbe(dconf); - + dconf["adapterid"] = _adapterid; + RunProbe(dconf); + if (!string.IsNullOrEmpty(Result)) _cslgSystemStorages = new ReadOnlyCollection(ParseStorageSystemsXml(Util.GetContentsOfValueNode(Result))); - } - else if (Connection != null && Helpers.BostonOrGreater(Connection)) - { - dconf["adapterid"] = _adapterid; - RunProbe(dconf); - if (!string.IsNullOrEmpty(Result)) - _cslgSystemStorages = new ReadOnlyCollection(ParseStorageSystemsXml(Util.GetContentsOfValueNode(Result))); - } - else - { - bool created = false; - - if (Connection != null) - { - // There will be no connection if a storagelink-object is selected in the tree. - - string secretRef = Secret.get_by_uuid(Connection.Session, dconf["password_secret"]); - string password = Secret.get_value(Connection.Session, secretRef); - - StorageLinkConnection = _SLConnections.Find(c => c.Host == dconf["target"] && c.Username == dconf["username"] && c.Password == password); - - if (StorageLinkConnection == null) - { - // the user has clicked the "test connection" button in the properties dialog then - // the storagelink connection won't exist in the Program.StorageLinkConnections collection. - - StorageLinkConnection = new StorageLinkConnection(_invoker, dconf["target"], dconf["username"], password); - StorageLinkConnection.BeginConnect(); - created = true; - } - } - else - { - StorageLinkConnection = _SLConnections.Find(c => c.Host == dconf["target"] && c.Username == dconf["username"]); - } - - try - { - var list = new List(); - - // wait for storagelink connection to finish populating - for (int i = 0; i < 600 && StorageLinkConnection.ConnectionState == StorageLinkConnectionState.Connecting; i++) - { - Thread.Sleep(100); - } - - if (!string.IsNullOrEmpty(StorageLinkConnection.Error)) - { - throw new InvalidOperationException(StorageLinkConnection.Error); - } - - if (StorageLinkConnection.ConnectionState != StorageLinkConnectionState.Connected) - { - throw new InvalidOperationException(string.Format(Messages.STORAGELINK_UNABLE_TO_CONNECT, dconf["target"])); - } - - foreach (StorageLinkSystem s in StorageLinkConnection.Cache.StorageSystems) - { - var provisioningOptions = new List { new CslgParameter(null, Messages.NEWSR_CSLG_NONE) }; - - if ((s.Capabilities & StorageLinkEnums.StorageSystemCapabilities.POOL_LEVEL_DEDUPLICATION) != 0) - { - provisioningOptions.Add(new CslgParameter("DEDUP", Messages.NEWSR_CSLG_DEDUPLICATION)); - } - - var protocols = new List { new CslgParameter(null, Messages.NEWSR_CSLG_AUTO) }; - - if ((s.Capabilities & StorageLinkEnums.StorageSystemCapabilities.ISCSI) != 0) - { - protocols.Add(new CslgParameter("ISCSI", Messages.NEWSR_CSLG_ISCSI)); - } - if ((s.Capabilities & StorageLinkEnums.StorageSystemCapabilities.FIBRE_CHANNEL) != 0) - { - protocols.Add(new CslgParameter("FC", Messages.NEWSR_CSLG_FC)); - } - - list.Add(new CslgSystemStorage(s.ToString(), s.StorageSystemId, protocols, provisioningOptions, false, s)); - } - - _cslgSystemStorages = new ReadOnlyCollection(list); - } - finally - { - if (created) - { - StorageLinkConnection.EndConnect(); - } - } - } } - - - private List ParseStorageSystemsXml(String xml) { List output = new List(); diff --git a/XenModel/Actions/VM/CreateVMAction.cs b/XenModel/Actions/VM/CreateVMAction.cs index 1b5513fbf..0a7573c91 100644 --- a/XenModel/Actions/VM/CreateVMAction.cs +++ b/XenModel/Actions/VM/CreateVMAction.cs @@ -287,19 +287,8 @@ namespace XenAdmin.Actions.VMActions if (HomeServerChanged()) XenAPI.VM.set_affinity(Session, VM.opaque_ref, HomeServer != null ? HomeServer.opaque_ref : Helper.NullOpaqueRef); - if (Helpers.MidnightRideOrGreater(VM.Connection)) - { - if (Template.memory_dynamic_min != MemoryDynamicMin || Template.memory_dynamic_max != MemoryDynamicMax || Template.memory_static_max != MemoryStaticMax) - XenAPI.VM.set_memory_limits(Session, VM.opaque_ref, Template.memory_static_min, MemoryStaticMax, MemoryDynamicMin, MemoryDynamicMax); - } - else - { - // For George and earlier hosts, we set them all the same. - // The order of operations doesn't matter, because George didn't enforce the ordering of values. - XenAPI.VM.set_memory_dynamic_min(Session, VM.opaque_ref, MemoryStaticMax); - XenAPI.VM.set_memory_dynamic_max(Session, VM.opaque_ref, MemoryStaticMax); - XenAPI.VM.set_memory_static_max(Session, VM.opaque_ref, MemoryStaticMax); - } + if (Template.memory_dynamic_min != MemoryDynamicMin || Template.memory_dynamic_max != MemoryDynamicMax || Template.memory_static_max != MemoryStaticMax) + XenAPI.VM.set_memory_limits(Session, VM.opaque_ref, Template.memory_static_min, MemoryStaticMax, MemoryDynamicMin, MemoryDynamicMax); } private bool HomeServerChanged() @@ -472,7 +461,7 @@ namespace XenAdmin.Actions.VMActions if (vdi.name_label != disk.Disk.name_label) VDI.set_name_label(Session, vdi.opaque_ref, disk.Disk.name_label); - if (firstDisk && Helpers.BostonOrGreater(Connection)) + if (firstDisk) { //use the first disk to set the VM.suspend_SR SR vdiSR = Connection.Resolve(vdi.SR); @@ -484,8 +473,8 @@ namespace XenAdmin.Actions.VMActions progress += step; } - if (Helpers.BostonOrGreater(Connection)) - VM.set_suspend_SR(Session, VM.opaque_ref, suspendSr); + + VM.set_suspend_SR(Session, VM.opaque_ref, suspendSr); } private VBD GetDiskVBD(DiskDescription disk, List vbds) diff --git a/XenModel/Actions/VM/HAUnprotectVMAction.cs b/XenModel/Actions/VM/HAUnprotectVMAction.cs index 8c25341eb..304979434 100644 --- a/XenModel/Actions/VM/HAUnprotectVMAction.cs +++ b/XenModel/Actions/VM/HAUnprotectVMAction.cs @@ -52,9 +52,6 @@ namespace XenAdmin.Actions protected override void Run() { - if (!Helpers.BostonOrGreater(VM.Connection)) - XenAPI.VM.set_ha_always_run(Session, VM.opaque_ref, false); - XenAPI.VM.set_ha_restart_priority(Session, VM.opaque_ref, XenAPI.VM.RESTART_PRIORITY_DO_NOT_RESTART); Description = Messages.COMPLETED; } diff --git a/XenModel/Actions/VM/SetHaPrioritiesAction.cs b/XenModel/Actions/VM/SetHaPrioritiesAction.cs index f12f3b5ff..e265a76f4 100644 --- a/XenModel/Actions/VM/SetHaPrioritiesAction.cs +++ b/XenModel/Actions/VM/SetHaPrioritiesAction.cs @@ -48,7 +48,6 @@ namespace XenAdmin.Actions private readonly Dictionary settings = new Dictionary(); private readonly long ntol; private readonly Pool pool; - private readonly bool ignoreStartupOptions; // ignore start order and delay /// /// @@ -71,8 +70,6 @@ namespace XenAdmin.Actions throw new Exception("Could not resolve pool in constructor"); } this.Pool = pool; - ignoreStartupOptions = Helpers.HaIgnoreStartupOptions(Connection); - } protected override void Run() @@ -91,11 +88,8 @@ namespace XenAdmin.Actions // If the above succeeded, then at least some changes have been committed // Set new VM order and delay - if (!ignoreStartupOptions) - { - VM.set_order(this.Session, vm.opaque_ref, settings[vm].Order); - VM.set_start_delay(this.Session, vm.opaque_ref, settings[vm].StartDelay); - } + VM.set_order(this.Session, vm.opaque_ref, settings[vm].Order); + VM.set_start_delay(this.Session, vm.opaque_ref, settings[vm].StartDelay); this.PercentComplete = (int)(++i * (60.0 / settings.Count)); if (Cancelling) @@ -118,11 +112,8 @@ namespace XenAdmin.Actions // If the above succeeded, then at least some changes have been committed // Set new VM order and delay - if (!ignoreStartupOptions) - { - VM.set_order(this.Session, vm.opaque_ref, settings[vm].Order); - VM.set_start_delay(this.Session, vm.opaque_ref, settings[vm].StartDelay); - } + VM.set_order(this.Session, vm.opaque_ref, settings[vm].Order); + VM.set_start_delay(this.Session, vm.opaque_ref, settings[vm].StartDelay); this.PercentComplete = (int)(++i * (60.0 / settings.Count)); if (Cancelling) diff --git a/XenModel/Actions/VM/VMMoveAction.cs b/XenModel/Actions/VM/VMMoveAction.cs index 8d4f55136..b9fda7f74 100644 --- a/XenModel/Actions/VM/VMMoveAction.cs +++ b/XenModel/Actions/VM/VMMoveAction.cs @@ -139,7 +139,7 @@ namespace XenAdmin.Actions.VMActions PercentComplete += halfstep; } - if (Helpers.BostonOrGreater(Connection) && SR != null) + if (SR != null) VM.set_suspend_SR(Session, VM.opaque_ref, SR.opaque_ref); if (exn != null) diff --git a/XenModel/Actions/VM/VMShutdownAction.cs b/XenModel/Actions/VM/VMShutdownAction.cs index 0fda14bac..a2911f867 100644 --- a/XenModel/Actions/VM/VMShutdownAction.cs +++ b/XenModel/Actions/VM/VMShutdownAction.cs @@ -58,12 +58,6 @@ namespace XenAdmin.Actions.VMActions /// protected static void SetHaProtection(bool protect, AsyncAction action, VM vm, int start, int end) { - if (!Helpers.BostonOrGreater(vm.Connection)) - { - // Enable or disable HA protection for the VM. - XenAPI.VM.set_ha_always_run(action.Session, vm.opaque_ref, protect); - } - // Do database sync. Helps to ensure that the change persists over master failover. action.RelatedTask = XenAPI.Pool.async_sync_database(action.Session); action.PollToCompletion(start, end); diff --git a/XenModel/Alerts/Types/Alert.cs b/XenModel/Alerts/Types/Alert.cs index b79c857cd..1aa020416 100644 --- a/XenModel/Alerts/Types/Alert.cs +++ b/XenModel/Alerts/Types/Alert.cs @@ -370,7 +370,7 @@ namespace XenAdmin.Alerts if (c.Session == null) return false; - if (c.Session.IsLocalSuperuser || !Helpers.MidnightRideOrGreater(c)) + if (c.Session.IsLocalSuperuser) return true; List rolesAbleToCompleteAction = Role.ValidRoleList("Message.destroy", c); diff --git a/XenModel/Messages.Designer.cs b/XenModel/Messages.Designer.cs index 5b3c931b2..545ff4298 100644 --- a/XenModel/Messages.Designer.cs +++ b/XenModel/Messages.Designer.cs @@ -3769,15 +3769,6 @@ namespace XenAdmin { } } - /// - /// Looks up a localized string similar to Add.... - /// - public static string ADD_HOST { - get { - return ResourceManager.GetString("ADD_HOST", resourceCulture); - } - } - /// /// Looks up a localized string similar to You are attempting to add the server '{0}' to a pool that is configured to use AD authentication. All pool members must use the same authentication method. /// @@ -16428,25 +16419,6 @@ namespace XenAdmin { } } - /// - /// Looks up a localized string similar to Heartbeat SR: {0} - /// - ///Failure tolerance: {1} - /// - ///Restart First: {2} - /// - ///Restart: {3} - /// - ///Restart if possible: {4} - /// - ///Do not restart: {5}. - /// - public static string HAWIZ_SUMMARY { - get { - return ResourceManager.GetString("HAWIZ_SUMMARY", resourceCulture); - } - } - /// /// Looks up a localized string similar to Heartbeat SR: {0} /// @@ -16467,27 +16439,18 @@ namespace XenAdmin { /// /// Looks up a localized string similar to HA Plan. /// - public static string HAWIZARD_ASSIGNRIORITIESPAGE_TEXT { + public static string HAWIZARD_ASSIGNPRIORITIESPAGE_TEXT { get { - return ResourceManager.GetString("HAWIZARD_ASSIGNRIORITIESPAGE_TEXT", resourceCulture); + return ResourceManager.GetString("HAWIZARD_ASSIGNPRIORITIESPAGE_TEXT", resourceCulture); } } /// /// Looks up a localized string similar to Configure the HA restart priority, restart order and delay interval for the VMs in this pool. /// - public static string HAWIZARD_ASSIGNRIORITIESPAGE_TITLE { + public static string HAWIZARD_ASSIGNPRIORITIESPAGE_TITLE { get { - return ResourceManager.GetString("HAWIZARD_ASSIGNRIORITIESPAGE_TITLE", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Configure the HA restart priority for the VMs in this pool. - /// - public static string HAWIZARD_ASSIGNRIORITIESPAGE_TITLE_NOORDER { - get { - return ResourceManager.GetString("HAWIZARD_ASSIGNRIORITIESPAGE_TITLE_NOORDER", resourceCulture); + return ResourceManager.GetString("HAWIZARD_ASSIGNPRIORITIESPAGE_TITLE", resourceCulture); } } diff --git a/XenModel/Messages.ja.resx b/XenModel/Messages.ja.resx index 8c5893566..90ceae49c 100644 --- a/XenModel/Messages.ja.resx +++ b/XenModel/Messages.ja.resx @@ -5188,13 +5188,13 @@ CD をイジェクトしてから再試行してください。 カスタム フィールドあり - + 高可用性プラン - + このプールの VM の再起動優先度、再起動順序、および起動間隔の設定 - + このプールの VM の再起動優先度の設定 diff --git a/XenModel/Messages.resx b/XenModel/Messages.resx index 10eb9c85d..ba49bab29 100755 --- a/XenModel/Messages.resx +++ b/XenModel/Messages.resx @@ -1241,9 +1241,6 @@ To use this file, visit https://{0}. Add custom field '{0}' - - Add... - You are attempting to add the server '{0}' to a pool that is configured to use AD authentication. All pool members must use the same authentication method. @@ -5497,28 +5494,12 @@ Click Configure HA to enable HA for this pool and allow your virtual machines to Has any custom field - + HA Plan - + Configure the HA restart priority, restart order and delay interval for the VMs in this pool - - Configure the HA restart priority for the VMs in this pool - - - Heartbeat SR: {0} - -Failure tolerance: {1} - -Restart First: {2} - -Restart: {3} - -Restart if possible: {4} - -Do not restart: {5} - Heartbeat SR: {0} diff --git a/XenModel/Messages.zh-CN.resx b/XenModel/Messages.zh-CN.resx index e71139103..c1c6e2bf4 100644 --- a/XenModel/Messages.zh-CN.resx +++ b/XenModel/Messages.zh-CN.resx @@ -5186,13 +5186,13 @@ XenServer 可以重新启动服务器并将服务器的 CPU 级别降至池中 带有任何自定义字段 - + 高可用性计划 - + 为该池中的 VM 配置高可用性重启优先级、重启顺序和延迟间隔 - + 为该池中的 VM 配置高可用性重启优先级 diff --git a/XenModel/Network/XenConnection.cs b/XenModel/Network/XenConnection.cs index dc3e52db8..9e278cc74 100644 --- a/XenModel/Network/XenConnection.cs +++ b/XenModel/Network/XenConnection.cs @@ -1229,18 +1229,12 @@ namespace XenAdmin.Network // Save the session so we can log it out later task.Session = session; - if (session.APIVersion <= API_Version.API_1_2) + if (session.APIVersion <= API_Version.API_1_8) throw new ServerNotSupported(); // Event.next uses a different session with a shorter timeout: see CA-33145. - // Although Orlando hosts don't: see CA-40952. - Session eventNextSession = - session.APIVersion >= API_Version.API_1_6 ? // Helpers.GeorgeOrGreater, except we can't use that because the cache isn't populated before we fire the first Event.next. - DuplicateSession(EVENT_NEXT_TIMEOUT) : - session; - - if (session.APIVersion >= API_Version.API_1_6) - eventNextSession.ConnectionGroupName = eventNextConnectionGroupName; // this will force the eventNextSession onto its own set of TCP streams (see CA-108676) + Session eventNextSession = DuplicateSession(EVENT_NEXT_TIMEOUT); + eventNextSession.ConnectionGroupName = eventNextConnectionGroupName; // this will force the eventNextSession onto its own set of TCP streams (see CA-108676) bool legacyEventSystem = XenObjectDownloader.LegacyEventSystem(session); diff --git a/XenModel/PoolJoinRules.cs b/XenModel/PoolJoinRules.cs index 0081de518..8bc058b77 100644 --- a/XenModel/PoolJoinRules.cs +++ b/XenModel/PoolJoinRules.cs @@ -408,13 +408,12 @@ namespace XenAdmin.Core if (Helpers.ClearwaterOrGreater(slave) && Helpers.ClearwaterOrGreater(master)) return slave.IsFreeLicense() && !master.IsFreeLicense() && !allowLicenseUpgrade; - if (slave.IsFloodgateOrLater() && master.IsFloodgateOrLater() && - Host.RestrictHAFloodgate(slave) && !Host.RestrictHAFloodgate(master)) + if (Host.RestrictHA(slave) && !Host.RestrictHA(master)) { // See http://scale.ad.xensource.com/confluence/display/engp/v6+licensing+for+XenServer+Essentials, req R21a. // That section implies that we should downgrade a paid host to join a free pool, but that can't be the intention // (confirmed by Carl Fischer). Carl's also not concerned about fixing up Enterprise/Platinum mismatches. - if (allowLicenseUpgrade && Helpers.MidnightRideOrGreater(master)) + if (allowLicenseUpgrade) return false; return true; } @@ -430,20 +429,15 @@ namespace XenAdmin.Core if (Helpers.ClearwaterOrGreater(slave) && Helpers.ClearwaterOrGreater(master)) return !slave.IsFreeLicense() && master.IsFreeLicense(); - return (slave.IsFloodgateOrLater() && master.IsFloodgateOrLater() && - !Host.RestrictHAFloodgate(slave) && Host.RestrictHAFloodgate(master)); + return (!Host.RestrictHA(slave) && Host.RestrictHA(master)); } private static bool LicenseMismatch(Host slave, Host master) { - if (Helpers.MidnightRideOrGreater(slave) && Helpers.MidnightRideOrGreater(master)) - { - Host.Edition slaveEdition = Host.GetEdition(slave.edition); - Host.Edition masterEdition = Host.GetEdition(master.edition); + Host.Edition slaveEdition = Host.GetEdition(slave.edition); + Host.Edition masterEdition = Host.GetEdition(master.edition); - return slaveEdition != Host.Edition.Free && masterEdition != Host.Edition.Free && slaveEdition != masterEdition; - } - return false; + return slaveEdition != Host.Edition.Free && masterEdition != Host.Edition.Free && slaveEdition != masterEdition; } private static bool HaEnabled(IXenConnection connection) @@ -454,9 +448,7 @@ namespace XenAdmin.Core private static bool RoleOK(IXenConnection connection) { - return - !Helpers.MidnightRideOrGreater(connection) || - Role.CanPerform(new RbacMethodList("pool.join"), connection); + return Role.CanPerform(new RbacMethodList("pool.join"), connection); } private static bool DifferentNetworkBackends(Host slave, Host master) diff --git a/XenModel/ServerDBs/DbProxy.cs b/XenModel/ServerDBs/DbProxy.cs index c74666e14..58c9ae826 100644 --- a/XenModel/ServerDBs/DbProxy.cs +++ b/XenModel/ServerDBs/DbProxy.cs @@ -680,21 +680,6 @@ namespace XenAdmin.ServerDBs break; } } - - if (version == "george") - { - if (!Helpers.GeorgeOrGreater(connection)) - { - throw new NotSupportedException("Server needs to be George or greater for this call."); - } - } - else if (version == "mnr") - { - if (!Helpers.MidnightRideOrGreater(connection)) - { - throw new NotSupportedException("Server needs to be Midnight Ride or greater for this call."); - } - } } public string CreateOpaqueRef() diff --git a/XenModel/ServerDBs/FakeAPI/fakeXenObject.cs b/XenModel/ServerDBs/FakeAPI/fakeXenObject.cs index 69b750ed5..650e983e2 100644 --- a/XenModel/ServerDBs/FakeAPI/fakeXenObject.cs +++ b/XenModel/ServerDBs/FakeAPI/fakeXenObject.cs @@ -100,7 +100,7 @@ namespace XenAdmin.ServerDBs.FakeAPI protected void ThrowIfReadOnly() { - if (Helpers.MidnightRideOrGreater(proxy.connection) && !proxy.IsSuperUser) + if (!proxy.IsSuperUser) { throw new Failure("read only"); } diff --git a/XenModel/Utils/Helpers.cs b/XenModel/Utils/Helpers.cs index 73a174182..083e55794 100755 --- a/XenModel/Utils/Helpers.cs +++ b/XenModel/Utils/Helpers.cs @@ -333,66 +333,6 @@ namespace XenAdmin.Core return false; } - /// May be null, in which case true is returned. - public static bool GeorgeOrGreater(Host host) - { - return - TampaOrGreater(host) || // CP-2480 - Helpers.productVersionCompare(Helpers.HostProductVersion(host), "5.1.0") >= 0 || - Helpers.HostBuildNumber(host) == CUSTOM_BUILD_NUMBER; - } - - /// May be null, in which case true is returned. - public static bool GeorgeOrGreater(IXenConnection conn) - { - return conn == null ? true : GeorgeOrGreater(Helpers.GetMaster(conn)); - } - - /// May be null, in which case true is returned. - public static bool MidnightRideOrGreater(Host host) - { - return - TampaOrGreater(host) || // CP-2480 - Helpers.productVersionCompare(Helpers.HostProductVersion(host), "5.5.900") >= 0 || - Helpers.HostBuildNumber(host) == CUSTOM_BUILD_NUMBER; - } - - /// May be null, in which case true is returned. - public static bool MidnightRideOrGreater(IXenConnection conn) - { - return conn == null ? true : MidnightRideOrGreater(Helpers.GetMaster(conn)); - } - - /// May be null, in which case true is returned. - public static bool CowleyOrGreater(IXenConnection conn) - { - return conn == null ? true : CowleyOrGreater(Helpers.GetMaster(conn)); - } - - /// May be null, in which case true is returned. - public static bool CowleyOrGreater(Host host) - { - return - TampaOrGreater(host) || // CP-2480 - Helpers.productVersionCompare(Helpers.HostProductVersion(host), "5.6.1") >= 0 || - Helpers.HostBuildNumber(host) == CUSTOM_BUILD_NUMBER; - } - - /// May be null, in which case true is returned. - public static bool BostonOrGreater(IXenConnection conn) - { - return conn == null ? true : BostonOrGreater(Helpers.GetMaster(conn)); - } - - /// May be null, in which case true is returned. - public static bool BostonOrGreater(Host host) - { - return - TampaOrGreater(host) || // CP-2480 - Helpers.productVersionCompare(Helpers.HostProductVersion(host), "5.6.199") >= 0 || - Helpers.HostBuildNumber(host) == CUSTOM_BUILD_NUMBER; - } - /// May be null, in which case true is returned. public static bool TampaOrGreater(IXenConnection conn) { @@ -1031,21 +971,11 @@ namespace XenAdmin.Core public static string GetFriendlyLicenseName(Host host) { - if (MidnightRideOrGreater(host)) - { - if (string.IsNullOrEmpty(host.edition)) - return Messages.UNKNOWN; + if (string.IsNullOrEmpty(host.edition)) + return Messages.UNKNOWN; - string name = PropertyManager.GetFriendlyName("Label-host.edition-" + host.edition); - return name ?? Messages.UNKNOWN; - } - - if (host.license_params.ContainsKey("sku_type")) - { - string fmt = host.IsFloodgateOrLater() ? "Label-host.sku_type-FG-{0}" : "Label-host.sku_type-{0}"; - return PropertyManager.GetFriendlyName(string.Format(fmt, host.license_params["sku_type"].Replace(" ", "_").ToLowerInvariant())); - } - return Messages.UNKNOWN; + string name = PropertyManager.GetFriendlyName("Label-host.edition-" + host.edition); + return name ?? Messages.UNKNOWN; } /// @@ -2025,11 +1955,6 @@ namespace XenAdmin.Core return ans.ToString(); } - public static bool HaIgnoreStartupOptions(IXenConnection connection) - { - return !Helpers.BostonOrGreater(connection); - } - /// /// Does the connection support Link aggregation (LACP) bonds (i.e., is Tampa or later on the vSwitch backend)? /// diff --git a/XenModel/XenAPI-Extensions/Host.cs b/XenModel/XenAPI-Extensions/Host.cs index 29a6feb31..1b42a9dd7 100644 --- a/XenModel/XenAPI-Extensions/Host.cs +++ b/XenModel/XenAPI-Extensions/Host.cs @@ -336,19 +336,9 @@ namespace XenAPI get { return BoolKeyPreferTrue(license_params, "restrict_pool_attached_storage"); } } - public bool IsFloodgateOrLater() - { - return (XenCenterMax >= (int)API_Version.API_1_5); - } - public virtual bool IsFreeLicense() { - if (Helpers.MidnightRideOrGreater(this)) - { - return edition == "free"; - } - - return license_params.ContainsKey("sku_type") && license_params["sku_type"].Replace(" ", "_").ToLowerInvariant().EndsWith("xe_express"); + return edition == "free"; } private bool _RestrictHA @@ -356,22 +346,9 @@ namespace XenAPI get { return !BoolKey(license_params, "enable_xha"); } } - public bool RestrictHA + public static bool RestrictHA(Host h) { - get { return _RestrictHA; } - } - - public bool RestrictHAOrlando - { - get { return _RestrictHA && !IsFloodgateOrLater(); } - } - private bool _RestrictHAFloodgate - { - get { return _RestrictHA && IsFloodgateOrLater(); } - } - public static bool RestrictHAFloodgate(Host h) - { - return h._RestrictHAFloodgate; + return h._RestrictHA; } private bool _RestrictAlerts @@ -766,10 +743,7 @@ namespace XenAPI { get { - if (Helpers.MidnightRideOrGreater(this)) - return software_version.ContainsKey("xs:linux"); - else - return Get(software_version, "package-linux") == "installed"; + return software_version.ContainsKey("xs:linux"); } } @@ -1079,8 +1053,8 @@ namespace XenAPI } /// - /// The amount of memory free on the host. For George and earlier hosts, we simply use - /// the obvious Host_metrics.memory_free. For Midnight Ride and later, however, we use + /// The amount of memory free on the host. For George and earlier hosts, we use to use + /// the obvious Host_metrics.memory_free. Since Midnight Ride, however, we use /// the same calculation as xapi, adding the used memory and the virtualisation overheads /// on each of the VMs. This is a more conservative estimate (i.e., it reports less memory /// free), but it's the one we need to make the memory go down to zero when ballooning @@ -1094,9 +1068,6 @@ namespace XenAPI if (host_metrics == null) return 0; - if (!Helpers.MidnightRideOrGreater(Connection)) - return host_metrics.memory_free; - long used = memory_overhead; foreach (VM vm in Connection.ResolveAll(resident_VMs)) { @@ -1178,20 +1149,6 @@ namespace XenAPI { get { - if (!Helpers.MidnightRideOrGreater(Connection)) - { - Host_metrics host_metrics = Connection.Resolve(this.metrics); - if (host_metrics == null) - return 0; - long totalused = 0; - foreach (VM vm in Connection.ResolveAll(resident_VMs)) - { - VM_metrics vmMetrics = vm.Connection.Resolve(vm.metrics); - if (vmMetrics != null) - totalused += vmMetrics.memory_actual; - } - return host_metrics.memory_total - totalused - host_metrics.memory_free; - } long xen_mem = memory_overhead; foreach (VM vm in Connection.ResolveAll(resident_VMs)) { diff --git a/XenModel/XenAPI-Extensions/Network.cs b/XenModel/XenAPI-Extensions/Network.cs index 68e0ed0a3..5dc071709 100644 --- a/XenModel/XenAPI-Extensions/Network.cs +++ b/XenModel/XenAPI-Extensions/Network.cs @@ -280,7 +280,6 @@ namespace XenAPI /// /// Do not use for new networks, perform checks by hand: /// No jumbo frames on CHINs - /// No jumbo frames pre Cowley /// public bool CanUseJumboFrames { @@ -289,9 +288,6 @@ namespace XenAPI if (Connection == null) return false; - if (!Helpers.CowleyOrGreater(Connection)) - return false; - // not supported on CHINs if (Connection.ResolveAll(PIFs).Find(delegate(PIF p) { return p.IsTunnelAccessPIF; }) != null) return false; diff --git a/XenModel/XenAPI-Extensions/PBD.cs b/XenModel/XenAPI-Extensions/PBD.cs index 20a5a1ccf..f2c109014 100644 --- a/XenModel/XenAPI-Extensions/PBD.cs +++ b/XenModel/XenAPI-Extensions/PBD.cs @@ -251,7 +251,7 @@ namespace XenAPI SR sr = Connection.Resolve(SR); - if (sr != null && sr.type == "cslg" && Helpers.MidnightRideOrGreater(sr.Connection)) + if (sr != null && sr.type == "cslg") { string host, username, passwordSecret; diff --git a/XenModel/XenAPI-Extensions/PIF.cs b/XenModel/XenAPI-Extensions/PIF.cs index a89db4fce..19174a37f 100644 --- a/XenModel/XenAPI-Extensions/PIF.cs +++ b/XenModel/XenAPI-Extensions/PIF.cs @@ -199,10 +199,7 @@ namespace XenAPI if (management) return false; - bool criterion = - Helpers.BostonOrGreater(Connection) ? - (ip_configuration_mode != ip_configuration_mode.None && ip_configuration_mode != ip_configuration_mode.unknown) : - disallow_unplug; + bool criterion = (ip_configuration_mode != ip_configuration_mode.None && ip_configuration_mode != ip_configuration_mode.unknown); if (!criterion) return false; diff --git a/XenModel/XenAPI-Extensions/Pool.cs b/XenModel/XenAPI-Extensions/Pool.cs index 6fc76cfa9..e117fcd93 100644 --- a/XenModel/XenAPI-Extensions/Pool.cs +++ b/XenModel/XenAPI-Extensions/Pool.cs @@ -113,60 +113,18 @@ namespace XenAPI { get { - if (Helpers.MidnightRideOrGreater(Connection)) + var hosts = new List(Connection.Cache.Hosts); + foreach (Host.Edition edition in Enum.GetValues(typeof(Host.Edition))) { - var hosts = new List(Connection.Cache.Hosts); - foreach (Host.Edition edition in Enum.GetValues(typeof(Host.Edition))) - { - Host.Edition edition1 = edition; - Host host = hosts.Find(h => h.edition == Host.GetEditionText(edition1)); + Host.Edition edition1 = edition; + Host host = hosts.Find(h => h.edition == Host.GetEditionText(edition1)); - if (host != null) - { - return Helpers.GetFriendlyLicenseName(host); - } - } - return PropertyManager.GetFriendlyName("Label-host.edition-free"); - } - else - { - Host lowestLicenseHost = null; - string lowestLicense = ""; - foreach (Host host in this.Connection.Cache.Hosts) + if (host != null) { - string sku = host.license_params.ContainsKey("sku_type") ? host.license_params["sku_type"].Replace(" ", "_").ToLowerInvariant() : "xe_express"; - - //Express - if (sku.EndsWith("xe_express")) - { - lowestLicenseHost = host; - lowestLicense = sku; - break; - } - - // Server - if (sku.EndsWith("xe_server") && lowestLicense.EndsWith("xe_enterprise")) - { - lowestLicenseHost = host; - lowestLicense = sku; - } - - // Enterprise - if (lowestLicense == "") - { - lowestLicenseHost = host; - lowestLicense = sku; - } - } - if (lowestLicense.EndsWith("xe_express")) - { - return PropertyManager.GetFriendlyName("Label-host.sku_type-FG-xe_express"); - } - else - { - return Helpers.GetFriendlyLicenseName(lowestLicenseHost); + return Helpers.GetFriendlyLicenseName(host); } } + return PropertyManager.GetFriendlyName("Label-host.edition-free"); } } /// @@ -301,16 +259,6 @@ namespace XenAPI public StorageLinkCredentials GetStorageLinkCredentials() { - if (other_config != null && Helpers.MidnightRideOrGreater(Connection) && !Helpers.BostonOrGreater(Connection)) - { - var otherConfig = new Dictionary(other_config); - string host, user, passwordSecret; - otherConfig.TryGetValue("storagelink_host", out host); - otherConfig.TryGetValue("storagelink_user", out user); - otherConfig.TryGetValue("storagelink_password_secret", out passwordSecret); - - return new StorageLinkCredentials(Connection, host, user, null, passwordSecret); - } return null; } @@ -325,8 +273,7 @@ namespace XenAPI foreach (Host h in Connection.Cache.Hosts) { - if (!Helpers.CowleyOrGreater(h) || - Host.RestrictVSwitchController(h) || + if (Host.RestrictVSwitchController(h) || !h.software_version.ContainsKey("network_backend") || h.software_version["network_backend"] != "openvswitch") { diff --git a/XenModel/XenAPI-Extensions/Role.cs b/XenModel/XenAPI-Extensions/Role.cs index f483e30eb..430e8ccd6 100644 --- a/XenModel/XenAPI-Extensions/Role.cs +++ b/XenModel/XenAPI-Extensions/Role.cs @@ -231,16 +231,13 @@ namespace XenAPI else validRoleList = ValidRoleList(apiMethodsToRoleCheck, connection, debug); - if (Helpers.MidnightRideOrGreater(connection)) - { - if (connection.Session != null && connection.Session.IsLocalSuperuser) - return true; + if (connection.Session != null && connection.Session.IsLocalSuperuser) + return true; - foreach (Role role in validRoleList) - { - if (connection.Session != null && connection.Session.Roles != null && connection.Session.Roles.Contains(role)) - return true; - } + foreach (Role role in validRoleList) + { + if (connection.Session != null && connection.Session.Roles != null && connection.Session.Roles.Contains(role)) + return true; } return false; } diff --git a/XenModel/XenAPI-Extensions/SR.cs b/XenModel/XenAPI-Extensions/SR.cs index 98d2404ec..e542aeb95 100644 --- a/XenModel/XenAPI-Extensions/SR.cs +++ b/XenModel/XenAPI-Extensions/SR.cs @@ -425,7 +425,7 @@ namespace XenAPI return true; //CP-2458: hide SRs that were introduced by a DR_task - if (Helpers.BostonOrGreater(Connection) && introduced_by != null && introduced_by.opaque_ref != Helper.NullOpaqueRef) + if (introduced_by != null && introduced_by.opaque_ref != Helper.NullOpaqueRef) return false; return !IsHidden; @@ -452,9 +452,6 @@ namespace XenAPI type == SRTypes.lvmoiscsi)) return false; - if (!Helpers.GeorgeOrGreater(Connection)) - return false; - return !BoolKey(sm_config, USE_VHD); } } diff --git a/XenModel/XenAPI-Extensions/Session.cs b/XenModel/XenAPI-Extensions/Session.cs index d4aa5d0cf..50cfc0114 100644 --- a/XenModel/XenAPI-Extensions/Session.cs +++ b/XenModel/XenAPI-Extensions/Session.cs @@ -229,10 +229,6 @@ namespace XenAPI if (IsLocalSuperuser || XenAdmin.Core.Helpers.GetMaster(Connection).external_auth_type != Auth.AUTH_TYPE_AD) return Messages.AD_LOCAL_ROOT_ACCOUNT; - // AD users pre midnight ride are all pool admins - if (!Helpers.MidnightRideOrGreater(Connection)) - return Messages.AD_ROLE_POOL_ADMIN; - return Role.FriendlyCSVRoleList(Roles); } } @@ -248,9 +244,6 @@ namespace XenAPI if (IsLocalSuperuser || XenAdmin.Core.Helpers.GetMaster(Connection).external_auth_type != Auth.AUTH_TYPE_AD) return Messages.AD_LOCAL_ROOT_ACCOUNT; - // AD users pre midnight ride are all pool admins - if (!Helpers.MidnightRideOrGreater(Connection)) - return Messages.AD_ROLE_POOL_ADMIN; //Sort roles from highest to lowest roles.Sort((r1, r2) => { return r2.CompareTo(r1); }); //Take the highest role diff --git a/XenModel/XenAPI-Extensions/VDI.cs b/XenModel/XenAPI-Extensions/VDI.cs index f3a953a28..9e24cab6c 100644 --- a/XenModel/XenAPI-Extensions/VDI.cs +++ b/XenModel/XenAPI-Extensions/VDI.cs @@ -271,11 +271,7 @@ namespace XenAPI { get { - // The HA types changed in Boston - if (Helpers.BostonOrGreater(Connection)) - return (type == vdi_type.ha_statefile || type == vdi_type.redo_log); - else - return (type == vdi_type.ha_statefile || type == vdi_type.metadata); + return (type == vdi_type.ha_statefile || type == vdi_type.redo_log); } } @@ -295,7 +291,7 @@ namespace XenAPI /// public bool IsMetadataForDR { - get { return Helpers.BostonOrGreater(Connection) && type == vdi_type.metadata; } + get { return type == vdi_type.metadata; } } /// diff --git a/XenModel/XenAPI-Extensions/VM.cs b/XenModel/XenAPI-Extensions/VM.cs index ed7a96074..842a50c2d 100644 --- a/XenModel/XenAPI-Extensions/VM.cs +++ b/XenModel/XenAPI-Extensions/VM.cs @@ -544,6 +544,9 @@ namespace XenAPI other_config = new_other_config; } + // AutoPowerOn is supposed to be unsupported. However, we advise customers how to + // enable it (http://support.citrix.com/article/CTX133910), so XenCenter has to be + // able to recognise it, and turn it off during Rolling Pool Upgrade. public bool AutoPowerOn { get @@ -1215,17 +1218,12 @@ namespace XenAPI /// /// An enum-ified version of ha_restart_priority: use this one instead. - /// For pre-Boston VMs: If this VM is running and ha-always-run is false, returns DoNotRestart regardless of the underlying ha_restart_priority. /// NB setting this property does not change ha-always-run. /// public HA_Restart_Priority HARestartPriority { get { - if (this.power_state == vm_power_state.Running && !this.ha_always_run && !Helpers.BostonOrGreater(this.Connection)) - { - return HA_Restart_Priority.DoNotRestart; - } return StringToPriority(this.ha_restart_priority); } set @@ -1285,15 +1283,7 @@ namespace XenAPI public static List GetAvailableRestartPriorities(IXenConnection connection) { var restartPriorities = new List(); - if (connection == null || Helpers.BostonOrGreater(connection)) - { - restartPriorities.Add(HA_Restart_Priority.Restart); - } - else - { - restartPriorities.Add(HA_Restart_Priority.AlwaysRestartHighPriority); - restartPriorities.Add(HA_Restart_Priority.AlwaysRestart); - } + restartPriorities.Add(HA_Restart_Priority.Restart); restartPriorities.Add(HA_Restart_Priority.BestEffort); restartPriorities.Add(HA_Restart_Priority.DoNotRestart); return restartPriorities; @@ -1310,16 +1300,12 @@ namespace XenAPI public static bool HaPriorityIsRestart(IXenConnection connection, HA_Restart_Priority haRestartPriority) { - if (Helpers.BostonOrGreater(connection)) - return haRestartPriority == HA_Restart_Priority.Restart; - return haRestartPriority == HA_Restart_Priority.AlwaysRestart || haRestartPriority == HA_Restart_Priority.AlwaysRestartHighPriority; + return haRestartPriority == HA_Restart_Priority.Restart; } public static HA_Restart_Priority HaHighestProtectionAvailable(IXenConnection connection) { - if (Helpers.BostonOrGreater(connection)) - return HA_Restart_Priority.Restart; - return HA_Restart_Priority.AlwaysRestart; + return HA_Restart_Priority.Restart; } public const string RESTART_PRIORITY_ALWAYS_RESTART_HIGH_PRIORITY = "0"; //only used for Pre-Boston pools @@ -1381,7 +1367,6 @@ namespace XenAPI /// /// True if this VM's ha_restart_priority is not "Do not restart" and its pool has ha_enabled true. - /// For pre-Boston VMs: True if this VM has ha_always_run set and its pool has ha_enabled true. /// public bool HAIsProtected { @@ -1392,37 +1377,17 @@ namespace XenAPI Pool myPool = Helpers.GetPoolOfOne(Connection); if (myPool == null) return false; - if (Helpers.BostonOrGreater(Connection)) - return myPool.ha_enabled && this.HARestartPriority != HA_Restart_Priority.DoNotRestart; - return myPool.ha_enabled && this.ha_always_run; + return myPool.ha_enabled && this.HARestartPriority != HA_Restart_Priority.DoNotRestart; } } /// - /// Calls set_ha_restart_priority and set_ha_always_run as appropriate. + /// Calls set_ha_restart_priority /// /// public static void SetHaRestartPriority(Session session, VM vm, HA_Restart_Priority priority) { - if (priority == HA_Restart_Priority.DoNotRestart) - { - // We must avoid the invalid state of ha_always_run==true, ha_restart_priority==DoNotRestart - if (!Helpers.BostonOrGreater(vm.Connection)) - VM.set_ha_always_run(session, vm.opaque_ref, false); - - VM.set_ha_restart_priority(session, vm.opaque_ref, PriorityToString(priority)); - } - else - { - // Set new VM restart priority - VM.set_ha_restart_priority(session, vm.opaque_ref, PriorityToString(priority)); - - if (!Helpers.BostonOrGreater(vm.Connection)) - { - // If VM is running, set ha_always_run to true to activate HA protection - VM.set_ha_always_run(session, vm.opaque_ref, vm.power_state == vm_power_state.Running); - } - } + VM.set_ha_restart_priority(session, vm.opaque_ref, PriorityToString(priority)); } public bool AnyDiskFastClonable @@ -1588,11 +1553,6 @@ namespace XenAPI return false; } - if (!Helpers.MidnightRideOrGreater(Connection)) - { - return false; - } - if (bios_strings.Count == 0) { return false; diff --git a/XenModel/XenAPI/Session.cs b/XenModel/XenAPI/Session.cs index 1f0e55da6..607f74543 100644 --- a/XenModel/XenAPI/Session.cs +++ b/XenModel/XenAPI/Session.cs @@ -102,7 +102,6 @@ namespace XenAPI { this._uuid = opaque_ref; SetAPIVersion(); - if (APIVersion >= API_Version.API_1_6) SetADDetails(); } @@ -145,9 +144,6 @@ namespace XenAPI // For example, some users get access to the pool through a group subject and will not be in the main cache UserDetails.UpdateDetails(_userSid, this); - if (APIVersion <= API_Version.API_1_6) // Older versions have no RBAC, only AD - return; - // allRoles will contain every role on the server, permissions contains the subset of those that are available to this session. permissions = Session.get_rbac_permissions(this, uuid); Dictionary,Role> allRoles = Role.get_all_records(this); @@ -261,8 +257,7 @@ namespace XenAPI { _uuid = proxy.session_login_with_password(username, password, version).parse(); SetAPIVersion(); - if (APIVersion >= API_Version.API_1_6) - SetADDetails(); + SetADDetails(); } catch (Failure exn) { @@ -284,8 +279,7 @@ namespace XenAPI { _uuid = proxy.session_login_with_password(username, password, version, originator).parse(); SetAPIVersion(); - if (APIVersion >= API_Version.API_1_6) - SetADDetails(); + SetADDetails(); } catch (Failure exn) { diff --git a/XenModel/XenAPI/XenObjectDownloader.cs b/XenModel/XenAPI/XenObjectDownloader.cs index be94369c1..7bcb9bf41 100644 --- a/XenModel/XenAPI/XenObjectDownloader.cs +++ b/XenModel/XenAPI/XenObjectDownloader.cs @@ -265,51 +265,22 @@ namespace XenAPI Download_PBD(session, list); Download_Crashdump(session, list); Download_Console(session, list); - - if (session.APIVersion >= API_Version.API_1_2) - { - // Download Miami-only objects - Download_Pool_patch(session, list); - Download_Bond(session, list); - Download_VLAN(session, list); - } - - if (session.APIVersion >= API_Version.API_1_3) - { - // Download Orlando-only objects - Download_Blob(session, list); - Download_Message(session, list); - } - - if (session.APIVersion >= API_Version.API_1_6) - { - // Download George-only objects - Download_Subject(session, list); - } - - if (session.APIVersion >= API_Version.API_1_7) - { - // Download Midnight Ride-only objects - Download_Role(session, list); - } - - if (session.APIVersion >= API_Version.API_1_8) - { - // Download Cowley-only objects - Download_VMPP(session, list); - Download_Tunnel(session, list); - } - - if (session.APIVersion >= API_Version.API_1_9) - { - // Download Boston-only objects - Download_VM_appliance(session, list); - Download_DR_task(session, list); - Download_PCI(session, list); - Download_PGPU(session, list); - Download_GPU_group(session, list); - Download_VGPU(session, list); - } + Download_Pool_patch(session, list); + Download_Bond(session, list); + Download_VLAN(session, list); + Download_Blob(session, list); + Download_Message(session, list); + Download_Subject(session, list); + Download_Role(session, list); + Download_VMPP(session, list); + Download_Tunnel(session, list); + Download_VM_appliance(session, list); + Download_DR_task(session, list); + Download_PCI(session, list); + Download_PGPU(session, list); + Download_GPU_group(session, list); + Download_VGPU(session, list); + // NB New types should be protected with if (session.APIVersion >= API_Version.API_x_y) foreach (ObjectChange o in list) { diff --git a/XenOvfTransport/Export.cs b/XenOvfTransport/Export.cs index e409b2ba1..5d7cb1b7f 100644 --- a/XenOvfTransport/Export.cs +++ b/XenOvfTransport/Export.cs @@ -216,8 +216,7 @@ namespace XenOvfTransport #endregion #region SET STARTUP OPTIONS - if (Helpers.BostonOrGreater(xenSession.Connection)) - OVF.AddStartupSection(ovfEnv, true, vsId, vm.order, vm.start_delay, vm.shutdown_delay); + OVF.AddStartupSection(ovfEnv, true, vsId, vm.order, vm.start_delay, vm.shutdown_delay); #endregion #region GET AND EXPORT DISKS using iSCSI diff --git a/XenOvfTransport/Import.cs b/XenOvfTransport/Import.cs index d3aeb77f8..52c374f04 100644 --- a/XenOvfTransport/Import.cs +++ b/XenOvfTransport/Import.cs @@ -259,7 +259,7 @@ namespace XenOvfTransport #region Create appliance XenRef applRef = null; - if (Helpers.BostonOrGreater(xenSession.Connection) && ApplianceName != null) + if (ApplianceName != null) { var vmAppliance = new VM_appliance {name_label = ApplianceName, Connection = xenSession.Connection}; applRef = VM_appliance.create(xenSession, vmAppliance); @@ -286,29 +286,26 @@ namespace XenOvfTransport log.DebugFormat("OVF.Import.Process: DefineSystem completed ({0})", VM.get_name_label(xenSession, vmRef)); #region Set appliance - if (Helpers.BostonOrGreater(xenSession.Connection)) + if (applRef != null) + VM.set_appliance(xenSession, vmRef.opaque_ref, applRef.opaque_ref); + + if (ovfObj.Sections != null) { - if (applRef != null) - VM.set_appliance(xenSession, vmRef.opaque_ref, applRef.opaque_ref); - - if (ovfObj.Sections != null) + StartupSection_Type[] startUpArray = OVF.FindSections(ovfObj.Sections); + if (startUpArray != null && startUpArray.Length > 0) { - StartupSection_Type[] startUpArray = OVF.FindSections(ovfObj.Sections); - if (startUpArray != null && startUpArray.Length > 0) + var startupSection = startUpArray[0]; + var itemList = startupSection.Item; + + if (itemList != null) { - var startupSection = startUpArray[0]; - var itemList = startupSection.Item; + var item = itemList.FirstOrDefault(it => it.id == vSystem.id); - if (itemList != null) + if (item != null) { - var item = itemList.FirstOrDefault(it => it.id == vSystem.id); - - if (item != null) - { - VM.set_start_delay(xenSession, vmRef.opaque_ref, item.startDelay); - VM.set_shutdown_delay(xenSession, vmRef.opaque_ref, item.stopDelay); - VM.set_order(xenSession, vmRef.opaque_ref, item.order); - } + VM.set_start_delay(xenSession, vmRef.opaque_ref, item.startDelay); + VM.set_shutdown_delay(xenSession, vmRef.opaque_ref, item.stopDelay); + VM.set_order(xenSession, vmRef.opaque_ref, item.order); } } } @@ -1216,17 +1213,6 @@ namespace XenOvfTransport table.Add("actions_after_reboot", "restart"); table.Add("actions_after_crash", "restart"); - //place imported appliance in folder only for versions earlier than Boston - if (!Helpers.BostonOrGreater(xenSession.Connection) && ApplianceName != null && Properties.Settings.Default.CreateApplianceFolder) - { - Hashtable otherconfig = new Hashtable(); - string parent_folder = Properties.Settings.Default.ApplianceFolderPath; - if (string.IsNullOrEmpty(parent_folder)) - parent_folder = Messages.APPLIANCE_FOLDER_PATH; - otherconfig.Add("folder", string.Format("/{0}/{1}", parent_folder, ApplianceName)); - table.Add("other_config", otherconfig); - } - double hvmshadowmultiplier = 1.0; table.Add("HVM_shadow_multiplier", hvmshadowmultiplier); table.Add("ha_always_run", false);