mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-11-27 02:56:01 +01:00
Merge remote-tracking branch 'remotes/origin/upstream' into development
This commit is contained in:
commit
1e38cf9b30
16
XenAdmin/Controls/PDSection.Designer.cs
generated
16
XenAdmin/Controls/PDSection.Designer.cs
generated
@ -78,9 +78,9 @@ namespace XenAdmin.Controls
|
||||
this.chevron.Image = global::XenAdmin.Properties.Resources.PDChevronUp;
|
||||
this.chevron.Name = "chevron";
|
||||
this.chevron.TabStop = false;
|
||||
this.chevron.MouseLeave += new System.EventHandler(this.chevron_MouseLeave);
|
||||
this.chevron.Click += new System.EventHandler(this.chevron_Click);
|
||||
this.chevron.MouseEnter += new System.EventHandler(this.chevron_MouseEnter);
|
||||
this.chevron.MouseLeave += new System.EventHandler(this.chevron_MouseLeave);
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
@ -97,7 +97,6 @@ namespace XenAdmin.Controls
|
||||
//
|
||||
// dataGridViewEx1
|
||||
//
|
||||
resources.ApplyResources(this.dataGridViewEx1, "dataGridViewEx1");
|
||||
this.dataGridViewEx1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
|
||||
this.dataGridViewEx1.BackgroundColor = System.Drawing.SystemColors.Window;
|
||||
this.dataGridViewEx1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
@ -115,6 +114,7 @@ namespace XenAdmin.Controls
|
||||
dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText;
|
||||
dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewEx1.DefaultCellStyle = dataGridViewCellStyle3;
|
||||
resources.ApplyResources(this.dataGridViewEx1, "dataGridViewEx1");
|
||||
this.dataGridViewEx1.GridColor = System.Drawing.SystemColors.Control;
|
||||
this.dataGridViewEx1.HideSelection = true;
|
||||
this.dataGridViewEx1.Name = "dataGridViewEx1";
|
||||
@ -122,14 +122,14 @@ namespace XenAdmin.Controls
|
||||
dataGridViewCellStyle4.Padding = new System.Windows.Forms.Padding(5);
|
||||
this.dataGridViewEx1.RowsDefaultCellStyle = dataGridViewCellStyle4;
|
||||
this.dataGridViewEx1.ShowCellToolTips = false;
|
||||
this.dataGridViewEx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewEx1_MouseClick);
|
||||
this.dataGridViewEx1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dataGridViewEx1_KeyPress);
|
||||
this.dataGridViewEx1.SelectionChanged += new System.EventHandler(this.dataGridViewEx1_SelectionChanged);
|
||||
this.dataGridViewEx1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewEx1_CellContentClick);
|
||||
this.dataGridViewEx1.SelectionChanged += new System.EventHandler(this.dataGridViewEx1_SelectionChanged);
|
||||
this.dataGridViewEx1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dataGridViewEx1_KeyPress);
|
||||
this.dataGridViewEx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewEx1_MouseClick);
|
||||
//
|
||||
// KeyColumn
|
||||
//
|
||||
this.KeyColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
|
||||
this.KeyColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
|
||||
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.TopLeft;
|
||||
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||
this.KeyColumn.DefaultCellStyle = dataGridViewCellStyle1;
|
||||
@ -157,8 +157,8 @@ namespace XenAdmin.Controls
|
||||
this.Controls.Add(this.dataGridViewEx1);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.DoubleBuffered = true;
|
||||
this.Name = "PDSection";
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.Name = "PDSection";
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.chevron)).EndInit();
|
||||
@ -176,8 +176,8 @@ namespace XenAdmin.Controls
|
||||
private System.Windows.Forms.PictureBox chevron;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn KeyColumn;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ValueColumn;
|
||||
private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
@ -492,7 +492,6 @@ namespace XenAdmin.Controls
|
||||
|
||||
internal void fixFirstColumnWidth(int width)
|
||||
{
|
||||
dataGridViewEx1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
|
||||
dataGridViewEx1.Columns[0].Width = width;
|
||||
}
|
||||
|
||||
|
@ -112,20 +112,20 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label1.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 12pt</value>
|
||||
</data>
|
||||
@ -148,7 +148,7 @@
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
@ -166,13 +166,13 @@
|
||||
<value>2, 24</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
@ -202,7 +202,7 @@
|
||||
<value>chevron</value>
|
||||
</data>
|
||||
<data name=">>chevron.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>chevron.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
@ -223,13 +223,13 @@
|
||||
<value>798, 32</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
@ -237,7 +237,7 @@
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="copyToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
@ -253,25 +253,28 @@
|
||||
<value>contextMenuStrip1</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="dataGridViewEx1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<metadata name="KeyColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="KeyColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="KeyColumn.HeaderText" xml:space="preserve">
|
||||
<value>Column1</value>
|
||||
<value>Key</value>
|
||||
</data>
|
||||
<data name="KeyColumn.MinimumWidth" type="System.Int32, mscorlib">
|
||||
<value>150</value>
|
||||
</data>
|
||||
<data name="KeyColumn.Width" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<value>150</value>
|
||||
</data>
|
||||
<metadata name="ValueColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="ValueColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ValueColumn.HeaderText" xml:space="preserve">
|
||||
<value>Column1</value>
|
||||
<value>Value</value>
|
||||
</data>
|
||||
<data name="dataGridViewEx1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="dataGridViewEx1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>1, 33</value>
|
||||
@ -283,7 +286,7 @@
|
||||
<value>798, 116</value>
|
||||
</data>
|
||||
<data name="dataGridViewEx1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>dataGridViewEx1.Name" xml:space="preserve">
|
||||
<value>dataGridViewEx1</value>
|
||||
@ -297,9 +300,12 @@
|
||||
<data name=">>dataGridViewEx1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.MaximumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>900, 9999999</value>
|
||||
</data>
|
||||
<data name="$this.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>1, 1, 1, 1</value>
|
||||
</data>
|
||||
@ -310,24 +316,24 @@
|
||||
<value>copyToolStripMenuItem</value>
|
||||
</data>
|
||||
<data name=">>copyToolStripMenuItem.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>KeyColumn.Name" xml:space="preserve">
|
||||
<value>KeyColumn</value>
|
||||
</data>
|
||||
<data name=">>KeyColumn.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ValueColumn.Name" xml:space="preserve">
|
||||
<value>ValueColumn</value>
|
||||
</data>
|
||||
<data name=">>ValueColumn.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PDSection</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
167
XenAdmin/TabPages/GeneralTabPage.Designer.cs
generated
167
XenAdmin/TabPages/GeneralTabPage.Designer.cs
generated
@ -33,9 +33,6 @@ namespace XenAdmin.TabPages
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GeneralTabPage));
|
||||
this.buttonProperties = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.buttonPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.buttonViewConsole = new System.Windows.Forms.Button();
|
||||
this.buttonViewLog = new System.Windows.Forms.Button();
|
||||
this.linkLabelExpand = new System.Windows.Forms.LinkLabel();
|
||||
@ -53,8 +50,6 @@ namespace XenAdmin.TabPages
|
||||
this.pdSectionMultipathBoot = new XenAdmin.Controls.PDSection();
|
||||
this.panelStorageLink = new System.Windows.Forms.Panel();
|
||||
this.pdStorageLink = new XenAdmin.Controls.PDSection();
|
||||
this.panelUpdates = new System.Windows.Forms.Panel();
|
||||
this.pdSectionUpdates = new XenAdmin.Controls.PDSection();
|
||||
this.panelMemoryAndVCPUs = new System.Windows.Forms.Panel();
|
||||
this.pdSectionVCPUs = new XenAdmin.Controls.PDSection();
|
||||
this.panelMultipathing = new System.Windows.Forms.Panel();
|
||||
@ -67,24 +62,24 @@ namespace XenAdmin.TabPages
|
||||
this.pdSectionBootOptions = new XenAdmin.Controls.PDSection();
|
||||
this.panelCPU = new System.Windows.Forms.Panel();
|
||||
this.pdSectionCPU = new XenAdmin.Controls.PDSection();
|
||||
this.panelLicense = new System.Windows.Forms.Panel();
|
||||
this.pdSectionLicense = new XenAdmin.Controls.PDSection();
|
||||
this.panelVersion = new System.Windows.Forms.Panel();
|
||||
this.pdSectionVersion = new XenAdmin.Controls.PDSection();
|
||||
this.panelMemory = new System.Windows.Forms.Panel();
|
||||
this.pdSectionMemory = new XenAdmin.Controls.PDSection();
|
||||
this.panelManagementInterfaces = new System.Windows.Forms.Panel();
|
||||
this.pdSectionManagementInterfaces = new XenAdmin.Controls.PDSection();
|
||||
this.panelUpdates = new System.Windows.Forms.Panel();
|
||||
this.pdSectionUpdates = new XenAdmin.Controls.PDSection();
|
||||
this.panelVersion = new System.Windows.Forms.Panel();
|
||||
this.pdSectionVersion = new XenAdmin.Controls.PDSection();
|
||||
this.panelLicense = new System.Windows.Forms.Panel();
|
||||
this.pdSectionLicense = new XenAdmin.Controls.PDSection();
|
||||
this.panelCustomFields = new System.Windows.Forms.Panel();
|
||||
this.pdSectionCustomFields = new XenAdmin.Controls.PDSection();
|
||||
this.panelGeneral = new System.Windows.Forms.Panel();
|
||||
this.pdSectionGeneral = new XenAdmin.Controls.PDSection();
|
||||
this.tableLayoutPanelButtons = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.panelBios = new System.Windows.Forms.Panel();
|
||||
this.pdSectionBios = new XenAdmin.Controls.PDSection();
|
||||
this.pageContainerPanel.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.panel3.SuspendLayout();
|
||||
this.buttonPanel.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.panelReadCaching.SuspendLayout();
|
||||
this.panelDockerInfo.SuspendLayout();
|
||||
@ -92,26 +87,27 @@ namespace XenAdmin.TabPages
|
||||
this.panelStorageLinkSystemCapabilities.SuspendLayout();
|
||||
this.panelMultipathBoot.SuspendLayout();
|
||||
this.panelStorageLink.SuspendLayout();
|
||||
this.panelUpdates.SuspendLayout();
|
||||
this.panelMemoryAndVCPUs.SuspendLayout();
|
||||
this.panelMultipathing.SuspendLayout();
|
||||
this.panelStatus.SuspendLayout();
|
||||
this.panelHighAvailability.SuspendLayout();
|
||||
this.panelBootOptions.SuspendLayout();
|
||||
this.panelCPU.SuspendLayout();
|
||||
this.panelLicense.SuspendLayout();
|
||||
this.panelVersion.SuspendLayout();
|
||||
this.panelMemory.SuspendLayout();
|
||||
this.panelManagementInterfaces.SuspendLayout();
|
||||
this.panelUpdates.SuspendLayout();
|
||||
this.panelVersion.SuspendLayout();
|
||||
this.panelLicense.SuspendLayout();
|
||||
this.panelCustomFields.SuspendLayout();
|
||||
this.panelGeneral.SuspendLayout();
|
||||
this.tableLayoutPanelButtons.SuspendLayout()
|
||||
this.panelBios.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pageContainerPanel
|
||||
//
|
||||
this.pageContainerPanel.Controls.Add(this.panel2);
|
||||
this.pageContainerPanel.Controls.Add(this.panel1);
|
||||
this.pageContainerPanel.Controls.Add(this.tableLayoutPanelButtons);
|
||||
resources.ApplyResources(this.pageContainerPanel, "pageContainerPanel");
|
||||
//
|
||||
// buttonProperties
|
||||
@ -123,28 +119,6 @@ namespace XenAdmin.TabPages
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.panel3);
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.Controls.Add(this.buttonPanel);
|
||||
this.panel3.Controls.Add(this.linkLabelExpand);
|
||||
this.panel3.Controls.Add(this.linkLabelCollapse);
|
||||
resources.ApplyResources(this.panel3, "panel3");
|
||||
this.panel3.Name = "panel3";
|
||||
//
|
||||
// buttonPanel
|
||||
//
|
||||
this.buttonPanel.Controls.Add(this.buttonProperties);
|
||||
this.buttonPanel.Controls.Add(this.buttonViewConsole);
|
||||
this.buttonPanel.Controls.Add(this.buttonViewLog);
|
||||
resources.ApplyResources(this.buttonPanel, "buttonPanel");
|
||||
this.buttonPanel.Name = "buttonPanel";
|
||||
//
|
||||
// buttonViewConsole
|
||||
//
|
||||
resources.ApplyResources(this.buttonViewConsole, "buttonViewConsole");
|
||||
this.buttonViewConsole.Name = "buttonViewConsole";
|
||||
this.buttonViewConsole.UseVisualStyleBackColor = true;
|
||||
@ -180,18 +154,18 @@ namespace XenAdmin.TabPages
|
||||
this.panel2.Controls.Add(this.panelStorageLinkSystemCapabilities);
|
||||
this.panel2.Controls.Add(this.panelMultipathBoot);
|
||||
this.panel2.Controls.Add(this.panelStorageLink);
|
||||
this.panel2.Controls.Add(this.panelUpdates);
|
||||
this.panel2.Controls.Add(this.panelMemoryAndVCPUs);
|
||||
this.panel2.Controls.Add(this.panelMultipathing);
|
||||
this.panel2.Controls.Add(this.panelStatus);
|
||||
this.panel2.Controls.Add(this.panelHighAvailability);
|
||||
this.panel2.Controls.Add(this.panelBootOptions);
|
||||
this.panel2.Controls.Add(this.panelCPU);
|
||||
this.panel2.Controls.Add(this.panelLicense);
|
||||
this.panel2.Controls.Add(this.panelVersion);
|
||||
this.panel2.Controls.Add(this.panelMemory);
|
||||
this.panel2.Controls.Add(this.panelManagementInterfaces);
|
||||
this.panel2.Controls.Add(this.panelBios);
|
||||
this.panel2.Controls.Add(this.panelUpdates);
|
||||
this.panel2.Controls.Add(this.panelVersion);
|
||||
this.panel2.Controls.Add(this.panelLicense);
|
||||
this.panel2.Controls.Add(this.panelCustomFields);
|
||||
this.panel2.Controls.Add(this.panelGeneral);
|
||||
this.panel2.Name = "panel2";
|
||||
@ -278,20 +252,6 @@ namespace XenAdmin.TabPages
|
||||
//
|
||||
// panelUpdates
|
||||
//
|
||||
resources.ApplyResources(this.panelUpdates, "panelUpdates");
|
||||
this.panelUpdates.Controls.Add(this.pdSectionUpdates);
|
||||
this.panelUpdates.Name = "panelUpdates";
|
||||
//
|
||||
// pdSectionUpdates
|
||||
//
|
||||
this.pdSectionUpdates.BackColor = System.Drawing.Color.Gainsboro;
|
||||
resources.ApplyResources(this.pdSectionUpdates, "pdSectionUpdates");
|
||||
this.pdSectionUpdates.Name = "pdSectionUpdates";
|
||||
this.pdSectionUpdates.ShowCellToolTips = false;
|
||||
this.pdSectionUpdates.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// panelMemoryAndVCPUs
|
||||
//
|
||||
resources.ApplyResources(this.panelMemoryAndVCPUs, "panelMemoryAndVCPUs");
|
||||
this.panelMemoryAndVCPUs.Controls.Add(this.pdSectionVCPUs);
|
||||
this.panelMemoryAndVCPUs.Name = "panelMemoryAndVCPUs";
|
||||
@ -376,34 +336,6 @@ namespace XenAdmin.TabPages
|
||||
//
|
||||
// panelLicense
|
||||
//
|
||||
resources.ApplyResources(this.panelLicense, "panelLicense");
|
||||
this.panelLicense.Controls.Add(this.pdSectionLicense);
|
||||
this.panelLicense.Name = "panelLicense";
|
||||
//
|
||||
// pdSectionLicense
|
||||
//
|
||||
this.pdSectionLicense.BackColor = System.Drawing.Color.Gainsboro;
|
||||
resources.ApplyResources(this.pdSectionLicense, "pdSectionLicense");
|
||||
this.pdSectionLicense.Name = "pdSectionLicense";
|
||||
this.pdSectionLicense.ShowCellToolTips = false;
|
||||
this.pdSectionLicense.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// panelVersion
|
||||
//
|
||||
resources.ApplyResources(this.panelVersion, "panelVersion");
|
||||
this.panelVersion.Controls.Add(this.pdSectionVersion);
|
||||
this.panelVersion.Name = "panelVersion";
|
||||
//
|
||||
// pdSectionVersion
|
||||
//
|
||||
this.pdSectionVersion.BackColor = System.Drawing.Color.Gainsboro;
|
||||
resources.ApplyResources(this.pdSectionVersion, "pdSectionVersion");
|
||||
this.pdSectionVersion.Name = "pdSectionVersion";
|
||||
this.pdSectionVersion.ShowCellToolTips = false;
|
||||
this.pdSectionVersion.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// panelMemory
|
||||
//
|
||||
resources.ApplyResources(this.panelMemory, "panelMemory");
|
||||
this.panelMemory.Controls.Add(this.pdSectionMemory);
|
||||
this.panelMemory.Name = "panelMemory";
|
||||
@ -432,6 +364,48 @@ namespace XenAdmin.TabPages
|
||||
//
|
||||
// panelCustomFields
|
||||
//
|
||||
resources.ApplyResources(this.panelUpdates, "panelUpdates");
|
||||
this.panelUpdates.Controls.Add(this.pdSectionUpdates);
|
||||
this.panelUpdates.Name = "panelUpdates";
|
||||
//
|
||||
// pdSectionUpdates
|
||||
//
|
||||
this.pdSectionUpdates.BackColor = System.Drawing.Color.Gainsboro;
|
||||
resources.ApplyResources(this.pdSectionUpdates, "pdSectionUpdates");
|
||||
this.pdSectionUpdates.Name = "pdSectionUpdates";
|
||||
this.pdSectionUpdates.ShowCellToolTips = false;
|
||||
this.pdSectionUpdates.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// panelVersion
|
||||
//
|
||||
resources.ApplyResources(this.panelVersion, "panelVersion");
|
||||
this.panelVersion.Controls.Add(this.pdSectionVersion);
|
||||
this.panelVersion.Name = "panelVersion";
|
||||
//
|
||||
// pdSectionVersion
|
||||
//
|
||||
this.pdSectionVersion.BackColor = System.Drawing.Color.Gainsboro;
|
||||
resources.ApplyResources(this.pdSectionVersion, "pdSectionVersion");
|
||||
this.pdSectionVersion.Name = "pdSectionVersion";
|
||||
this.pdSectionVersion.ShowCellToolTips = false;
|
||||
this.pdSectionVersion.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// panelLicense
|
||||
//
|
||||
resources.ApplyResources(this.panelLicense, "panelLicense");
|
||||
this.panelLicense.Controls.Add(this.pdSectionLicense);
|
||||
this.panelLicense.Name = "panelLicense";
|
||||
//
|
||||
// pdSectionLicense
|
||||
//
|
||||
this.pdSectionLicense.BackColor = System.Drawing.Color.Gainsboro;
|
||||
resources.ApplyResources(this.pdSectionLicense, "pdSectionLicense");
|
||||
this.pdSectionLicense.Name = "pdSectionLicense";
|
||||
this.pdSectionLicense.ShowCellToolTips = false;
|
||||
this.pdSectionLicense.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// panelCustomFields
|
||||
//
|
||||
resources.ApplyResources(this.panelCustomFields, "panelCustomFields");
|
||||
this.panelCustomFields.Controls.Add(this.pdSectionCustomFields);
|
||||
this.panelCustomFields.Name = "panelCustomFields";
|
||||
@ -458,6 +432,16 @@ namespace XenAdmin.TabPages
|
||||
this.pdSectionGeneral.ShowCellToolTips = false;
|
||||
this.pdSectionGeneral.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.pdSection_ExpandedChanged);
|
||||
//
|
||||
// tableLayoutPanelButtons
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanelButtons, "tableLayoutPanelButtons");
|
||||
this.tableLayoutPanelButtons.Controls.Add(this.buttonViewLog, 2, 0);
|
||||
this.tableLayoutPanelButtons.Controls.Add(this.buttonViewConsole, 1, 0);
|
||||
this.tableLayoutPanelButtons.Controls.Add(this.buttonProperties, 0, 0);
|
||||
this.tableLayoutPanelButtons.Controls.Add(this.linkLabelCollapse, 5, 0);
|
||||
this.tableLayoutPanelButtons.Controls.Add(this.linkLabelExpand, 4, 0);
|
||||
this.tableLayoutPanelButtons.Name = "tableLayoutPanelButtons";
|
||||
//
|
||||
// panelBios
|
||||
//
|
||||
resources.ApplyResources(this.panelBios, "panelBios");
|
||||
@ -478,10 +462,7 @@ namespace XenAdmin.TabPages
|
||||
this.DoubleBuffered = true;
|
||||
this.Name = "GeneralTabPage";
|
||||
this.pageContainerPanel.ResumeLayout(false);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
this.buttonPanel.ResumeLayout(false);
|
||||
this.pageContainerPanel.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.panel2.PerformLayout();
|
||||
this.panelReadCaching.ResumeLayout(false);
|
||||
@ -490,20 +471,22 @@ namespace XenAdmin.TabPages
|
||||
this.panelStorageLinkSystemCapabilities.ResumeLayout(false);
|
||||
this.panelMultipathBoot.ResumeLayout(false);
|
||||
this.panelStorageLink.ResumeLayout(false);
|
||||
this.panelUpdates.ResumeLayout(false);
|
||||
this.panelMemoryAndVCPUs.ResumeLayout(false);
|
||||
this.panelMultipathing.ResumeLayout(false);
|
||||
this.panelStatus.ResumeLayout(false);
|
||||
this.panelHighAvailability.ResumeLayout(false);
|
||||
this.panelBootOptions.ResumeLayout(false);
|
||||
this.panelCPU.ResumeLayout(false);
|
||||
this.panelLicense.ResumeLayout(false);
|
||||
this.panelVersion.ResumeLayout(false);
|
||||
this.panelMemory.ResumeLayout(false);
|
||||
this.panelManagementInterfaces.ResumeLayout(false);
|
||||
this.panelUpdates.ResumeLayout(false);
|
||||
this.panelVersion.ResumeLayout(false);
|
||||
this.panelLicense.ResumeLayout(false);
|
||||
this.panelCustomFields.ResumeLayout(false);
|
||||
this.panelGeneral.ResumeLayout(false);
|
||||
this.panelBios.ResumeLayout(false);
|
||||
this.tableLayoutPanelButtons.ResumeLayout(false);
|
||||
this.tableLayoutPanelButtons.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@ -512,7 +495,6 @@ namespace XenAdmin.TabPages
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button buttonProperties;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private XenAdmin.Controls.PanelNoFocusScroll panel2;
|
||||
private System.Windows.Forms.Panel panelGeneral;
|
||||
private XenAdmin.Controls.PDSection pdSectionGeneral;
|
||||
@ -542,7 +524,6 @@ namespace XenAdmin.TabPages
|
||||
private XenAdmin.Controls.PDSection pdSectionUpdates;
|
||||
private System.Windows.Forms.LinkLabel linkLabelExpand;
|
||||
private System.Windows.Forms.LinkLabel linkLabelCollapse;
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.Panel panelStorageLink;
|
||||
private XenAdmin.Controls.PDSection pdStorageLink;
|
||||
private System.Windows.Forms.Panel panelMultipathBoot;
|
||||
@ -557,7 +538,7 @@ namespace XenAdmin.TabPages
|
||||
private Controls.PDSection pdSectionReadCaching;
|
||||
private System.Windows.Forms.Button buttonViewConsole;
|
||||
private System.Windows.Forms.Button buttonViewLog;
|
||||
private System.Windows.Forms.FlowLayoutPanel buttonPanel;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelButtons;
|
||||
private System.Windows.Forms.Panel panelBios;
|
||||
private Controls.PDSection pdSectionBios;
|
||||
}
|
||||
|
@ -87,8 +87,6 @@ namespace XenAdmin.TabPages
|
||||
if (s == null)
|
||||
continue;
|
||||
sections.Add(s);
|
||||
s.MaximumSize = new Size(900, 9999999);
|
||||
s.fixFirstColumnWidth(150);
|
||||
s.contentChangedSelection += s_contentChangedSelection;
|
||||
s.contentReceivedFocus += s_contentReceivedFocus;
|
||||
}
|
||||
@ -1769,7 +1767,7 @@ namespace XenAdmin.TabPages
|
||||
|
||||
output.Sort(StringUtility.NaturalCompare);
|
||||
|
||||
return String.Join(", ", output.ToArray());
|
||||
return string.Join(Environment.NewLine, output);
|
||||
}
|
||||
|
||||
private string poolUpdateString(Predicate<Pool_update> predicate)
|
||||
@ -1784,7 +1782,7 @@ namespace XenAdmin.TabPages
|
||||
|
||||
output.Sort(StringUtility.NaturalCompare);
|
||||
|
||||
return String.Join(", ", output.ToArray());
|
||||
return string.Join(Environment.NewLine, output);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -309,8 +309,7 @@ namespace XenAdmin.Wizards.DRWizards
|
||||
}
|
||||
foreach (var vm in poolMetadata.Vms.Values)
|
||||
{
|
||||
if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") &&
|
||||
vm.appliance.opaque_ref != "OpaqueRef:NULL")
|
||||
if (vm.IsAssignedToVapp())
|
||||
continue;
|
||||
SummaryReport.AddLine(vm.Name(), 2);
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ namespace XenAdmin.Wizards.DRWizards
|
||||
{
|
||||
foreach (var vmItem in poolMetadata.Vms)
|
||||
{
|
||||
if (vmItem.Value.appliance.opaque_ref != null && vmItem.Value.appliance.opaque_ref.StartsWith("OpaqueRef:") && vmItem.Value.appliance.opaque_ref != "OpaqueRef:NULL")
|
||||
if (vmItem.Value.IsAssignedToVapp())
|
||||
{
|
||||
//VM included in an appliance
|
||||
continue;
|
||||
|
@ -350,8 +350,7 @@ namespace XenAdmin.Wizards.DRWizards
|
||||
|
||||
foreach (VM vm in poolMetadata.Vms.Values)
|
||||
{
|
||||
if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") &&
|
||||
vm.appliance.opaque_ref != "OpaqueRef:NULL")
|
||||
if (vm.IsAssignedToVapp())
|
||||
{
|
||||
//VM included in an appliance
|
||||
continue;
|
||||
@ -381,8 +380,7 @@ namespace XenAdmin.Wizards.DRWizards
|
||||
|
||||
foreach (VM vm in poolMetadata.Vms.Values)
|
||||
{
|
||||
if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") &&
|
||||
vm.appliance.opaque_ref != "OpaqueRef:NULL")
|
||||
if (vm.IsAssignedToVapp())
|
||||
{
|
||||
//VM included in an appliance
|
||||
continue;
|
||||
@ -406,7 +404,7 @@ namespace XenAdmin.Wizards.DRWizards
|
||||
|
||||
foreach (VM vm in poolMetadata.Vms.Values)
|
||||
{
|
||||
if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") && vm.appliance.opaque_ref != "OpaqueRef:NULL")
|
||||
if (vm.IsAssignedToVapp())
|
||||
{
|
||||
//VM included in an appliance
|
||||
continue;
|
||||
|
@ -220,7 +220,7 @@ namespace XenAdmin.Wizards.DRWizards
|
||||
|
||||
foreach (var vm in poolMetadata.Vms.Values)
|
||||
{
|
||||
if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") && vm.appliance.opaque_ref != "OpaqueRef:NULL")
|
||||
if (vm.IsAssignedToVapp())
|
||||
{
|
||||
//VM included in an appliance
|
||||
continue;
|
||||
|
@ -72,6 +72,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
private List<HostUpdateMapping> patchMappings = new List<HostUpdateMapping>();
|
||||
protected List<string> hostsThatWillRequireReboot = new List<string>();
|
||||
protected Dictionary<string, List<string>> livePatchAttempts = new Dictionary<string, List<string>>();
|
||||
public Dictionary<XenServerPatch, string> AllDownloadedPatches = new Dictionary<XenServerPatch, string>();
|
||||
|
||||
public AutomatedUpdatesBasePage()
|
||||
@ -148,8 +149,10 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
protected abstract string BlurbText();
|
||||
protected abstract string SuccessMessageOnCompletion(bool multiplePools);
|
||||
protected abstract string FailureMessageOnCompletion(bool multiplePools);
|
||||
protected abstract string WarningMessageOnCompletion(bool multiplePools);
|
||||
protected abstract string SuccessMessagePerPool(Pool pool);
|
||||
protected abstract string FailureMessagePerPool(bool multipleErrors);
|
||||
protected abstract string WarningMessagePerPool(Pool pool);
|
||||
protected abstract string UserCancellationMessage();
|
||||
protected abstract string ReconsiderCancellationMessage();
|
||||
|
||||
@ -319,7 +322,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
else if (!bgw.IsBusy)
|
||||
{
|
||||
sb.AppendIndented(SuccessMessagePerPool(bgw.Pool)).AppendLine();
|
||||
sb.AppendIndented(WarningMessagePerPool(bgw.Pool) ?? SuccessMessagePerPool(bgw.Pool)).AppendLine();
|
||||
}
|
||||
|
||||
sb.AppendLine();
|
||||
@ -384,13 +387,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
var restartHostPlanAction = (RestartHostPlanAction)hp.DelayedPlanActions.FirstOrDefault(a => a is RestartHostPlanAction);
|
||||
if (restartHostPlanAction != null)
|
||||
{
|
||||
if (restartHostPlanAction.SkipRestartHost(host))
|
||||
{
|
||||
log.Debug("Did not find patches requiring reboot (live patching succeeded)."
|
||||
+ " Skipping scheduled restart.");
|
||||
hp.DelayedPlanActions.RemoveAll(a => a is RestartHostPlanAction);
|
||||
}
|
||||
else
|
||||
if (!restartHostPlanAction.SkipRestartHost(host))
|
||||
{
|
||||
hp.DelayedPlanActions.RemoveAll(a => a is RestartAgentPlanAction);
|
||||
}
|
||||
@ -507,6 +504,12 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
pictureBox1.Image = Images.StaticImages.cancelled_action_16;
|
||||
buttonRetry.Visible = buttonSkip.Visible = false;
|
||||
}
|
||||
else if (backgroundWorkers.Any(w => WarningMessagePerPool(w.Pool) != null))
|
||||
{
|
||||
labelError.Text = WarningMessageOnCompletion(backgroundWorkers.Count > 1);
|
||||
pictureBox1.Image = Images.StaticImages._000_Alert2_h32bit_16;
|
||||
buttonRetry.Visible = buttonSkip.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
labelError.Text = SuccessMessageOnCompletion(backgroundWorkers.Count > 1);
|
||||
@ -589,6 +592,14 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
foreach (var patch in patchSequence)
|
||||
{
|
||||
// if the patchSequence contains a patch that requires a host reboot (excluding livepatches), then add the Evacuate action as the first action in the sequence
|
||||
if (patch.after_apply_guidance == after_apply_guidance.restartHost
|
||||
&& !patch.ContainsLivepatch
|
||||
&& (planActionsPerHost.Count == 0 || !(planActionsPerHost[0] is EvacuateHostPlanAction)))
|
||||
{
|
||||
planActionsPerHost.Insert(0, new EvacuateHostPlanAction(host));
|
||||
}
|
||||
|
||||
if (!uploadedPatches.Contains(patch))
|
||||
{
|
||||
planActionsPerHost.Add(new DownloadPatchPlanAction(host.Connection, patch, AllDownloadedPatches, patchFromDisk));
|
||||
@ -596,7 +607,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
uploadedPatches.Add(patch);
|
||||
}
|
||||
|
||||
planActionsPerHost.Add(new PatchPrecheckOnHostPlanAction(host.Connection, patch, host, patchMappings, hostsThatWillRequireReboot));
|
||||
planActionsPerHost.Add(new PatchPrecheckOnHostPlanAction(host.Connection, patch, host, patchMappings, hostsThatWillRequireReboot, livePatchAttempts));
|
||||
planActionsPerHost.Add(new ApplyXenServerPatchPlanAction(host, patch, patchMappings));
|
||||
|
||||
var action = GetAfterApplyGuidanceAction(host, patch.after_apply_guidance);
|
||||
@ -663,5 +674,43 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected string LivePatchWarningMessagePerPool(Pool pool)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
var poolHosts = pool.Connection.Cache.Hosts.ToList();
|
||||
|
||||
var livePatchingFailedHosts = new List<Host>();
|
||||
foreach (var host in poolHosts)
|
||||
{
|
||||
if (livePatchAttempts.ContainsKey(host.uuid) && host.updates_requiring_reboot != null && host.updates_requiring_reboot.Count > 0)
|
||||
{
|
||||
foreach (var updateUuid in livePatchAttempts[host.uuid])
|
||||
{
|
||||
if (host.updates_requiring_reboot.Select(uRef => host.Connection.Resolve(uRef)).Any(u => u != null && u.uuid.Equals(updateUuid)))
|
||||
{
|
||||
livePatchingFailedHosts.Add(host);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (livePatchingFailedHosts.Count == 1)
|
||||
{
|
||||
sb.AppendFormat(Messages.LIVE_PATCHING_FAILED_ONE_HOST, livePatchingFailedHosts[0].Name()).AppendLine();
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
if (livePatchingFailedHosts.Count > 1)
|
||||
{
|
||||
var hostnames = string.Join(", ", livePatchingFailedHosts.Select(h => string.Format("'{0}'", h.Name())));
|
||||
sb.AppendFormat(Messages.LIVE_PATCHING_FAILED_MULTI_HOST, hostnames).AppendLine();
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@
|
||||
using System.Collections.Generic;
|
||||
using XenAPI;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using XenAdmin.Core;
|
||||
using XenAdmin.Alerts;
|
||||
|
||||
@ -92,8 +93,14 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return multiplePools ? Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_MANY : Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_ONE;
|
||||
}
|
||||
|
||||
protected override string WarningMessageOnCompletion(bool multiplePools)
|
||||
{
|
||||
return multiplePools ? Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_MANY : Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_ONE;
|
||||
}
|
||||
|
||||
protected override string SuccessMessagePerPool(Pool pool)
|
||||
{
|
||||
|
||||
return Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_SUCCESS_ONE;
|
||||
}
|
||||
|
||||
@ -102,6 +109,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return multipleErrors ? Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_POOL_MANY : Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_POOL_ONE;
|
||||
}
|
||||
|
||||
protected override string WarningMessagePerPool(Pool pool)
|
||||
{
|
||||
return LivePatchWarningMessagePerPool(pool);
|
||||
}
|
||||
|
||||
protected override string UserCancellationMessage()
|
||||
{
|
||||
return Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_CANCELLATION;
|
||||
|
@ -31,21 +31,11 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using log4net;
|
||||
using XenAdmin.Controls;
|
||||
using XenAdmin.Diagnostics.Problems;
|
||||
using XenAdmin.Dialogs;
|
||||
using XenAdmin.Wizards.PatchingWizard.PlanActions;
|
||||
using XenAPI;
|
||||
using XenAdmin.Actions;
|
||||
using XenAdmin.Core;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
@ -122,6 +112,14 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return string.Format(msg, GetUpdateName());
|
||||
}
|
||||
|
||||
protected override string WarningMessageOnCompletion(bool multiplePools)
|
||||
{
|
||||
var msg = multiplePools
|
||||
? Messages.PATCHINGWIZARD_SINGLEUPDATE_WARNING_MANY
|
||||
: Messages.PATCHINGWIZARD_SINGLEUPDATE_WARNING_ONE;
|
||||
return string.Format(msg, GetUpdateName());
|
||||
}
|
||||
|
||||
protected override string SuccessMessagePerPool(Pool pool)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
@ -130,6 +128,13 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
if (!IsAutomaticMode && ManualTextInstructions.ContainsKey(pool))
|
||||
sb.Append(ManualTextInstructions[pool]).AppendLine();
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
protected override string WarningMessagePerPool(Pool pool)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
var poolHosts = pool.Connection.Cache.Hosts.ToList();
|
||||
|
||||
@ -143,16 +148,19 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
if (livePatchingFailedHosts.Count == 1)
|
||||
{
|
||||
sb.AppendFormat(Messages.LIVE_PATCHING_FAILED_ONE_HOST, livePatchingFailedHosts[0].Name()).AppendLine();
|
||||
return sb.ToString();
|
||||
}
|
||||
else if (livePatchingFailedHosts.Count > 1)
|
||||
|
||||
if (livePatchingFailedHosts.Count > 1)
|
||||
{
|
||||
var hostnames = string.Join(", ", livePatchingFailedHosts.Select(h => string.Format("'{0}'", h.Name())));
|
||||
sb.AppendFormat(Messages.LIVE_PATCHING_FAILED_MULTI_HOST, hostnames).AppendLine();
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
protected override string FailureMessageOnCompletion(bool multiplePools)
|
||||
{
|
||||
var msg = multiplePools
|
||||
@ -168,7 +176,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
: Messages.PATCHINGWIZARD_SINGLEUPDATE_FAILURE_PER_POOL_ONE;
|
||||
return string.Format(msg, GetUpdateName());
|
||||
}
|
||||
|
||||
protected override string UserCancellationMessage()
|
||||
{
|
||||
return Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_CANCELLATION;
|
||||
@ -196,7 +203,9 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
foreach (var server in SelectedServers)
|
||||
if (poolHosts.Contains(server))
|
||||
{
|
||||
var updateActions = new List<PlanAction> {new ApplyPoolUpdatePlanAction(server, PoolUpdate)};
|
||||
var hostRebootRequired = WizardHelpers.IsHostRebootRequiredForUpdate(server, PoolUpdate, LivePatchCodesByHost);
|
||||
|
||||
var updateActions = new List<PlanAction> {new ApplyPoolUpdatePlanAction(server, PoolUpdate, hostRebootRequired) };
|
||||
hostplans.Add(new HostPlan(server, null, updateActions, null));
|
||||
}
|
||||
}
|
||||
@ -215,7 +224,9 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
foreach (var server in SelectedServers)
|
||||
if (poolHosts.Contains(server))
|
||||
{
|
||||
var updateActions = new List<PlanAction> { new ApplyPatchPlanAction(server, Patch) };
|
||||
var hostRebootRequired = WizardHelpers.IsHostRebootRequiredForUpdate(server, Patch, LivePatchCodesByHost);
|
||||
|
||||
var updateActions = new List<PlanAction> { new ApplyPatchPlanAction(server, Patch, hostRebootRequired) };
|
||||
hostplans.Add(new HostPlan(server, null, updateActions, null));
|
||||
}
|
||||
|
||||
@ -284,14 +295,12 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
private List<PlanAction> CompilePatchActionList(Host host, Pool_patch patch)
|
||||
{
|
||||
var actions = new List<PlanAction> {new ApplyPatchPlanAction(host, patch)};
|
||||
var hostRebootRequired = WizardHelpers.IsHostRebootRequiredForUpdate(host, patch, LivePatchCodesByHost);
|
||||
|
||||
if (patch.after_apply_guidance.Contains(after_apply_guidance.restartHost)
|
||||
&& !(LivePatchCodesByHost != null && LivePatchCodesByHost.ContainsKey(host.uuid)
|
||||
&& LivePatchCodesByHost[host.uuid] == livepatch_status.ok_livepatch_complete))
|
||||
{
|
||||
var actions = new List<PlanAction> {new ApplyPatchPlanAction(host, patch, hostRebootRequired) };
|
||||
|
||||
if (hostRebootRequired)
|
||||
actions.Add(new RestartHostPlanAction(host, host.GetRunningVMs()));
|
||||
}
|
||||
|
||||
if (patch.after_apply_guidance.Contains(after_apply_guidance.restartXAPI))
|
||||
actions.Add(new RestartAgentPlanAction(host));
|
||||
@ -307,14 +316,12 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
private List<PlanAction> CompilePoolUpdateActionList(Host host, Pool_update poolUpdate)
|
||||
{
|
||||
var actions = new List<PlanAction> {new ApplyPoolUpdatePlanAction(host, poolUpdate)};
|
||||
var hostRebootRequired = WizardHelpers.IsHostRebootRequiredForUpdate(host, poolUpdate, LivePatchCodesByHost);
|
||||
|
||||
if (poolUpdate.after_apply_guidance.Contains(update_after_apply_guidance.restartHost)
|
||||
&& !(LivePatchCodesByHost != null && LivePatchCodesByHost.ContainsKey(host.uuid)
|
||||
&& LivePatchCodesByHost[host.uuid] == livepatch_status.ok_livepatch_complete))
|
||||
{
|
||||
var actions = new List<PlanAction> {new ApplyPoolUpdatePlanAction(host, poolUpdate, hostRebootRequired) };
|
||||
|
||||
if (hostRebootRequired)
|
||||
actions.Add(new RestartHostPlanAction(host, host.GetRunningVMs()));
|
||||
}
|
||||
|
||||
if (poolUpdate.after_apply_guidance.Contains(update_after_apply_guidance.restartXAPI))
|
||||
actions.Add(new RestartAgentPlanAction(host));
|
||||
|
@ -577,7 +577,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private void fileNameTextBox_Enter(object sender, EventArgs e)
|
||||
{
|
||||
selectFromDiskRadioButton.Checked = true;
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void fileNameTextBox_TextChanged(object sender, EventArgs e)
|
||||
|
@ -307,13 +307,18 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return IsHostAmongApplicable(host, out tooltipText);
|
||||
|
||||
// here a file from disk was selected, but it was not an update (FileFromDiskAlert == null)
|
||||
if ((!Helpers.ElyOrGreater(host.Connection) && FileFromDiskHasUpdateXml) ||
|
||||
(Helpers.ElyOrGreater(host.Connection) && !FileFromDiskHasUpdateXml))
|
||||
if (!Helpers.ElyOrGreater(host.Connection) && FileFromDiskHasUpdateXml)
|
||||
{
|
||||
tooltipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Helpers.ElyOrGreater(host.Connection) && !FileFromDiskHasUpdateXml)
|
||||
{
|
||||
tooltipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE_OR_INVALID;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -174,6 +174,14 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return string.Format(msg, GetUpdateName());
|
||||
}
|
||||
|
||||
protected override string WarningMessageOnCompletion(bool multiplePools)
|
||||
{
|
||||
var msg = multiplePools
|
||||
? Messages.PATCHINGWIZARD_SINGLEUPLOAD_WARNING_MANY
|
||||
: Messages.PATCHINGWIZARD_SINGLEUPLOAD_WARNING_ONE;
|
||||
return string.Format(msg, GetUpdateName());
|
||||
}
|
||||
|
||||
protected override string SuccessMessagePerPool(Pool pool)
|
||||
{
|
||||
return string.Format( Messages.PATCHINGWIZARD_SINGLEUPLOAD_SUCCESS_ONE, GetUpdateName());
|
||||
@ -187,6 +195,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return string.Format(msg, GetUpdateName());
|
||||
}
|
||||
|
||||
protected override string WarningMessagePerPool(Pool pool)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
protected override string UserCancellationMessage()
|
||||
{
|
||||
return Messages.PATCHINGWIZARD_SINGLEUPLOAD_CANCELLATION;
|
||||
|
@ -34,22 +34,28 @@ using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class ApplyPatchPlanAction : PlanActionWithSession
|
||||
public class ApplyPatchPlanAction : HostPlanAction
|
||||
{
|
||||
private readonly Host _host;
|
||||
private readonly Pool_patch _patch;
|
||||
private readonly bool _hostNeedsEvacuated;
|
||||
|
||||
public ApplyPatchPlanAction(Host host, Pool_patch patch)
|
||||
: base(host.Connection)
|
||||
public ApplyPatchPlanAction(Host host, Pool_patch patch, bool hostNeedsEvacuated)
|
||||
: base(host)
|
||||
{
|
||||
_host = host;
|
||||
_patch = patch;
|
||||
_hostNeedsEvacuated = hostNeedsEvacuated;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, _patch.Name(), _host.Name()));
|
||||
XenRef<Task> task = Pool_patch.async_apply(session, _patch.opaque_ref, _host.opaque_ref);
|
||||
var host = GetResolvedHost();
|
||||
|
||||
// evacuate the host, if needed, before applying the update
|
||||
if (_hostNeedsEvacuated)
|
||||
EvacuateHost(ref session);
|
||||
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, _patch.Name(), host.Name()));
|
||||
XenRef<Task> task = Pool_patch.async_apply(session, _patch.opaque_ref, host.opaque_ref);
|
||||
PollTaskForResultAndDestroy(Connection, ref session, task);
|
||||
}
|
||||
}
|
||||
|
@ -35,22 +35,28 @@ using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class ApplyPoolUpdatePlanAction : PlanActionWithSession
|
||||
public class ApplyPoolUpdatePlanAction : HostPlanAction
|
||||
{
|
||||
private readonly Host _host;
|
||||
private readonly Pool_update _poolUpdate;
|
||||
private readonly bool _hostNeedsEvacuated;
|
||||
|
||||
public ApplyPoolUpdatePlanAction(Host host, Pool_update patch)
|
||||
: base(host.Connection)
|
||||
public ApplyPoolUpdatePlanAction(Host host, Pool_update patch, bool hostNeedsEvacuated)
|
||||
: base(host)
|
||||
{
|
||||
_host = host;
|
||||
_poolUpdate = patch;
|
||||
_hostNeedsEvacuated = hostNeedsEvacuated;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, _poolUpdate.Name(), _host.Name()));
|
||||
new ApplyUpdateAction(_poolUpdate, _host, true).RunExternal(session);
|
||||
var host = GetResolvedHost();
|
||||
|
||||
// evacuate the host, if needed, before applying the update
|
||||
if (_hostNeedsEvacuated)
|
||||
EvacuateHost(ref session);
|
||||
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, _poolUpdate.Name(), host.Name()));
|
||||
new ApplyUpdateAction(_poolUpdate, host, true).RunExternal(session);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,16 +38,14 @@ using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class ApplyXenServerPatchPlanAction : PlanActionWithSession
|
||||
public class ApplyXenServerPatchPlanAction : HostPlanAction
|
||||
{
|
||||
private readonly Host host;
|
||||
private readonly XenServerPatch xenServerPatch;
|
||||
private readonly List<HostUpdateMapping> mappings;
|
||||
|
||||
public ApplyXenServerPatchPlanAction(Host host, XenServerPatch xenServerPatch, List<HostUpdateMapping> mappings)
|
||||
: base(host.Connection)
|
||||
: base(host)
|
||||
{
|
||||
this.host = host;
|
||||
this.xenServerPatch = xenServerPatch;
|
||||
this.mappings = mappings;
|
||||
}
|
||||
@ -68,8 +66,13 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
throw new Exception("Pool_patch or Pool_update not found.");
|
||||
}
|
||||
|
||||
var host = GetResolvedHost();
|
||||
try
|
||||
{
|
||||
// evacuate the host, if needed, before applying the update
|
||||
if (mapping.HostsThatNeedEvacuated.Contains(host.uuid))
|
||||
EvacuateHost(ref session);
|
||||
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, xenServerPatch.Name,
|
||||
host.Name()));
|
||||
|
||||
|
@ -31,10 +31,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
@ -66,9 +63,13 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
var hostObj = GetResolvedHost();
|
||||
|
||||
var vms = hostObj.GetRunningVMs();
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_ENTERING_MAINTENANCE_MODE, hostObj.Name()));
|
||||
log.DebugFormat("Disabling host {0}", hostObj.Name());
|
||||
Host.disable(session, HostXenRef.opaque_ref);
|
||||
|
||||
if (hostObj.enabled)
|
||||
{
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_ENTERING_MAINTENANCE_MODE, hostObj.Name()));
|
||||
log.DebugFormat("Disabling host {0}", hostObj.Name());
|
||||
Host.disable(session, HostXenRef.opaque_ref);
|
||||
}
|
||||
|
||||
if (vms.Count > 0)
|
||||
{
|
||||
@ -99,18 +100,16 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
// CA-17428: Apply hotfixes to a pool of hosts through XenCenter fails.
|
||||
// Hosts do reenable themselves anyway, so just wait 1 min for that,
|
||||
// occasionally poking it.
|
||||
var hostObj = GetResolvedHost();
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_EXITING_MAINTENANCE_MODE, hostObj.Name()));
|
||||
|
||||
WaitForHostToBecomeEnabled(session, true);
|
||||
|
||||
|
||||
if (enableOnly || vmrefs.Count == 0)
|
||||
return;
|
||||
|
||||
int vmCount = vmrefs.Count;
|
||||
int vmNumber = 0;
|
||||
|
||||
hostObj = GetResolvedHost();
|
||||
|
||||
var hostObj = GetResolvedHost();
|
||||
AddProgressStep(string.Format(Messages.PLAN_ACTION_STATUS_REPATRIATING_VMS, hostObj.Name()));
|
||||
PBD.CheckPlugPBDsForVMs(Connection, vmrefs, true);
|
||||
|
||||
@ -163,6 +162,10 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
int retries = 0;
|
||||
while (!Host.get_enabled(session, HostXenRef.opaque_ref))
|
||||
{
|
||||
var hostObj = GetResolvedHost();
|
||||
if (retries == 0)
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_EXITING_MAINTENANCE_MODE, hostObj.Name()));
|
||||
|
||||
retries++;
|
||||
var isLastTry = retries > 60;
|
||||
|
||||
@ -172,7 +175,7 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
if (isLastTry)
|
||||
{
|
||||
log.Debug(string.Format("Timed out waiting for host {0} to become enabled.", HostXenRef.opaque_ref));
|
||||
log.DebugFormat("Timed out waiting for host {0} to become enabled.", hostObj.Name());
|
||||
break;
|
||||
}
|
||||
|
||||
@ -188,7 +191,7 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
if (isLastTry)
|
||||
throw;
|
||||
|
||||
log.Debug(string.Format("Cannot enable host {0}. Retrying in 5 sec.", HostXenRef.opaque_ref), e);
|
||||
log.Debug(string.Format("Cannot enable host {0}. Retrying in 5 sec.", hostObj), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,14 +47,16 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
private readonly List<HostUpdateMapping> mappings;
|
||||
private readonly Host host;
|
||||
private readonly List<string> hostsThatWillRequireReboot;
|
||||
private readonly Dictionary<string, List<string>> livePatchAttempts;
|
||||
|
||||
public PatchPrecheckOnHostPlanAction(IXenConnection connection, XenServerPatch xenServerPatch, Host host, List<HostUpdateMapping> mappings, List<string> hostsThatWillRequireReboot)
|
||||
public PatchPrecheckOnHostPlanAction(IXenConnection connection, XenServerPatch xenServerPatch, Host host, List<HostUpdateMapping> mappings, List<string> hostsThatWillRequireReboot, Dictionary<string, List<string>> livePatchAttempts)
|
||||
: base(connection)
|
||||
{
|
||||
this.xenServerPatch = xenServerPatch;
|
||||
this.host = host;
|
||||
this.mappings = mappings;
|
||||
this.hostsThatWillRequireReboot = hostsThatWillRequireReboot;
|
||||
this.livePatchAttempts = livePatchAttempts;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
@ -74,6 +76,8 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
if (Cancelling)
|
||||
throw new CancelledException();
|
||||
|
||||
var updateRequiresHostReboot = false;
|
||||
|
||||
try
|
||||
{
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_RUNNING_PRECHECK, xenServerPatch.Name, host.Name()));
|
||||
@ -81,10 +85,16 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
List<Problem> problems = null;
|
||||
|
||||
if (mapping is PoolPatchMapping patchMapping)
|
||||
{
|
||||
problems = new PatchPrecheckCheck(host, patchMapping.Pool_patch, livePatchStatus).RunAllChecks();
|
||||
updateRequiresHostReboot = WizardHelpers.IsHostRebootRequiredForUpdate(host, patchMapping.Pool_patch, livePatchStatus);
|
||||
}
|
||||
else if (mapping is PoolUpdateMapping updateMapping)
|
||||
{
|
||||
problems = new PatchPrecheckCheck(host, updateMapping.Pool_update, livePatchStatus).RunAllChecks();
|
||||
|
||||
updateRequiresHostReboot = WizardHelpers.IsHostRebootRequiredForUpdate(host, updateMapping.Pool_update, livePatchStatus);
|
||||
}
|
||||
|
||||
Problem problem = null;
|
||||
|
||||
if (problems != null && problems.Count > 0)
|
||||
@ -99,10 +109,16 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
throw;
|
||||
}
|
||||
|
||||
if (livePatchStatus.ContainsKey(host.uuid)
|
||||
&& livePatchStatus[host.uuid] != livepatch_status.ok_livepatch_complete
|
||||
&& !hostsThatWillRequireReboot.Contains(host.uuid))
|
||||
if(updateRequiresHostReboot && !hostsThatWillRequireReboot.Contains(host.uuid))
|
||||
hostsThatWillRequireReboot.Add(host.uuid);
|
||||
if (updateRequiresHostReboot && !mapping.HostsThatNeedEvacuated.Contains(host.uuid))
|
||||
mapping.HostsThatNeedEvacuated.Add(host.uuid);
|
||||
if (livePatchStatus.ContainsKey(host.uuid) && livePatchStatus[host.uuid] == livepatch_status.ok_livepatch_complete)
|
||||
{
|
||||
if (!livePatchAttempts.ContainsKey(host.uuid) || livePatchAttempts[host.uuid] == null)
|
||||
livePatchAttempts[host.uuid] = new List<string>();
|
||||
livePatchAttempts[host.uuid].Add(xenServerPatch.Uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,6 +62,9 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
if (_restartAgentFallback)
|
||||
RestartAgent(ref session);
|
||||
|
||||
if (!EnableOnly)
|
||||
BringBabiesBack(ref session, _vms, EnableOnly);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -75,13 +78,10 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
|
||||
public bool SkipRestartHost(Host host)
|
||||
{
|
||||
if (hostsNeedReboot != null
|
||||
&& !hostsNeedReboot.Contains(host.uuid)
|
||||
&& Helpers.ElyOrGreater(host)
|
||||
&& host.updates_requiring_reboot.Count <= 0)
|
||||
{
|
||||
// if the precheck didn't mark this host as requiring reboot, then skip the reboot
|
||||
if (Helpers.ElyOrGreater(host) && hostsNeedReboot != null && !hostsNeedReboot.Contains(host.uuid))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
public abstract class HostUpdateMapping
|
||||
{
|
||||
protected readonly Host MasterHost;
|
||||
public List<string> HostsThatNeedEvacuated = new List<string>();
|
||||
|
||||
protected HostUpdateMapping(Host masterHost)
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ using XenAdmin.Wizards.PatchingWizard.PlanActions;
|
||||
|
||||
namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
{
|
||||
class RpuUploadAndApplySuppPackPlanAction : PlanActionWithSession
|
||||
class RpuUploadAndApplySuppPackPlanAction : HostPlanAction
|
||||
{
|
||||
private Host host;
|
||||
private List<Host> hosts;
|
||||
@ -55,7 +55,7 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
private readonly List<string> hostsThatWillRequireReboot;
|
||||
|
||||
public RpuUploadAndApplySuppPackPlanAction(IXenConnection connection, Host host, List<Host> hosts, string path, Dictionary<Host, Pool_update> uploadedUpdate, List<string> hostsThatWillRequireReboot)
|
||||
: base(connection)
|
||||
: base(host)
|
||||
{
|
||||
this.host = host;
|
||||
this.hosts = hosts;
|
||||
@ -89,6 +89,8 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
var master = Helpers.GetMaster(conn);
|
||||
var suppPackName = Path.GetFileName(suppPackPath);
|
||||
|
||||
host = GetResolvedHost();
|
||||
|
||||
// upload
|
||||
UploadSuppPack(master, conn, session, suppPackName);
|
||||
|
||||
@ -98,8 +100,7 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
if (update != null)
|
||||
{
|
||||
// precheck
|
||||
bool alreadyApplied;
|
||||
PrecheckSuppPack(update, suppPackName, out alreadyApplied);
|
||||
PrecheckSuppPack(update, suppPackName, out var alreadyApplied, out var updateRequiresHostEvacuation);
|
||||
if (alreadyApplied)
|
||||
{
|
||||
// do after-apply-supppack step in case that this is a retry after
|
||||
@ -110,7 +111,7 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
}
|
||||
|
||||
// apply
|
||||
ApplySuppPack(conn, session, suppPackName, update);
|
||||
ApplySuppPack(conn, session, suppPackName, update, updateRequiresHostEvacuation);
|
||||
|
||||
// after apply guidance
|
||||
AfterApplySuppPack(update);
|
||||
@ -158,7 +159,7 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
}
|
||||
}
|
||||
|
||||
private void PrecheckSuppPack(Pool_update update, string suppPack, out bool alreadyApplied)
|
||||
private void PrecheckSuppPack(Pool_update update, string suppPack, out bool alreadyApplied, out bool updateRequiresHostEvacuation)
|
||||
{
|
||||
alreadyApplied = false;
|
||||
if (Cancelling)
|
||||
@ -173,6 +174,7 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
|
||||
PatchPrecheckCheck check = new PatchPrecheckCheck(host, update, livePatchStatus);
|
||||
var problems = check.RunAllChecks();
|
||||
updateRequiresHostEvacuation = WizardHelpers.IsHostRebootRequiredForUpdate(host, update, livePatchStatus);
|
||||
if (problems != null && problems.Count > 0)
|
||||
{
|
||||
if (problems[0] is PatchAlreadyApplied)
|
||||
@ -197,10 +199,14 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard.PlanActions
|
||||
hostsThatWillRequireReboot.Add(host.uuid);
|
||||
}
|
||||
|
||||
private void ApplySuppPack(IXenConnection connection, Session session, string suppPack, Pool_update update)
|
||||
private void ApplySuppPack(IXenConnection connection, Session session, string suppPack, Pool_update update, bool updateRequiresHostEvacuation)
|
||||
{
|
||||
try
|
||||
{
|
||||
// evacuate the host, if needed, before applying the update
|
||||
if (updateRequiresHostEvacuation)
|
||||
EvacuateHost(ref session);
|
||||
|
||||
AddProgressStep(string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, suppPack, host.Name()));
|
||||
|
||||
var task = Pool_update.async_apply(session, update.opaque_ref, host.opaque_ref);
|
||||
|
@ -85,6 +85,11 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard
|
||||
return multiplePools ? Messages.ROLLING_UPGRADE_ERROR_MANY : Messages.ROLLING_UPGRADE_ERROR_ONE;
|
||||
}
|
||||
|
||||
protected override string WarningMessageOnCompletion(bool multiplePools)
|
||||
{
|
||||
return multiplePools ? Messages.ROLLING_UPGRADE_WARNING_MANY : Messages.ROLLING_UPGRADE_WARNING_ONE;
|
||||
}
|
||||
|
||||
protected override string SuccessMessagePerPool(Pool pool)
|
||||
{
|
||||
return Messages.ROLLING_UPGRADE_SUCCESS_ONE;
|
||||
@ -95,6 +100,11 @@ namespace XenAdmin.Wizards.RollingUpgradeWizard
|
||||
return multipleErrors ? Messages.ROLLING_UPGRADE_ERROR_POOL_MANY : Messages.ROLLING_UPGRADE_ERROR_POOL_ONE;
|
||||
}
|
||||
|
||||
protected override string WarningMessagePerPool(Pool pool)
|
||||
{
|
||||
return LivePatchWarningMessagePerPool(pool);
|
||||
}
|
||||
|
||||
protected override string UserCancellationMessage()
|
||||
{
|
||||
return Messages.ROLLING_UPGRADE_CANCELLATION;
|
||||
|
@ -29,12 +29,15 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using DiscUtils.Iso9660;
|
||||
using XenAdmin.Actions;
|
||||
using XenAdmin.Dialogs;
|
||||
using XenAPI;
|
||||
|
||||
|
||||
namespace XenAdmin.Wizards
|
||||
@ -158,8 +161,41 @@ namespace XenAdmin.Wizards
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fileName.ToLowerInvariant().EndsWith(".iso"))
|
||||
{
|
||||
bool isValidIso;
|
||||
try
|
||||
{
|
||||
using (var isoStream = File.OpenRead(fileName))
|
||||
using (var cd = new CDReader(isoStream, true))
|
||||
isValidIso = cd.Root.Exists;
|
||||
}
|
||||
catch
|
||||
{
|
||||
isValidIso = false;
|
||||
}
|
||||
|
||||
if (!isValidIso)
|
||||
{
|
||||
failureReason = Messages.UPDATES_WIZARD_INVALID_ISO_FILE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
failureReason = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool IsHostRebootRequiredForUpdate(Host host, Pool_patch patch, Dictionary<string, livepatch_status> livePatchCodesByHost = null)
|
||||
{
|
||||
return patch.after_apply_guidance.Contains(after_apply_guidance.restartHost)
|
||||
&& (livePatchCodesByHost == null || !livePatchCodesByHost.ContainsKey(host.uuid) || livePatchCodesByHost[host.uuid] != livepatch_status.ok_livepatch_complete);
|
||||
}
|
||||
|
||||
public static bool IsHostRebootRequiredForUpdate(Host host, Pool_update poolUpdate, Dictionary<string, livepatch_status> livePatchCodesByHost = null)
|
||||
{
|
||||
return poolUpdate.after_apply_guidance.Contains(update_after_apply_guidance.restartHost)
|
||||
&& (livePatchCodesByHost == null || !livePatchCodesByHost.ContainsKey(host.uuid) || livePatchCodesByHost[host.uuid] != livepatch_status.ok_livepatch_complete);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
90
XenModel/Messages.Designer.cs
generated
90
XenModel/Messages.Designer.cs
generated
@ -27788,6 +27788,24 @@ namespace XenAdmin {
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Clean up... ähnelt.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_MANY {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_MANY", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The automated updates process was completed with warnings..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_ONE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_ONE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Clean up....
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_CLEANUP {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_CLEANUP", resourceCulture);
|
||||
@ -28275,6 +28293,15 @@ namespace XenAdmin {
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Select one or more pools or standalone servers that you want to have updated.
|
||||
///Servers that cannot be updated with automated updates appear disabled in this list. ähnelt.
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE_OR_INVALID {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE_OR_INVALID", resourceCulture);
|
||||
}
|
||||
}
|
||||
/// </summary>
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select one or more pools or standalone servers that you want to have updated.
|
||||
///Servers that cannot be updated with automated updates appear disabled in this list..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_RUBRIC_AUTOMATED_MODE {
|
||||
get {
|
||||
@ -28414,6 +28441,24 @@ namespace XenAdmin {
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die The upload process was cancelled. ähnelt.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SINGLEUPDATE_WARNING_MANY {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SINGLEUPDATE_WARNING_MANY", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The installation of update {0} was completed with warnings..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SINGLEUPDATE_WARNING_ONE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SINGLEUPDATE_WARNING_ONE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The upload process was cancelled..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SINGLEUPLOAD_CANCELLATION {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SINGLEUPLOAD_CANCELLATION", resourceCulture);
|
||||
@ -28497,6 +28542,24 @@ namespace XenAdmin {
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die [XenCenter] is now installing updates on your system. ähnelt.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SINGLEUPLOAD_WARNING_MANY {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SINGLEUPLOAD_WARNING_MANY", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The upload of update {0} was completed with warnings..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SINGLEUPLOAD_WARNING_ONE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SINGLEUPLOAD_WARNING_ONE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to [XenCenter] is now installing updates on your system..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_UPLOAD_AND_INSTALL_TITLE_AUTOMATED_MODE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_UPLOAD_AND_INSTALL_TITLE_AUTOMATED_MODE", resourceCulture);
|
||||
@ -31340,6 +31403,24 @@ namespace XenAdmin {
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Upgrade prechecks are performed on all the pools you selected to ensure that all the servers can be upgraded. ähnelt.
|
||||
/// </summary>
|
||||
public static string ROLLING_UPGRADE_WARNING_MANY {
|
||||
get {
|
||||
return ResourceManager.GetString("ROLLING_UPGRADE_WARNING_MANY", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The rolling pool upgrade process was completed with warnings..
|
||||
/// </summary>
|
||||
public static string ROLLING_UPGRADE_WARNING_ONE {
|
||||
get {
|
||||
return ResourceManager.GetString("ROLLING_UPGRADE_WARNING_ONE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Upgrade prechecks are performed on all the pools you selected to ensure that all the servers can be upgraded..
|
||||
/// </summary>
|
||||
public static string ROLLINGUPGRADE_PRECHECKS {
|
||||
get {
|
||||
return ResourceManager.GetString("ROLLINGUPGRADE_PRECHECKS", resourceCulture);
|
||||
@ -35474,6 +35555,15 @@ namespace XenAdmin {
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die {0}: VM '{1}' has a local CD/DVD in its drive. ähnelt.
|
||||
/// </summary>
|
||||
public static string UPDATES_WIZARD_INVALID_ISO_FILE {
|
||||
get {
|
||||
return ResourceManager.GetString("UPDATES_WIZARD_INVALID_ISO_FILE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0}: VM '{1}' has a local CD/DVD in its drive..
|
||||
/// </summary>
|
||||
public static string UPDATES_WIZARD_LOCAL_CD {
|
||||
get {
|
||||
return ResourceManager.GetString("UPDATES_WIZARD_LOCAL_CD", resourceCulture);
|
||||
|
@ -9603,6 +9603,12 @@ This will cancel the update process and may leave your system in an unstable sta
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_TITLE" xml:space="preserve">
|
||||
<value>Uploading and installing updates</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_MANY" xml:space="preserve">
|
||||
<value>Some of the automated updates processes were completed with warnings.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_WARNING_ONE" xml:space="preserve">
|
||||
<value>The automated updates process was completed with warnings.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_CLEANUP" xml:space="preserve">
|
||||
<value>Clean up...</value>
|
||||
</data>
|
||||
@ -9765,6 +9771,9 @@ This will cancel the update process and may leave your system in an unstable sta
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE" xml:space="preserve">
|
||||
<value>Update not applicable</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE_OR_INVALID" xml:space="preserve">
|
||||
<value>Update not applicable or file contains invalid data.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_RUBRIC_AUTOMATED_MODE" xml:space="preserve">
|
||||
<value>Select one or more pools or standalone servers that you want to have updated.
|
||||
Servers that cannot be updated with automated updates appear disabled in this list.</value>
|
||||
@ -9814,6 +9823,12 @@ Servers where this update cannot be applied appear disabled in this list.</value
|
||||
<data name="PATCHINGWIZARD_SINGLEUPDATE_TITLE" xml:space="preserve">
|
||||
<value>[XenCenter] is now installing update {0} on your system.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SINGLEUPDATE_WARNING_MANY" xml:space="preserve">
|
||||
<value>The installation of update {0} was completed with warnings on some of the selected servers.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SINGLEUPDATE_WARNING_ONE" xml:space="preserve">
|
||||
<value>The installation of update {0} was completed with warnings.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SINGLEUPLOAD_CANCELLATION" xml:space="preserve">
|
||||
<value>The upload process was cancelled.</value>
|
||||
</data>
|
||||
@ -9843,6 +9858,12 @@ This will cancel the upload process.</value>
|
||||
<data name="PATCHINGWIZARD_SINGLEUPLOAD_TITLE" xml:space="preserve">
|
||||
<value>[XenCenter] is now performing the operations necessary to upload your update to the servers specified in the previous step. Please wait for these operations to complete, then click Next to continue with the installation.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SINGLEUPLOAD_WARNING_MANY" xml:space="preserve">
|
||||
<value>The upload of update {0} was completed with warnings on some of the selected servers.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SINGLEUPLOAD_WARNING_ONE" xml:space="preserve">
|
||||
<value>The upload of update {0} was completed with warnings.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_UPLOADPAGE_TEXT" xml:space="preserve">
|
||||
<value>Upload</value>
|
||||
</data>
|
||||
@ -10901,6 +10922,12 @@ Click Keep Waiting if the upgrade is still running or Cancel if an error occurre
|
||||
<data name="ROLLING_UPGRADE_UPGRADE_NOT_COMPLETED" xml:space="preserve">
|
||||
<value>Rolling pool upgrade did not complete.</value>
|
||||
</data>
|
||||
<data name="ROLLING_UPGRADE_WARNING_MANY" xml:space="preserve">
|
||||
<value>One or more of the rolling pool upgrade processes were completed with warnings.</value>
|
||||
</data>
|
||||
<data name="ROLLING_UPGRADE_WARNING_ONE" xml:space="preserve">
|
||||
<value>The rolling pool upgrade process was completed with warnings.</value>
|
||||
</data>
|
||||
<data name="RPU_WIZARD_ERROR_SKIP_MSG" xml:space="preserve">
|
||||
<value>{0} could be skipped.</value>
|
||||
</data>
|
||||
@ -12245,6 +12272,9 @@ Check your settings and try again.</value>
|
||||
|
||||
Please check your settings and try again.</value>
|
||||
</data>
|
||||
<data name="UPDATES_WIZARD_INVALID_ISO_FILE" xml:space="preserve">
|
||||
<value>The selected ISO file is corrupt or contains invalid data.</value>
|
||||
</data>
|
||||
<data name="UPDATES_WIZARD_LOCAL_CD" xml:space="preserve">
|
||||
<value>{0}: VM '{1}' has a local CD/DVD in its drive.</value>
|
||||
</data>
|
||||
|
Loading…
Reference in New Issue
Block a user