From c4b228e8daf95bb05a686ac0057610f05dfdb8cb Mon Sep 17 00:00:00 2001 From: serenc Date: Thu, 23 Nov 2017 10:59:15 +0000 Subject: [PATCH 1/6] CP-25551: Change Type page, Add provisioning page Signed-off-by: serenc --- XenAdmin/Wizards/NewSRWizard.cs | 12 + .../ChooseSrProvisioningPage.Designer.cs | 179 +++++ .../ChooseSrProvisioningPage.cs | 64 ++ .../ChooseSrProvisioningPage.resx | 120 +++ .../ChooseSrTypePage.Designer.cs | 205 ++--- .../NewSRWizard_Pages/ChooseSrTypePage.cs | 8 +- .../NewSRWizard_Pages/ChooseSrTypePage.resx | 698 ++++++++++-------- XenAdmin/XenAdmin.csproj | 9 + XenModel/Messages.Designer.cs | 40 +- XenModel/Messages.resx | 16 +- 10 files changed, 945 insertions(+), 406 deletions(-) create mode 100644 XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs create mode 100644 XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs create mode 100644 XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.resx diff --git a/XenAdmin/Wizards/NewSRWizard.cs b/XenAdmin/Wizards/NewSRWizard.cs index 59c12563b..80528100d 100644 --- a/XenAdmin/Wizards/NewSRWizard.cs +++ b/XenAdmin/Wizards/NewSRWizard.cs @@ -66,6 +66,7 @@ namespace XenAdmin.Wizards private readonly CslgLocation xenTabPageCslgLocation; private readonly FilerDetails xenTabPageFilerDetails; private readonly ChooseSrTypePage xenTabPageChooseSrType; + private readonly ChooseSrProvisioningPage xenTabPageChooseSrProv; private readonly RBACWarningPage xenTabPageRbacWarning; #endregion @@ -114,6 +115,7 @@ namespace XenAdmin.Wizards xenTabPageCslgLocation = new CslgLocation(); xenTabPageFilerDetails = new FilerDetails(); xenTabPageChooseSrType = new ChooseSrTypePage(); + xenTabPageChooseSrProv = new ChooseSrProvisioningPage(); xenTabPageRbacWarning = new RBACWarningPage((srToReattach == null && !disasterRecoveryTask) ? Messages.RBAC_WARNING_PAGE_DESCRIPTION_SR_CREATE : Messages.RBAC_WARNING_PAGE_DESCRIPTION_SR_ATTACH); @@ -132,6 +134,7 @@ namespace XenAdmin.Wizards // Order the tab pages AddPage(xenTabPageChooseSrType); AddPage(xenTabPageSrName); + //AddPage(xenTabPageChooseSrProv); AddPage(new XenTabPage {Text = Messages.NEWSR_LOCATION}); // RBAC warning page @@ -283,15 +286,18 @@ namespace XenAdmin.Wizards else if (m_srWizardType is SrWizardType_Iscsi) { AddPage(xenTabPageLvmoIscsi); + AddPage(xenTabPageChooseSrProv, 2); } else if (m_srWizardType is SrWizardType_Hba) { AddPage(xenTabPageLvmoHba); + AddPage(xenTabPageChooseSrProv, 2); AddPage(xenTabPageLvmoHbaSummary); } else if (m_srWizardType is SrWizardType_Fcoe) { AddPage(xenTabPageLvmoFcoe); + AddPage(xenTabPageChooseSrProv, 2); AddPage(xenTabPageLvmoHbaSummary); } else if (m_srWizardType is SrWizardType_Cslg) @@ -352,6 +358,11 @@ namespace XenAdmin.Wizards xenTabPageLvmoFcoe.SrWizardType = m_srWizardType; #endregion } + else if (senderPagetype == typeof(ChooseSrProvisioningPage)) + { + #region + #endregion + } else if (senderPagetype == typeof(CIFS_ISO)) { m_srWizardType.DeviceConfig = xenTabPageCifsIso.DeviceConfig; @@ -786,5 +797,6 @@ namespace XenAdmin.Wizards { xenTabPageChooseSrType.PreselectNewSrWizardType(typeof(SrWizardType_NfsIso)); } + } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs new file mode 100644 index 000000000..a74ae6294 --- /dev/null +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs @@ -0,0 +1,179 @@ +namespace XenAdmin.Wizards.NewSRWizard_Pages +{ + partial class ChooseSrProvisioningPage + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.label2 = new System.Windows.Forms.Label(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.label3 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 7.5F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 92.5F)); + this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.radioButton1, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.radioButton2, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.label3, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.label4, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 5); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 6; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(540, 336); + this.tableLayoutPanel1.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.label1, 2); + this.label1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.label1.Location = new System.Drawing.Point(3, 3); + this.label1.Margin = new System.Windows.Forms.Padding(3, 3, 3, 10); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(340, 15); + this.label1.TabIndex = 0; + this.label1.Text = "Select the provisioning method for the new Storage Repository."; + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.radioButton1, 2); + this.radioButton1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.radioButton1.Location = new System.Drawing.Point(3, 34); + this.radioButton1.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(155, 19); + this.radioButton1.TabIndex = 1; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "Thin provisioning (GFS2)"; + this.radioButton1.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.label2, 2); + this.label2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.label2.Location = new System.Drawing.Point(20, 59); + this.label2.Margin = new System.Windows.Forms.Padding(20, 3, 3, 3); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(511, 15); + this.label2.TabIndex = 2; + this.label2.Text = "The SR will be formatted with the GFS2 cluster file system for hosting thinly pro" + + "visioned images."; + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.radioButton2, 2); + this.radioButton2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.radioButton2.Location = new System.Drawing.Point(3, 83); + this.radioButton2.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(147, 19); + this.radioButton2.TabIndex = 3; + this.radioButton2.TabStop = true; + this.radioButton2.Text = "Full provisioning (LVM)"; + this.radioButton2.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.label3, 2); + this.label3.Font = new System.Drawing.Font("Segoe UI", 9F); + this.label3.Location = new System.Drawing.Point(20, 108); + this.label3.Margin = new System.Windows.Forms.Padding(20, 3, 3, 3); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(185, 15); + this.label3.TabIndex = 4; + this.label3.Text = "LVM description..............................."; + // + // pictureBox1 + // + this.pictureBox1.Image = global::XenAdmin.Properties.Resources._000_Info3_h32bit_16; + this.pictureBox1.Location = new System.Drawing.Point(10, 136); + this.pictureBox1.Margin = new System.Windows.Forms.Padding(10, 10, 10, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(19, 20); + this.pictureBox1.TabIndex = 5; + this.pictureBox1.TabStop = false; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Segoe UI", 9F); + this.label4.Location = new System.Drawing.Point(43, 136); + this.label4.Margin = new System.Windows.Forms.Padding(3, 10, 3, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(38, 15); + this.label4.TabIndex = 6; + this.label4.Text = "label4"; + // + // ChooseSrProvisioningPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.tableLayoutPanel1); + this.Name = "ChooseSrProvisioningPage"; + this.Size = new System.Drawing.Size(540, 336); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label4; + } +} diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs new file mode 100644 index 000000000..f11de79fe --- /dev/null +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs @@ -0,0 +1,64 @@ +/* Copyright (c) Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using XenAdmin.Controls; +using XenAdmin.Core; +using XenAPI; + +namespace XenAdmin.Wizards.NewSRWizard_Pages +{ + public partial class ChooseSrProvisioningPage : XenTabPage + + { + private bool m_allowNext = true; + + public ChooseSrProvisioningPage() + { + InitializeComponent(); + } + + #region XenTabPage overrides + + public override string Text { get { return Messages.PROVISIONING; } } + + public override string PageTitle { get { return Messages.CHOOSE_SR_PROVISIONING_PAGE_TITLE; } } + + #endregion + } +} diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.resx b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.resx new file mode 100644 index 000000000..29dcb1b3a --- /dev/null +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.Designer.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.Designer.cs index 8b52bccbd..7d0cbc273 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.Designer.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.Designer.cs @@ -29,100 +29,30 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChooseSrTypePage)); - this.radioButtonNfs = new System.Windows.Forms.RadioButton(); - this.radioButtonIscsi = new System.Windows.Forms.RadioButton(); - this.radioButtonNfsIso = new System.Windows.Forms.RadioButton(); - this.radioButtonCifsIso = new System.Windows.Forms.RadioButton(); - this.radioButtonFibreChannel = new System.Windows.Forms.RadioButton(); - this.radioButtonCslg = new System.Windows.Forms.RadioButton(); - this.labelISOlibrary = new System.Windows.Forms.Label(); - this.labelVirtualDiskStorage = new System.Windows.Forms.Label(); - this.upsellPage1 = new XenAdmin.Controls.UpsellPage(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.upsellPage1 = new XenAdmin.Controls.UpsellPage(); this.SRBlurb = new XenAdmin.Controls.Common.AutoHeightLabel(); this.deprecationBanner = new XenAdmin.Controls.DeprecationBanner(); this.selectedStoreTypeLabel = new System.Windows.Forms.Label(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.radioButtonCslg = new System.Windows.Forms.RadioButton(); + this.labelISOlibrary = new System.Windows.Forms.Label(); + this.radioButtonCifsIso = new System.Windows.Forms.RadioButton(); + this.radioButtonNfsIso = new System.Windows.Forms.RadioButton(); + this.radioButtonIscsi = new System.Windows.Forms.RadioButton(); + this.radioButtonFibreChannel = new System.Windows.Forms.RadioButton(); this.radioButtonFcoe = new System.Windows.Forms.RadioButton(); + this.radioButtonNfs = new System.Windows.Forms.RadioButton(); this.radioButtonCifs = new System.Windows.Forms.RadioButton(); + this.labelVirtualDiskStorage = new System.Windows.Forms.Label(); + this.labelFileBasedStorage = new System.Windows.Forms.Label(); + this.labelBlockBasedStorage = new System.Windows.Forms.Label(); this.tableLayoutPanel1.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout(); this.SuspendLayout(); // - // radioButtonNfs - // - resources.ApplyResources(this.radioButtonNfs, "radioButtonNfs"); - this.radioButtonNfs.BackColor = System.Drawing.Color.Transparent; - this.radioButtonNfs.ForeColor = System.Drawing.SystemColors.WindowText; - this.radioButtonNfs.Name = "radioButtonNfs"; - this.radioButtonNfs.UseVisualStyleBackColor = false; - this.radioButtonNfs.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); - // - // radioButtonIscsi - // - resources.ApplyResources(this.radioButtonIscsi, "radioButtonIscsi"); - this.radioButtonIscsi.BackColor = System.Drawing.Color.Transparent; - this.radioButtonIscsi.ForeColor = System.Drawing.SystemColors.WindowText; - this.radioButtonIscsi.Name = "radioButtonIscsi"; - this.radioButtonIscsi.UseVisualStyleBackColor = false; - this.radioButtonIscsi.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); - // - // radioButtonNfsIso - // - resources.ApplyResources(this.radioButtonNfsIso, "radioButtonNfsIso"); - this.radioButtonNfsIso.BackColor = System.Drawing.Color.Transparent; - this.radioButtonNfsIso.ForeColor = System.Drawing.SystemColors.WindowText; - this.radioButtonNfsIso.Name = "radioButtonNfsIso"; - this.radioButtonNfsIso.UseVisualStyleBackColor = false; - this.radioButtonNfsIso.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); - // - // radioButtonCifsIso - // - resources.ApplyResources(this.radioButtonCifsIso, "radioButtonCifsIso"); - this.radioButtonCifsIso.BackColor = System.Drawing.Color.Transparent; - this.radioButtonCifsIso.ForeColor = System.Drawing.SystemColors.WindowText; - this.radioButtonCifsIso.Name = "radioButtonCifsIso"; - this.radioButtonCifsIso.UseVisualStyleBackColor = false; - this.radioButtonCifsIso.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); - // - // radioButtonFibreChannel - // - resources.ApplyResources(this.radioButtonFibreChannel, "radioButtonFibreChannel"); - this.radioButtonFibreChannel.BackColor = System.Drawing.Color.Transparent; - this.radioButtonFibreChannel.ForeColor = System.Drawing.SystemColors.WindowText; - this.radioButtonFibreChannel.Name = "radioButtonFibreChannel"; - this.radioButtonFibreChannel.UseVisualStyleBackColor = false; - this.radioButtonFibreChannel.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); - // - // radioButtonCslg - // - resources.ApplyResources(this.radioButtonCslg, "radioButtonCslg"); - this.radioButtonCslg.BackColor = System.Drawing.Color.Transparent; - this.radioButtonCslg.ForeColor = System.Drawing.SystemColors.WindowText; - this.radioButtonCslg.Name = "radioButtonCslg"; - this.radioButtonCslg.UseVisualStyleBackColor = false; - this.radioButtonCslg.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); - // - // labelISOlibrary - // - resources.ApplyResources(this.labelISOlibrary, "labelISOlibrary"); - this.labelISOlibrary.ForeColor = System.Drawing.SystemColors.WindowText; - this.labelISOlibrary.Name = "labelISOlibrary"; - // - // labelVirtualDiskStorage - // - resources.ApplyResources(this.labelVirtualDiskStorage, "labelVirtualDiskStorage"); - this.labelVirtualDiskStorage.ForeColor = System.Drawing.SystemColors.WindowText; - this.labelVirtualDiskStorage.Name = "labelVirtualDiskStorage"; - // - // upsellPage1 - // - resources.ApplyResources(this.upsellPage1, "upsellPage1"); - this.upsellPage1.Image = ((System.Drawing.Image)(resources.GetObject("upsellPage1.Image"))); - this.upsellPage1.Name = "upsellPage1"; - // // tableLayoutPanel1 // resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); @@ -139,6 +69,12 @@ this.tableLayoutPanel2.Controls.Add(this.selectedStoreTypeLabel, 0, 2); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; // + // upsellPage1 + // + resources.ApplyResources(this.upsellPage1, "upsellPage1"); + this.upsellPage1.Image = ((System.Drawing.Image)(resources.GetObject("upsellPage1.Image"))); + this.upsellPage1.Name = "upsellPage1"; + // // SRBlurb // this.SRBlurb.AutoEllipsis = true; @@ -160,17 +96,72 @@ // tableLayoutPanel3 // resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3"); - this.tableLayoutPanel3.Controls.Add(this.radioButtonFcoe, 0, 5); - this.tableLayoutPanel3.Controls.Add(this.radioButtonCifs, 0, 4); - this.tableLayoutPanel3.Controls.Add(this.radioButtonCslg, 0, 6); + this.tableLayoutPanel3.Controls.Add(this.radioButtonCslg, 1, 8); + this.tableLayoutPanel3.Controls.Add(this.labelISOlibrary, 0, 9); + this.tableLayoutPanel3.Controls.Add(this.radioButtonCifsIso, 1, 10); + this.tableLayoutPanel3.Controls.Add(this.radioButtonNfsIso, 1, 11); + this.tableLayoutPanel3.Controls.Add(this.radioButtonIscsi, 1, 2); + this.tableLayoutPanel3.Controls.Add(this.radioButtonFibreChannel, 1, 3); + this.tableLayoutPanel3.Controls.Add(this.radioButtonFcoe, 1, 4); + this.tableLayoutPanel3.Controls.Add(this.radioButtonNfs, 1, 6); + this.tableLayoutPanel3.Controls.Add(this.radioButtonCifs, 1, 7); this.tableLayoutPanel3.Controls.Add(this.labelVirtualDiskStorage, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.radioButtonNfs, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.radioButtonFibreChannel, 0, 3); - this.tableLayoutPanel3.Controls.Add(this.radioButtonIscsi, 0, 2); - this.tableLayoutPanel3.Controls.Add(this.labelISOlibrary, 0, 7); - this.tableLayoutPanel3.Controls.Add(this.radioButtonCifsIso, 0, 8); - this.tableLayoutPanel3.Controls.Add(this.radioButtonNfsIso, 0, 9); + this.tableLayoutPanel3.Controls.Add(this.labelFileBasedStorage, 1, 5); + this.tableLayoutPanel3.Controls.Add(this.labelBlockBasedStorage, 1, 1); this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanel3_Paint); + // + // radioButtonCslg + // + resources.ApplyResources(this.radioButtonCslg, "radioButtonCslg"); + this.radioButtonCslg.BackColor = System.Drawing.Color.Transparent; + this.radioButtonCslg.ForeColor = System.Drawing.SystemColors.WindowText; + this.radioButtonCslg.Name = "radioButtonCslg"; + this.radioButtonCslg.UseVisualStyleBackColor = false; + this.radioButtonCslg.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); + // + // labelISOlibrary + // + resources.ApplyResources(this.labelISOlibrary, "labelISOlibrary"); + this.tableLayoutPanel3.SetColumnSpan(this.labelISOlibrary, 2); + this.labelISOlibrary.ForeColor = System.Drawing.SystemColors.WindowText; + this.labelISOlibrary.Name = "labelISOlibrary"; + // + // radioButtonCifsIso + // + resources.ApplyResources(this.radioButtonCifsIso, "radioButtonCifsIso"); + this.radioButtonCifsIso.BackColor = System.Drawing.Color.Transparent; + this.radioButtonCifsIso.ForeColor = System.Drawing.SystemColors.WindowText; + this.radioButtonCifsIso.Name = "radioButtonCifsIso"; + this.radioButtonCifsIso.UseVisualStyleBackColor = false; + this.radioButtonCifsIso.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); + // + // radioButtonNfsIso + // + resources.ApplyResources(this.radioButtonNfsIso, "radioButtonNfsIso"); + this.radioButtonNfsIso.BackColor = System.Drawing.Color.Transparent; + this.radioButtonNfsIso.ForeColor = System.Drawing.SystemColors.WindowText; + this.radioButtonNfsIso.Name = "radioButtonNfsIso"; + this.radioButtonNfsIso.UseVisualStyleBackColor = false; + this.radioButtonNfsIso.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); + // + // radioButtonIscsi + // + resources.ApplyResources(this.radioButtonIscsi, "radioButtonIscsi"); + this.radioButtonIscsi.BackColor = System.Drawing.Color.Transparent; + this.radioButtonIscsi.ForeColor = System.Drawing.SystemColors.WindowText; + this.radioButtonIscsi.Name = "radioButtonIscsi"; + this.radioButtonIscsi.UseVisualStyleBackColor = false; + this.radioButtonIscsi.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); + // + // radioButtonFibreChannel + // + resources.ApplyResources(this.radioButtonFibreChannel, "radioButtonFibreChannel"); + this.radioButtonFibreChannel.BackColor = System.Drawing.Color.Transparent; + this.radioButtonFibreChannel.ForeColor = System.Drawing.SystemColors.WindowText; + this.radioButtonFibreChannel.Name = "radioButtonFibreChannel"; + this.radioButtonFibreChannel.UseVisualStyleBackColor = false; + this.radioButtonFibreChannel.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); // // radioButtonFcoe // @@ -181,6 +172,15 @@ this.radioButtonFcoe.UseVisualStyleBackColor = false; this.radioButtonFcoe.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); // + // radioButtonNfs + // + resources.ApplyResources(this.radioButtonNfs, "radioButtonNfs"); + this.radioButtonNfs.BackColor = System.Drawing.Color.Transparent; + this.radioButtonNfs.ForeColor = System.Drawing.SystemColors.WindowText; + this.radioButtonNfs.Name = "radioButtonNfs"; + this.radioButtonNfs.UseVisualStyleBackColor = false; + this.radioButtonNfs.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); + // // radioButtonCifs // resources.ApplyResources(this.radioButtonCifs, "radioButtonCifs"); @@ -190,6 +190,25 @@ this.radioButtonCifs.UseVisualStyleBackColor = false; this.radioButtonCifs.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged); // + // labelVirtualDiskStorage + // + resources.ApplyResources(this.labelVirtualDiskStorage, "labelVirtualDiskStorage"); + this.tableLayoutPanel3.SetColumnSpan(this.labelVirtualDiskStorage, 2); + this.labelVirtualDiskStorage.ForeColor = System.Drawing.SystemColors.WindowText; + this.labelVirtualDiskStorage.Name = "labelVirtualDiskStorage"; + // + // labelFileBasedStorage + // + resources.ApplyResources(this.labelFileBasedStorage, "labelFileBasedStorage"); + this.labelFileBasedStorage.ForeColor = System.Drawing.SystemColors.WindowText; + this.labelFileBasedStorage.Name = "labelFileBasedStorage"; + // + // labelBlockBasedStorage + // + resources.ApplyResources(this.labelBlockBasedStorage, "labelBlockBasedStorage"); + this.labelBlockBasedStorage.ForeColor = System.Drawing.SystemColors.WindowText; + this.labelBlockBasedStorage.Name = "labelBlockBasedStorage"; + // // ChooseSrTypePage // resources.ApplyResources(this, "$this"); @@ -213,8 +232,6 @@ private System.Windows.Forms.RadioButton radioButtonCifsIso; private System.Windows.Forms.RadioButton radioButtonFibreChannel; private System.Windows.Forms.RadioButton radioButtonCslg; - private System.Windows.Forms.Label labelISOlibrary; - private System.Windows.Forms.Label labelVirtualDiskStorage; private XenAdmin.Controls.UpsellPage upsellPage1; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; @@ -224,5 +241,9 @@ private System.Windows.Forms.RadioButton radioButtonCifs; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; private System.Windows.Forms.RadioButton radioButtonFcoe; + private System.Windows.Forms.Label labelBlockBasedStorage; + private System.Windows.Forms.Label labelFileBasedStorage; + private System.Windows.Forms.Label labelISOlibrary; + private System.Windows.Forms.Label labelVirtualDiskStorage; } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs index 64db1d5fb..4cf208dd6 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs @@ -48,7 +48,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages { private bool m_allowNext = true; private int _matchingFrontends; - private Type m_preselectedWizardType = typeof(SrWizardType_VhdoNfs); + private Type m_preselectedWizardType = typeof(SrWizardType_Iscsi); private readonly RadioButton[] _radioButtons; public ChooseSrTypePage() @@ -71,6 +71,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages radioButtonCslg, radioButtonCifs, radioButtonFcoe, radioButtonNfsIso, radioButtonCifsIso }; + } private void SetupDeprecationBanner(bool visible) @@ -289,5 +290,10 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages } return sm; } + + private void tableLayoutPanel3_Paint(object sender, PaintEventArgs e) + { + + } } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx index 7c84341a6..d13a3eb38 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx @@ -118,302 +118,20 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - - Segoe UI, 9pt - - - - NoControl - - - 6, 31 - - - 6, 3, 3, 3 - - - 46, 19 - - - 11 - - - N&FS - - - radioButtonNfs - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 4 - - - True - - - Segoe UI, 9pt - - - NoControl - - - 6, 56 - - - 6, 3, 3, 3 - - - 51, 19 - - - 12 - - - i&SCSI - - - radioButtonIscsi - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 6 - - - True - - - Segoe UI, 9pt - - - NoControl - - - 6, 247 - - - 6, 3, 3, 3 - - - 67, 19 - - - 18 - - - NFS &ISO - - - radioButtonNfsIso - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 9 - - - True - - - Segoe UI, 9pt - - - NoControl - - - 6, 222 - - - 6, 3, 3, 3 - - - 201, 19 - - - 17 - - - &Windows File Sharing (SMB/CIFS) - - - radioButtonCifsIso - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 8 - - - True - - - Segoe UI, 9pt - - - NoControl - - - 6, 81 - - - 6, 3, 3, 3 - - - 103, 19 - - - 13 - - - Hardware &HBA - - - radioButtonFibreChannel - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 5 - - - True - - - Segoe UI, 9pt - - - NoControl - - - 6, 156 - - - 6, 3, 3, 3 - - - 150, 19 - - - 16 - - - S&torageLink technology - - - radioButtonCslg - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - + 2 - - True - - - Segoe UI, 9pt, style=Bold - - - NoControl - - - 3, 194 - - - 3, 16, 3, 10 - - - 65, 15 - - - 15 - - - ISO library - - - labelISOlibrary - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 7 - - - True - - - Segoe UI, 9pt, style=Bold - - - NoControl - - - 3, 3 - - - 3, 3, 3, 10 - - - 114, 15 - - - 10 - - - Virtual disk storage - - - labelVirtualDiskStorage - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 3 + + 1 True + GrowAndShrink + Segoe UI, 9pt @@ -438,7 +156,7 @@ 3, 51 - 312, 67 + 91, 67 0 @@ -455,18 +173,15 @@ 0 - - 2 - - - 1 - True Fill + + NoControl + 3, 167 @@ -474,7 +189,7 @@ 3, 3, 3, 0 - 312, 163 + 292, 163 1 @@ -513,7 +228,7 @@ 5, 5, 5, 5 - 308, 38 + 288, 38 2 @@ -539,6 +254,9 @@ Microsoft Sans Serif, 8.25pt, style=Italic + + NoControl + 3, 137 @@ -570,13 +288,13 @@ Fill - 219, 3 + 239, 3 4 - 318, 330 + 298, 330 36 @@ -597,8 +315,224 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="upsellPage1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="SRBlurb" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="deprecationBanner" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="selectedStoreTypeLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,Percent,100" /></TableLayoutSettings> + 2 + + + True + + + Segoe UI, 9pt + + + NoControl + + + 26, 219 + + + 15, 3, 3, 3 + + + 150, 19 + + + 16 + + + S&torageLink technology + + + radioButtonCslg + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 0 + + + True + + + Segoe UI, 9pt, style=Bold + + + NoControl + + + 3, 257 + + + 3, 16, 3, 10 + + + 65, 15 + + + 15 + + + ISO library + + + labelISOlibrary + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + 1 + + True + + + Segoe UI, 9pt + + + NoControl + + + 26, 285 + + + 15, 3, 3, 3 + + + 201, 19 + + + 17 + + + &Windows File Sharing (SMB/CIFS) + + + radioButtonCifsIso + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 2 + + + True + + + Segoe UI, 9pt + + + NoControl + + + 26, 310 + + + 15, 3, 3, 3 + + + 67, 19 + + + 18 + + + NFS &ISO + + + radioButtonNfsIso + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 3 + + + True + + + Segoe UI, 9pt + + + NoControl + + + 26, 59 + + + 15, 3, 3, 3 + + + 51, 19 + + + 11 + + + i&SCSI + + + radioButtonIscsi + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 4 + + + True + + + Segoe UI, 9pt + + + NoControl + + + 26, 84 + + + 15, 3, 3, 3 + + + 103, 19 + + + 13 + + + Hardware &HBA + + + radioButtonFibreChannel + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 5 + True @@ -609,10 +543,10 @@ NoControl - 6, 131 + 26, 109 - 6, 3, 3, 3 + 15, 3, 3, 3 101, 19 @@ -633,7 +567,43 @@ tableLayoutPanel3 - 0 + 6 + + + True + + + Segoe UI, 9pt + + + NoControl + + + 26, 169 + + + 15, 3, 3, 3 + + + 46, 19 + + + 12 + + + N&FS + + + radioButtonNfs + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 7 True @@ -645,10 +615,10 @@ NoControl - 6, 106 + 26, 194 - 6, 3, 3, 3 + 15, 3, 3, 3 77, 19 @@ -669,16 +639,130 @@ tableLayoutPanel3 - 1 + 8 + + + True + + + Segoe UI, 9pt, style=Bold + + + NoControl + + + 3, 3 + + + 3, 3, 3, 10 + + + 114, 15 + + + 10 + + + Virtual disk storage + + + labelVirtualDiskStorage + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 9 + + + True + + + Segoe UI, 9pt, style=Bold + + + NoControl + + + 14, 141 + + + 3, 10, 3, 10 + + + 106, 15 + + + 20 + + + File based storage + + + MiddleCenter + + + labelFileBasedStorage + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 10 + + + True + + + Segoe UI, 9pt, style=Bold + + + NoControl + + + 14, 31 + + + 3, 3, 3, 10 + + + 118, 15 + + + 19 + + + Block based storage + + + MiddleCenter + + + labelBlockBasedStorage + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 11 3, 3 - 10 + 12 - 210, 302 + 230, 330 37 @@ -696,7 +780,7 @@ 1 - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="radioButtonFcoe" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonCifs" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonCslg" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelVirtualDiskStorage" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonNfs" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonFibreChannel" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonIscsi" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelISOlibrary" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonCifsIso" Row="8" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonNfsIso" Row="9" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,20,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings> + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="radioButtonCslg" Row="8" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelISOlibrary" Row="9" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="radioButtonCifsIso" Row="10" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="radioButtonNfsIso" Row="11" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="radioButtonIscsi" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="radioButtonFibreChannel" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="radioButtonFcoe" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="radioButtonNfs" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="radioButtonCifs" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelVirtualDiskStorage" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="labelFileBasedStorage" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelBlockBasedStorage" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,5,Percent,95" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0" /></TableLayoutSettings> Fill diff --git a/XenAdmin/XenAdmin.csproj b/XenAdmin/XenAdmin.csproj index 8389dcaa2..8eca566ea 100644 --- a/XenAdmin/XenAdmin.csproj +++ b/XenAdmin/XenAdmin.csproj @@ -718,6 +718,12 @@ IntraPoolCopyPage.cs + + UserControl + + + ChooseSrProvisioningPage.cs + UserControl @@ -2082,6 +2088,9 @@ Designer RBACWarningPage.cs + + ChooseSrProvisioningPage.cs + CIFSFrontend.cs diff --git a/XenModel/Messages.Designer.cs b/XenModel/Messages.Designer.cs index 0e1bb2ae8..4e42fbdbf 100755 --- a/XenModel/Messages.Designer.cs +++ b/XenModel/Messages.Designer.cs @@ -6929,6 +6929,15 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to Choose the provisioning method. + /// + public static string CHOOSE_SR_PROVISIONING_PAGE_TITLE { + get { + return ResourceManager.GetString("CHOOSE_SR_PROVISIONING_PAGE_TITLE", resourceCulture); + } + } + /// /// Looks up a localized string similar to Choose the type of new storage. /// @@ -15835,6 +15844,24 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to Your pool license does not allow GFS2.. + /// + public static string GFS2_INCORRECT_POOL_LICENSE { + get { + return ResourceManager.GetString("GFS2_INCORRECT_POOL_LICENSE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to GFS2 requires clustering to be enabled on the pool.. + /// + public static string GFS2_REQUIRES_CLUSTERING_ENABLED { + get { + return ResourceManager.GetString("GFS2_REQUIRES_CLUSTERING_ENABLED", resourceCulture); + } + } + /// /// Looks up a localized string similar to GPU. /// @@ -24218,9 +24245,7 @@ namespace XenAdmin { } /// - /// Looks up a localized string similar to iSCSI or Fibre Channel access to a shared LUN can be configured using LVM. - /// - ///Using an LVM for a shared SR provides the same performance benefits as a unshared LVM for local disk storage but also enables VM agility.. + /// Looks up a localized string similar to iSCSI or Fibre Channel access to a shared LUN can be configured to host fully provisioned virtual disks using LVM or be formatted with the GFS2 cluster file system for hosting thinly provisioned images.. /// public static string NEWSR_LVMOISCSI_BLURB { get { @@ -28381,6 +28406,15 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to Provisioning. + /// + public static string PROVISIONING { + get { + return ResourceManager.GetString("PROVISIONING", resourceCulture); + } + } + /// /// Looks up a localized string similar to Provisioning Options. /// diff --git a/XenModel/Messages.resx b/XenModel/Messages.resx index c322eed3b..72b1fb6e0 100755 --- a/XenModel/Messages.resx +++ b/XenModel/Messages.resx @@ -8272,9 +8272,7 @@ Once all configuration is complete the HBA will expose a SCSI device backed by t Hardware HBA - iSCSI or Fibre Channel access to a shared LUN can be configured using LVM. - -Using an LVM for a shared SR provides the same performance benefits as a unshared LVM for local disk storage but also enables VM agility. + iSCSI or Fibre Channel access to a shared LUN can be configured to host fully provisioned virtual disks using LVM or be formatted with the GFS2 cluster file system for hosting thinly provisioned images. iSCSI @@ -13567,4 +13565,16 @@ You will need to navigate to the Console on each of the selected VMs to complete You are here + + Choose the provisioning method + + + Your pool license does not allow GFS2. + + + GFS2 requires clustering to be enabled on the pool. + + + Provisioning + \ No newline at end of file From 3e9e2609e8f0805b61a172a2d6ed105c82b181f7 Mon Sep 17 00:00:00 2001 From: serenc Date: Thu, 23 Nov 2017 11:06:37 +0000 Subject: [PATCH 2/6] CP-25565: Update XenCenter API binding Signed-off-by: serenc --- XenModel/XenAPI/Cluster.cs | 646 +++++++++++++++++++++ XenModel/XenAPI/Cluster_host.cs | 490 ++++++++++++++++ XenModel/XenAPI/FriendlyErrorNames.resx | 12 + XenModel/XenAPI/Host.cs | 69 ++- XenModel/XenAPI/Maps.cs | 94 +++ XenModel/XenAPI/Proxy.cs | 221 +++++++ XenModel/XenAPI/Relation.cs | 4 + XenModel/XenAPI/VDI.cs | 41 +- XenModel/XenAPI/cluster_host_operation.cs | 58 ++ XenModel/XenAPI/cluster_operation.cs | 64 ++ XenModel/XenAPI/pool_allowed_operations.cs | 4 +- 11 files changed, 1698 insertions(+), 5 deletions(-) create mode 100644 XenModel/XenAPI/Cluster.cs create mode 100644 XenModel/XenAPI/Cluster_host.cs create mode 100644 XenModel/XenAPI/cluster_host_operation.cs create mode 100644 XenModel/XenAPI/cluster_operation.cs diff --git a/XenModel/XenAPI/Cluster.cs b/XenModel/XenAPI/Cluster.cs new file mode 100644 index 000000000..3e4d90d85 --- /dev/null +++ b/XenModel/XenAPI/Cluster.cs @@ -0,0 +1,646 @@ +/* + * Copyright (c) Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1) Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2) Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +using System; +using System.Collections; +using System.Collections.Generic; + + +namespace XenAPI +{ + /// + /// Cluster-wide Cluster metadata + /// First published in Unreleased. + /// + public partial class Cluster : XenObject + { + public Cluster() + { + } + + public Cluster(string uuid, + List> cluster_hosts, + XenRef network, + string cluster_token, + string cluster_stack, + List allowed_operations, + Dictionary current_operations, + bool pool_auto_join, + Dictionary cluster_config, + Dictionary other_config) + { + this.uuid = uuid; + this.cluster_hosts = cluster_hosts; + this.network = network; + this.cluster_token = cluster_token; + this.cluster_stack = cluster_stack; + this.allowed_operations = allowed_operations; + this.current_operations = current_operations; + this.pool_auto_join = pool_auto_join; + this.cluster_config = cluster_config; + this.other_config = other_config; + } + + /// + /// Creates a new Cluster from a Proxy_Cluster. + /// + /// + public Cluster(Proxy_Cluster proxy) + { + this.UpdateFromProxy(proxy); + } + + public override void UpdateFrom(Cluster update) + { + uuid = update.uuid; + cluster_hosts = update.cluster_hosts; + network = update.network; + cluster_token = update.cluster_token; + cluster_stack = update.cluster_stack; + allowed_operations = update.allowed_operations; + current_operations = update.current_operations; + pool_auto_join = update.pool_auto_join; + cluster_config = update.cluster_config; + other_config = update.other_config; + } + + internal void UpdateFromProxy(Proxy_Cluster proxy) + { + uuid = proxy.uuid == null ? null : (string)proxy.uuid; + cluster_hosts = proxy.cluster_hosts == null ? null : XenRef.Create(proxy.cluster_hosts); + network = proxy.network == null ? null : XenRef.Create(proxy.network); + cluster_token = proxy.cluster_token == null ? null : (string)proxy.cluster_token; + cluster_stack = proxy.cluster_stack == null ? null : (string)proxy.cluster_stack; + allowed_operations = proxy.allowed_operations == null ? null : Helper.StringArrayToEnumList(proxy.allowed_operations); + current_operations = proxy.current_operations == null ? null : Maps.convert_from_proxy_string_cluster_operation(proxy.current_operations); + pool_auto_join = (bool)proxy.pool_auto_join; + cluster_config = proxy.cluster_config == null ? null : Maps.convert_from_proxy_string_string(proxy.cluster_config); + other_config = proxy.other_config == null ? null : Maps.convert_from_proxy_string_string(proxy.other_config); + } + + public Proxy_Cluster ToProxy() + { + Proxy_Cluster result_ = new Proxy_Cluster(); + result_.uuid = uuid ?? ""; + result_.cluster_hosts = (cluster_hosts != null) ? Helper.RefListToStringArray(cluster_hosts) : new string[] {}; + result_.network = network ?? ""; + result_.cluster_token = cluster_token ?? ""; + result_.cluster_stack = cluster_stack ?? ""; + result_.allowed_operations = (allowed_operations != null) ? Helper.ObjectListToStringArray(allowed_operations) : new string[] {}; + result_.current_operations = Maps.convert_to_proxy_string_cluster_operation(current_operations); + result_.pool_auto_join = pool_auto_join; + result_.cluster_config = Maps.convert_to_proxy_string_string(cluster_config); + result_.other_config = Maps.convert_to_proxy_string_string(other_config); + return result_; + } + + /// + /// Creates a new Cluster from a Hashtable. + /// + /// + public Cluster(Hashtable table) + { + uuid = Marshalling.ParseString(table, "uuid"); + cluster_hosts = Marshalling.ParseSetRef(table, "cluster_hosts"); + network = Marshalling.ParseRef(table, "network"); + cluster_token = Marshalling.ParseString(table, "cluster_token"); + cluster_stack = Marshalling.ParseString(table, "cluster_stack"); + allowed_operations = Helper.StringArrayToEnumList(Marshalling.ParseStringArray(table, "allowed_operations")); + current_operations = Maps.convert_from_proxy_string_cluster_operation(Marshalling.ParseHashTable(table, "current_operations")); + pool_auto_join = Marshalling.ParseBool(table, "pool_auto_join"); + cluster_config = Maps.convert_from_proxy_string_string(Marshalling.ParseHashTable(table, "cluster_config")); + other_config = Maps.convert_from_proxy_string_string(Marshalling.ParseHashTable(table, "other_config")); + } + + public bool DeepEquals(Cluster other, bool ignoreCurrentOperations) + { + if (ReferenceEquals(null, other)) + return false; + if (ReferenceEquals(this, other)) + return true; + + if (!ignoreCurrentOperations && !Helper.AreEqual2(this.current_operations, other.current_operations)) + return false; + + return Helper.AreEqual2(this._uuid, other._uuid) && + Helper.AreEqual2(this._cluster_hosts, other._cluster_hosts) && + Helper.AreEqual2(this._network, other._network) && + Helper.AreEqual2(this._cluster_token, other._cluster_token) && + Helper.AreEqual2(this._cluster_stack, other._cluster_stack) && + Helper.AreEqual2(this._allowed_operations, other._allowed_operations) && + Helper.AreEqual2(this._pool_auto_join, other._pool_auto_join) && + Helper.AreEqual2(this._cluster_config, other._cluster_config) && + Helper.AreEqual2(this._other_config, other._other_config); + } + + public override string SaveChanges(Session session, string opaqueRef, Cluster server) + { + if (opaqueRef == null) + { + System.Diagnostics.Debug.Assert(false, "Cannot create instances of this type on the server"); + return ""; + } + else + { + if (!Helper.AreEqual2(_other_config, server._other_config)) + { + Cluster.set_other_config(session, opaqueRef, _other_config); + } + + return null; + } + } + /// + /// Get a record containing the current state of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static Cluster get_record(Session session, string _cluster) + { + return new Cluster((Proxy_Cluster)session.proxy.cluster_get_record(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Get a reference to the Cluster instance with the specified UUID. + /// First published in Unreleased. + /// + /// The session + /// UUID of object to return + public static XenRef get_by_uuid(Session session, string _uuid) + { + return XenRef.Create(session.proxy.cluster_get_by_uuid(session.uuid, _uuid ?? "").parse()); + } + + /// + /// Get the uuid field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static string get_uuid(Session session, string _cluster) + { + return (string)session.proxy.cluster_get_uuid(session.uuid, _cluster ?? "").parse(); + } + + /// + /// Get the cluster_hosts field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static List> get_cluster_hosts(Session session, string _cluster) + { + return XenRef.Create(session.proxy.cluster_get_cluster_hosts(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Get the network field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static XenRef get_network(Session session, string _cluster) + { + return XenRef.Create(session.proxy.cluster_get_network(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Get the cluster_token field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static string get_cluster_token(Session session, string _cluster) + { + return (string)session.proxy.cluster_get_cluster_token(session.uuid, _cluster ?? "").parse(); + } + + /// + /// Get the cluster_stack field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static string get_cluster_stack(Session session, string _cluster) + { + return (string)session.proxy.cluster_get_cluster_stack(session.uuid, _cluster ?? "").parse(); + } + + /// + /// Get the allowed_operations field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static List get_allowed_operations(Session session, string _cluster) + { + return Helper.StringArrayToEnumList(session.proxy.cluster_get_allowed_operations(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Get the current_operations field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static Dictionary get_current_operations(Session session, string _cluster) + { + return Maps.convert_from_proxy_string_cluster_operation(session.proxy.cluster_get_current_operations(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Get the pool_auto_join field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static bool get_pool_auto_join(Session session, string _cluster) + { + return (bool)session.proxy.cluster_get_pool_auto_join(session.uuid, _cluster ?? "").parse(); + } + + /// + /// Get the cluster_config field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static Dictionary get_cluster_config(Session session, string _cluster) + { + return Maps.convert_from_proxy_string_string(session.proxy.cluster_get_cluster_config(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Get the other_config field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static Dictionary get_other_config(Session session, string _cluster) + { + return Maps.convert_from_proxy_string_string(session.proxy.cluster_get_other_config(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Set the other_config field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + /// New value to set + public static void set_other_config(Session session, string _cluster, Dictionary _other_config) + { + session.proxy.cluster_set_other_config(session.uuid, _cluster ?? "", Maps.convert_to_proxy_string_string(_other_config)).parse(); + } + + /// + /// Add the given key-value pair to the other_config field of the given Cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + /// Key to add + /// Value to add + public static void add_to_other_config(Session session, string _cluster, string _key, string _value) + { + session.proxy.cluster_add_to_other_config(session.uuid, _cluster ?? "", _key ?? "", _value ?? "").parse(); + } + + /// + /// Remove the given key and its corresponding value from the other_config field of the given Cluster. If the key is not in that Map, then do nothing. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + /// Key to remove + public static void remove_from_other_config(Session session, string _cluster, string _key) + { + session.proxy.cluster_remove_from_other_config(session.uuid, _cluster ?? "", _key ?? "").parse(); + } + + /// + /// Creates a Cluster object and one Cluster_host object as its first member + /// First published in Unreleased. + /// + /// The session + /// the single network on which corosync carries out its inter-host communications + /// simply the string 'corosync'. No other cluster stacks are currently supported + /// true if xapi is automatically joining new pool members to the cluster + public static XenRef create(Session session, string _network, string _cluster_stack, bool _pool_auto_join) + { + return XenRef.Create(session.proxy.cluster_create(session.uuid, _network ?? "", _cluster_stack ?? "", _pool_auto_join).parse()); + } + + /// + /// Creates a Cluster object and one Cluster_host object as its first member + /// First published in Unreleased. + /// + /// The session + /// the single network on which corosync carries out its inter-host communications + /// simply the string 'corosync'. No other cluster stacks are currently supported + /// true if xapi is automatically joining new pool members to the cluster + public static XenRef async_create(Session session, string _network, string _cluster_stack, bool _pool_auto_join) + { + return XenRef.Create(session.proxy.async_cluster_create(session.uuid, _network ?? "", _cluster_stack ?? "", _pool_auto_join).parse()); + } + + /// + /// Destroys a Cluster object and the one remaining Cluster_host member + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static void destroy(Session session, string _cluster) + { + session.proxy.cluster_destroy(session.uuid, _cluster ?? "").parse(); + } + + /// + /// Destroys a Cluster object and the one remaining Cluster_host member + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static XenRef async_destroy(Session session, string _cluster) + { + return XenRef.Create(session.proxy.async_cluster_destroy(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Attempt to create a Cluster from the entire pool + /// First published in Unreleased. + /// + /// The session + /// The pool to create a Cluster from + /// simply the string 'corosync'. No other cluster stacks are currently supported + /// the single network on which corosync carries out its inter-host communications + public static XenRef pool_create(Session session, string _pool, string _cluster_stack, string _network) + { + return XenRef.Create(session.proxy.cluster_pool_create(session.uuid, _pool ?? "", _cluster_stack ?? "", _network ?? "").parse()); + } + + /// + /// Attempt to create a Cluster from the entire pool + /// First published in Unreleased. + /// + /// The session + /// The pool to create a Cluster from + /// simply the string 'corosync'. No other cluster stacks are currently supported + /// the single network on which corosync carries out its inter-host communications + public static XenRef async_pool_create(Session session, string _pool, string _cluster_stack, string _network) + { + return XenRef.Create(session.proxy.async_cluster_pool_create(session.uuid, _pool ?? "", _cluster_stack ?? "", _network ?? "").parse()); + } + + /// + /// Resynchronise the cluster_host objects across the pool. Creates them where they need creating and then plugs them + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static void pool_resync(Session session, string _cluster) + { + session.proxy.cluster_pool_resync(session.uuid, _cluster ?? "").parse(); + } + + /// + /// Resynchronise the cluster_host objects across the pool. Creates them where they need creating and then plugs them + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster + public static XenRef async_pool_resync(Session session, string _cluster) + { + return XenRef.Create(session.proxy.async_cluster_pool_resync(session.uuid, _cluster ?? "").parse()); + } + + /// + /// Return a list of all the Clusters known to the system. + /// First published in Unreleased. + /// + /// The session + public static List> get_all(Session session) + { + return XenRef.Create(session.proxy.cluster_get_all(session.uuid).parse()); + } + + /// + /// Get all the Cluster Records at once, in a single XML RPC call + /// First published in Unreleased. + /// + /// The session + public static Dictionary, Cluster> get_all_records(Session session) + { + return XenRef.Create(session.proxy.cluster_get_all_records(session.uuid).parse()); + } + + /// + /// Unique identifier/object reference + /// + public virtual string uuid + { + get { return _uuid; } + set + { + if (!Helper.AreEqual(value, _uuid)) + { + _uuid = value; + Changed = true; + NotifyPropertyChanged("uuid"); + } + } + } + private string _uuid; + + /// + /// A list of the cluster_host objects associated with the Cluster + /// + public virtual List> cluster_hosts + { + get { return _cluster_hosts; } + set + { + if (!Helper.AreEqual(value, _cluster_hosts)) + { + _cluster_hosts = value; + Changed = true; + NotifyPropertyChanged("cluster_hosts"); + } + } + } + private List> _cluster_hosts; + + /// + /// Reference to the single network on which corosync carries out its inter-host communications + /// + public virtual XenRef network + { + get { return _network; } + set + { + if (!Helper.AreEqual(value, _network)) + { + _network = value; + Changed = true; + NotifyPropertyChanged("network"); + } + } + } + private XenRef _network; + + /// + /// The secret key used by xapi-clusterd when it talks to itself on other hosts + /// + public virtual string cluster_token + { + get { return _cluster_token; } + set + { + if (!Helper.AreEqual(value, _cluster_token)) + { + _cluster_token = value; + Changed = true; + NotifyPropertyChanged("cluster_token"); + } + } + } + private string _cluster_token; + + /// + /// Simply the string 'corosync'. No other cluster stacks are currently supported + /// + public virtual string cluster_stack + { + get { return _cluster_stack; } + set + { + if (!Helper.AreEqual(value, _cluster_stack)) + { + _cluster_stack = value; + Changed = true; + NotifyPropertyChanged("cluster_stack"); + } + } + } + private string _cluster_stack; + + /// + /// list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client. + /// + public virtual List allowed_operations + { + get { return _allowed_operations; } + set + { + if (!Helper.AreEqual(value, _allowed_operations)) + { + _allowed_operations = value; + Changed = true; + NotifyPropertyChanged("allowed_operations"); + } + } + } + private List _allowed_operations; + + /// + /// links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task. + /// + public virtual Dictionary current_operations + { + get { return _current_operations; } + set + { + if (!Helper.AreEqual(value, _current_operations)) + { + _current_operations = value; + Changed = true; + NotifyPropertyChanged("current_operations"); + } + } + } + private Dictionary _current_operations; + + /// + /// True if xapi is automatically joining new pool members to the cluster. This will be `true` in the first release + /// + public virtual bool pool_auto_join + { + get { return _pool_auto_join; } + set + { + if (!Helper.AreEqual(value, _pool_auto_join)) + { + _pool_auto_join = value; + Changed = true; + NotifyPropertyChanged("pool_auto_join"); + } + } + } + private bool _pool_auto_join; + + /// + /// Contains read-only settings for the cluster, such as timeouts and other options. It can only be set at cluster create time + /// + public virtual Dictionary cluster_config + { + get { return _cluster_config; } + set + { + if (!Helper.AreEqual(value, _cluster_config)) + { + _cluster_config = value; + Changed = true; + NotifyPropertyChanged("cluster_config"); + } + } + } + private Dictionary _cluster_config; + + /// + /// Additional configuration + /// + public virtual Dictionary other_config + { + get { return _other_config; } + set + { + if (!Helper.AreEqual(value, _other_config)) + { + _other_config = value; + Changed = true; + NotifyPropertyChanged("other_config"); + } + } + } + private Dictionary _other_config; + } +} diff --git a/XenModel/XenAPI/Cluster_host.cs b/XenModel/XenAPI/Cluster_host.cs new file mode 100644 index 000000000..d08c4ffeb --- /dev/null +++ b/XenModel/XenAPI/Cluster_host.cs @@ -0,0 +1,490 @@ +/* + * Copyright (c) Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1) Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2) Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +using System; +using System.Collections; +using System.Collections.Generic; + + +namespace XenAPI +{ + /// + /// Cluster member metadata + /// First published in Unreleased. + /// + public partial class Cluster_host : XenObject + { + public Cluster_host() + { + } + + public Cluster_host(string uuid, + XenRef cluster, + XenRef host, + bool enabled, + List allowed_operations, + Dictionary current_operations, + Dictionary other_config) + { + this.uuid = uuid; + this.cluster = cluster; + this.host = host; + this.enabled = enabled; + this.allowed_operations = allowed_operations; + this.current_operations = current_operations; + this.other_config = other_config; + } + + /// + /// Creates a new Cluster_host from a Proxy_Cluster_host. + /// + /// + public Cluster_host(Proxy_Cluster_host proxy) + { + this.UpdateFromProxy(proxy); + } + + public override void UpdateFrom(Cluster_host update) + { + uuid = update.uuid; + cluster = update.cluster; + host = update.host; + enabled = update.enabled; + allowed_operations = update.allowed_operations; + current_operations = update.current_operations; + other_config = update.other_config; + } + + internal void UpdateFromProxy(Proxy_Cluster_host proxy) + { + uuid = proxy.uuid == null ? null : (string)proxy.uuid; + cluster = proxy.cluster == null ? null : XenRef.Create(proxy.cluster); + host = proxy.host == null ? null : XenRef.Create(proxy.host); + enabled = (bool)proxy.enabled; + allowed_operations = proxy.allowed_operations == null ? null : Helper.StringArrayToEnumList(proxy.allowed_operations); + current_operations = proxy.current_operations == null ? null : Maps.convert_from_proxy_string_cluster_host_operation(proxy.current_operations); + other_config = proxy.other_config == null ? null : Maps.convert_from_proxy_string_string(proxy.other_config); + } + + public Proxy_Cluster_host ToProxy() + { + Proxy_Cluster_host result_ = new Proxy_Cluster_host(); + result_.uuid = uuid ?? ""; + result_.cluster = cluster ?? ""; + result_.host = host ?? ""; + result_.enabled = enabled; + result_.allowed_operations = (allowed_operations != null) ? Helper.ObjectListToStringArray(allowed_operations) : new string[] {}; + result_.current_operations = Maps.convert_to_proxy_string_cluster_host_operation(current_operations); + result_.other_config = Maps.convert_to_proxy_string_string(other_config); + return result_; + } + + /// + /// Creates a new Cluster_host from a Hashtable. + /// + /// + public Cluster_host(Hashtable table) + { + uuid = Marshalling.ParseString(table, "uuid"); + cluster = Marshalling.ParseRef(table, "cluster"); + host = Marshalling.ParseRef(table, "host"); + enabled = Marshalling.ParseBool(table, "enabled"); + allowed_operations = Helper.StringArrayToEnumList(Marshalling.ParseStringArray(table, "allowed_operations")); + current_operations = Maps.convert_from_proxy_string_cluster_host_operation(Marshalling.ParseHashTable(table, "current_operations")); + other_config = Maps.convert_from_proxy_string_string(Marshalling.ParseHashTable(table, "other_config")); + } + + public bool DeepEquals(Cluster_host other, bool ignoreCurrentOperations) + { + if (ReferenceEquals(null, other)) + return false; + if (ReferenceEquals(this, other)) + return true; + + if (!ignoreCurrentOperations && !Helper.AreEqual2(this.current_operations, other.current_operations)) + return false; + + return Helper.AreEqual2(this._uuid, other._uuid) && + Helper.AreEqual2(this._cluster, other._cluster) && + Helper.AreEqual2(this._host, other._host) && + Helper.AreEqual2(this._enabled, other._enabled) && + Helper.AreEqual2(this._allowed_operations, other._allowed_operations) && + Helper.AreEqual2(this._other_config, other._other_config); + } + + public override string SaveChanges(Session session, string opaqueRef, Cluster_host server) + { + if (opaqueRef == null) + { + System.Diagnostics.Debug.Assert(false, "Cannot create instances of this type on the server"); + return ""; + } + else + { + throw new InvalidOperationException("This type has no read/write properties"); + } + } + /// + /// Get a record containing the current state of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static Cluster_host get_record(Session session, string _cluster_host) + { + return new Cluster_host((Proxy_Cluster_host)session.proxy.cluster_host_get_record(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Get a reference to the Cluster_host instance with the specified UUID. + /// First published in Unreleased. + /// + /// The session + /// UUID of object to return + public static XenRef get_by_uuid(Session session, string _uuid) + { + return XenRef.Create(session.proxy.cluster_host_get_by_uuid(session.uuid, _uuid ?? "").parse()); + } + + /// + /// Get the uuid field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static string get_uuid(Session session, string _cluster_host) + { + return (string)session.proxy.cluster_host_get_uuid(session.uuid, _cluster_host ?? "").parse(); + } + + /// + /// Get the cluster field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static XenRef get_cluster(Session session, string _cluster_host) + { + return XenRef.Create(session.proxy.cluster_host_get_cluster(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Get the host field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static XenRef get_host(Session session, string _cluster_host) + { + return XenRef.Create(session.proxy.cluster_host_get_host(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Get the enabled field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static bool get_enabled(Session session, string _cluster_host) + { + return (bool)session.proxy.cluster_host_get_enabled(session.uuid, _cluster_host ?? "").parse(); + } + + /// + /// Get the allowed_operations field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static List get_allowed_operations(Session session, string _cluster_host) + { + return Helper.StringArrayToEnumList(session.proxy.cluster_host_get_allowed_operations(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Get the current_operations field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static Dictionary get_current_operations(Session session, string _cluster_host) + { + return Maps.convert_from_proxy_string_cluster_host_operation(session.proxy.cluster_host_get_current_operations(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Get the other_config field of the given Cluster_host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static Dictionary get_other_config(Session session, string _cluster_host) + { + return Maps.convert_from_proxy_string_string(session.proxy.cluster_host_get_other_config(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Add a new host to an existing cluster. + /// First published in Unreleased. + /// + /// The session + /// Cluster to join + /// new cluster member + public static XenRef create(Session session, string _cluster, string _host) + { + return XenRef.Create(session.proxy.cluster_host_create(session.uuid, _cluster ?? "", _host ?? "").parse()); + } + + /// + /// Add a new host to an existing cluster. + /// First published in Unreleased. + /// + /// The session + /// Cluster to join + /// new cluster member + public static XenRef async_create(Session session, string _cluster, string _host) + { + return XenRef.Create(session.proxy.async_cluster_host_create(session.uuid, _cluster ?? "", _host ?? "").parse()); + } + + /// + /// Remove a host from an existing cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static void destroy(Session session, string _cluster_host) + { + session.proxy.cluster_host_destroy(session.uuid, _cluster_host ?? "").parse(); + } + + /// + /// Remove a host from an existing cluster. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static XenRef async_destroy(Session session, string _cluster_host) + { + return XenRef.Create(session.proxy.async_cluster_host_destroy(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Enable cluster membership for a disabled cluster host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static void enable(Session session, string _cluster_host) + { + session.proxy.cluster_host_enable(session.uuid, _cluster_host ?? "").parse(); + } + + /// + /// Enable cluster membership for a disabled cluster host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static XenRef async_enable(Session session, string _cluster_host) + { + return XenRef.Create(session.proxy.async_cluster_host_enable(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Disable cluster membership for an enabled cluster host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static void disable(Session session, string _cluster_host) + { + session.proxy.cluster_host_disable(session.uuid, _cluster_host ?? "").parse(); + } + + /// + /// Disable cluster membership for an enabled cluster host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given cluster_host + public static XenRef async_disable(Session session, string _cluster_host) + { + return XenRef.Create(session.proxy.async_cluster_host_disable(session.uuid, _cluster_host ?? "").parse()); + } + + /// + /// Return a list of all the Cluster_hosts known to the system. + /// First published in Unreleased. + /// + /// The session + public static List> get_all(Session session) + { + return XenRef.Create(session.proxy.cluster_host_get_all(session.uuid).parse()); + } + + /// + /// Get all the Cluster_host Records at once, in a single XML RPC call + /// First published in Unreleased. + /// + /// The session + public static Dictionary, Cluster_host> get_all_records(Session session) + { + return XenRef.Create(session.proxy.cluster_host_get_all_records(session.uuid).parse()); + } + + /// + /// Unique identifier/object reference + /// + public virtual string uuid + { + get { return _uuid; } + set + { + if (!Helper.AreEqual(value, _uuid)) + { + _uuid = value; + Changed = true; + NotifyPropertyChanged("uuid"); + } + } + } + private string _uuid; + + /// + /// Reference to the Cluster object + /// + public virtual XenRef cluster + { + get { return _cluster; } + set + { + if (!Helper.AreEqual(value, _cluster)) + { + _cluster = value; + Changed = true; + NotifyPropertyChanged("cluster"); + } + } + } + private XenRef _cluster; + + /// + /// Reference to the Host object + /// + public virtual XenRef host + { + get { return _host; } + set + { + if (!Helper.AreEqual(value, _host)) + { + _host = value; + Changed = true; + NotifyPropertyChanged("host"); + } + } + } + private XenRef _host; + + /// + /// Whether the cluster host believes that clustering should be enabled on this host + /// + public virtual bool enabled + { + get { return _enabled; } + set + { + if (!Helper.AreEqual(value, _enabled)) + { + _enabled = value; + Changed = true; + NotifyPropertyChanged("enabled"); + } + } + } + private bool _enabled; + + /// + /// list of the operations allowed in this state. This list is advisory only and the server state may have changed by the time this field is read by a client. + /// + public virtual List allowed_operations + { + get { return _allowed_operations; } + set + { + if (!Helper.AreEqual(value, _allowed_operations)) + { + _allowed_operations = value; + Changed = true; + NotifyPropertyChanged("allowed_operations"); + } + } + } + private List _allowed_operations; + + /// + /// links each of the running tasks using this object (by reference) to a current_operation enum which describes the nature of the task. + /// + public virtual Dictionary current_operations + { + get { return _current_operations; } + set + { + if (!Helper.AreEqual(value, _current_operations)) + { + _current_operations = value; + Changed = true; + NotifyPropertyChanged("current_operations"); + } + } + } + private Dictionary _current_operations; + + /// + /// Additional configuration + /// + public virtual Dictionary other_config + { + get { return _other_config; } + set + { + if (!Helper.AreEqual(value, _other_config)) + { + _other_config = value; + Changed = true; + NotifyPropertyChanged("other_config"); + } + } + } + private Dictionary _other_config; + } +} diff --git a/XenModel/XenAPI/FriendlyErrorNames.resx b/XenModel/XenAPI/FriendlyErrorNames.resx index 54885fcaa..d354a0fcf 100644 --- a/XenModel/XenAPI/FriendlyErrorNames.resx +++ b/XenModel/XenAPI/FriendlyErrorNames.resx @@ -255,6 +255,18 @@ An SR is using clustered local storage. It is not safe to reboot a host at the moment. + + An operation was attempted while clustering was disabled on the cluster_host. + + + An operation was attempted while clustering was enabled on the cluster_host. + + + A cluster already exists in the pool. + + + The operation could not be performed because cluster creation is in progress. + Could not find a network interface with the specified device name and MAC address. diff --git a/XenModel/XenAPI/Host.cs b/XenModel/XenAPI/Host.cs index a60b3dfa0..84879fc80 100644 --- a/XenModel/XenAPI/Host.cs +++ b/XenModel/XenAPI/Host.cs @@ -100,7 +100,8 @@ namespace XenAPI long[] virtual_hardware_platform_versions, XenRef control_domain, List> updates_requiring_reboot, - List> features) + List> features, + string iscsi_iqn) { this.uuid = uuid; this.name_label = name_label; @@ -157,6 +158,7 @@ namespace XenAPI this.control_domain = control_domain; this.updates_requiring_reboot = updates_requiring_reboot; this.features = features; + this.iscsi_iqn = iscsi_iqn; } /// @@ -225,6 +227,7 @@ namespace XenAPI control_domain = update.control_domain; updates_requiring_reboot = update.updates_requiring_reboot; features = update.features; + iscsi_iqn = update.iscsi_iqn; } internal void UpdateFromProxy(Proxy_Host proxy) @@ -284,6 +287,7 @@ namespace XenAPI control_domain = proxy.control_domain == null ? null : XenRef.Create(proxy.control_domain); updates_requiring_reboot = proxy.updates_requiring_reboot == null ? null : XenRef.Create(proxy.updates_requiring_reboot); features = proxy.features == null ? null : XenRef.Create(proxy.features); + iscsi_iqn = proxy.iscsi_iqn == null ? null : (string)proxy.iscsi_iqn; } public Proxy_Host ToProxy() @@ -344,6 +348,7 @@ namespace XenAPI result_.control_domain = control_domain ?? ""; result_.updates_requiring_reboot = (updates_requiring_reboot != null) ? Helper.RefListToStringArray(updates_requiring_reboot) : new string[] {}; result_.features = (features != null) ? Helper.RefListToStringArray(features) : new string[] {}; + result_.iscsi_iqn = iscsi_iqn ?? ""; return result_; } @@ -408,6 +413,7 @@ namespace XenAPI control_domain = Marshalling.ParseRef(table, "control_domain"); updates_requiring_reboot = Marshalling.ParseSetRef(table, "updates_requiring_reboot"); features = Marshalling.ParseSetRef(table, "features"); + iscsi_iqn = Marshalling.ParseString(table, "iscsi_iqn"); } public bool DeepEquals(Host other, bool ignoreCurrentOperations) @@ -473,7 +479,8 @@ namespace XenAPI Helper.AreEqual2(this._virtual_hardware_platform_versions, other._virtual_hardware_platform_versions) && Helper.AreEqual2(this._control_domain, other._control_domain) && Helper.AreEqual2(this._updates_requiring_reboot, other._updates_requiring_reboot) && - Helper.AreEqual2(this._features, other._features); + Helper.AreEqual2(this._features, other._features) && + Helper.AreEqual2(this._iscsi_iqn, other._iscsi_iqn); } public override string SaveChanges(Session session, string opaqueRef, Host server) @@ -537,6 +544,10 @@ namespace XenAPI { Host.set_ssl_legacy(session, opaqueRef, _ssl_legacy); } + if (!Helper.AreEqual2(_iscsi_iqn, server._iscsi_iqn)) + { + Host.set_iscsi_iqn(session, opaqueRef, _iscsi_iqn); + } return null; } @@ -1181,6 +1192,17 @@ namespace XenAPI return XenRef.Create(session.proxy.host_get_features(session.uuid, _host ?? "").parse()); } + /// + /// Get the iscsi_iqn field of the given host. + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given host + public static string get_iscsi_iqn(Session session, string _host) + { + return (string)session.proxy.host_get_iscsi_iqn(session.uuid, _host ?? "").parse(); + } + /// /// Set the name/label field of the given host. /// First published in XenServer 4.0. @@ -2585,6 +2607,30 @@ namespace XenAPI return XenRef.Create(session.proxy.async_host_set_ssl_legacy(session.uuid, _host ?? "", _value).parse()); } + /// + /// Sets the initiator IQN for the host + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given host + /// The value to which the IQN should be set + public static void set_iscsi_iqn(Session session, string _host, string _value) + { + session.proxy.host_set_iscsi_iqn(session.uuid, _host ?? "", _value ?? "").parse(); + } + + /// + /// Sets the initiator IQN for the host + /// First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given host + /// The value to which the IQN should be set + public static XenRef async_set_iscsi_iqn(Session session, string _host, string _value) + { + return XenRef.Create(session.proxy.async_host_set_iscsi_iqn(session.uuid, _host ?? "", _value ?? "").parse()); + } + /// /// Return a list of all the hosts known to the system. /// First published in XenServer 4.0. @@ -3619,5 +3665,24 @@ namespace XenAPI } } private List> _features; + + /// + /// The initiator IQN for the host + /// First published in Unreleased. + /// + public virtual string iscsi_iqn + { + get { return _iscsi_iqn; } + set + { + if (!Helper.AreEqual(value, _iscsi_iqn)) + { + _iscsi_iqn = value; + Changed = true; + NotifyPropertyChanged("iscsi_iqn"); + } + } + } + private string _iscsi_iqn; } } diff --git a/XenModel/XenAPI/Maps.cs b/XenModel/XenAPI/Maps.cs index 760076218..bbf2cde50 100644 --- a/XenModel/XenAPI/Maps.cs +++ b/XenModel/XenAPI/Maps.cs @@ -132,6 +132,100 @@ namespace XenAPI return result; } + internal static Dictionary + convert_from_proxy_string_cluster_host_operation(Object o) + { + Hashtable table = (Hashtable)o; + Dictionary result = new Dictionary(); + if (table != null) + { + foreach (string key in table.Keys) + { + try + { + string k = key; + cluster_host_operation v = table[key] == null ? (cluster_host_operation) 0 : (cluster_host_operation)Helper.EnumParseDefault(typeof(cluster_host_operation), (string)table[key]); + result[k] = v; + } + catch + { + continue; + } + } + } + return result; + } + + internal static Hashtable + convert_to_proxy_string_cluster_host_operation(Dictionary table) + { + CookComputing.XmlRpc.XmlRpcStruct result = new CookComputing.XmlRpc.XmlRpcStruct(); + if (table != null) + { + foreach (string key in table.Keys) + { + try + { + string k = key ?? ""; + string v = cluster_host_operation_helper.ToString(table[key]); + result[k] = v; + } + catch + { + continue; + } + } + } + return result; + } + + internal static Dictionary + convert_from_proxy_string_cluster_operation(Object o) + { + Hashtable table = (Hashtable)o; + Dictionary result = new Dictionary(); + if (table != null) + { + foreach (string key in table.Keys) + { + try + { + string k = key; + cluster_operation v = table[key] == null ? (cluster_operation) 0 : (cluster_operation)Helper.EnumParseDefault(typeof(cluster_operation), (string)table[key]); + result[k] = v; + } + catch + { + continue; + } + } + } + return result; + } + + internal static Hashtable + convert_to_proxy_string_cluster_operation(Dictionary table) + { + CookComputing.XmlRpc.XmlRpcStruct result = new CookComputing.XmlRpc.XmlRpcStruct(); + if (table != null) + { + foreach (string key in table.Keys) + { + try + { + string k = key ?? ""; + string v = cluster_operation_helper.ToString(table[key]); + result[k] = v; + } + catch + { + continue; + } + } + } + return result; + } + internal static Dictionary convert_from_proxy_string_host_allowed_operations(Object o) { diff --git a/XenModel/XenAPI/Proxy.cs b/XenModel/XenAPI/Proxy.cs index b1de81096..31f9a7cfd 100644 --- a/XenModel/XenAPI/Proxy.cs +++ b/XenModel/XenAPI/Proxy.cs @@ -3304,6 +3304,10 @@ namespace XenAPI Response host_get_features(string session, string _host); + [XmlRpcMethod("host.get_iscsi_iqn")] + Response + host_get_iscsi_iqn(string session, string _host); + [XmlRpcMethod("host.set_name_label")] Response host_set_name_label(string session, string _host, string _label); @@ -3784,6 +3788,14 @@ namespace XenAPI Response async_host_set_ssl_legacy(string session, string _host, bool _value); + [XmlRpcMethod("host.set_iscsi_iqn")] + Response + host_set_iscsi_iqn(string session, string _host, string _value); + + [XmlRpcMethod("Async.host.set_iscsi_iqn")] + Response + async_host_set_iscsi_iqn(string session, string _host, string _value); + [XmlRpcMethod("host.get_all")] Response host_get_all(string session); @@ -5720,6 +5732,10 @@ namespace XenAPI Response vdi_get_cbt_enabled(string session, string _vdi); + [XmlRpcMethod("VDI.get_activated_on")] + Response + vdi_get_activated_on(string session, string _vdi); + [XmlRpcMethod("VDI.set_other_config")] Response vdi_set_other_config(string session, string _vdi, Object _other_config); @@ -7643,6 +7659,182 @@ namespace XenAPI [XmlRpcMethod("vdi_nbd_server_info.get_all_records")] Response vdi_nbd_server_info_get_all_records(string session); + + [XmlRpcMethod("Cluster.get_record")] + Response + cluster_get_record(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_by_uuid")] + Response + cluster_get_by_uuid(string session, string _uuid); + + [XmlRpcMethod("Cluster.get_uuid")] + Response + cluster_get_uuid(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_cluster_hosts")] + Response + cluster_get_cluster_hosts(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_network")] + Response + cluster_get_network(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_cluster_token")] + Response + cluster_get_cluster_token(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_cluster_stack")] + Response + cluster_get_cluster_stack(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_allowed_operations")] + Response + cluster_get_allowed_operations(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_current_operations")] + Response + cluster_get_current_operations(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_pool_auto_join")] + Response + cluster_get_pool_auto_join(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_cluster_config")] + Response + cluster_get_cluster_config(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_other_config")] + Response + cluster_get_other_config(string session, string _cluster); + + [XmlRpcMethod("Cluster.set_other_config")] + Response + cluster_set_other_config(string session, string _cluster, Object _other_config); + + [XmlRpcMethod("Cluster.add_to_other_config")] + Response + cluster_add_to_other_config(string session, string _cluster, string _key, string _value); + + [XmlRpcMethod("Cluster.remove_from_other_config")] + Response + cluster_remove_from_other_config(string session, string _cluster, string _key); + + [XmlRpcMethod("Cluster.create")] + Response + cluster_create(string session, string _network, string _cluster_stack, bool _pool_auto_join); + + [XmlRpcMethod("Async.Cluster.create")] + Response + async_cluster_create(string session, string _network, string _cluster_stack, bool _pool_auto_join); + + [XmlRpcMethod("Cluster.destroy")] + Response + cluster_destroy(string session, string _cluster); + + [XmlRpcMethod("Async.Cluster.destroy")] + Response + async_cluster_destroy(string session, string _cluster); + + [XmlRpcMethod("Cluster.pool_create")] + Response + cluster_pool_create(string session, string _pool, string _cluster_stack, string _network); + + [XmlRpcMethod("Async.Cluster.pool_create")] + Response + async_cluster_pool_create(string session, string _pool, string _cluster_stack, string _network); + + [XmlRpcMethod("Cluster.pool_resync")] + Response + cluster_pool_resync(string session, string _cluster); + + [XmlRpcMethod("Async.Cluster.pool_resync")] + Response + async_cluster_pool_resync(string session, string _cluster); + + [XmlRpcMethod("Cluster.get_all")] + Response + cluster_get_all(string session); + + [XmlRpcMethod("Cluster.get_all_records")] + Response + cluster_get_all_records(string session); + + [XmlRpcMethod("Cluster_host.get_record")] + Response + cluster_host_get_record(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_by_uuid")] + Response + cluster_host_get_by_uuid(string session, string _uuid); + + [XmlRpcMethod("Cluster_host.get_uuid")] + Response + cluster_host_get_uuid(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_cluster")] + Response + cluster_host_get_cluster(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_host")] + Response + cluster_host_get_host(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_enabled")] + Response + cluster_host_get_enabled(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_allowed_operations")] + Response + cluster_host_get_allowed_operations(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_current_operations")] + Response + cluster_host_get_current_operations(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_other_config")] + Response + cluster_host_get_other_config(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.create")] + Response + cluster_host_create(string session, string _cluster, string _host); + + [XmlRpcMethod("Async.Cluster_host.create")] + Response + async_cluster_host_create(string session, string _cluster, string _host); + + [XmlRpcMethod("Cluster_host.destroy")] + Response + cluster_host_destroy(string session, string _cluster_host); + + [XmlRpcMethod("Async.Cluster_host.destroy")] + Response + async_cluster_host_destroy(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.enable")] + Response + cluster_host_enable(string session, string _cluster_host); + + [XmlRpcMethod("Async.Cluster_host.enable")] + Response + async_cluster_host_enable(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.disable")] + Response + cluster_host_disable(string session, string _cluster_host); + + [XmlRpcMethod("Async.Cluster_host.disable")] + Response + async_cluster_host_disable(string session, string _cluster_host); + + [XmlRpcMethod("Cluster_host.get_all")] + Response + cluster_host_get_all(string session); + + [XmlRpcMethod("Cluster_host.get_all_records")] + Response + cluster_host_get_all_records(string session); } [XmlRpcMissingMapping(MappingAction.Ignore)] @@ -8024,6 +8216,7 @@ namespace XenAPI public string control_domain; public string [] updates_requiring_reboot; public string [] features; + public string iscsi_iqn; } [XmlRpcMissingMapping(MappingAction.Ignore)] @@ -8307,6 +8500,7 @@ namespace XenAPI public bool metadata_latest; public bool is_tools_iso; public bool cbt_enabled; + public string activated_on; } [XmlRpcMissingMapping(MappingAction.Ignore)] @@ -8601,4 +8795,31 @@ namespace XenAPI public string subject; } + [XmlRpcMissingMapping(MappingAction.Ignore)] + public class Proxy_Cluster + { + public string uuid; + public string [] cluster_hosts; + public string network; + public string cluster_token; + public string cluster_stack; + public string [] allowed_operations; + public Object current_operations; + public bool pool_auto_join; + public Object cluster_config; + public Object other_config; + } + + [XmlRpcMissingMapping(MappingAction.Ignore)] + public class Proxy_Cluster_host + { + public string uuid; + public string cluster; + public string host; + public bool enabled; + public string [] allowed_operations; + public Object current_operations; + public Object other_config; + } + } diff --git a/XenModel/XenAPI/Relation.cs b/XenModel/XenAPI/Relation.cs index 9014ae11e..933dd9257 100644 --- a/XenModel/XenAPI/Relation.cs +++ b/XenModel/XenAPI/Relation.cs @@ -69,6 +69,10 @@ namespace XenAPI new Relation("roles", "subject", "roles"), }); + relations.Add(typeof(Proxy_Cluster), new Relation[] { + new Relation("cluster_hosts", "Cluster_host", "cluster"), + }); + relations.Add(typeof(Proxy_Bond), new Relation[] { new Relation("slaves", "PIF", "bond_slave_of"), }); diff --git a/XenModel/XenAPI/VDI.cs b/XenModel/XenAPI/VDI.cs index 1c3ae5977..e765855e9 100644 --- a/XenModel/XenAPI/VDI.cs +++ b/XenModel/XenAPI/VDI.cs @@ -77,7 +77,8 @@ namespace XenAPI XenRef metadata_of_pool, bool metadata_latest, bool is_tools_iso, - bool cbt_enabled) + bool cbt_enabled, + XenRef activated_on) { this.uuid = uuid; this.name_label = name_label; @@ -111,6 +112,7 @@ namespace XenAPI this.metadata_latest = metadata_latest; this.is_tools_iso = is_tools_iso; this.cbt_enabled = cbt_enabled; + this.activated_on = activated_on; } /// @@ -156,6 +158,7 @@ namespace XenAPI metadata_latest = update.metadata_latest; is_tools_iso = update.is_tools_iso; cbt_enabled = update.cbt_enabled; + activated_on = update.activated_on; } internal void UpdateFromProxy(Proxy_VDI proxy) @@ -192,6 +195,7 @@ namespace XenAPI metadata_latest = (bool)proxy.metadata_latest; is_tools_iso = (bool)proxy.is_tools_iso; cbt_enabled = (bool)proxy.cbt_enabled; + activated_on = proxy.activated_on == null ? null : XenRef.Create(proxy.activated_on); } public Proxy_VDI ToProxy() @@ -229,6 +233,7 @@ namespace XenAPI result_.metadata_latest = metadata_latest; result_.is_tools_iso = is_tools_iso; result_.cbt_enabled = cbt_enabled; + result_.activated_on = activated_on ?? ""; return result_; } @@ -270,6 +275,7 @@ namespace XenAPI metadata_latest = Marshalling.ParseBool(table, "metadata_latest"); is_tools_iso = Marshalling.ParseBool(table, "is_tools_iso"); cbt_enabled = Marshalling.ParseBool(table, "cbt_enabled"); + activated_on = Marshalling.ParseRef(table, "activated_on"); } public bool DeepEquals(VDI other, bool ignoreCurrentOperations) @@ -312,7 +318,8 @@ namespace XenAPI Helper.AreEqual2(this._metadata_of_pool, other._metadata_of_pool) && Helper.AreEqual2(this._metadata_latest, other._metadata_latest) && Helper.AreEqual2(this._is_tools_iso, other._is_tools_iso) && - Helper.AreEqual2(this._cbt_enabled, other._cbt_enabled); + Helper.AreEqual2(this._cbt_enabled, other._cbt_enabled) && + Helper.AreEqual2(this._activated_on, other._activated_on); } public override string SaveChanges(Session session, string opaqueRef, VDI server) @@ -795,6 +802,17 @@ namespace XenAPI return (bool)session.proxy.vdi_get_cbt_enabled(session.uuid, _vdi ?? "").parse(); } + /// + /// Get the activated_on field of the given VDI. + /// Experimental. First published in Unreleased. + /// + /// The session + /// The opaque_ref of the given vdi + public static XenRef get_activated_on(Session session, string _vdi) + { + return XenRef.Create(session.proxy.vdi_get_activated_on(session.uuid, _vdi ?? "").parse()); + } + /// /// Set the other_config field of the given VDI. /// First published in XenServer 4.0. @@ -2406,5 +2424,24 @@ namespace XenAPI } } private bool _cbt_enabled; + + /// + /// The host on which this VDI is activated, if any + /// Experimental. First published in Unreleased. + /// + public virtual XenRef activated_on + { + get { return _activated_on; } + set + { + if (!Helper.AreEqual(value, _activated_on)) + { + _activated_on = value; + Changed = true; + NotifyPropertyChanged("activated_on"); + } + } + } + private XenRef _activated_on; } } diff --git a/XenModel/XenAPI/cluster_host_operation.cs b/XenModel/XenAPI/cluster_host_operation.cs new file mode 100644 index 000000000..d4d2ec71b --- /dev/null +++ b/XenModel/XenAPI/cluster_host_operation.cs @@ -0,0 +1,58 @@ +/* + * Copyright (c) Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1) Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2) Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +using System; +using System.Collections.Generic; + + +namespace XenAPI +{ + public enum cluster_host_operation + { + enable, disable, unknown + } + + public static class cluster_host_operation_helper + { + public static string ToString(cluster_host_operation x) + { + switch (x) + { + case cluster_host_operation.enable: + return "enable"; + case cluster_host_operation.disable: + return "disable"; + default: + return "unknown"; + } + } + } +} diff --git a/XenModel/XenAPI/cluster_operation.cs b/XenModel/XenAPI/cluster_operation.cs new file mode 100644 index 000000000..ed71b0ebc --- /dev/null +++ b/XenModel/XenAPI/cluster_operation.cs @@ -0,0 +1,64 @@ +/* + * Copyright (c) Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1) Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2) Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +using System; +using System.Collections.Generic; + + +namespace XenAPI +{ + public enum cluster_operation + { + add, remove, enable, disable, destroy, unknown + } + + public static class cluster_operation_helper + { + public static string ToString(cluster_operation x) + { + switch (x) + { + case cluster_operation.add: + return "add"; + case cluster_operation.remove: + return "remove"; + case cluster_operation.enable: + return "enable"; + case cluster_operation.disable: + return "disable"; + case cluster_operation.destroy: + return "destroy"; + default: + return "unknown"; + } + } + } +} diff --git a/XenModel/XenAPI/pool_allowed_operations.cs b/XenModel/XenAPI/pool_allowed_operations.cs index 560ea2ae1..2aeb818d2 100644 --- a/XenModel/XenAPI/pool_allowed_operations.cs +++ b/XenModel/XenAPI/pool_allowed_operations.cs @@ -37,7 +37,7 @@ namespace XenAPI { public enum pool_allowed_operations { - ha_enable, ha_disable, unknown + ha_enable, ha_disable, cluster_create, unknown } public static class pool_allowed_operations_helper @@ -50,6 +50,8 @@ namespace XenAPI return "ha_enable"; case pool_allowed_operations.ha_disable: return "ha_disable"; + case pool_allowed_operations.cluster_create: + return "cluster_create"; default: return "unknown"; } From 4837c0a5dfd046509b5e8e4ed72f302b503c76f7 Mon Sep 17 00:00:00 2001 From: serenc Date: Tue, 28 Nov 2017 10:35:51 +0000 Subject: [PATCH 3/6] CP-25565: Added new classes to cache and project Signed-off-by: serenc --- XenModel/Network/Cache.cs | 12 ++++++++++++ XenModel/Network/ICache.cs | 2 ++ XenModel/XenModel.csproj | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/XenModel/Network/Cache.cs b/XenModel/Network/Cache.cs index 335a1a604..d41d9ddf1 100644 --- a/XenModel/Network/Cache.cs +++ b/XenModel/Network/Cache.cs @@ -48,6 +48,8 @@ namespace XenAdmin.Network // keep sorted please private readonly ChangeableDictionary, Bond> _bond = new ChangeableDictionary, Bond>(); private readonly ChangeableDictionary, Blob> _blob = new ChangeableDictionary, Blob>(); + private readonly ChangeableDictionary, Cluster> _cluster = new ChangeableDictionary, Cluster>(); + private readonly ChangeableDictionary, Cluster_host> _cluster_host = new ChangeableDictionary, Cluster_host>(); private readonly ChangeableDictionary, XenAPI.Console> _console = new ChangeableDictionary, XenAPI.Console>(); private readonly ChangeableDictionary, Folder> _folders = new ChangeableDictionary, Folder>(); private readonly ChangeableDictionary, DockerContainer> _dockerContainers = new ChangeableDictionary, DockerContainer>(); @@ -125,6 +127,16 @@ namespace XenAdmin.Network get { return contents(_vm_appliance); } } + public Cluster[] Clusters + { + get { return contents(_cluster); } + } + + public Cluster_host[] ClusterHosts + { + get { return contents(_cluster_host); } + } + public Folder[] Folders { get { return contents(_folders); } diff --git a/XenModel/Network/ICache.cs b/XenModel/Network/ICache.cs index 83aa9b90b..0c4acaa90 100644 --- a/XenModel/Network/ICache.cs +++ b/XenModel/Network/ICache.cs @@ -89,5 +89,7 @@ namespace XenAdmin.Network PVS_cache_storage[] PVS_cache_storages { get; } void UpdateDockerContainersForVM(IList d, VM v); void CheckDockerContainersBatchChange(); + Cluster[] Clusters { get; } + Cluster_host[] ClusterHosts { get; } } } diff --git a/XenModel/XenModel.csproj b/XenModel/XenModel.csproj index f507e325e..d8e541007 100644 --- a/XenModel/XenModel.csproj +++ b/XenModel/XenModel.csproj @@ -346,6 +346,10 @@ + + + + From 5bb7a07711f57b6af72c0805d8bcf6716815ffa3 Mon Sep 17 00:00:00 2001 From: serenc Date: Tue, 28 Nov 2017 10:51:44 +0000 Subject: [PATCH 4/6] CP-25551: Added Provisioning Page to the Wizard Signed-off-by: serenc --- .../Controls/SrProvisioningMethod.Designer.cs | 92 ------ XenAdmin/Controls/SrProvisioningMethod.cs | 30 -- .../Controls/SrProvisioningMethod.ja.resx | 288 ------------------ XenAdmin/Controls/SrProvisioningMethod.resx | 288 ------------------ .../Controls/SrProvisioningMethod.zh-CN.resx | 288 ------------------ XenAdmin/Wizards/NewSRWizard.cs | 8 +- .../ChooseSrProvisioningPage.Designer.cs | 144 ++++----- .../ChooseSrProvisioningPage.cs | 23 +- .../ChooseSrProvisioningPage.ja.resx | 120 ++++++++ .../ChooseSrProvisioningPage.zh-CN.resx | 120 ++++++++ .../NewSRWizard_Pages/ChooseSrTypePage.cs | 5 - .../NewSRWizard_Pages/ChooseSrTypePage.resx | 8 +- .../NewSRWizard_Pages/Frontends/LVMoFCoE.cs | 2 +- .../NewSRWizard_Pages/Frontends/LVMoHBA.cs | 2 +- .../Frontends/LVMoHBA.designer.cs | 10 - .../NewSRWizard_Pages/Frontends/LVMoHBA.resx | 35 +-- .../Frontends/LVMoISCSI.Designer.cs | 10 - .../NewSRWizard_Pages/Frontends/LVMoISCSI.cs | 10 +- .../Frontends/LVMoISCSI.resx | 34 +-- XenAdmin/XenAdmin.csproj | 15 - XenModel/XenAPI-Extensions/Host.cs | 5 + 21 files changed, 357 insertions(+), 1180 deletions(-) delete mode 100644 XenAdmin/Controls/SrProvisioningMethod.Designer.cs delete mode 100644 XenAdmin/Controls/SrProvisioningMethod.cs delete mode 100644 XenAdmin/Controls/SrProvisioningMethod.ja.resx delete mode 100644 XenAdmin/Controls/SrProvisioningMethod.resx delete mode 100644 XenAdmin/Controls/SrProvisioningMethod.zh-CN.resx create mode 100644 XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.ja.resx create mode 100644 XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.zh-CN.resx diff --git a/XenAdmin/Controls/SrProvisioningMethod.Designer.cs b/XenAdmin/Controls/SrProvisioningMethod.Designer.cs deleted file mode 100644 index 5804d013b..000000000 --- a/XenAdmin/Controls/SrProvisioningMethod.Designer.cs +++ /dev/null @@ -1,92 +0,0 @@ -namespace XenAdmin.Controls -{ - partial class SrProvisioningMethod - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SrProvisioningMethod)); - this.groupBoxProvisioningMethod = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanelBondMode = new System.Windows.Forms.TableLayoutPanel(); - this.radioButtonLvm = new System.Windows.Forms.RadioButton(); - this.radioButtonGfs2 = new System.Windows.Forms.RadioButton(); - this.groupBoxProvisioningMethod.SuspendLayout(); - this.tableLayoutPanelBondMode.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxProvisioningMethod - // - resources.ApplyResources(this.groupBoxProvisioningMethod, "groupBoxProvisioningMethod"); - this.groupBoxProvisioningMethod.BackColor = System.Drawing.SystemColors.Control; - this.groupBoxProvisioningMethod.Controls.Add(this.tableLayoutPanelBondMode); - this.groupBoxProvisioningMethod.Name = "groupBoxProvisioningMethod"; - this.groupBoxProvisioningMethod.TabStop = false; - // - // tableLayoutPanelBondMode - // - resources.ApplyResources(this.tableLayoutPanelBondMode, "tableLayoutPanelBondMode"); - this.tableLayoutPanelBondMode.BackColor = System.Drawing.SystemColors.Control; - this.tableLayoutPanelBondMode.Controls.Add(this.radioButtonLvm, 0, 0); - this.tableLayoutPanelBondMode.Controls.Add(this.radioButtonGfs2, 1, 0); - this.tableLayoutPanelBondMode.Name = "tableLayoutPanelBondMode"; - // - // radioButtonLvm - // - resources.ApplyResources(this.radioButtonLvm, "radioButtonLvm"); - this.radioButtonLvm.Checked = true; - this.radioButtonLvm.Name = "radioButtonLvm"; - this.radioButtonLvm.TabStop = true; - this.radioButtonLvm.UseVisualStyleBackColor = true; - // - // radioButtonGfs2 - // - resources.ApplyResources(this.radioButtonGfs2, "radioButtonGfs2"); - this.radioButtonGfs2.Name = "radioButtonGfs2"; - this.radioButtonGfs2.UseVisualStyleBackColor = true; - // - // SrProvisioningMethod - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.SystemColors.Control; - this.Controls.Add(this.groupBoxProvisioningMethod); - this.Name = "SrProvisioningMethod"; - this.groupBoxProvisioningMethod.ResumeLayout(false); - this.groupBoxProvisioningMethod.PerformLayout(); - this.tableLayoutPanelBondMode.ResumeLayout(false); - this.tableLayoutPanelBondMode.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxProvisioningMethod; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBondMode; - private System.Windows.Forms.RadioButton radioButtonLvm; - private System.Windows.Forms.RadioButton radioButtonGfs2; - } -} diff --git a/XenAdmin/Controls/SrProvisioningMethod.cs b/XenAdmin/Controls/SrProvisioningMethod.cs deleted file mode 100644 index ae4b7397a..000000000 --- a/XenAdmin/Controls/SrProvisioningMethod.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace XenAdmin.Controls -{ - public partial class SrProvisioningMethod : UserControl - { - public SrProvisioningMethod() - { - InitializeComponent(); - } - - internal bool Gfs2 - { - get { return radioButtonGfs2.Checked; } - } - - internal bool Lvm - { - get { return radioButtonLvm.Checked; } - } - } -} diff --git a/XenAdmin/Controls/SrProvisioningMethod.ja.resx b/XenAdmin/Controls/SrProvisioningMethod.ja.resx deleted file mode 100644 index abade8ff3..000000000 --- a/XenAdmin/Controls/SrProvisioningMethod.ja.resx +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - GrowAndShrink - - - - True - - - GrowAndShrink - - - 2 - - - True - - - NoControl - - - - 6, 3 - - - 6, 3, 3, 3 - - - 134, 17 - - - 0 - - - Fully provisioned (L&VM) - - - radioButtonLvm - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBondMode - - - 0 - - - True - - - NoControl - - - 167, 3 - - - 24, 3, 3, 3 - - - 149, 17 - - - 1 - - - Thinly provisioned (&GFS-2) - - - radioButtonGfs2 - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBondMode - - - 1 - - - Fill - - - 3, 14 - - - 0, 0, 0, 0 - - - 0, 20 - - - 1 - - - 374, 28 - - - 0 - - - tableLayoutPanelBondMode - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxProvisioningMethod - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="radioButtonLvm" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonGfs2" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,Absolute,28" /></TableLayoutSettings> - - - Fill - - - 0, 0 - - - 0, 6, 0, 0 - - - 3, 1, 3, 2 - - - 380, 44 - - - 2 - - - Provisioning method - - - groupBoxProvisioningMethod - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 96, 96 - - - 330, 44 - - - 380, 44 - - - SrProvisioningMethod - - - 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/SrProvisioningMethod.resx b/XenAdmin/Controls/SrProvisioningMethod.resx deleted file mode 100644 index abade8ff3..000000000 --- a/XenAdmin/Controls/SrProvisioningMethod.resx +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - GrowAndShrink - - - - True - - - GrowAndShrink - - - 2 - - - True - - - NoControl - - - - 6, 3 - - - 6, 3, 3, 3 - - - 134, 17 - - - 0 - - - Fully provisioned (L&VM) - - - radioButtonLvm - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBondMode - - - 0 - - - True - - - NoControl - - - 167, 3 - - - 24, 3, 3, 3 - - - 149, 17 - - - 1 - - - Thinly provisioned (&GFS-2) - - - radioButtonGfs2 - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBondMode - - - 1 - - - Fill - - - 3, 14 - - - 0, 0, 0, 0 - - - 0, 20 - - - 1 - - - 374, 28 - - - 0 - - - tableLayoutPanelBondMode - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxProvisioningMethod - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="radioButtonLvm" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonGfs2" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,Absolute,28" /></TableLayoutSettings> - - - Fill - - - 0, 0 - - - 0, 6, 0, 0 - - - 3, 1, 3, 2 - - - 380, 44 - - - 2 - - - Provisioning method - - - groupBoxProvisioningMethod - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 96, 96 - - - 330, 44 - - - 380, 44 - - - SrProvisioningMethod - - - 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/SrProvisioningMethod.zh-CN.resx b/XenAdmin/Controls/SrProvisioningMethod.zh-CN.resx deleted file mode 100644 index abade8ff3..000000000 --- a/XenAdmin/Controls/SrProvisioningMethod.zh-CN.resx +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - GrowAndShrink - - - - True - - - GrowAndShrink - - - 2 - - - True - - - NoControl - - - - 6, 3 - - - 6, 3, 3, 3 - - - 134, 17 - - - 0 - - - Fully provisioned (L&VM) - - - radioButtonLvm - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBondMode - - - 0 - - - True - - - NoControl - - - 167, 3 - - - 24, 3, 3, 3 - - - 149, 17 - - - 1 - - - Thinly provisioned (&GFS-2) - - - radioButtonGfs2 - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelBondMode - - - 1 - - - Fill - - - 3, 14 - - - 0, 0, 0, 0 - - - 0, 20 - - - 1 - - - 374, 28 - - - 0 - - - tableLayoutPanelBondMode - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxProvisioningMethod - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="radioButtonLvm" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="radioButtonGfs2" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,Absolute,28" /></TableLayoutSettings> - - - Fill - - - 0, 0 - - - 0, 6, 0, 0 - - - 3, 1, 3, 2 - - - 380, 44 - - - 2 - - - Provisioning method - - - groupBoxProvisioningMethod - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 96, 96 - - - 330, 44 - - - 380, 44 - - - SrProvisioningMethod - - - 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/Wizards/NewSRWizard.cs b/XenAdmin/Wizards/NewSRWizard.cs index 80528100d..6daa79da9 100644 --- a/XenAdmin/Wizards/NewSRWizard.cs +++ b/XenAdmin/Wizards/NewSRWizard.cs @@ -360,8 +360,10 @@ namespace XenAdmin.Wizards } else if (senderPagetype == typeof(ChooseSrProvisioningPage)) { - #region - #endregion + var isGfs2 = xenTabPageChooseSrProv.IsGfs2; + xenTabPageLvmoHba.SrType = isGfs2 ? SR.SRTypes.gfs2 : SR.SRTypes.lvmohba; + xenTabPageLvmoFcoe.SrType = isGfs2 ? SR.SRTypes.gfs2 : SR.SRTypes.lvmofcoe; + xenTabPageLvmoIscsi.SrType = isGfs2 ? SR.SRTypes.gfs2 : SR.SRTypes.lvmoiscsi; } else if (senderPagetype == typeof(CIFS_ISO)) { @@ -380,7 +382,7 @@ namespace XenAdmin.Wizards m_srWizardType.UUID = xenTabPageLvmoIscsi.UUID; m_srWizardType.DeviceConfig = xenTabPageLvmoIscsi.DeviceConfig; - m_srWizardType.IsGfs2 = xenTabPageLvmoIscsi.SRType == SR.SRTypes.gfs2; + m_srWizardType.IsGfs2 = xenTabPageLvmoIscsi.SrType == SR.SRTypes.gfs2; } else if (senderPagetype == typeof(NFS_ISO)) { diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs index a74ae6294..83859f746 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.Designer.cs @@ -30,30 +30,31 @@ { this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.label1 = new System.Windows.Forms.Label(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.label2 = new System.Windows.Forms.Label(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButtonGfs2 = new System.Windows.Forms.RadioButton(); + this.labelGFS2 = new System.Windows.Forms.Label(); + this.radioButtonLvm = new System.Windows.Forms.RadioButton(); this.label3 = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.label4 = new System.Windows.Forms.Label(); + this.labelWarning = new System.Windows.Forms.Label(); + this.pictureBoxInfo = new System.Windows.Forms.PictureBox(); this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxInfo)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel1 // this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 7.5F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 92.5F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.radioButton1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.radioButton2, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.radioButtonGfs2, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.labelGFS2, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.radioButtonLvm, 0, 3); this.tableLayoutPanel1.Controls.Add(this.label3, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.label4, 1, 5); - this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.labelWarning, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.pictureBoxInfo, 0, 5); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 10, 3, 3); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 6; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); @@ -77,46 +78,46 @@ this.label1.TabIndex = 0; this.label1.Text = "Select the provisioning method for the new Storage Repository."; // - // radioButton1 + // radioButtonGfs2 // - this.radioButton1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.radioButton1, 2); - this.radioButton1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.radioButton1.Location = new System.Drawing.Point(3, 34); - this.radioButton1.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(155, 19); - this.radioButton1.TabIndex = 1; - this.radioButton1.TabStop = true; - this.radioButton1.Text = "Thin provisioning (GFS2)"; - this.radioButton1.UseVisualStyleBackColor = true; + this.radioButtonGfs2.AutoSize = true; + this.radioButtonGfs2.Checked = true; + this.tableLayoutPanel1.SetColumnSpan(this.radioButtonGfs2, 2); + this.radioButtonGfs2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.radioButtonGfs2.Location = new System.Drawing.Point(3, 34); + this.radioButtonGfs2.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); + this.radioButtonGfs2.Name = "radioButtonGfs2"; + this.radioButtonGfs2.Size = new System.Drawing.Size(155, 19); + this.radioButtonGfs2.TabIndex = 1; + this.radioButtonGfs2.TabStop = true; + this.radioButtonGfs2.Text = "Thin provisioning (GFS2)"; + this.radioButtonGfs2.UseVisualStyleBackColor = true; // - // label2 + // labelGFS2 // - this.label2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 2); - this.label2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label2.Location = new System.Drawing.Point(20, 59); - this.label2.Margin = new System.Windows.Forms.Padding(20, 3, 3, 3); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(511, 15); - this.label2.TabIndex = 2; - this.label2.Text = "The SR will be formatted with the GFS2 cluster file system for hosting thinly pro" + + this.labelGFS2.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.labelGFS2, 2); + this.labelGFS2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.labelGFS2.Location = new System.Drawing.Point(20, 59); + this.labelGFS2.Margin = new System.Windows.Forms.Padding(20, 3, 3, 3); + this.labelGFS2.Name = "labelGFS2"; + this.labelGFS2.Size = new System.Drawing.Size(511, 15); + this.labelGFS2.TabIndex = 2; + this.labelGFS2.Text = "The SR will be formatted with the GFS2 cluster file system for hosting thinly pro" + "visioned images."; // - // radioButton2 + // radioButtonLvm // - this.radioButton2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.radioButton2, 2); - this.radioButton2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.radioButton2.Location = new System.Drawing.Point(3, 83); - this.radioButton2.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(147, 19); - this.radioButton2.TabIndex = 3; - this.radioButton2.TabStop = true; - this.radioButton2.Text = "Full provisioning (LVM)"; - this.radioButton2.UseVisualStyleBackColor = true; + this.radioButtonLvm.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.radioButtonLvm, 2); + this.radioButtonLvm.Font = new System.Drawing.Font("Segoe UI", 9F); + this.radioButtonLvm.Location = new System.Drawing.Point(3, 83); + this.radioButtonLvm.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); + this.radioButtonLvm.Name = "radioButtonLvm"; + this.radioButtonLvm.Size = new System.Drawing.Size(147, 19); + this.radioButtonLvm.TabIndex = 3; + this.radioButtonLvm.Text = "Full provisioning (LVM)"; + this.radioButtonLvm.UseVisualStyleBackColor = true; // // label3 // @@ -126,30 +127,29 @@ this.label3.Location = new System.Drawing.Point(20, 108); this.label3.Margin = new System.Windows.Forms.Padding(20, 3, 3, 3); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(185, 15); + this.label3.Size = new System.Drawing.Size(400, 15); this.label3.TabIndex = 4; - this.label3.Text = "LVM description..............................."; + this.label3.Text = "This SR will be configured to host fully provisioned virtual disks using LVM."; // - // pictureBox1 + // labelWarning // - this.pictureBox1.Image = global::XenAdmin.Properties.Resources._000_Info3_h32bit_16; - this.pictureBox1.Location = new System.Drawing.Point(10, 136); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(10, 10, 10, 3); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(19, 20); - this.pictureBox1.TabIndex = 5; - this.pictureBox1.TabStop = false; + this.labelWarning.AutoSize = true; + this.labelWarning.Font = new System.Drawing.Font("Segoe UI", 9F); + this.labelWarning.Location = new System.Drawing.Point(25, 141); + this.labelWarning.Margin = new System.Windows.Forms.Padding(0, 15, 3, 0); + this.labelWarning.Name = "labelWarning"; + this.labelWarning.Size = new System.Drawing.Size(0, 15); + this.labelWarning.TabIndex = 6; // - // label4 + // pictureBoxInfo // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label4.Location = new System.Drawing.Point(43, 136); - this.label4.Margin = new System.Windows.Forms.Padding(3, 10, 3, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(38, 15); - this.label4.TabIndex = 6; - this.label4.Text = "label4"; + this.pictureBoxInfo.Image = global::XenAdmin.Properties.Resources._000_Info3_h32bit_16; + this.pictureBoxInfo.Location = new System.Drawing.Point(3, 141); + this.pictureBoxInfo.Margin = new System.Windows.Forms.Padding(3, 15, 3, 3); + this.pictureBoxInfo.Name = "pictureBoxInfo"; + this.pictureBoxInfo.Size = new System.Drawing.Size(19, 20); + this.pictureBoxInfo.TabIndex = 5; + this.pictureBoxInfo.TabStop = false; // // ChooseSrProvisioningPage // @@ -160,7 +160,7 @@ this.Size = new System.Drawing.Size(540, 336); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxInfo)).EndInit(); this.ResumeLayout(false); } @@ -169,11 +169,11 @@ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.Label label1; - private System.Windows.Forms.RadioButton radioButton1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButtonGfs2; + private System.Windows.Forms.Label labelGFS2; + private System.Windows.Forms.RadioButton radioButtonLvm; private System.Windows.Forms.Label label3; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.Label label4; + private System.Windows.Forms.PictureBox pictureBoxInfo; + private System.Windows.Forms.Label labelWarning; } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs index f11de79fe..089a4ec88 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs @@ -46,8 +46,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages public partial class ChooseSrProvisioningPage : XenTabPage { - private bool m_allowNext = true; - public ChooseSrProvisioningPage() { InitializeComponent(); @@ -60,5 +58,26 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages public override string PageTitle { get { return Messages.CHOOSE_SR_PROVISIONING_PAGE_TITLE; } } #endregion + + public bool IsGfs2 + { + get + { + return radioButtonGfs2.Checked; + } + } + + public override void PopulatePage() + { + var master = Helpers.GetMaster(Connection); + + var gfs2Allowed = !Helpers.FeatureForbidden(Connection, Host.RestrictGfs2) && Connection.Cache.ClusterHosts.Any(cluster => cluster.host.opaque_ref == master.opaque_ref && cluster.enabled); + + radioButtonGfs2.Enabled = labelGFS2.Enabled = gfs2Allowed; + pictureBoxInfo.Visible = labelWarning.Visible = radioButtonLvm.Checked = !gfs2Allowed; + labelWarning.Text = Helpers.FeatureForbidden(Connection, Host.RestrictGfs2) + ? Messages.GFS2_INCORRECT_POOL_LICENSE + : Messages.GFS2_REQUIRES_CLUSTERING_ENABLED; + } } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.ja.resx b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.ja.resx new file mode 100644 index 000000000..29dcb1b3a --- /dev/null +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.ja.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.zh-CN.resx b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.zh-CN.resx new file mode 100644 index 000000000..29dcb1b3a --- /dev/null +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.zh-CN.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs index 4cf208dd6..eb061860d 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs @@ -30,12 +30,7 @@ */ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; using System.Linq; -using System.Text; using System.Windows.Forms; using XenAdmin.Controls; using XenAdmin.Core; diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx index d13a3eb38..2fef15253 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx @@ -516,7 +516,7 @@ 103, 19 - 13 + 12 Hardware &HBA @@ -552,7 +552,7 @@ 101, 19 - 15 + 13 Software FCo&E @@ -588,7 +588,7 @@ 46, 19 - 12 + 14 N&FS @@ -624,7 +624,7 @@ 77, 19 - 14 + 15 S&MB/CIFS diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs index 2d6ec86be..afa324698 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs @@ -42,7 +42,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends #region LVMoHBA overrides - public override SR.SRTypes SrType { get { return srProvisioningMethod.Lvm ? SR.SRTypes.lvmofcoe : SR.SRTypes.gfs2; } } + public override SR.SRTypes SrType { get { return SR.SRTypes.lvmofcoe; } } public override bool ShowNicColumn { get { return true; } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.cs index 5e8e734d6..426da8a59 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.cs @@ -56,7 +56,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends InitializeComponent(); } - public virtual SR.SRTypes SrType { get { return srProvisioningMethod.Lvm ? SR.SRTypes.lvmohba : SR.SRTypes.gfs2; } } + public virtual SR.SRTypes SrType { get; set; } public virtual bool ShowNicColumn { get { return false; } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.designer.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.designer.cs index e25300033..5c82cbc48 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.designer.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.designer.cs @@ -41,7 +41,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends this.labelCreate = new System.Windows.Forms.Label(); this.buttonSelectAll = new System.Windows.Forms.Button(); this.buttonClearAll = new System.Windows.Forms.Button(); - this.srProvisioningMethod = new XenAdmin.Controls.SrProvisioningMethod(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); this.tableLayoutPanel1.SuspendLayout(); this.SuspendLayout(); @@ -115,7 +114,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends this.tableLayoutPanel1.Controls.Add(this.dataGridView, 0, 2); this.tableLayoutPanel1.Controls.Add(this.buttonSelectAll, 0, 3); this.tableLayoutPanel1.Controls.Add(this.buttonClearAll, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.srProvisioningMethod, 0, 4); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // labelCreate @@ -138,13 +136,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends this.buttonClearAll.UseVisualStyleBackColor = true; this.buttonClearAll.Click += new System.EventHandler(this.buttonClearAll_Click); // - // srProvisioningMethod - // - this.srProvisioningMethod.BackColor = System.Drawing.SystemColors.Control; - this.tableLayoutPanel1.SetColumnSpan(this.srProvisioningMethod, 2); - resources.ApplyResources(this.srProvisioningMethod, "srProvisioningMethod"); - this.srProvisioningMethod.Name = "srProvisioningMethod"; - // // LVMoHBA // resources.ApplyResources(this, "$this"); @@ -173,6 +164,5 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends private System.Windows.Forms.DataGridViewTextBoxColumn colId; private System.Windows.Forms.DataGridViewTextBoxColumn colDetails; private System.Windows.Forms.DataGridViewTextBoxColumn colNic; - protected Controls.SrProvisioningMethod srProvisioningMethod; } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.resx b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.resx index c3a53f60c..33974b4eb 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.resx +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoHBA.resx @@ -217,7 +217,7 @@ 3, 65 - 554, 277 + 554, 327 1 @@ -235,7 +235,7 @@ 2 - 3, 348 + 3, 398 75, 23 @@ -259,7 +259,7 @@ 3 - 84, 348 + 84, 398 75, 23 @@ -282,33 +282,6 @@ 4 - - Top - - - 3, 377 - - - 330, 44 - - - 554, 44 - - - 5 - - - srProvisioningMethod - - - XenAdmin.Controls.SrProvisioningMethod, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - tableLayoutPanel1 - - - 5 - Fill @@ -337,7 +310,7 @@ 0 - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelCreate" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="labelReattach" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="dataGridView" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="buttonSelectAll" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonClearAll" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="srProvisioningMethod" Row="4" RowSpan="1" Column="0" ColumnSpan="2" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,120" /></TableLayoutSettings> + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelCreate" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="labelReattach" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="dataGridView" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="buttonSelectAll" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonClearAll" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,120" /></TableLayoutSettings> 3, 34 diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.Designer.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.Designer.cs index cc0589998..4a230f88d 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.Designer.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.Designer.cs @@ -59,7 +59,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends this.label11 = new System.Windows.Forms.Label(); this.errorLabelAtHostname = new System.Windows.Forms.Label(); this.spinnerIconAtScanTargetHostButton = new XenAdmin.Controls.SpinnerIcon(); - this.srProvisioningMethod = new XenAdmin.Controls.SrProvisioningMethod(); this.toolTipContainerIQNscan = new XenAdmin.Controls.ToolTipContainer(); this.tableLayoutPanel1.SuspendLayout(); this.iSCSITargetGroupBox.SuspendLayout(); @@ -99,7 +98,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends this.tableLayoutPanel1.Controls.Add(this.label11, 0, 0); this.tableLayoutPanel1.Controls.Add(this.errorLabelAtHostname, 3, 2); this.tableLayoutPanel1.Controls.Add(this.spinnerIconAtScanTargetHostButton, 2, 8); - this.tableLayoutPanel1.Controls.Add(this.srProvisioningMethod, 0, 10); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // iSCSITargetGroupBox @@ -301,13 +299,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends this.spinnerIconAtScanTargetHostButton.SucceededImage = global::XenAdmin.Properties.Resources._000_Tick_h32bit_16; this.spinnerIconAtScanTargetHostButton.TabStop = false; // - // srProvisioningMethod - // - resources.ApplyResources(this.srProvisioningMethod, "srProvisioningMethod"); - this.srProvisioningMethod.BackColor = System.Drawing.SystemColors.Control; - this.tableLayoutPanel1.SetColumnSpan(this.srProvisioningMethod, 7); - this.srProvisioningMethod.Name = "srProvisioningMethod"; - // // toolTipContainerIQNscan // resources.ApplyResources(this.toolTipContainerIQNscan, "toolTipContainerIQNscan"); @@ -369,6 +360,5 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends private XenAdmin.Controls.SpinnerIcon spinnerIconAtScanTargetHostButton; private System.Windows.Forms.Label placeholderLabel; private System.Windows.Forms.Label placeHolderLabel2; - private Controls.SrProvisioningMethod srProvisioningMethod; } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.cs index f71a04f46..71648e525 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.cs @@ -914,7 +914,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends { get { - return GetDeviceConfig(SRType); + return GetDeviceConfig(SrType); } } @@ -927,13 +927,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends } } - public SR.SRTypes SRType - { - get - { - return srProvisioningMethod.Lvm ? SR.SRTypes.lvmoiscsi : SR.SRTypes.gfs2; - } - } + public SR.SRTypes SrType { get; set; } #endregion } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.resx b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.resx index 0f03ad8a0..6c4d6c019 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.resx +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoISCSI.resx @@ -1167,36 +1167,6 @@ 18 - - Top, Left, Right - - - 3, 299 - - - 3, 6, 3, 3 - - - 330, 46 - - - 518, 48 - - - 16 - - - srProvisioningMethod - - - XenAdmin.Controls.SrProvisioningMethod, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - tableLayoutPanel1 - - - 19 - Top @@ -1210,7 +1180,7 @@ 11 - 524, 350 + 524, 293 0 @@ -1228,7 +1198,7 @@ 0 - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="iSCSITargetGroupBox" Row="9" RowSpan="1" Column="0" ColumnSpan="7" /><Control Name="placeHolderLabel2" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="placeholderLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="errorLabelAtCHAPPassword" Row="7" RowSpan="1" Column="3" ColumnSpan="4" /><Control Name="errorIconAtCHAPPassword" Row="7" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="errorIconAtHostOrIP" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="scanTargetHostButton" Row="8" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="labelIscsiTargetHost" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="textBoxIscsiHost" Row="1" RowSpan="1" Column="2" ColumnSpan="2" /><Control Name="labelColon" Row="1" RowSpan="1" Column="3" ColumnSpan="1" /><Control Name="textBoxIscsiPort" Row="1" RowSpan="1" Column="4" ColumnSpan="1" /><Control Name="IScsiChapUserTextBox" Row="5" RowSpan="1" Column="2" ColumnSpan="2" /><Control Name="IScsiChapSecretTextBox" Row="6" RowSpan="1" Column="2" ColumnSpan="2" /><Control Name="labelCHAPuser" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="IScsiChapSecretLabel" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="IscsiUseChapCheckBox" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="label11" Row="0" RowSpan="1" Column="0" ColumnSpan="7" /><Control Name="errorLabelAtHostname" Row="2" RowSpan="1" Column="3" ColumnSpan="4" /><Control Name="spinnerIconAtScanTargetHostButton" Row="8" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="srProvisioningMethod" Row="10" RowSpan="1" Column="0" ColumnSpan="7" /></Controls><Columns Styles="Absolute,17,Absolute,146,Absolute,22,Absolute,211,AutoSize,0,AutoSize,0,Absolute,20" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,220,AutoSize,220" /></TableLayoutSettings> + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="iSCSITargetGroupBox" Row="9" RowSpan="1" Column="0" ColumnSpan="7" /><Control Name="placeHolderLabel2" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="placeholderLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="errorLabelAtCHAPPassword" Row="7" RowSpan="1" Column="3" ColumnSpan="4" /><Control Name="errorIconAtCHAPPassword" Row="7" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="errorIconAtHostOrIP" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="scanTargetHostButton" Row="8" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="labelIscsiTargetHost" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="textBoxIscsiHost" Row="1" RowSpan="1" Column="2" ColumnSpan="2" /><Control Name="labelColon" Row="1" RowSpan="1" Column="3" ColumnSpan="1" /><Control Name="textBoxIscsiPort" Row="1" RowSpan="1" Column="4" ColumnSpan="1" /><Control Name="IScsiChapUserTextBox" Row="5" RowSpan="1" Column="2" ColumnSpan="2" /><Control Name="IScsiChapSecretTextBox" Row="6" RowSpan="1" Column="2" ColumnSpan="2" /><Control Name="labelCHAPuser" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="IScsiChapSecretLabel" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="IscsiUseChapCheckBox" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="label11" Row="0" RowSpan="1" Column="0" ColumnSpan="7" /><Control Name="errorLabelAtHostname" Row="2" RowSpan="1" Column="3" ColumnSpan="4" /><Control Name="spinnerIconAtScanTargetHostButton" Row="8" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Absolute,17,Absolute,146,Absolute,22,Absolute,211,AutoSize,0,AutoSize,0,Absolute,20" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,220,AutoSize,220" /></TableLayoutSettings> Top, Right diff --git a/XenAdmin/XenAdmin.csproj b/XenAdmin/XenAdmin.csproj index 8eca566ea..9772aa7f1 100644 --- a/XenAdmin/XenAdmin.csproj +++ b/XenAdmin/XenAdmin.csproj @@ -205,12 +205,6 @@ SpinnerIcon.cs - - UserControl - - - SrProvisioningMethod.cs - UserControl @@ -1513,15 +1507,6 @@ PvsCacheStorageRow.cs - - SrProvisioningMethod.cs - - - SrProvisioningMethod.cs - - - SrProvisioningMethod.cs - QueryPanel.cs diff --git a/XenModel/XenAPI-Extensions/Host.cs b/XenModel/XenAPI-Extensions/Host.cs index 6dce92d02..f15035209 100644 --- a/XenModel/XenAPI-Extensions/Host.cs +++ b/XenModel/XenAPI-Extensions/Host.cs @@ -425,6 +425,11 @@ namespace XenAPI : h.IsFreeLicenseOrExpired(); // restrict on Free edition or if the license has expired } + public static bool RestrictGfs2(Host h) + { + return BoolKeyPreferTrue(h.license_params, "restrict_gfs2"); + } + public bool HasPBDTo(SR sr) { foreach (XenRef pbd in PBDs) From 7e7a6d9c468b0914c5e53b7dfa2ef42ff71e577a Mon Sep 17 00:00:00 2001 From: serenc Date: Tue, 28 Nov 2017 13:34:38 +0000 Subject: [PATCH 5/6] CP-25551 and CP-25565: Updated branch based on PR comments Signed-off-by: serenc --- XenAdmin/Wizards/NewSRWizard.cs | 7 ++--- .../ChooseSrProvisioningPage.cs | 2 +- .../NewSRWizard_Pages/ChooseSrTypePage.cs | 4 --- .../NewSRWizard_Pages/Frontends/LVMoFCoE.cs | 2 -- XenModel/Messages.resx | 30 +++++++++---------- XenModel/Network/Cache.cs | 2 +- XenModel/Network/ICache.cs | 2 +- 7 files changed, 21 insertions(+), 28 deletions(-) diff --git a/XenAdmin/Wizards/NewSRWizard.cs b/XenAdmin/Wizards/NewSRWizard.cs index 6daa79da9..918e858e1 100644 --- a/XenAdmin/Wizards/NewSRWizard.cs +++ b/XenAdmin/Wizards/NewSRWizard.cs @@ -134,7 +134,6 @@ namespace XenAdmin.Wizards // Order the tab pages AddPage(xenTabPageChooseSrType); AddPage(xenTabPageSrName); - //AddPage(xenTabPageChooseSrProv); AddPage(new XenTabPage {Text = Messages.NEWSR_LOCATION}); // RBAC warning page @@ -286,18 +285,18 @@ namespace XenAdmin.Wizards else if (m_srWizardType is SrWizardType_Iscsi) { AddPage(xenTabPageLvmoIscsi); - AddPage(xenTabPageChooseSrProv, 2); + AddPage(xenTabPageChooseSrProv); } else if (m_srWizardType is SrWizardType_Hba) { AddPage(xenTabPageLvmoHba); - AddPage(xenTabPageChooseSrProv, 2); + AddPage(xenTabPageChooseSrProv); AddPage(xenTabPageLvmoHbaSummary); } else if (m_srWizardType is SrWizardType_Fcoe) { AddPage(xenTabPageLvmoFcoe); - AddPage(xenTabPageChooseSrProv, 2); + AddPage(xenTabPageChooseSrProv); AddPage(xenTabPageLvmoHbaSummary); } else if (m_srWizardType is SrWizardType_Cslg) diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs index 089a4ec88..b2c4fce0e 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs @@ -71,7 +71,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages { var master = Helpers.GetMaster(Connection); - var gfs2Allowed = !Helpers.FeatureForbidden(Connection, Host.RestrictGfs2) && Connection.Cache.ClusterHosts.Any(cluster => cluster.host.opaque_ref == master.opaque_ref && cluster.enabled); + var gfs2Allowed = !Helpers.FeatureForbidden(Connection, Host.RestrictGfs2) && Connection.Cache.Cluster_hosts.Any(cluster => cluster.host.opaque_ref == master.opaque_ref && cluster.enabled); radioButtonGfs2.Enabled = labelGFS2.Enabled = gfs2Allowed; pictureBoxInfo.Visible = labelWarning.Visible = radioButtonLvm.Checked = !gfs2Allowed; diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs index eb061860d..42d02cfda 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.cs @@ -286,9 +286,5 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages return sm; } - private void tableLayoutPanel3_Paint(object sender, PaintEventArgs e) - { - - } } } diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs index afa324698..1c3b3915c 100644 --- a/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs +++ b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs @@ -42,8 +42,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages.Frontends #region LVMoHBA overrides - public override SR.SRTypes SrType { get { return SR.SRTypes.lvmofcoe; } } - public override bool ShowNicColumn { get { return true; } } public override string HelpID { get { return "Location_FCOE"; } } diff --git a/XenModel/Messages.resx b/XenModel/Messages.resx index 72b1fb6e0..8e1e529e4 100755 --- a/XenModel/Messages.resx +++ b/XenModel/Messages.resx @@ -2516,6 +2516,9 @@ Do you want to assign it to the schedule '{2}' instead? Choose another &destination + + Choose the provisioning method + Choose the type of new storage @@ -2707,12 +2710,12 @@ This action is final and unrecoverable. This will disable Changed Block Tracking on the disks of the selected VMs. If you are using any third-party solutions to back up the VMs, they might be affected. Note that Changed Block Tracking cannot be enabled again from [XenCenter]. Do you want to continue? - - Disable Changed Block Tracking on selected VMs - Disable Changed Block Tracking on VM "{0}" + + Disable Changed Block Tracking on selected VMs + Are you sure you want to disable Health Check on the selected pool? @@ -5550,6 +5553,12 @@ Would you like to eject these ISOs before continuing? Get Password + + Your pool license does not allow GFS2. + + + GFS2 requires clustering to be enabled on the pool. + GPU @@ -9863,6 +9872,9 @@ Press OK to continue the wizard and return to the server and follow the instruct Select the VMs that you want to protect with this policy + + Provisioning + Provisioning Options @@ -13565,16 +13577,4 @@ You will need to navigate to the Console on each of the selected VMs to complete You are here - - Choose the provisioning method - - - Your pool license does not allow GFS2. - - - GFS2 requires clustering to be enabled on the pool. - - - Provisioning - \ No newline at end of file diff --git a/XenModel/Network/Cache.cs b/XenModel/Network/Cache.cs index d41d9ddf1..804602029 100644 --- a/XenModel/Network/Cache.cs +++ b/XenModel/Network/Cache.cs @@ -132,7 +132,7 @@ namespace XenAdmin.Network get { return contents(_cluster); } } - public Cluster_host[] ClusterHosts + public Cluster_host[] Cluster_hosts { get { return contents(_cluster_host); } } diff --git a/XenModel/Network/ICache.cs b/XenModel/Network/ICache.cs index 0c4acaa90..b821be2a8 100644 --- a/XenModel/Network/ICache.cs +++ b/XenModel/Network/ICache.cs @@ -90,6 +90,6 @@ namespace XenAdmin.Network void UpdateDockerContainersForVM(IList d, VM v); void CheckDockerContainersBatchChange(); Cluster[] Clusters { get; } - Cluster_host[] ClusterHosts { get; } + Cluster_host[] Cluster_hosts { get; } } } From ecdbaee2f3d8e197f4c30d24a005446bce6667f3 Mon Sep 17 00:00:00 2001 From: serenc Date: Tue, 28 Nov 2017 14:06:25 +0000 Subject: [PATCH 6/6] CP-25563: Return false to test UI Signed-off-by: serenc --- XenModel/XenAPI-Extensions/Host.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XenModel/XenAPI-Extensions/Host.cs b/XenModel/XenAPI-Extensions/Host.cs index f15035209..4d340da30 100644 --- a/XenModel/XenAPI-Extensions/Host.cs +++ b/XenModel/XenAPI-Extensions/Host.cs @@ -427,7 +427,7 @@ namespace XenAPI public static bool RestrictGfs2(Host h) { - return BoolKeyPreferTrue(h.license_params, "restrict_gfs2"); + return false; //BoolKeyPreferTrue(h.license_params, "restrict_gfs2"); } public bool HasPBDTo(SR sr)