CA-153179: Add options for customizing the config drive to the XC VM creation wizard

Todo: tidy up code & code review

Signed-off-by: Gabor Apati-Nagy <gabor.apati-nagy@citrix.com>
This commit is contained in:
Gabor Apati-Nagy 2014-12-04 18:04:43 +00:00
parent 694e0de202
commit afbbf25325
11 changed files with 1308 additions and 8 deletions

View File

@ -42,6 +42,7 @@ using XenAdmin.Wizards.GenericPages;
using XenAdmin.Core;
using XenAdmin.Actions;
using System.Windows.Forms;
namespace XenAdmin.Wizards.NewVMWizard
{
@ -60,11 +61,11 @@ namespace XenAdmin.Wizards.NewVMWizard
private readonly Page_Cloud page_Cloud;
private readonly LunPerVdiNewVMMappingPage page_6b_LunPerVdi;
private readonly GpuEditPage pageVgpu;
private readonly Page_CloudConfigParameters page_CloudConfigParameters;
private Host m_affinity;
private bool BlockAffinitySelection = false;
private bool vgpuCapability;
public AsyncAction Action;
public NewVMWizard(IXenConnection connection, VM template, Host affinity)
@ -85,6 +86,7 @@ namespace XenAdmin.Wizards.NewVMWizard
page_Cloud = new Page_Cloud();
page_6b_LunPerVdi = new LunPerVdiNewVMMappingPage { Connection = xenConnection };
pageVgpu = new GpuEditPage();
page_CloudConfigParameters = new Page_CloudConfigParameters();
if (!Helpers.FeatureForbidden(connection, Host.RestrictVgpu))
vgpuCapability = Helpers.VgpuCapability(connection);
@ -182,12 +184,20 @@ namespace XenAdmin.Wizards.NewVMWizard
VMOperationCommand.StartDiagnosisForm,
vgpuCapability ? pageVgpu.GpuGroup : null,
vgpuCapability ? pageVgpu.VgpuType : null,
page_5_CpuMem.SelectedCoresPerSocket);
page_5_CpuMem.SelectedCoresPerSocket,
page_CloudConfigParameters.ConfigDriveTemplateText);
Action.RunAsync();
base.FinishWizard();
}
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
if (page_CloudConfigParameters != null && page_CloudConfigParameters.ActiveControl is TextBox && e.KeyChar == (char)Keys.Enter)
return;
base.OnKeyPress(e);
}
protected override void UpdateWizardContent(XenTabPage senderPage)
{
var prevPageType = senderPage.GetType();
@ -204,6 +214,9 @@ namespace XenAdmin.Wizards.NewVMWizard
pageVgpu.vm = selectedTemplate;
page_6_Storage.SelectedTemplate = selectedTemplate;
page_7_Networking.SelectedTemplate = selectedTemplate;
page_CloudConfigParameters.Affinity = m_affinity;
page_CloudConfigParameters.SelectedTemplate = selectedTemplate;
RemovePage(pageVgpu);
if (vgpuCapability && selectedTemplate.IsHVM)
@ -236,6 +249,12 @@ namespace XenAdmin.Wizards.NewVMWizard
// The user cannot set their own affinity, use the one off the template
if (BlockAffinitySelection)
m_affinity = xenConnection.Resolve(selectedTemplate.affinity);
RemovePage(page_CloudConfigParameters);
if (selectedTemplate.TemplateType == VM.VmTemplateType.CoreOS)
{
AddAfterPage(page_6_Storage, page_CloudConfigParameters);
}
}
else if (prevPageType == typeof(Page_CopyBiosStrings))
{

View File

@ -0,0 +1,107 @@
namespace XenAdmin.Wizards.NewVMWizard
{
partial class Page_CloudConfigParameters
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Page_CloudConfigParameters));
this.ConfigDriveTemplateTextBox = new System.Windows.Forms.TextBox();
this.ConfigDriveTemplateLabel = new System.Windows.Forms.Label();
this.topLabel = new System.Windows.Forms.Label();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.IncludeConfigDriveCheckBox = new System.Windows.Forms.CheckBox();
this.reloadDefaults = new System.Windows.Forms.Button();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// ConfigDriveTemplateTextBox
//
this.ConfigDriveTemplateTextBox.AcceptsReturn = true;
resources.ApplyResources(this.ConfigDriveTemplateTextBox, "ConfigDriveTemplateTextBox");
this.ConfigDriveTemplateTextBox.Name = "ConfigDriveTemplateTextBox";
this.tableLayoutPanel1.SetRowSpan(this.ConfigDriveTemplateTextBox, 2);
//
// ConfigDriveTemplateLabel
//
resources.ApplyResources(this.ConfigDriveTemplateLabel, "ConfigDriveTemplateLabel");
this.ConfigDriveTemplateLabel.Name = "ConfigDriveTemplateLabel";
//
// topLabel
//
resources.ApplyResources(this.topLabel, "topLabel");
this.tableLayoutPanel1.SetColumnSpan(this.topLabel, 2);
this.topLabel.Name = "topLabel";
//
// tableLayoutPanel1
//
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
this.tableLayoutPanel1.Controls.Add(this.topLabel, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.ConfigDriveTemplateTextBox, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.ConfigDriveTemplateLabel, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.IncludeConfigDriveCheckBox, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.reloadDefaults, 0, 3);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// IncludeConfigDriveCheckBox
//
resources.ApplyResources(this.IncludeConfigDriveCheckBox, "IncludeConfigDriveCheckBox");
this.IncludeConfigDriveCheckBox.Checked = true;
this.IncludeConfigDriveCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
this.tableLayoutPanel1.SetColumnSpan(this.IncludeConfigDriveCheckBox, 2);
this.IncludeConfigDriveCheckBox.Name = "IncludeConfigDriveCheckBox";
this.IncludeConfigDriveCheckBox.UseVisualStyleBackColor = true;
this.IncludeConfigDriveCheckBox.CheckedChanged += new System.EventHandler(this.IncludeConfigDriveCheckBox_CheckedChanged);
//
// reloadDefaults
//
resources.ApplyResources(this.reloadDefaults, "reloadDefaults");
this.reloadDefaults.Name = "reloadDefaults";
this.reloadDefaults.UseVisualStyleBackColor = true;
this.reloadDefaults.Click += new System.EventHandler(this.reloadDefaults_Click);
//
// Page_CloudConfigParameters
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "Page_CloudConfigParameters";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TextBox ConfigDriveTemplateTextBox;
private System.Windows.Forms.Label ConfigDriveTemplateLabel;
private System.Windows.Forms.Label topLabel;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.CheckBox IncludeConfigDriveCheckBox;
private System.Windows.Forms.Button reloadDefaults;
}
}

View File

@ -0,0 +1,139 @@
/* 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 XenAdmin.Core;
using XenAPI;
using XenAdmin.Controls;
using XenAdmin.Actions;
namespace XenAdmin.Wizards.NewVMWizard
{
public partial class Page_CloudConfigParameters : XenTabPage
{
private VM Template;
public Host Affinity { get; set; }
public Page_CloudConfigParameters()
{
InitializeComponent();
}
void NameTextBox_TextChanged(object sender, EventArgs e)
{
OnPageUpdated();
}
public override string Text
{
get { return Messages.NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE; }
}
public override string PageTitle
{
get { return Messages.NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE_TITLE; }
}
public override string HelpID
{
get { return "CloudConfigParameters"; } //TODO Usha?
}
public override bool EnableNext()
{
return true;
}
public override void PageLoaded(PageLoadedDirection direction)
{
base.PageLoaded(direction);
if (SelectedTemplate == Template)
return;
Template = SelectedTemplate;
GetDefaultParameters();
}
public VM SelectedTemplate { private get; set; }
public string ConfigDriveTemplateText
{
get
{
return
IncludeConfigDriveCheckBox.Checked ? ConfigDriveTemplateTextBox.Text.Trim() : string.Empty;
}
}
public override List<KeyValuePair<string, string>> PageSummary
{
get
{
List<KeyValuePair<string, string>> sum = new List<KeyValuePair<string, string>>();
sum.Add(new KeyValuePair<string, string>(Messages.NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE, IncludeConfigDriveCheckBox.Checked ? "Config drive included" : "Config drive not included"));
return sum;
}
}
private void IncludeConfigDriveCheckBox_CheckedChanged(object sender, EventArgs e)
{
ConfigDriveTemplateTextBox.Enabled = IncludeConfigDriveCheckBox.Checked;
}
private void GetDefaultParameters()
{
var parameters = new Dictionary<string, string>();
parameters.Add("templateuuid", Template.uuid);
var action = new ExecutePluginAction(Connection, Affinity,
"xscontainer",//plugin
"get_config_drive_default",//function
parameters,
true); //hidefromlogs
action.RunExternal(Connection.Session);
var result = action.Result.Replace("\n", Environment.NewLine);
ConfigDriveTemplateTextBox.Text = result;
}
private void reloadDefaults_Click(object sender, EventArgs e)
{
GetDefaultParameters();
}
}
}

View File

@ -0,0 +1,317 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="DescriptionTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 121</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="DescriptionTextBox.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="DescriptionTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>426, 95</value>
</data>
<data name="DescriptionTextBox.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.Name" xml:space="preserve">
<value>DescriptionTextBox</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="NameTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 96</value>
</data>
<data name="NameTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>426, 19</value>
</data>
<data name="NameTextBox.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;NameTextBox.Name" xml:space="preserve">
<value>NameTextBox</value>
</data>
<data name="&gt;&gt;NameTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NameTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;NameTextBox.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 96</value>
</data>
<data name="label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 19</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>名前(&amp;M):</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 121</value>
</data>
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 152</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>説明(&amp;D):</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 276</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="DescriptionTextBox" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="NameTextBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="label2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="label3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
</data>
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 0, 3, 16</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>549, 77</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>この新規仮想マシンを識別するための名前を入力します。ソフトウェアやハードウェアの違いがわかるような名前を使用すると便利です (RHEL DHCP Server、Win2K3 XenApp Server、Exchange 2007 Client Access Server など)。この名前は XenCenter のリソース ペインに表示され、後で変更することができます。
必要に応じて、より詳細な情報を説明として追加することもできます。</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>96, 96</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 276</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>Page_Name</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -0,0 +1,324 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ConfigDriveTemplateTextBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ConfigDriveTemplateTextBox.Font" type="System.Drawing.Font, System.Drawing">
<value>Courier New, 8.25pt</value>
</data>
<data name="ConfigDriveTemplateTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 55</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ConfigDriveTemplateTextBox.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="topLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="topLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="topLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
</data>
<data name="topLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 0, 3, 16</value>
</data>
<data name="topLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>549, 13</value>
</data>
<data name="topLabel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="topLabel.Text" xml:space="preserve">
<value>Specify the cloud-config parameters for your CoreOS VM</value>
</data>
<data name="&gt;&gt;topLabel.Name" xml:space="preserve">
<value>topLabel</value>
</data>
<data name="&gt;&gt;topLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;topLabel.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;topLabel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="ConfigDriveTemplateLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ConfigDriveTemplateLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="ConfigDriveTemplateLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 55</value>
</data>
<data name="ConfigDriveTemplateLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="ConfigDriveTemplateLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 189</value>
</data>
<data name="ConfigDriveTemplateLabel.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="ConfigDriveTemplateLabel.Text" xml:space="preserve">
<value>Config drive template:</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateLabel.Name" xml:space="preserve">
<value>ConfigDriveTemplateLabel</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateLabel.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateLabel.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="IncludeConfigDriveCheckBox.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="IncludeConfigDriveCheckBox.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 32</value>
</data>
<data name="IncludeConfigDriveCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 17</value>
</data>
<data name="IncludeConfigDriveCheckBox.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="IncludeConfigDriveCheckBox.Text" xml:space="preserve">
<value>Include config drive</value>
</data>
<data name="&gt;&gt;IncludeConfigDriveCheckBox.Name" xml:space="preserve">
<value>IncludeConfigDriveCheckBox</value>
</data>
<data name="&gt;&gt;IncludeConfigDriveCheckBox.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;IncludeConfigDriveCheckBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;IncludeConfigDriveCheckBox.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="reloadDefaults.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 250</value>
</data>
<data name="reloadDefaults.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 23</value>
</data>
<data name="reloadDefaults.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="reloadDefaults.Text" xml:space="preserve">
<value>Reset to default</value>
</data>
<data name="&gt;&gt;reloadDefaults.Name" xml:space="preserve">
<value>reloadDefaults</value>
</data>
<data name="&gt;&gt;reloadDefaults.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;reloadDefaults.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;reloadDefaults.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 276</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="topLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="ConfigDriveTemplateTextBox" Row="2" RowSpan="2" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="ConfigDriveTemplateLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="IncludeConfigDriveCheckBox" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="reloadDefaults" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="ConfigDriveTemplateTextBox.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Both</value>
</data>
<data name="ConfigDriveTemplateTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>434, 218</value>
</data>
<data name="ConfigDriveTemplateTextBox.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="ConfigDriveTemplateTextBox.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateTextBox.Name" xml:space="preserve">
<value>ConfigDriveTemplateTextBox</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;ConfigDriveTemplateTextBox.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>96, 96</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 276</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>Page_CloudConfigParameters</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -0,0 +1,317 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="DescriptionTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 121</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="DescriptionTextBox.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="DescriptionTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>426, 95</value>
</data>
<data name="DescriptionTextBox.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.Name" xml:space="preserve">
<value>DescriptionTextBox</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;DescriptionTextBox.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="NameTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 96</value>
</data>
<data name="NameTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>426, 19</value>
</data>
<data name="NameTextBox.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;NameTextBox.Name" xml:space="preserve">
<value>NameTextBox</value>
</data>
<data name="&gt;&gt;NameTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NameTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;NameTextBox.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 96</value>
</data>
<data name="label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 19</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>名称(&amp;M):</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 121</value>
</data>
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 152</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>说明(&amp;D):</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 276</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="DescriptionTextBox" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="NameTextBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="label2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label1" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="label3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
</data>
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 0, 3, 16</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>549, 77</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>输入有助于以后识别虚拟机的名称。此名称可以描述其软件和硬件,例如 RHEL DHCP Server、Win2K3 XenApp Server 或 Exchange 2007 Client Access Server。此名称还将显示在 XenCenter 的资源窗格中,以后可以更改。
如果愿意,还可以添加更加详细的 VM 说明。</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>96, 96</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 276</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>Page_Name</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -560,6 +560,12 @@
<Compile Include="Wizards\NewSRWizard_Pages\Frontends\CSLG.Designer.cs">
<DependentUpon>CSLG.cs</DependentUpon>
</Compile>
<Compile Include="Wizards\NewVMWizard\Page_CloudConfigParameters.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Wizards\NewVMWizard\Page_CloudConfigParameters.Designer.cs">
<DependentUpon>Page_CloudConfigParameters.cs</DependentUpon>
</Compile>
<Compile Include="Wizards\NewVMWizard\NewVMWizard.cs">
<SubType>Form</SubType>
</Compile>
@ -1660,6 +1666,16 @@
<SubType>Designer</SubType>
<DependentUpon>RBACWarningPage.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Wizards\NewVMWizard\Page_CloudConfigParameters.ja.resx">
<DependentUpon>Page_CloudConfigParameters.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Wizards\NewVMWizard\Page_CloudConfigParameters.resx">
<DependentUpon>Page_CloudConfigParameters.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Wizards\NewVMWizard\Page_CloudConfigParameters.zh-CN.resx">
<DependentUpon>Page_CloudConfigParameters.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Wizards\NewVMWizard\NewVMWizard.resx">
<SubType>Designer</SubType>
<DependentUpon>NewVMWizard.cs</DependentUpon>

View File

@ -68,13 +68,22 @@ namespace XenAdmin.Actions
{
Description = string.Format(Messages.PLUGIN_CALLING, Plugin);
Result = XenAPI.Host.call_plugin(Session, Host.opaque_ref, Plugin, Function, Args);
if (Result == "True")
Description = string.Format(Messages.PLUGIN_SUCCEED, Plugin);
else
{
log.WarnFormat("Plugin call {0}.{1}({2}) on {3} failed with {4}", Plugin, Function, ArgString(), Host.uuid, Result);
Exception = new Failed(Result);
Description = string.Format(Messages.PLUGIN_SUCCEED, Plugin);
return;
}
if (Result.StartsWith("True"))
{
Description = string.Format(Messages.PLUGIN_SUCCEED, Plugin);
Result = Result.Remove(0, 4);
return;
}
log.WarnFormat("Plugin call {0}.{1}({2}) on {3} failed with {4}", Plugin, Function, ArgString(), Host.uuid, Result);
Exception = new Failed(Result);
}
private string ArgString()

View File

@ -67,6 +67,8 @@ namespace XenAdmin.Actions.VMActions
private readonly GPU_group GpuGroup;
private readonly VGPU_type VgpuType;
private readonly long CoresPerSocket;
private readonly string cloudConfigDriveTemplateText;
private SR firstSR = null;
private Action<VMStartAbstractAction, Failure> _startDiagnosisForm;
private Action<VM, bool> _warningDialogHAInvalidConfig;
@ -115,7 +117,7 @@ namespace XenAdmin.Actions.VMActions
List<DiskDescription> disks, SR fullCopySR, List<VIF> vifs, bool startAfter,
Action<VM, bool> warningDialogHAInvalidConfig,
Action<VMStartAbstractAction, Failure> startDiagnosisForm,
GPU_group gpuGroup, VGPU_type vgpuType, long coresPerSocket)
GPU_group gpuGroup, VGPU_type vgpuType, long coresPerSocket, string cloudConfigDriveTemplateText)
: base(connection, string.Format(Messages.CREATE_VM, name),
string.Format(Messages.CREATE_VM_FROM_TEMPLATE, name, Helpers.GetName(template)))
{
@ -141,6 +143,7 @@ namespace XenAdmin.Actions.VMActions
GpuGroup = gpuGroup;
VgpuType = vgpuType;
CoresPerSocket = coresPerSocket;
this.cloudConfigDriveTemplateText = cloudConfigDriveTemplateText;
Pool pool_of_one = Helpers.GetPoolOfOne(Connection);
if (HomeServer != null || pool_of_one != null) // otherwise we have no where to put the action
@ -208,6 +211,8 @@ namespace XenAdmin.Actions.VMActions
XenAdminConfigManager.Provider.ShowObject(VM.opaque_ref);
PointOfNoReturn = true;
CloudCreateConfigDrive();
AssignVgpu();
if (StartAfter)
@ -220,6 +225,28 @@ namespace XenAdmin.Actions.VMActions
Description = Messages.VM_SUCCESSFULLY_CREATED;
}
private void CloudCreateConfigDrive()
{
if (Template.TemplateType == XenAPI.VM.VmTemplateType.CoreOS && !string.IsNullOrEmpty(cloudConfigDriveTemplateText))
{
Description = "Creating Cloud Config Drive";//Messages.SETTING_VM_PROPERTIES;
var parameters = new Dictionary<string, string>();
parameters.Add("vmuuid", VM.uuid);
parameters.Add("sruuid", firstSR.uuid);
parameters.Add("configuration", cloudConfigDriveTemplateText.Replace("\r\n", "\n"));
var action = new ExecutePluginAction(Connection, HomeServer,
"xscontainer",//plugin
"create_config_drive",//function
parameters,
true); //hidefromlogs
action.RunExternal(Connection.Session);
var result = action.Result.Replace("\n", Environment.NewLine);
}
}
private void AssignVgpu()
{
if (assignOrRemoveVgpu)
@ -471,6 +498,7 @@ namespace XenAdmin.Actions.VMActions
{
//use the first disk to set the VM.suspend_SR
SR vdiSR = Connection.Resolve(vdi.SR);
this.firstSR = vdiSR;
if(vdiSR != null && !vdiSR.HBALunPerVDI)
suspendSr = vdi.SR;
firstDisk = false;

View File

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
// Runtime Version:4.0.30319.34209
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -22347,6 +22347,24 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to Cloud-Config Parameters.
/// </summary>
public static string NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE {
get {
return ResourceManager.GetString("NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Configure Cloud-Config Parameters.
/// </summary>
public static string NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE_TITLE {
get {
return ResourceManager.GetString("NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE_TITLE", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Copy BIOS Strings from.
/// </summary>

View File

@ -12282,4 +12282,10 @@ Desktop features enabled</value>
<data name="NEWVMWIZARD_TEMPLATEPAGE_COREOS" xml:space="preserve">
<value>CoreOS</value>
</data>
<data name="NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE" xml:space="preserve">
<value>Cloud-Config Parameters</value>
</data>
<data name="NEWVMWIZARD_CLOUD_CONFIG_PARAMETERS_PAGE_TITLE" xml:space="preserve">
<value>Configure Cloud-Config Parameters</value>
</data>
</root>