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 59c12563b..918e858e1 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);
@@ -283,15 +285,18 @@ namespace XenAdmin.Wizards
else if (m_srWizardType is SrWizardType_Iscsi)
{
AddPage(xenTabPageLvmoIscsi);
+ AddPage(xenTabPageChooseSrProv);
}
else if (m_srWizardType is SrWizardType_Hba)
{
AddPage(xenTabPageLvmoHba);
+ AddPage(xenTabPageChooseSrProv);
AddPage(xenTabPageLvmoHbaSummary);
}
else if (m_srWizardType is SrWizardType_Fcoe)
{
AddPage(xenTabPageLvmoFcoe);
+ AddPage(xenTabPageChooseSrProv);
AddPage(xenTabPageLvmoHbaSummary);
}
else if (m_srWizardType is SrWizardType_Cslg)
@@ -352,6 +357,13 @@ namespace XenAdmin.Wizards
xenTabPageLvmoFcoe.SrWizardType = m_srWizardType;
#endregion
}
+ else if (senderPagetype == typeof(ChooseSrProvisioningPage))
+ {
+ 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))
{
m_srWizardType.DeviceConfig = xenTabPageCifsIso.DeviceConfig;
@@ -369,7 +381,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))
{
@@ -786,5 +798,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..83859f746
--- /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.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.labelWarning = new System.Windows.Forms.Label();
+ this.pictureBoxInfo = new System.Windows.Forms.PictureBox();
+ this.tableLayoutPanel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxInfo)).BeginInit();
+ this.SuspendLayout();
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 2;
+ 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.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.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());
+ 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.";
+ //
+ // radioButtonGfs2
+ //
+ 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;
+ //
+ // labelGFS2
+ //
+ 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.";
+ //
+ // radioButtonLvm
+ //
+ 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
+ //
+ 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(400, 15);
+ this.label3.TabIndex = 4;
+ this.label3.Text = "This SR will be configured to host fully provisioned virtual disks using LVM.";
+ //
+ // labelWarning
+ //
+ 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;
+ //
+ // pictureBoxInfo
+ //
+ 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
+ //
+ 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.pictureBoxInfo)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.Label label1;
+ 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 pictureBoxInfo;
+ private System.Windows.Forms.Label labelWarning;
+ }
+}
diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs
new file mode 100644
index 000000000..b2c4fce0e
--- /dev/null
+++ b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrProvisioningPage.cs
@@ -0,0 +1,83 @@
+/* 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
+
+ {
+ 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
+
+ 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.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;
+ 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.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/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.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..42d02cfda 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;
@@ -48,7 +43,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 +66,7 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages
radioButtonCslg, radioButtonCifs, radioButtonFcoe,
radioButtonNfsIso, radioButtonCifsIso
};
+
}
private void SetupDeprecationBanner(bool visible)
@@ -289,5 +285,6 @@ namespace XenAdmin.Wizards.NewSRWizard_Pages
}
return sm;
}
+
}
}
diff --git a/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx b/XenAdmin/Wizards/NewSRWizard_Pages/ChooseSrTypePage.resx
index 7c84341a6..2fef15253 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
+
+
+ 12
+
+
+ Hardware &HBA
+
+
+ radioButtonFibreChannel
+
+
+ System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tableLayoutPanel3
+
+
+ 5
+
True
@@ -609,16 +543,16 @@
NoControl
- 6, 131
+ 26, 109
- 6, 3, 3, 3
+ 15, 3, 3, 3
101, 19
- 15
+ 13
Software FCo&E
@@ -633,7 +567,43 @@
tableLayoutPanel3
- 0
+ 6
+
+
+ True
+
+
+ Segoe UI, 9pt
+
+
+ NoControl
+
+
+ 26, 169
+
+
+ 15, 3, 3, 3
+
+
+ 46, 19
+
+
+ 14
+
+
+ N&FS
+
+
+ radioButtonNfs
+
+
+ System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tableLayoutPanel3
+
+
+ 7
True
@@ -645,16 +615,16 @@
NoControl
- 6, 106
+ 26, 194
- 6, 3, 3, 3
+ 15, 3, 3, 3
77, 19
- 14
+ 15
S&MB/CIFS
@@ -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/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs b/XenAdmin/Wizards/NewSRWizard_Pages/Frontends/LVMoFCoE.cs
index 2d6ec86be..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 srProvisioningMethod.Lvm ? SR.SRTypes.lvmofcoe : SR.SRTypes.gfs2; } }
-
public override bool ShowNicColumn { get { return true; } }
public override string HelpID { get { return "Location_FCOE"; } }
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 8389dcaa2..9772aa7f1 100644
--- a/XenAdmin/XenAdmin.csproj
+++ b/XenAdmin/XenAdmin.csproj
@@ -205,12 +205,6 @@
SpinnerIcon.cs
-
- UserControl
-
-
- SrProvisioningMethod.cs
-
UserControl
@@ -718,6 +712,12 @@
IntraPoolCopyPage.cs
+
+ UserControl
+
+
+ ChooseSrProvisioningPage.cs
+
UserControl
@@ -1507,15 +1507,6 @@
PvsCacheStorageRow.cs
-
- SrProvisioningMethod.cs
-
-
- SrProvisioningMethod.cs
-
-
- SrProvisioningMethod.cs
-
QueryPanel.cs
@@ -2082,6 +2073,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..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
@@ -8272,9 +8281,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
@@ -9865,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
diff --git a/XenModel/Network/Cache.cs b/XenModel/Network/Cache.cs
index 335a1a604..804602029 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[] Cluster_hosts
+ {
+ 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..b821be2a8 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[] Cluster_hosts { get; }
}
}
diff --git a/XenModel/XenAPI-Extensions/Host.cs b/XenModel/XenAPI-Extensions/Host.cs
index 6dce92d02..4d340da30 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 false; //BoolKeyPreferTrue(h.license_params, "restrict_gfs2");
+ }
+
public bool HasPBDTo(SR sr)
{
foreach (XenRef pbd in PBDs)
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