Merge branch 'master' of https://github.com/xenserver/xenadmin into CP-10926

Signed-off-by: Mihaela Stoica <mihaela.stoica@citrix.com>

Conflicts:
	XenModel/XenAPI-Extensions/VDI.cs
	XenModel/XenAPI-Extensions/VM.cs
This commit is contained in:
Mihaela Stoica 2015-02-23 17:57:18 +00:00
commit 8a9b2d8c70
28 changed files with 1986 additions and 156 deletions

View File

@ -769,7 +769,7 @@ namespace XenAdmin.Actions
VMs.Sort();
foreach (XenAPI.VM vm in VMs)
{
string OSinfo = Messages.HYPHEN;
string OSinfo = vm.GetOSName();
string srInfo = "";
string MacInfo = "";
string running_on = Messages.HYPHEN;
@ -782,12 +782,11 @@ namespace XenAdmin.Actions
PercentComplete = Convert.ToInt32((++itemIndex) * baseIndex / itemCount);
continue;
}
ComparableList<ComparableAddress> addresses = new ComparableList<ComparableAddress>();
if (vm.guest_metrics != null && !string.IsNullOrEmpty(vm.guest_metrics.opaque_ref) && !(vm.guest_metrics.opaque_ref.ToLower().Contains("null")))
{
VM_guest_metrics metrics = vm.Connection.Resolve(vm.guest_metrics);
OSinfo = metrics.os_version["name"];
List<VIF> vifs = vm.Connection.ResolveAll(vm.VIFs);
foreach (VIF vif in vifs)

View File

@ -195,6 +195,8 @@ namespace XenAdmin.ConsoleView
UpdateParentMinimumSize();
UpdateButtons();
toggleConsoleButton.EnabledChanged += toggleConsoleButton_EnabledChanged;
}
@ -526,7 +528,7 @@ namespace XenAdmin.ConsoleView
}
}
else
EnableRDPIfCapable();
EnableRDPIfCapable();
UpdateButtons();
}
}
@ -1232,6 +1234,13 @@ namespace XenAdmin.ConsoleView
toggleConsoleButton.Text = vncScreen.UseVNC ? (CanEnableRDPOnCreamOrGreater(source.Connection) ? enableRDP : UseRDP) : UseStandardDesktop;
else
toggleConsoleButton.Text = vncScreen.UseSource ? UseXVNC : UseVNC;
if (Helpers.CreamOrGreater(source.Connection))
{
if (RDPEnabled || RDPControlEnabled)
tip.SetToolTip(this.toggleConsoleButton, null);
}
scaleCheckBox.Visible = !rdp || vncScreen.UseVNC;
sendCAD.Enabled = !rdp || vncScreen.UseVNC;
FocusVNC();

View File

@ -38,6 +38,7 @@ using XenAdmin.Diagnostics.Problems.HostProblem;
using System.Text.RegularExpressions;
using System.Xml;
using System.Collections.Generic;
using XenAdmin.Actions;
namespace XenAdmin.Diagnostics.Checks
@ -78,7 +79,7 @@ namespace XenAdmin.Diagnostics.Checks
try
{
return FindProblem(Pool_patch.precheck(session, Patch.opaque_ref, Host.opaque_ref), Host);
return FindProblem(Pool_patch.precheck(session, Patch.opaque_ref, Host.opaque_ref));
}
catch (Failure f)
@ -90,7 +91,11 @@ namespace XenAdmin.Diagnostics.Checks
log.Error(f.ErrorDescription[1]);
if (f.ErrorDescription.Count > 2)
log.Error(f.ErrorDescription[2]);
return new PrecheckFailed(this,Host, f);
if (f.ErrorDescription.Count > 3)
log.Error(f.ErrorDescription[3]);
// try and find problem from the xapi failure
Problem problem = FindProblem(f);
return problem ?? new PrecheckFailed(this, Host, f);
}
}
@ -105,8 +110,19 @@ namespace XenAdmin.Diagnostics.Checks
}
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private Problem FindProblem(string result, Host host)
/// <summary>
/// Find problem from xml result
/// </summary>
/// <param name="result">xml result, as returned by Pool_patch.precheck() call.
/// E.g.:
/// <error errorcode="PATCH_PRECHECK_FAILED_OUT_OF_SPACE">
/// <found>2049859584</found>
/// <required>10000000000</required>
/// </error>
/// </param>
/// <returns>Problem or null, if no problem found</returns>
private Problem FindProblem(string result)
{
if (!PrecheckErrorRegex.IsMatch(result.Replace("\n", "")))
return null;
@ -118,61 +134,102 @@ namespace XenAdmin.Diagnostics.Checks
log.Error(m.ToString());
XmlNode errorNode = doc.FirstChild;
string errorcode = errorNode.Attributes["errorcode"] != null
string errorcode = errorNode.Attributes != null && errorNode.Attributes["errorcode"] != null
? errorNode.Attributes["errorcode"].Value
: string.Empty;
if (errorcode == "")
return null;
var found = "";
var required = "";
foreach (XmlNode node in errorNode.ChildNodes)
{
if (node.Name == "found")
found = node.InnerXml;
else if (node.Name == "required")
required = node.InnerXml;
}
var problem = FindProblem(errorcode, found, required);
return problem ?? new PrecheckFailed(this, Host, new Failure(errorcode));
}
/// <summary>
/// Find problem from xapi Failure
/// </summary>
/// <param name="failure">Xapi failure, thrown by Pool_patch.precheck() call.
/// E.g.: failure.ErrorDescription.Count = 4
/// ErrorDescription[0] = "PATCH_PRECHECK_FAILED_WRONG_SERVER_VERSION"
/// ErrorDescription[1] = "OpaqueRef:612b5eee-03dc-bbf5-3385-6905fdc9b079"
/// ErrorDescription[2] = "6.5.0"
/// ErrorDescription[3] = "^6\\.2\\.0$"
/// E.g.: failure.ErrorDescription.Count = 2
/// ErrorDescription[0] = "OUT_OF_SPACE"
/// ErrorDescription[1] = "/var/patch"
/// </param>
/// <returns>Problem or null, if no problem found</returns>
private Problem FindProblem(Failure failure)
{
if (failure.ErrorDescription.Count == 0)
return null;
var errorcode = failure.ErrorDescription[0];
var found = "";
var required = "";
if (failure.ErrorDescription.Count > 2)
found = failure.ErrorDescription[2];
if (failure.ErrorDescription.Count > 3)
required = failure.ErrorDescription[3];
return FindProblem(errorcode, found, required);
}
private Problem FindProblem(string errorcode, string found, string required)
{
switch (errorcode)
{
case "PATCH_PRECHECK_FAILED_WRONG_SERVER_VERSION":
foreach (XmlNode node in errorNode.ChildNodes)
{
if (node.Name == "required")
{
return new WrongServerVersion(this, node.InnerXml,host);
}
}
break;
return new WrongServerVersion(this, required, Host);
case "PATCH_PRECHECK_FAILED_OUT_OF_SPACE":
long required = 0;
long found = 0;
foreach (XmlNode node in errorNode.ChildNodes)
{
if (node.Name == "found")
{
long.TryParse(node.InnerText, out found);
}
if (node.Name == "required")
{
long.TryParse(node.InnerText, out required);
}
}
System.Diagnostics.Trace.Assert(Helpers.CreamOrGreater(Host.Connection)); // If not Cream or greater, we shouldn't get this error
long requiredSpace = 0;
long foundSpace = 0;
long.TryParse(found, out foundSpace);
long.TryParse(required, out requiredSpace);
// get reclaimable disk space (excluding current patch)
long reclaimableDiskSpace = 0;
try
{
var args = new Dictionary<string, string>();
if (Patch != null)
args.Add("exclude", Patch.uuid);
var resultReclaimable = Host.call_plugin(host.Connection.Session, host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args);
reclaimableDiskSpace = Convert.ToInt64(resultReclaimable);
var args = new Dictionary<string, string> { { "exclude", Patch.uuid } };
var resultReclaimable = Host.call_plugin(Host.Connection.Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args);
reclaimableDiskSpace = Convert.ToInt64(resultReclaimable);
}
catch (Failure failure)
{
log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message);
}
var operation = XenAdmin.Actions.DiskSpaceRequirements.OperationTypes.install;
var diskSpaceReq = new DiskSpaceRequirements(DiskSpaceRequirements.OperationTypes.install, Host, Patch.Name, requiredSpace, foundSpace, reclaimableDiskSpace);
var diskSpaceReq = new XenAdmin.Actions.DiskSpaceRequirements(operation, host, Patch.Name, required, found, reclaimableDiskSpace);
return new HostOutOfSpaceProblem(this, host, Patch, diskSpaceReq);
case "":
return null;
default:
return new PrecheckFailed(this, host,new Failure(errorcode));
return new HostOutOfSpaceProblem(this, Host, Patch, diskSpaceReq);
case "OUT_OF_SPACE":
if (Helpers.CreamOrGreater(Host.Connection))
{
var action = new GetDiskSpaceRequirementsAction(Host, Patch, true);
try
{
action.RunExternal(action.Session);
}
catch
{
log.WarnFormat("Could not get disk space requirements");
}
if (action.Succeeded)
return new HostOutOfSpaceProblem(this, Host, Patch, action.DiskSpaceRequirements);
}
break;
}
return null;
}

View File

@ -58,7 +58,12 @@ namespace XenAdmin.Diagnostics.Problems.HostProblem
public override string Description
{
get { return string.Format(Messages.NOT_ENOUGH_SPACE_MESSAGE_INSTALL, Server.Name, patch.Name); }
get
{
return string.Format(diskSpaceReq.Operation == DiskSpaceRequirements.OperationTypes.install
? Messages.NOT_ENOUGH_SPACE_MESSAGE_INSTALL
: Messages.NOT_ENOUGH_SPACE_MESSAGE_UPLOAD, Server.Name, patch.Name);
}
}
protected override AsyncAction CreateAction(out bool cancelled)
@ -75,7 +80,7 @@ namespace XenAdmin.Diagnostics.Problems.HostProblem
diskSpaceReq.GetSpaceRequirementsMessage()),
new ThreeButtonDialog.TBDButton(Messages.YES, DialogResult.Yes, ThreeButtonDialog.ButtonType.ACCEPT, true),
ThreeButtonDialog.ButtonNo
).ShowDialog(Program.MainWindow);
).ShowDialog();
if (r == DialogResult.Yes)
@ -110,6 +115,5 @@ namespace XenAdmin.Diagnostics.Problems.HostProblem
return false;
}
}
}
}

BIN
XenAdmin/Images/coreos-globe-icon.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 B

After

Width:  |  Height:  |  Size: 673 B

View File

@ -36,6 +36,12 @@ namespace XenAdmin.TabPages
this.linkLabelExpand = new System.Windows.Forms.LinkLabel();
this.linkLabelCollapse = new System.Windows.Forms.LinkLabel();
this.panel2 = new XenAdmin.Controls.PanelNoFocusScroll();
this.panelReadCaching = new System.Windows.Forms.Panel();
this.pdSectionReadCaching = new XenAdmin.Controls.PDSection();
this.panelDockerInfo = new System.Windows.Forms.Panel();
this.pdSectionDockerInfo = new XenAdmin.Controls.PDSection();
this.panelDockerVersion = new System.Windows.Forms.Panel();
this.pdSectionDockerVersion = new XenAdmin.Controls.PDSection();
this.panelStorageLinkSystemCapabilities = new System.Windows.Forms.Panel();
this.pdSectionStorageLinkSystemCapabilities = new XenAdmin.Controls.PDSection();
this.panelMultipathBoot = new System.Windows.Forms.Panel();
@ -72,6 +78,9 @@ namespace XenAdmin.TabPages
this.panel1.SuspendLayout();
this.panel3.SuspendLayout();
this.panel2.SuspendLayout();
this.panelReadCaching.SuspendLayout();
this.panelDockerInfo.SuspendLayout();
this.panelDockerVersion.SuspendLayout();
this.panelStorageLinkSystemCapabilities.SuspendLayout();
this.panelMultipathBoot.SuspendLayout();
this.panelStorageLink.SuspendLayout();
@ -134,6 +143,9 @@ namespace XenAdmin.TabPages
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.panelReadCaching);
this.panel2.Controls.Add(this.panelDockerInfo);
this.panel2.Controls.Add(this.panelDockerVersion);
this.panel2.Controls.Add(this.panelStorageLinkSystemCapabilities);
this.panel2.Controls.Add(this.panelMultipathBoot);
this.panel2.Controls.Add(this.panelStorageLink);
@ -152,6 +164,46 @@ namespace XenAdmin.TabPages
this.panel2.Controls.Add(this.panelGeneral);
this.panel2.Name = "panel2";
//
// panelReadCaching
//
resources.ApplyResources(this.panelReadCaching, "panelReadCaching");
this.panelReadCaching.Controls.Add(this.pdSectionReadCaching);
this.panelReadCaching.Name = "panelReadCaching";
//
// pdSectionReadCaching
//
this.pdSectionReadCaching.BackColor = System.Drawing.Color.Gainsboro;
resources.ApplyResources(this.pdSectionReadCaching, "pdSectionReadCaching");
this.pdSectionReadCaching.Name = "pdSectionReadCaching";
this.pdSectionReadCaching.ShowCellToolTips = false;
this.pdSectionReadCaching.ExpandedChanged += new System.Action<XenAdmin.Controls.PDSection>(this.s_ExpandedEventHandler);
//
// panelDockerInfo
//
resources.ApplyResources(this.panelDockerInfo, "panelDockerInfo");
this.panelDockerInfo.Controls.Add(this.pdSectionDockerInfo);
this.panelDockerInfo.Name = "panelDockerInfo";
//
// pdSectionDockerInfo
//
this.pdSectionDockerInfo.BackColor = System.Drawing.Color.Gainsboro;
resources.ApplyResources(this.pdSectionDockerInfo, "pdSectionDockerInfo");
this.pdSectionDockerInfo.Name = "pdSectionDockerInfo";
this.pdSectionDockerInfo.ShowCellToolTips = false;
//
// panelDockerVersion
//
resources.ApplyResources(this.panelDockerVersion, "panelDockerVersion");
this.panelDockerVersion.Controls.Add(this.pdSectionDockerVersion);
this.panelDockerVersion.Name = "panelDockerVersion";
//
// pdSectionDockerVersion
//
this.pdSectionDockerVersion.BackColor = System.Drawing.Color.Gainsboro;
resources.ApplyResources(this.pdSectionDockerVersion, "pdSectionDockerVersion");
this.pdSectionDockerVersion.Name = "pdSectionDockerVersion";
this.pdSectionDockerVersion.ShowCellToolTips = false;
//
// panelStorageLinkSystemCapabilities
//
resources.ApplyResources(this.panelStorageLinkSystemCapabilities, "panelStorageLinkSystemCapabilities");
@ -386,6 +438,9 @@ namespace XenAdmin.TabPages
this.panel3.PerformLayout();
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.panelReadCaching.ResumeLayout(false);
this.panelDockerInfo.ResumeLayout(false);
this.panelDockerVersion.ResumeLayout(false);
this.panelStorageLinkSystemCapabilities.ResumeLayout(false);
this.panelMultipathBoot.ResumeLayout(false);
this.panelStorageLink.ResumeLayout(false);
@ -447,5 +502,11 @@ namespace XenAdmin.TabPages
private XenAdmin.Controls.PDSection pdSectionMultipathBoot;
private System.Windows.Forms.Panel panelStorageLinkSystemCapabilities;
private XenAdmin.Controls.PDSection pdSectionStorageLinkSystemCapabilities;
private System.Windows.Forms.Panel panelDockerInfo;
private System.Windows.Forms.Panel panelDockerVersion;
private Controls.PDSection pdSectionDockerVersion;
private Controls.PDSection pdSectionDockerInfo;
private System.Windows.Forms.Panel panelReadCaching;
private Controls.PDSection pdSectionReadCaching;
}
}

View File

@ -467,6 +467,9 @@ namespace XenAdmin.TabPages
generateStorageLinkSystemCapabilitiesBox();
generateMultipathBootBox();
generateVCPUsBox();
generateDockerInfoBox();
generateDockerVersionBox();
generateReadCachingBox();
}
// hide all the sections which haven't been populated, those that have make sure are visible
@ -1357,7 +1360,15 @@ namespace XenAdmin.TabPages
DockerContainer dockerContainer = (DockerContainer)xenObject;
s.AddEntry(Messages.NAME, dockerContainer.Name.Length != 0 ? dockerContainer.Name : Messages.NONE);
s.AddEntry(Messages.STATUS, dockerContainer.status.Length != 0 ? dockerContainer.status : Messages.NONE);
s.AddEntry(Messages.CONTAINER_CREATED, dockerContainer.created.Length != 0 ? dockerContainer.created : Messages.NONE);
try
{
DateTime created = Util.FromUnixTime(double.Parse(dockerContainer.created)).ToLocalTime();
s.AddEntry(Messages.CONTAINER_CREATED, HelpersGUI.DateTimeToString(created, Messages.DATEFORMAT_DMY_HMS, true));
}
catch
{
s.AddEntry(Messages.CONTAINER_CREATED, dockerContainer.created.Length != 0 ? dockerContainer.created : Messages.NONE);
}
s.AddEntry(Messages.CONTAINER_IMAGE, dockerContainer.image.Length != 0 ? dockerContainer.image : Messages.NONE);
s.AddEntry(Messages.CONTAINER, dockerContainer.container.Length != 0 ? dockerContainer.container : Messages.NONE);
s.AddEntry(Messages.CONTAINER_COMMAND, dockerContainer.command.Length != 0 ? dockerContainer.command : Messages.NONE);
@ -1366,6 +1377,27 @@ namespace XenAdmin.TabPages
}
}
private void generateReadCachingBox()
{
VM vm = xenObject as VM;
if (vm == null || !vm.IsRunning || !Helpers.CreamOrGreater(vm.Connection))
return;
PDSection s = pdSectionReadCaching;
if (vm.ReadCachingEnabled)
{
s.AddEntry(FriendlyName("VM.read_caching_status"), Messages.VM_READ_CACHING_ENABLED);
var vdiList = vm.ReadCachingVDIs.Select(vdi => vdi.NameWithLocation).ToArray();
s.AddEntry(FriendlyName("VM.read_caching_disks"), string.Join("\n", vdiList));
}
else
{
s.AddEntry(FriendlyName("VM.read_caching_status"), Messages.VM_READ_CACHING_DISABLED);
s.AddEntry(FriendlyName("VM.read_caching_reason"), vm.ReadCachingDisabledReason);
}
}
private void generateStorageLinkBox()
{
SR sr = xenObject as SR;
@ -1507,6 +1539,67 @@ namespace XenAdmin.TabPages
}
private void addStringEntry(PDSection s, string key, string value)
{
s.AddEntry(key, value.Length != 0 ? value : Messages.NONE);
}
private void generateDockerInfoBox()
{
VM vm = xenObject as VM;
if (vm == null)
return;
VM_Docker_Info info = vm.DockerInfo;
if (info == null)
return;
PDSection s = pdSectionDockerInfo;
addStringEntry(s, Messages.DOCKER_INFO_NGOROUTINES, info.NGoroutines);
addStringEntry(s, Messages.DOCKER_INFO_ROOT_DIR, info.DockerRootDir);
addStringEntry(s, Messages.DOCKER_INFO_DRIVER_STATUS, info.DriverStatus);
addStringEntry(s, Messages.OPERATING_SYSTEM, info.OperatingSystem); ;
addStringEntry(s, Messages.CONTAINER, info.Containers);
addStringEntry(s, Messages.MEMORY, Util.MemorySizeString(Convert.ToDouble(info.MemTotal)));
addStringEntry(s, Messages.DOCKER_INFO_DRIVER, info.Driver);
addStringEntry(s, Messages.DOCKER_INFO_INDEX_SERVER_ADDRESS, info.IndexServerAddress);
addStringEntry(s, Messages.DOCKER_INFO_INITIATE_PATH, info.InitPath);
addStringEntry(s, Messages.DOCKER_INFO_EXECUTION_DRIVER, info.ExecutionDriver);
addStringEntry(s, Messages.NAME, info.Name);
addStringEntry(s, Messages.DOCKER_INFO_NCPU, info.NCPU);
addStringEntry(s, Messages.DOCKER_INFO_DEBUG, info.Debug);
addStringEntry(s, Messages.ID, info.ID);
addStringEntry(s, Messages.DOCKER_INFO_IPV4_FORWARDING, info.IPv4Forwarding);
addStringEntry(s, Messages.DOCKER_INFO_KERNEL_VERSION, info.KernelVersion);
addStringEntry(s, Messages.DOCKER_INFO_NFD, info.NFd);
addStringEntry(s, Messages.DOCKER_INFO_INITIATE_SHA1, info.InitSha1);
addStringEntry(s, Messages.DOCKER_INFO_LABELS, info.Labels);
addStringEntry(s, Messages.DOCKER_INFO_MEMORY_LIMIT, Util.MemorySizeString(Convert.ToDouble(info.MemoryLimit)));
addStringEntry(s, Messages.DOCKER_INFO_SWAP_LIMIT, info.SwapLimit);
addStringEntry(s, Messages.CONTAINER_IMAGE, info.Images);
addStringEntry(s, Messages.DOCKER_INFO_NEVENT_LISTENER, info.NEventsListener);
}
private void generateDockerVersionBox()
{
VM vm = xenObject as VM;
if (vm == null)
return;
VM_Docker_Version version = vm.DockerVersion;
if (version == null)
return;
PDSection s = pdSectionDockerVersion;
addStringEntry(s, Messages.DOCKER_INFO_KERNEL_VERSION, version.KernelVersion);
addStringEntry(s, Messages.DOCKER_INFO_ARCH, version.Arch);
addStringEntry(s, Messages.DOCKER_INFO_API_VERSION, version.ApiVersion);
addStringEntry(s, Messages.DOCKER_INFO_VERSION, version.Version);
addStringEntry(s, Messages.DOCKER_INFO_GIT_COMMIT, version.GitCommit);
addStringEntry(s, Messages.OPERATING_SYSTEM, version.Os);
addStringEntry(s, Messages.DOCKER_INFO_GO_VERSION, version.GoVersion);
}
private bool CPUsIdentical(IEnumerable<Host_cpu> cpus)
{
String cpuText = null;

View File

@ -1377,6 +1377,139 @@
<data name="&gt;&gt;pageContainerPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerVersion.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelDockerVersion.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionDockerVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="pdSectionDockerVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionDockerVersion.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionDockerVersion.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionDockerVersion.SectionTitle" xml:space="preserve">
<value>Docker Version</value>
</data>
<data name="pdSectionDockerVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
</data>
<data name="pdSectionDockerVersion.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Name" xml:space="preserve">
<value>pdSectionDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Parent" xml:space="preserve">
<value>panelDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelDockerVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 39</value>
</data>
<data name="panelDockerVersion.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelDockerVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
</data>
<data name="panelDockerVersion.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Name" xml:space="preserve">
<value>panelDockerVersion</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelDockerVersion.ZOrder" xml:space="preserve">
<value>16</value>
</data>
<data name="panelDockerInfo.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelDockerInfo.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionDockerInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pdSectionDockerInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionDockerInfo.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionDockerInfo.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionDockerInfo.SectionTitle" xml:space="preserve">
<value>Docker Information</value>
</data>
<data name="pdSectionDockerInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
</data>
<data name="pdSectionDockerInfo.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Name" xml:space="preserve">
<value>pdSectionDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Parent" xml:space="preserve">
<value>panelDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelDockerInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 704</value>
</data>
<data name="panelDockerInfo.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelDockerInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
</data>
<data name="panelDockerInfo.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Name" xml:space="preserve">
<value>panelDockerInfo</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelDockerInfo.ZOrder" xml:space="preserve">
<value>17</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View File

@ -125,6 +125,205 @@
<data name="panel2.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelReadCaching.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelReadCaching.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionReadCaching.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pdSectionReadCaching.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionReadCaching.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionReadCaching.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionReadCaching.SectionTitle" xml:space="preserve">
<value>Read Caching</value>
</data>
<data name="pdSectionReadCaching.Size" type="System.Drawing.Size, System.Drawing">
<value>712, 34</value>
</data>
<data name="pdSectionReadCaching.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Name" xml:space="preserve">
<value>pdSectionReadCaching</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Parent" xml:space="preserve">
<value>panelReadCaching</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelReadCaching.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelReadCaching.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 792</value>
</data>
<data name="panelReadCaching.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelReadCaching.Size" type="System.Drawing.Size, System.Drawing">
<value>712, 44</value>
</data>
<data name="panelReadCaching.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="&gt;&gt;panelReadCaching.Name" xml:space="preserve">
<value>panelReadCaching</value>
</data>
<data name="&gt;&gt;panelReadCaching.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelReadCaching.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelReadCaching.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerInfo.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelDockerInfo.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionDockerInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="pdSectionDockerInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionDockerInfo.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionDockerInfo.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionDockerInfo.SectionTitle" xml:space="preserve">
<value>Docker Information</value>
</data>
<data name="pdSectionDockerInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>712, 34</value>
</data>
<data name="pdSectionDockerInfo.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Name" xml:space="preserve">
<value>pdSectionDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Parent" xml:space="preserve">
<value>panelDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelDockerInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 748</value>
</data>
<data name="panelDockerInfo.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelDockerInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>712, 44</value>
</data>
<data name="panelDockerInfo.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Name" xml:space="preserve">
<value>panelDockerInfo</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelDockerInfo.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panelDockerVersion.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelDockerVersion.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionDockerVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="pdSectionDockerVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionDockerVersion.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionDockerVersion.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionDockerVersion.SectionTitle" xml:space="preserve">
<value>Docker Version</value>
</data>
<data name="pdSectionDockerVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>712, 34</value>
</data>
<data name="pdSectionDockerVersion.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Name" xml:space="preserve">
<value>pdSectionDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Parent" xml:space="preserve">
<value>panelDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelDockerVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 704</value>
</data>
<data name="panelDockerVersion.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelDockerVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>712, 44</value>
</data>
<data name="panelDockerVersion.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Name" xml:space="preserve">
<value>panelDockerVersion</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelDockerVersion.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="panelStorageLinkSystemCapabilities.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -134,7 +333,6 @@
<data name="pdSectionStorageLinkSystemCapabilities.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pdSectionStorageLinkSystemCapabilities.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
@ -148,7 +346,7 @@
<value>Capabilities</value>
</data>
<data name="pdSectionStorageLinkSystemCapabilities.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionStorageLinkSystemCapabilities.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -175,7 +373,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelStorageLinkSystemCapabilities.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelStorageLinkSystemCapabilities.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
@ -190,7 +388,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelStorageLinkSystemCapabilities.ZOrder" xml:space="preserve">
<value>0</value>
<value>3</value>
</data>
<data name="panelMultipathBoot.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -214,7 +412,7 @@
<value>Root Disk Multipathing</value>
</data>
<data name="pdSectionMultipathBoot.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionMultipathBoot.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
@ -241,7 +439,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelMultipathBoot.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelMultipathBoot.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
@ -256,7 +454,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelMultipathBoot.ZOrder" xml:space="preserve">
<value>1</value>
<value>4</value>
</data>
<data name="panelStorageLink.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -280,7 +478,7 @@
<value>StorageLink</value>
</data>
<data name="pdStorageLink.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdStorageLink.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -307,7 +505,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelStorageLink.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelStorageLink.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
@ -322,7 +520,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelStorageLink.ZOrder" xml:space="preserve">
<value>2</value>
<value>5</value>
</data>
<data name="panelUpdates.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -346,7 +544,7 @@
<value>Updates</value>
</data>
<data name="pdSectionUpdates.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionUpdates.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -373,7 +571,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelUpdates.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelUpdates.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
@ -388,7 +586,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelUpdates.ZOrder" xml:space="preserve">
<value>3</value>
<value>6</value>
</data>
<data name="panelMemoryAndVCPUs.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -412,7 +610,7 @@
<value>CPUs</value>
</data>
<data name="pdSectionVCPUs.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionVCPUs.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -439,7 +637,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelMemoryAndVCPUs.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelMemoryAndVCPUs.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
@ -454,7 +652,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelMemoryAndVCPUs.ZOrder" xml:space="preserve">
<value>4</value>
<value>7</value>
</data>
<data name="panelMultipathing.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -478,7 +676,7 @@
<value>Multipathing</value>
</data>
<data name="pdSectionMultipathing.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionMultipathing.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -505,7 +703,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelMultipathing.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelMultipathing.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
@ -520,7 +718,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelMultipathing.ZOrder" xml:space="preserve">
<value>5</value>
<value>8</value>
</data>
<data name="panelStatus.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -544,7 +742,7 @@
<value>Status</value>
</data>
<data name="pdSectionStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionStatus.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -571,7 +769,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelStatus.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@ -586,7 +784,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelStatus.ZOrder" xml:space="preserve">
<value>6</value>
<value>9</value>
</data>
<data name="panelHighAvailability.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -610,7 +808,7 @@
<value>High Availability</value>
</data>
<data name="pdSectionHighAvailability.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionHighAvailability.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -637,7 +835,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelHighAvailability.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelHighAvailability.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@ -652,7 +850,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelHighAvailability.ZOrder" xml:space="preserve">
<value>7</value>
<value>10</value>
</data>
<data name="panelBootOptions.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -676,7 +874,7 @@
<value>Boot Options</value>
</data>
<data name="pdSectionBootOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionBootOptions.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -703,7 +901,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelBootOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelBootOptions.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
@ -718,7 +916,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelBootOptions.ZOrder" xml:space="preserve">
<value>8</value>
<value>11</value>
</data>
<data name="panelCPU.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -742,7 +940,7 @@
<value>CPUs</value>
</data>
<data name="pdSectionCPU.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionCPU.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -769,7 +967,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelCPU.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelCPU.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
@ -784,7 +982,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelCPU.ZOrder" xml:space="preserve">
<value>9</value>
<value>12</value>
</data>
<data name="panelLicense.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -808,7 +1006,7 @@
<value>License Details</value>
</data>
<data name="pdSectionLicense.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionLicense.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -835,7 +1033,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelLicense.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelLicense.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
@ -850,7 +1048,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelLicense.ZOrder" xml:space="preserve">
<value>10</value>
<value>13</value>
</data>
<data name="panelVersion.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -874,7 +1072,7 @@
<value>Version Details</value>
</data>
<data name="pdSectionVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionVersion.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -901,7 +1099,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelVersion.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
@ -916,7 +1114,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelVersion.ZOrder" xml:space="preserve">
<value>11</value>
<value>14</value>
</data>
<data name="panelMemory.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -940,7 +1138,7 @@
<value>Memory</value>
</data>
<data name="pdSectionMemory.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionMemory.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -967,7 +1165,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelMemory.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelMemory.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -982,7 +1180,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelMemory.ZOrder" xml:space="preserve">
<value>12</value>
<value>15</value>
</data>
<data name="panelManagementInterfaces.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -1006,7 +1204,7 @@
<value>Management Interfaces</value>
</data>
<data name="pdSectionManagementInterfaces.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionManagementInterfaces.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -1033,7 +1231,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelManagementInterfaces.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelManagementInterfaces.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -1048,7 +1246,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelManagementInterfaces.ZOrder" xml:space="preserve">
<value>13</value>
<value>16</value>
</data>
<data name="panelCustomFields.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -1072,7 +1270,7 @@
<value>Custom Fields</value>
</data>
<data name="pdSectionCustomFields.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionCustomFields.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -1099,7 +1297,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelCustomFields.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelCustomFields.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -1114,7 +1312,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelCustomFields.ZOrder" xml:space="preserve">
<value>14</value>
<value>17</value>
</data>
<data name="panelGeneral.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -1138,7 +1336,7 @@
<value>General</value>
</data>
<data name="pdSectionGeneral.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
<value>712, 34</value>
</data>
<data name="pdSectionGeneral.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -1165,7 +1363,7 @@
<value>0, 5, 0, 5</value>
</data>
<data name="panelGeneral.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
<value>712, 44</value>
</data>
<data name="panelGeneral.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -1180,7 +1378,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panelGeneral.ZOrder" xml:space="preserve">
<value>15</value>
<value>18</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 39</value>

View File

@ -1377,6 +1377,139 @@
<data name="&gt;&gt;pageContainerPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerVersion.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelDockerVersion.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionDockerVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="pdSectionDockerVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionDockerVersion.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionDockerVersion.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionDockerVersion.SectionTitle" xml:space="preserve">
<value>Docker Version</value>
</data>
<data name="pdSectionDockerVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
</data>
<data name="pdSectionDockerVersion.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Name" xml:space="preserve">
<value>pdSectionDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Parent" xml:space="preserve">
<value>panelDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerVersion.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelDockerVersion.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 39</value>
</data>
<data name="panelDockerVersion.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelDockerVersion.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
</data>
<data name="panelDockerVersion.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Name" xml:space="preserve">
<value>panelDockerVersion</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelDockerVersion.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelDockerVersion.ZOrder" xml:space="preserve">
<value>16</value>
</data>
<data name="panelDockerInfo.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="panelDockerInfo.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pdSectionDockerInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pdSectionDockerInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 5</value>
</data>
<data name="pdSectionDockerInfo.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>0, 34</value>
</data>
<data name="pdSectionDockerInfo.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="pdSectionDockerInfo.SectionTitle" xml:space="preserve">
<value>Docker Information</value>
</data>
<data name="pdSectionDockerInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 34</value>
</data>
<data name="pdSectionDockerInfo.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Name" xml:space="preserve">
<value>pdSectionDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Parent" xml:space="preserve">
<value>panelDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="panelDockerInfo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panelDockerInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 704</value>
</data>
<data name="panelDockerInfo.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="panelDockerInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 44</value>
</data>
<data name="panelDockerInfo.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Name" xml:space="preserve">
<value>panelDockerInfo</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panelDockerInfo.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panelDockerInfo.ZOrder" xml:space="preserve">
<value>17</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View File

@ -34,7 +34,7 @@
this.labelProgress = new System.Windows.Forms.Label();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.flickerFreeListBox1 = new XenAdmin.Controls.FlickerFreeListBox();
this.diskSpaceErrorLinkLabel = new System.Windows.Forms.LinkLabel();
this.errorLinkLabel = new System.Windows.Forms.LinkLabel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
@ -45,7 +45,7 @@
this.tableLayoutPanel1.Controls.Add(this.labelProgress, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.progressBar1, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.flickerFreeListBox1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.diskSpaceErrorLinkLabel, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.errorLinkLabel, 1, 2);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// label2
@ -74,12 +74,12 @@
this.flickerFreeListBox1.Name = "flickerFreeListBox1";
this.flickerFreeListBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.flickerFreeListBox1_DrawItem);
//
// diskSpaceErrorLinkLabel
// errorLinkLabel
//
resources.ApplyResources(this.diskSpaceErrorLinkLabel, "diskSpaceErrorLinkLabel");
this.diskSpaceErrorLinkLabel.Name = "diskSpaceErrorLinkLabel";
this.diskSpaceErrorLinkLabel.TabStop = true;
this.diskSpaceErrorLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.diskspaceErrorLinkLabel_LinkClicked);
resources.ApplyResources(this.errorLinkLabel, "errorLinkLabel");
this.errorLinkLabel.Name = "errorLinkLabel";
this.errorLinkLabel.TabStop = true;
this.errorLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.errorLinkLabel_LinkClicked);
//
// PatchingWizard_UploadPage
//
@ -99,6 +99,6 @@
private System.Windows.Forms.Label labelProgress;
private System.Windows.Forms.ProgressBar progressBar1;
private Controls.FlickerFreeListBox flickerFreeListBox1;
private System.Windows.Forms.LinkLabel diskSpaceErrorLinkLabel;
private System.Windows.Forms.LinkLabel errorLinkLabel;
}
}

View File

@ -1,12 +1,12 @@
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Linq;
using System.Windows.Forms;
using XenAdmin.Actions;
using XenAdmin.Controls;
using XenAdmin.Core;
using XenAdmin.Dialogs;
using XenAPI;
using XenAPI;
namespace XenAdmin.Wizards.PatchingWizard
{
@ -47,8 +47,14 @@ namespace XenAdmin.Wizards.PatchingWizard
public override void PageLoaded(PageLoadedDirection direction)
{
base.PageLoaded(direction);
canUpload = true;
canDownload = true;
UpdateButtons();
if (SelectedUpdateType == UpdateType.Existing)
_patch = SelectedExistingPatch;
if (direction == PageLoadedDirection.Forward)
{
PrepareUploadActions();
@ -134,7 +140,8 @@ namespace XenAdmin.Wizards.PatchingWizard
OnPageUpdated();
}
private bool canUpload = true;
private bool canUpload = true;
private bool canDownload = true;
private DiskSpaceRequirements diskSpaceRequirements;
private void TryUploading()
@ -218,14 +225,19 @@ namespace XenAdmin.Wizards.PatchingWizard
}
private void UpdateButtons()
{
{
if (!canUpload && diskSpaceRequirements != null)
{
diskSpaceErrorLinkLabel.Visible = true;
diskSpaceErrorLinkLabel.Text = diskSpaceRequirements.GetMessageForActionLink();
}
errorLinkLabel.Visible = true;
errorLinkLabel.Text = diskSpaceRequirements.GetMessageForActionLink();
}
else if (!canDownload)
{
errorLinkLabel.Visible = true;
errorLinkLabel.Text = Messages.PATCHINGWIZARD_MORE_INFO;
}
else
diskSpaceErrorLinkLabel.Visible = false;
errorLinkLabel.Visible = false;
}
private void UpdateActionProgress(AsyncAction action)
@ -318,11 +330,14 @@ namespace XenAdmin.Wizards.PatchingWizard
if (action == null)
return;
action.Completed -= multipleAction_Completed;
action.Completed -= multipleAction_Completed;
canDownload = !(action.Exception is PatchDownloadFailedException);
Program.Invoke(this, () =>
{
labelProgress.Text = GetActionDescription(action);
labelProgress.Text = GetActionDescription(action);
UpdateButtons();
});
}
@ -362,8 +377,16 @@ namespace XenAdmin.Wizards.PatchingWizard
return textColor;
}
private void diskspaceErrorLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
private void errorLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (!canDownload)
{
var msg = string.Format(Messages.PATCH_DOWNLOAD_FAILED_MORE_INFO, SelectedExistingPatch.name_label, SelectedExistingPatch.Connection.Name);
new ThreeButtonDialog(
new ThreeButtonDialog.Details(SystemIcons.Error, msg))
.ShowDialog(this);
}
if (diskSpaceRequirements == null)
return;

View File

@ -250,40 +250,40 @@ Please wait for this operation to complete, then click Next to continue with the
<data name="&gt;&gt;flickerFreeListBox1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="diskSpaceErrorLinkLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<data name="errorLinkLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="diskSpaceErrorLinkLabel.Location" type="System.Drawing.Point, System.Drawing">
<data name="errorLinkLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>627, 354</value>
</data>
<data name="diskSpaceErrorLinkLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<data name="errorLinkLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="diskSpaceErrorLinkLabel.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<data name="errorLinkLabel.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>1, 1, 1, 1</value>
</data>
<data name="diskSpaceErrorLinkLabel.Size" type="System.Drawing.Size, System.Drawing">
<data name="errorLinkLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 18</value>
</data>
<data name="diskSpaceErrorLinkLabel.TabIndex" type="System.Int32, mscorlib">
<data name="errorLinkLabel.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="diskSpaceErrorLinkLabel.Text" xml:space="preserve">
<data name="errorLinkLabel.Text" xml:space="preserve">
<value>&amp;More info...</value>
</data>
<data name="diskSpaceErrorLinkLabel.Visible" type="System.Boolean, mscorlib">
<data name="errorLinkLabel.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;diskSpaceErrorLinkLabel.Name" xml:space="preserve">
<value>diskSpaceErrorLinkLabel</value>
<data name="&gt;&gt;errorLinkLabel.Name" xml:space="preserve">
<value>errorLinkLabel</value>
</data>
<data name="&gt;&gt;diskSpaceErrorLinkLabel.Type" xml:space="preserve">
<data name="&gt;&gt;errorLinkLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;diskSpaceErrorLinkLabel.Parent" xml:space="preserve">
<data name="&gt;&gt;errorLinkLabel.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;diskSpaceErrorLinkLabel.ZOrder" xml:space="preserve">
<data name="&gt;&gt;errorLinkLabel.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
@ -317,7 +317,7 @@ Please wait for this operation to complete, then click Next to continue with the
<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="label2" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="labelProgress" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="progressBar1" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="flickerFreeListBox1" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="diskSpaceErrorLinkLabel" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100,AutoSize,0" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label2" Row="0" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="labelProgress" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="progressBar1" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="flickerFreeListBox1" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="errorLinkLabel" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100,AutoSize,0" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>

View File

@ -2143,6 +2143,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Wizards\PatchingWizard\PatchingWizard_UploadPage.resx">
<DependentUpon>PatchingWizard_UploadPage.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Wizards\PatchingWizard\PatchingWizard_UploadPage.zh-CN.resx">
<DependentUpon>PatchingWizard_UploadPage.cs</DependentUpon>
@ -5617,6 +5618,7 @@
</EmbeddedResource>
<EmbeddedResource Include="TabPages\GeneralTabPage.zh-CN.resx">
<DependentUpon>GeneralTabPage.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="TabPages\GpuPage.ja.resx">
<DependentUpon>GpuPage.cs</DependentUpon>

View File

@ -52,7 +52,7 @@ namespace XenAdmin.Actions
if (patch_ref != null)
return patch_ref;
Description = String.Format(Messages.DOWNLOADING_PATCH_FROM, patch.Connection.Hostname);
Description = String.Format(Messages.DOWNLOADING_PATCH_FROM, patch.Connection.Name);
// 1st download patch from the pool that has it (the connection on the xenobject)
@ -69,6 +69,10 @@ namespace XenAdmin.Actions
(HTTP_actions.get_sss)HTTP_actions.get_pool_patch_download,
Session.uuid, patch.uuid);
}
catch (Exception e)
{
throw new PatchDownloadFailedException(string.Format(Messages.PATCH_DOWNLOAD_FAILED, patch.name_label, patch.Connection.Name), e);
}
finally
{
Connection = null;
@ -169,4 +173,10 @@ namespace XenAdmin.Actions
}
public class PatchDownloadFailedException : ApplicationException
{
public PatchDownloadFailedException(string message, Exception innerException) :
base(message, innerException) { }
}
}

View File

@ -93,9 +93,20 @@ namespace XenAdmin.Actions
{
Description = String.Format(Messages.ACTION_GET_DISK_SPACE_REQUIREMENTS_DESCRIPTION, Host.Name);
long requiredDiskSpace = updateSize;
string result;
// get required disk space
long requiredDiskSpace = updateSize;
try
{
result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_required_space", new Dictionary<string, string>());
requiredDiskSpace = Convert.ToInt64(result);
}
catch (Failure failure)
{
log.WarnFormat("Plugin call disk-space.get_required_space on {0} failed with {1}", Host.Name, failure.Message);
}
// get available disk space
long availableDiskSpace = 0;
try
@ -155,7 +166,7 @@ namespace XenAdmin.Actions
public bool CanCleanup
{
get { return ReclaimableDiskSpace + AvailableDiskSpace > RequiredDiskSpace && RequiredDiskSpace > 0; }
get { return ReclaimableDiskSpace + AvailableDiskSpace > RequiredDiskSpace && RequiredDiskSpace > 0 && ReclaimableDiskSpace > 0; }
}
public string GetSpaceRequirementsMessage()

View File

@ -2922,6 +2922,33 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to Disks.
/// </summary>
public static string Label_VM_read_caching_disks {
get {
return ResourceManager.GetString("Label-VM.read_caching_disks", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Reason.
/// </summary>
public static string Label_VM_read_caching_reason {
get {
return ResourceManager.GetString("Label-VM.read_caching_reason", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Status.
/// </summary>
public static string Label_VM_read_caching_status {
get {
return ResourceManager.GetString("Label-VM.read_caching_status", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Topology.
/// </summary>

View File

@ -1745,4 +1745,13 @@
<data name="Label-Supplemental_packs.installed" xml:space="preserve">
<value>Installed supplemental packs</value>
</data>
<data name="Label-VM.read_caching_status" xml:space="preserve">
<value>Status</value>
</data>
<data name="Label-VM.read_caching_disks" xml:space="preserve">
<value>Disks</value>
</data>
<data name="Label-VM.read_caching_reason" xml:space="preserve">
<value>Reason</value>
</data>
</root>

View File

@ -10490,6 +10490,204 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to Api Version.
/// </summary>
public static string DOCKER_INFO_API_VERSION {
get {
return ResourceManager.GetString("DOCKER_INFO_API_VERSION", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Arch.
/// </summary>
public static string DOCKER_INFO_ARCH {
get {
return ResourceManager.GetString("DOCKER_INFO_ARCH", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Debug.
/// </summary>
public static string DOCKER_INFO_DEBUG {
get {
return ResourceManager.GetString("DOCKER_INFO_DEBUG", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Driver.
/// </summary>
public static string DOCKER_INFO_DRIVER {
get {
return ResourceManager.GetString("DOCKER_INFO_DRIVER", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Driver Status.
/// </summary>
public static string DOCKER_INFO_DRIVER_STATUS {
get {
return ResourceManager.GetString("DOCKER_INFO_DRIVER_STATUS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Execution Driver.
/// </summary>
public static string DOCKER_INFO_EXECUTION_DRIVER {
get {
return ResourceManager.GetString("DOCKER_INFO_EXECUTION_DRIVER", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Git Commit.
/// </summary>
public static string DOCKER_INFO_GIT_COMMIT {
get {
return ResourceManager.GetString("DOCKER_INFO_GIT_COMMIT", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Go Version.
/// </summary>
public static string DOCKER_INFO_GO_VERSION {
get {
return ResourceManager.GetString("DOCKER_INFO_GO_VERSION", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Index Server Address.
/// </summary>
public static string DOCKER_INFO_INDEX_SERVER_ADDRESS {
get {
return ResourceManager.GetString("DOCKER_INFO_INDEX_SERVER_ADDRESS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Initiate Path.
/// </summary>
public static string DOCKER_INFO_INITIATE_PATH {
get {
return ResourceManager.GetString("DOCKER_INFO_INITIATE_PATH", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Initiate Sha1.
/// </summary>
public static string DOCKER_INFO_INITIATE_SHA1 {
get {
return ResourceManager.GetString("DOCKER_INFO_INITIATE_SHA1", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to IPv4 Forwarding.
/// </summary>
public static string DOCKER_INFO_IPV4_FORWARDING {
get {
return ResourceManager.GetString("DOCKER_INFO_IPV4_FORWARDING", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Kernel Version.
/// </summary>
public static string DOCKER_INFO_KERNEL_VERSION {
get {
return ResourceManager.GetString("DOCKER_INFO_KERNEL_VERSION", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Labels.
/// </summary>
public static string DOCKER_INFO_LABELS {
get {
return ResourceManager.GetString("DOCKER_INFO_LABELS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Memory Limit.
/// </summary>
public static string DOCKER_INFO_MEMORY_LIMIT {
get {
return ResourceManager.GetString("DOCKER_INFO_MEMORY_LIMIT", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to NCPU.
/// </summary>
public static string DOCKER_INFO_NCPU {
get {
return ResourceManager.GetString("DOCKER_INFO_NCPU", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to NEvents Listener.
/// </summary>
public static string DOCKER_INFO_NEVENT_LISTENER {
get {
return ResourceManager.GetString("DOCKER_INFO_NEVENT_LISTENER", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to NFd.
/// </summary>
public static string DOCKER_INFO_NFD {
get {
return ResourceManager.GetString("DOCKER_INFO_NFD", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to NGoroutines.
/// </summary>
public static string DOCKER_INFO_NGOROUTINES {
get {
return ResourceManager.GetString("DOCKER_INFO_NGOROUTINES", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Root Directory.
/// </summary>
public static string DOCKER_INFO_ROOT_DIR {
get {
return ResourceManager.GetString("DOCKER_INFO_ROOT_DIR", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Swap Limit.
/// </summary>
public static string DOCKER_INFO_SWAP_LIMIT {
get {
return ResourceManager.GetString("DOCKER_INFO_SWAP_LIMIT", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Version.
/// </summary>
public static string DOCKER_INFO_VERSION {
get {
return ResourceManager.GetString("DOCKER_INFO_VERSION", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Docker Processes.
/// </summary>
@ -10617,7 +10815,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to Downloading Update from Server {0}....
/// Looks up a localized string similar to Downloading update from &apos;{0}&apos;....
/// </summary>
public static string DOWNLOADING_PATCH_FROM {
get {
@ -23785,7 +23983,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to You need to manually free up more space and try again..
/// Looks up a localized string similar to Free up some space and try again..
/// </summary>
public static string NOT_ENOUGH_SPACE_MESSAGE_NOCLEANUP {
get {
@ -24443,6 +24641,28 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to Failed to download {0} from &apos;{1}&apos;.
/// </summary>
public static string PATCH_DOWNLOAD_FAILED {
get {
return ResourceManager.GetString("PATCH_DOWNLOAD_FAILED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed to download the update {0} from &apos;{1}&apos;.
///
///The update is installed on &apos;{1}&apos;, but the update installation file may have since been deleted.
///
///Upload the update from an .xsupdate file instead..
/// </summary>
public static string PATCH_DOWNLOAD_FAILED_MORE_INFO {
get {
return ResourceManager.GetString("PATCH_DOWNLOAD_FAILED_MORE_INFO", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0}
///Date modified: {1}
@ -24576,7 +24796,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to &amp;Clean up....
/// Looks up a localized string similar to Clean up....
/// </summary>
public static string PATCHINGWIZARD_CLEANUP {
get {
@ -24648,7 +24868,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to &amp;More info....
/// Looks up a localized string similar to More info....
/// </summary>
public static string PATCHINGWIZARD_MORE_INFO {
get {
@ -33487,6 +33707,51 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to This VM is not using Read Caching.
/// </summary>
public static string VM_READ_CACHING_DISABLED {
get {
return ResourceManager.GetString("VM_READ_CACHING_DISABLED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not licensed for Read Caching.
/// </summary>
public static string VM_READ_CACHING_DISABLED_REASON_LICENSE {
get {
return ResourceManager.GetString("VM_READ_CACHING_DISABLED_REASON_LICENSE", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Read Caching is not supported on any of the Storage Repositories used by this VM.
/// </summary>
public static string VM_READ_CACHING_DISABLED_REASON_SR_TYPE {
get {
return ResourceManager.GetString("VM_READ_CACHING_DISABLED_REASON_SR_TYPE", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Read Caching is disabled on all supported Storage Repositories used by this VM.
/// </summary>
public static string VM_READ_CACHING_DISABLED_REASON_TURNED_OFF {
get {
return ResourceManager.GetString("VM_READ_CACHING_DISABLED_REASON_TURNED_OFF", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This VM has Read Caching enabled.
/// </summary>
public static string VM_READ_CACHING_ENABLED {
get {
return ResourceManager.GetString("VM_READ_CACHING_ENABLED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to VM reverted to &apos;{0}&apos;.
/// </summary>

View File

@ -3649,6 +3649,72 @@ VM {2} をエクスポートしてもよろしいですか?</value>
<data name="DOCKER_PROCESS_TAB_TITLE" xml:space="preserve">
<value>Docker Processes</value>
</data>
<data name="DOCKER_INFO_API_VERSION" xml:space="preserve">
<value>Api Version</value>
</data>
<data name="DOCKER_INFO_ARCH" xml:space="preserve">
<value>Arch</value>
</data>
<data name="DOCKER_INFO_DEBUG" xml:space="preserve">
<value>Debug</value>
</data>
<data name="DOCKER_INFO_DRIVER" xml:space="preserve">
<value>Driver</value>
</data>
<data name="DOCKER_INFO_DRIVER_STATUS" xml:space="preserve">
<value>Driver Status</value>
</data>
<data name="DOCKER_INFO_EXECUTION_DRIVER" xml:space="preserve">
<value>Execution Driver</value>
</data>
<data name="DOCKER_INFO_GIT_COMMIT" xml:space="preserve">
<value>Git Commit</value>
</data>
<data name="DOCKER_INFO_GO_VERSION" xml:space="preserve">
<value>Go Version</value>
</data>
<data name="DOCKER_INFO_INDEX_SERVER_ADDRESS" xml:space="preserve">
<value>Index Server Address</value>
</data>
<data name="DOCKER_INFO_INITIATE_PATH" xml:space="preserve">
<value>Initiate Path</value>
</data>
<data name="DOCKER_INFO_INITIATE_SHA1" xml:space="preserve">
<value>Initiate Sha1</value>
</data>
<data name="DOCKER_INFO_IPV4_FORWARDING" xml:space="preserve">
<value>IPv4 Forwarding</value>
</data>
<data name="DOCKER_INFO_KERNEL_VERSION" xml:space="preserve">
<value>Kernel Version</value>
</data>
<data name="DOCKER_INFO_LABELS" xml:space="preserve">
<value>Labels</value>
</data>
<data name="DOCKER_INFO_MEMORY_LIMIT" xml:space="preserve">
<value>Memory Limit</value>
</data>
<data name="DOCKER_INFO_NCPU" xml:space="preserve">
<value>NCPU</value>
</data>
<data name="DOCKER_INFO_NEVENT_LISTENER" xml:space="preserve">
<value>NEvents Listener</value>
</data>
<data name="DOCKER_INFO_NFD" xml:space="preserve">
<value>NFd</value>
</data>
<data name="DOCKER_INFO_NGOROUTINES" xml:space="preserve">
<value>NGoroutines</value>
</data>
<data name="DOCKER_INFO_ROOT_DIR" xml:space="preserve">
<value>Root Directory</value>
</data>
<data name="DOCKER_INFO_SWAP_LIMIT" xml:space="preserve">
<value>Swap Limit</value>
</data>
<data name="DOCKER_INFO_VERSION" xml:space="preserve">
<value>Version</value>
</data>
<data name="DONE" xml:space="preserve">
<value>完了しました。</value>
</data>

125
XenModel/Messages.resx Normal file → Executable file
View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@ -576,6 +576,15 @@
<data name="ACTION_REMOVE_ALERTS_PROGRESS_DESCRIPTION" xml:space="preserve">
<value>Removing alert {0} of {1}...</value>
</data>
<data name="ACTION_RESTART_CONTAINER_DESCRIPTION" xml:space="preserve">
<value>Restarting</value>
</data>
<data name="ACTION_RESTART_CONTAINER_END_DESCRIPTION" xml:space="preserve">
<value>Restarted</value>
</data>
<data name="ACTION_RESTART_CONTAINER_TITLE" xml:space="preserve">
<value>Restarting Docker Container '{0}'</value>
</data>
<data name="ACTION_RESUMEANDSTARTVMS_PREPARING" xml:space="preserve">
<value>Preparing to resume and start VMs...</value>
</data>
@ -3724,6 +3733,72 @@ This will also delete its subfolders.</value>
<data name="DOCKER_PROCESS_TAB_TITLE" xml:space="preserve">
<value>Docker Processes</value>
</data>
<data name="DOCKER_INFO_API_VERSION" xml:space="preserve">
<value>Api Version</value>
</data>
<data name="DOCKER_INFO_ARCH" xml:space="preserve">
<value>Arch</value>
</data>
<data name="DOCKER_INFO_DEBUG" xml:space="preserve">
<value>Debug</value>
</data>
<data name="DOCKER_INFO_DRIVER" xml:space="preserve">
<value>Driver</value>
</data>
<data name="DOCKER_INFO_DRIVER_STATUS" xml:space="preserve">
<value>Driver Status</value>
</data>
<data name="DOCKER_INFO_EXECUTION_DRIVER" xml:space="preserve">
<value>Execution Driver</value>
</data>
<data name="DOCKER_INFO_GIT_COMMIT" xml:space="preserve">
<value>Git Commit</value>
</data>
<data name="DOCKER_INFO_GO_VERSION" xml:space="preserve">
<value>Go Version</value>
</data>
<data name="DOCKER_INFO_INDEX_SERVER_ADDRESS" xml:space="preserve">
<value>Index Server Address</value>
</data>
<data name="DOCKER_INFO_INITIATE_PATH" xml:space="preserve">
<value>Initiate Path</value>
</data>
<data name="DOCKER_INFO_INITIATE_SHA1" xml:space="preserve">
<value>Initiate Sha1</value>
</data>
<data name="DOCKER_INFO_IPV4_FORWARDING" xml:space="preserve">
<value>IPv4 Forwarding</value>
</data>
<data name="DOCKER_INFO_KERNEL_VERSION" xml:space="preserve">
<value>Kernel Version</value>
</data>
<data name="DOCKER_INFO_LABELS" xml:space="preserve">
<value>Labels</value>
</data>
<data name="DOCKER_INFO_MEMORY_LIMIT" xml:space="preserve">
<value>Memory Limit</value>
</data>
<data name="DOCKER_INFO_NCPU" xml:space="preserve">
<value>NCPU</value>
</data>
<data name="DOCKER_INFO_NEVENT_LISTENER" xml:space="preserve">
<value>NEvents Listener</value>
</data>
<data name="DOCKER_INFO_NFD" xml:space="preserve">
<value>NFd</value>
</data>
<data name="DOCKER_INFO_NGOROUTINES" xml:space="preserve">
<value>NGoroutines</value>
</data>
<data name="DOCKER_INFO_ROOT_DIR" xml:space="preserve">
<value>Root Directory</value>
</data>
<data name="DOCKER_INFO_SWAP_LIMIT" xml:space="preserve">
<value>Swap Limit</value>
</data>
<data name="DOCKER_INFO_VERSION" xml:space="preserve">
<value>Version</value>
</data>
<data name="DONE" xml:space="preserve">
<value>done.</value>
</data>
@ -3734,7 +3809,7 @@ This will also delete its subfolders.</value>
<value>{0} is now available</value>
</data>
<data name="DOWNLOADING_PATCH_FROM" xml:space="preserve">
<value>Downloading Update from Server {0}...</value>
<value>Downloading update from '{0}'...</value>
</data>
<data name="DOWNLOAD_AND_EXTRACT_ACTION_DOWNLOADING_DESC" xml:space="preserve">
<value>Downloading {0}</value>
@ -6771,6 +6846,9 @@ This will permanently delete and reinitialize all local storage on the servers.
<data name="MAINWINDOW_REPAIR_SR_CONTEXT_MENU" xml:space="preserve">
<value>Re&amp;pair...</value>
</data>
<data name="MAINWINDOW_RESTART" xml:space="preserve">
<value>Re&amp;start</value>
</data>
<data name="MAINWINDOW_RESTART_TOOLSTACK" xml:space="preserve">
<value>Restart Toolstac&amp;k</value>
</data>
@ -8261,7 +8339,7 @@ It is strongly recommended that you Cancel and apply the latest version of the p
<value>There is not enough space on '{0}' to install update '{1}'.</value>
</data>
<data name="NOT_ENOUGH_SPACE_MESSAGE_NOCLEANUP" xml:space="preserve">
<value>You need to manually free up more space and try again.</value>
<value>Free up some space and try again.</value>
</data>
<data name="NOT_ENOUGH_SPACE_MESSAGE_REQUIRED_SPACE" xml:space="preserve">
<value>Space required: {0}</value>
@ -8490,7 +8568,7 @@ It is strongly recommended that you Cancel and apply the latest version of the p
<value>Paste</value>
</data>
<data name="PATCHINGWIZARD_CLEANUP" xml:space="preserve">
<value>&amp;Clean up...</value>
<value>Clean up...</value>
</data>
<data name="PATCHINGWIZARD_MODEPAGE_NOACTION" xml:space="preserve">
<value>No action required</value>
@ -8514,7 +8592,7 @@ It is strongly recommended that you Cancel and apply the latest version of the p
<value>Unknown</value>
</data>
<data name="PATCHINGWIZARD_MORE_INFO" xml:space="preserve">
<value>&amp;More info...</value>
<value>More info...</value>
</data>
<data name="PATCHINGWIZARD_PATCHINGPAGE_POOL_RESOLVE" xml:space="preserve">
<value>Resolve pool problems</value>
@ -8653,6 +8731,16 @@ It is strongly recommended that you Cancel and apply the latest version of the p
<data name="PATCH_DESCRIPTION_AND_INSTALLATION_SIZE" xml:space="preserve">
<value>{0}
Installation size: {1}</value>
</data>
<data name="PATCH_DOWNLOAD_FAILED" xml:space="preserve">
<value>Failed to download {0} from '{1}'</value>
</data>
<data name="PATCH_DOWNLOAD_FAILED_MORE_INFO" xml:space="preserve">
<value>Failed to download the update {0} from '{1}'.
The update is installed on '{1}', but the update installation file may have since been deleted.
Upload the update from an .xsupdate file instead.</value>
</data>
<data name="PATCH_EXPANDED_DESCRIPTION" xml:space="preserve">
<value>{0}
@ -11585,6 +11673,21 @@ To learn more about the XenServer Dynamic Workload Balancing feature or to start
<data name="VM_PROTECTION_POLICY_SUCCEEDED" xml:space="preserve">
<value>Succeeded</value>
</data>
<data name="VM_READ_CACHING_ENABLED" xml:space="preserve">
<value>This VM has Read Caching enabled</value>
</data>
<data name="VM_READ_CACHING_DISABLED" xml:space="preserve">
<value>This VM is not using Read Caching</value>
</data>
<data name="VM_READ_CACHING_DISABLED_REASON_LICENSE" xml:space="preserve">
<value>Not licensed for Read Caching</value>
</data>
<data name="VM_READ_CACHING_DISABLED_REASON_SR_TYPE" xml:space="preserve">
<value>Read Caching is not supported on any of the Storage Repositories used by this VM</value>
</data>
<data name="VM_READ_CACHING_DISABLED_REASON_TURNED_OFF" xml:space="preserve">
<value>Read Caching is disabled on all supported Storage Repositories used by this VM</value>
</data>
<data name="VM_REVERTED" xml:space="preserve">
<value>VM reverted to '{0}'</value>
</data>
@ -12512,16 +12615,4 @@ You will need to navigate to the Console on each of the selected VMs to complete
<data name="YOU_ARE_HERE" xml:space="preserve">
<value>You are here</value>
</data>
<data name="ACTION_RESTART_CONTAINER_DESCRIPTION" xml:space="preserve">
<value>Restarting</value>
</data>
<data name="ACTION_RESTART_CONTAINER_END_DESCRIPTION" xml:space="preserve">
<value>Restarted</value>
</data>
<data name="ACTION_RESTART_CONTAINER_TITLE" xml:space="preserve">
<value>Restarting Docker Container '{0}'</value>
</data>
<data name="MAINWINDOW_RESTART" xml:space="preserve">
<value>Re&amp;start</value>
</data>
</root>

View File

@ -3648,6 +3648,72 @@ XenServer 可以重新启动服务器并将服务器的 CPU 级别降至池中
<data name="DOCKER_PROCESS_TAB_TITLE" xml:space="preserve">
<value>Docker进程</value>
</data>
<data name="DOCKER_INFO_API_VERSION" xml:space="preserve">
<value>Api Version</value>
</data>
<data name="DOCKER_INFO_ARCH" xml:space="preserve">
<value>Arch</value>
</data>
<data name="DOCKER_INFO_DEBUG" xml:space="preserve">
<value>Debug</value>
</data>
<data name="DOCKER_INFO_DRIVER" xml:space="preserve">
<value>Driver</value>
</data>
<data name="DOCKER_INFO_DRIVER_STATUS" xml:space="preserve">
<value>Driver Status</value>
</data>
<data name="DOCKER_INFO_EXECUTION_DRIVER" xml:space="preserve">
<value>Execution Driver</value>
</data>
<data name="DOCKER_INFO_GIT_COMMIT" xml:space="preserve">
<value>Git Commit</value>
</data>
<data name="DOCKER_INFO_GO_VERSION" xml:space="preserve">
<value>Go Version</value>
</data>
<data name="DOCKER_INFO_INDEX_SERVER_ADDRESS" xml:space="preserve">
<value>Index Server Address</value>
</data>
<data name="DOCKER_INFO_INITIATE_PATH" xml:space="preserve">
<value>Initiate Path</value>
</data>
<data name="DOCKER_INFO_INITIATE_SHA1" xml:space="preserve">
<value>Initiate Sha1</value>
</data>
<data name="DOCKER_INFO_IPV4_FORWARDING" xml:space="preserve">
<value>IPv4 Forwarding</value>
</data>
<data name="DOCKER_INFO_KERNEL_VERSION" xml:space="preserve">
<value>Kernel Version</value>
</data>
<data name="DOCKER_INFO_LABELS" xml:space="preserve">
<value>Labels</value>
</data>
<data name="DOCKER_INFO_MEMORY_LIMIT" xml:space="preserve">
<value>Memory Limit</value>
</data>
<data name="DOCKER_INFO_NCPU" xml:space="preserve">
<value>NCPU</value>
</data>
<data name="DOCKER_INFO_NEVENT_LISTENER" xml:space="preserve">
<value>NEvents Listener</value>
</data>
<data name="DOCKER_INFO_NFD" xml:space="preserve">
<value>NFd</value>
</data>
<data name="DOCKER_INFO_NGOROUTINES" xml:space="preserve">
<value>NGoroutines</value>
</data>
<data name="DOCKER_INFO_ROOT_DIR" xml:space="preserve">
<value>Root Directory</value>
</data>
<data name="DOCKER_INFO_SWAP_LIMIT" xml:space="preserve">
<value>Swap Limit</value>
</data>
<data name="DOCKER_INFO_VERSION" xml:space="preserve">
<value>Version</value>
</data>
<data name="DONE" xml:space="preserve">
<value>已完成。</value>
</data>

View File

@ -443,6 +443,16 @@ namespace XenAPI
return h._RestrictExportResourceData;
}
private bool _RestrictReadCaching
{
get { return BoolKeyPreferTrue(license_params, "restrict_read_caching"); }
}
public static bool RestrictReadCaching(Host h)
{
return h._RestrictReadCaching;
}
public bool HasPBDTo(SR sr)
{
foreach (XenRef<PBD> pbd in PBDs)

View File

@ -323,6 +323,28 @@ namespace XenAPI
public bool IsCloudConfigDrive
{
get { return other_config.ContainsKey("config-drive") && other_config["config-drive"].ToLower() == "true"; }
}
/// <summary>
/// Whether the read caching is enabled on this disk
/// </summary>
public bool ReadCachingEnabled
{
get { return BoolKey(sm_config, "read-caching-enabled"); }
}
/// <summary>
/// Whether the read caching is supported on this disk
/// </summary>
public bool ReadCachingSupported
{
get
{
var sr = Connection.Resolve(SR);
var srType = sr != null ? sr.GetSRType(false) : XenAPI.SR.SRTypes.unknown;
return srType == XenAPI.SR.SRTypes.ext || srType == XenAPI.SR.SRTypes.nfs;
}
}
}
}

View File

@ -1708,6 +1708,85 @@ namespace XenAPI
return CloudConfigDrive != null;
}
}
public VM_Docker_Info DockerInfo
{
get
{
string xml = Get(other_config, "docker_info");
if (string.IsNullOrEmpty(xml))
return null;
VM_Docker_Info info = new VM_Docker_Info(xml);
return info;
}
}
public VM_Docker_Version DockerVersion
{
get
{
string xml = Get(other_config, "docker_version");
if (string.IsNullOrEmpty(xml))
return null;
VM_Docker_Version info = new VM_Docker_Version(xml);
return info;
}
}
public bool ReadCachingEnabled
{
get
{
return ReadCachingVDIs.Count > 0;
}
}
/// <summary>
/// Return the list of VDIs that have Read Caching enabled
/// </summary>
public List<VDI> ReadCachingVDIs
{
get
{
var readCachingVdis = new List<VDI>();
foreach (var vbd in Connection.ResolveAll(VBDs).Where(vbd => vbd != null && vbd.currently_attached))
{
var vdi = Connection.Resolve(vbd.VDI);
if (vdi != null && vdi.ReadCachingEnabled)
readCachingVdis.Add(vdi);
}
return readCachingVdis;
}
}
/// <summary>
/// Whether the Read Caching is supported on any of the VDIs
/// </summary>
public bool ReadCachingSupported
{
get
{
foreach (var vbd in Connection.ResolveAll(VBDs).Where(vbd => vbd != null && vbd.currently_attached))
{
var vdi = Connection.Resolve(vbd.VDI);
if (vdi != null && vdi.ReadCachingSupported)
return true;
}
return false;
}
}
public string ReadCachingDisabledReason
{
get
{
if (Helpers.FeatureForbidden(Connection, Host.RestrictReadCaching))
return Messages.VM_READ_CACHING_DISABLED_REASON_LICENSE;
if (!ReadCachingSupported)
return Messages.VM_READ_CACHING_DISABLED_REASON_SR_TYPE;
return Messages.VM_READ_CACHING_DISABLED_REASON_TURNED_OFF;
}
}
}
public struct VMStartupOptions
@ -1729,4 +1808,5 @@ namespace XenAPI
HaRestartPriority = haRestartPriority;
}
}
}

View File

@ -0,0 +1,338 @@
using System.Linq;
using System.Xml;
namespace XenAPI
{
public class VM_Docker_Info
{
private string _NGoroutines;
public string NGoroutines
{
get { return _NGoroutines; }
set {
if (value != _NGoroutines)
_NGoroutines = value;
}
}
private string _DockerRootDir;
public string DockerRootDir
{
get { return _DockerRootDir; }
set {
if (value != _DockerRootDir)
_DockerRootDir = value;
}
}
private string _DriverStatus;
public string DriverStatus
{
get { return _DriverStatus; }
set {
if (value != _DriverStatus)
_DriverStatus = value;
}
}
private string _OperatingSystem;
public string OperatingSystem
{
get { return _OperatingSystem; }
set {
if (value != _OperatingSystem)
_OperatingSystem = value;
}
}
private string _Containers;
public string Containers
{
get { return _Containers; }
set {
if (value != _Containers)
_Containers = value;
}
}
private string _MemTotal;
public string MemTotal
{
get { return _MemTotal; }
set {
if (value != _MemTotal)
_MemTotal = value;
}
}
private string _Driver;
public string Driver
{
get { return _Driver; }
set {
if (value != _Driver)
_Driver = value;
}
}
private string _IndexServerAddress;
public string IndexServerAddress
{
get { return _IndexServerAddress; }
set {
if (value != _IndexServerAddress)
_IndexServerAddress = value;
}
}
private string _InitPath;
public string InitPath
{
get { return _InitPath; }
set {
if (value != _InitPath)
_InitPath = value;
}
}
private string _ExecutionDriver;
public string ExecutionDriver
{
get { return _ExecutionDriver; }
set {
if (value != _ExecutionDriver)
_ExecutionDriver = value;
}
}
private string _Name;
public string Name
{
get { return _Name; }
set {
if (value != _Name)
_Name = value;
}
}
private string _NCPU;
public string NCPU
{
get { return _NCPU; }
set {
if (value != _NCPU)
_NCPU = value;
}
}
private string _Debug;
public string Debug
{
get { return _Debug; }
set {
if (value != _Debug)
_Debug = value;
}
}
private string _ID;
public string ID
{
get { return _ID; }
set {
if (value != _ID)
_ID = value;
}
}
private string _IPv4Forwarding;
public string IPv4Forwarding
{
get { return _IPv4Forwarding; }
set {
if (value != _IPv4Forwarding)
_IPv4Forwarding = value;
}
}
private string _KernelVersion;
public string KernelVersion
{
get { return _KernelVersion; }
set {
if (value != _KernelVersion)
_KernelVersion = value;
}
}
private string _NFd;
public string NFd
{
get { return _NFd; }
set {
if (value != _NFd)
_NFd = value;
}
}
private string _InitSha1;
public string InitSha1
{
get { return _InitSha1; }
set {
if (value != _InitSha1)
_InitSha1 = value;
}
}
private string _Labels;
public string Labels
{
get { return _Labels; }
set {
if (value != _Labels)
_Labels = value;
}
}
private string _MemoryLimit;
public string MemoryLimit
{
get { return _MemoryLimit; }
set {
if (value != _MemoryLimit)
_MemoryLimit = value;
}
}
private string _SwapLimit;
public string SwapLimit
{
get { return _SwapLimit; }
set {
if (value != _SwapLimit)
_SwapLimit = value;
}
}
private string _Images;
public string Images
{
get { return _Images; }
set {
if (value != _Images)
_Images = value;
}
}
private string _NEventsListener;
public string NEventsListener
{
get { return _NEventsListener; }
set {
if (value != _NEventsListener)
_NEventsListener = value;
}
}
public VM_Docker_Info(string dockerInfo)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(dockerInfo);
foreach (XmlNode docker_info in doc.GetElementsByTagName("docker_info"))
{
var propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "NGoroutines");
if (propertyNode != null)
this.NGoroutines = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "DockerRootDir");
if (propertyNode != null)
DockerRootDir = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "DriverStatus");
if (propertyNode != null)
DriverStatus = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "OperatingSystem");
if (propertyNode != null)
OperatingSystem = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Containers");
if (propertyNode != null)
Containers = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "MemTotal");
if (propertyNode != null)
MemTotal = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Driver");
if (propertyNode != null)
Driver = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "IndexServerAddress");
if (propertyNode != null)
IndexServerAddress = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "InitPath");
if (propertyNode != null)
InitPath = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "ExecutionDriver");
if (propertyNode != null)
ExecutionDriver = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Name");
if (propertyNode != null)
Name = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "NCPU");
if (propertyNode != null)
NCPU = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Debug");
if (propertyNode != null)
Debug = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "ID");
if (propertyNode != null)
ID = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "IPv4Forwarding");
if (propertyNode != null)
IPv4Forwarding = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "KernelVersion");
if (propertyNode != null)
KernelVersion = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "NFd");
if (propertyNode != null)
NFd = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "InitSha1");
if (propertyNode != null)
InitSha1 = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Labels");
if (propertyNode != null)
Labels = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "MemoryLimit");
if (propertyNode != null)
MemoryLimit = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "SwapLimit");
if (propertyNode != null)
SwapLimit = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Images");
if (propertyNode != null)
Images = propertyNode.InnerText;
propertyNode = docker_info.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "NEventsListener");
if (propertyNode != null)
NEventsListener = propertyNode.InnerText;
}
}
}
}

View File

@ -0,0 +1,121 @@
using System.Linq;
using System.Xml;
namespace XenAPI
{
public class VM_Docker_Version
{
private string _KernelVersion;
public string KernelVersion
{
get { return _KernelVersion; }
set
{
if (value != _KernelVersion)
_KernelVersion = value;
}
}
private string _Arch;
public string Arch
{
get { return _Arch; }
set
{
if (value != _Arch)
_Arch = value;
}
}
private string _ApiVersion;
public string ApiVersion
{
get { return _ApiVersion; }
set
{
if (value != _ApiVersion)
_ApiVersion = value;
}
}
private string _Version;
public string Version
{
get { return _Version; }
set
{
if (value != _Version)
_Version = value;
}
}
private string _GitCommit;
public string GitCommit
{
get { return _GitCommit; }
set
{
if (value != _GitCommit)
_GitCommit = value;
}
}
private string _Os;
public string Os
{
get { return _Os; }
set
{
if (value != _Os)
_Os = value;
}
}
private string _GoVersion;
public string GoVersion
{
get { return _GoVersion; }
set
{
if (value != _GoVersion)
_GoVersion = value;
}
}
public VM_Docker_Version(string dockerVersion)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(dockerVersion);
foreach (XmlNode docker_Version in doc.GetElementsByTagName("docker_version"))
{
var propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "KernelVersion");
if (propertyNode != null)
this.KernelVersion = propertyNode.InnerText;
propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Arch");
if (propertyNode != null)
this.Arch = propertyNode.InnerText;
propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "ApiVersion");
if (propertyNode != null)
this.ApiVersion = propertyNode.InnerText;
propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Version");
if (propertyNode != null)
this.Version = propertyNode.InnerText;
propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "GitCommit");
if (propertyNode != null)
this.GitCommit = propertyNode.InnerText;
propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "Os");
if (propertyNode != null)
this.Os = propertyNode.InnerText;
propertyNode = docker_Version.ChildNodes.Cast<XmlNode>().FirstOrDefault(node => node.Name == "GoVersion");
if (propertyNode != null)
this.GoVersion = propertyNode.InnerText;
}
}
}
}

View File

@ -308,11 +308,13 @@
<Compile Include="WLB\WlbHostConfiguration.cs" />
<Compile Include="WLB\WlbServerState.cs" />
<Compile Include="XenAPI-Extensions\Blob.cs" />
<Compile Include="XenAPI-Extensions\VM_Docker_Info.cs" />
<Compile Include="XenAPI-Extensions\GPU_group.cs" />
<Compile Include="XenAPI-Extensions\PGPU.cs" />
<Compile Include="XenAPI-Extensions\VGPU.cs" />
<Compile Include="XenAPI-Extensions\VGPU_type.cs" />
<Compile Include="XenAPI-Extensions\VM_appliance.cs" />
<Compile Include="XenAPI-Extensions\VM_Docker_Version.cs" />
<Compile Include="XenAPI-Extensions\vm_power_state.cs" />
<Compile Include="XenAPI\allocation_algorithm.cs" />
<Compile Include="XenAPI\bond_mode.cs" />