Merge pull request #1054 from kc284/car-2217

CP-17756: use new field Host.control_domain to find dom0
This commit is contained in:
Mihaela Stoica 2016-07-06 11:48:42 +01:00 committed by GitHub
commit 605511908c
22 changed files with 680 additions and 520 deletions

1
.gitattributes vendored
View File

@ -1,2 +1,3 @@
# Auto detect text files and perform LF normalization
* -crlf
*.sh text eol=lf

View File

@ -257,11 +257,11 @@ namespace XenAdmin.ConsoleView
#endregion
private System.Windows.Forms.Panel buttonPanel;
public System.Windows.Forms.Button dockButton;
private System.Windows.Forms.Button dockButton;
private System.Windows.Forms.Button sendCAD;
private System.Windows.Forms.Panel contentPanel;
private System.Windows.Forms.Panel bottomPanel;
public System.Windows.Forms.CheckBox scaleCheckBox;
private System.Windows.Forms.CheckBox scaleCheckBox;
private System.Windows.Forms.Button fullscreenButton;
private XenAdmin.Controls.DecentGroupBox groupBox1;
private System.Windows.Forms.ToolTip tip;
@ -272,10 +272,10 @@ namespace XenAdmin.ConsoleView
private System.Windows.Forms.Panel panel2;
private XenAdmin.Controls.GradientPanel.GradientPanel gradientPanel1;
private System.Windows.Forms.Label HostLabel;
public System.Windows.Forms.Button toggleConsoleButton;
private System.Windows.Forms.Button toggleConsoleButton;
private XenAdmin.Controls.MultipleDvdIsoList multipleDvdIsoList1;
private System.Windows.Forms.Label powerStateLabel;
private System.Windows.Forms.Label dedicatedGpuWarning;
public System.Windows.Forms.Button buttonSSH;
private System.Windows.Forms.Button buttonSSH;
}
}

View File

@ -43,7 +43,7 @@ using XenAdmin.Commands;
using XenAdmin.Dialogs;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
namespace XenAdmin.ConsoleView
{
@ -96,7 +96,9 @@ namespace XenAdmin.ConsoleView
HostLabel.Font = Program.HeaderGradientFont;
HostLabel.ForeColor = Program.HeaderGradientForeColor;
multipleDvdIsoList1.SetTextColor(Program.HeaderGradientForeColor);
multipleDvdIsoList1.LabelSingleDvdForeColor = Program.HeaderGradientForeColor;
multipleDvdIsoList1.LabelNewCdForeColor = Program.HeaderGradientForeColor;
multipleDvdIsoList1.LinkLabelLinkColor = Color.White;
#pragma warning disable 0219
// Force the handle to be created, because resize events
@ -116,7 +118,7 @@ namespace XenAdmin.ConsoleView
VM_CollectionChangedWithInvoke = Program.ProgramInvokeHandler(VM_CollectionChanged);
source.Connection.Cache.RegisterCollectionChanged<VM>(VM_CollectionChangedWithInvoke);
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
Host host = source.Connection.Resolve(source.resident_on);
if (host != null)
@ -155,7 +157,7 @@ namespace XenAdmin.ConsoleView
this.vncScreen = new XSVNCScreen(source, new EventHandler(RDPorVNCResizeHandler), this, elevatedUsername, elevatedPassword);
ShowGpuWarningIfRequired();
if (source.is_control_domain || source.IsHVM && !hasRDP) //Linux HVM guests should only have one console: the console switch button vanishes altogether.
if (source.IsControlDomainZero || source.IsHVM && !hasRDP) //Linux HVM guests should only have one console: the console switch button vanishes altogether.
{
toggleConsoleButton.Visible = false;
}
@ -185,8 +187,6 @@ namespace XenAdmin.ConsoleView
this.vncScreen.Parent = this.contentPanel;
this.vncScreen.Dock = DockStyle.Fill;
this.Dock = DockStyle.Fill;
string rdpLabel = GuessNativeConsoleLabel(source);
this.toggleConsoleButton.Text = rdpLabel;
@ -210,6 +210,12 @@ namespace XenAdmin.ConsoleView
vncScreen.AutoSwitchRDPLater = true;
}
public bool IsScaled
{
get { return scaleCheckBox.Checked; }
set { scaleCheckBox.Checked = value; }
}
//CA-75479 - add to aid debugging
private void toggleConsoleButton_EnabledChanged(object sender, EventArgs e)
{
@ -243,7 +249,7 @@ namespace XenAdmin.ConsoleView
private void Host_CollectionChanged(object sender, CollectionChangeEventArgs e)
{
if (source.is_control_domain)
if (source.IsControlDomainZero)
return;
Host host = e.Element as Host;
@ -279,7 +285,7 @@ namespace XenAdmin.ConsoleView
if (this.guestMetrics != null)
this.guestMetrics.PropertyChanged -= guestMetrics_PropertyChanged;
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
Host host = source.Connection.Resolve<Host>(source.resident_on);
if (host != null)
@ -518,7 +524,7 @@ namespace XenAdmin.ConsoleView
UpdateOpenSSHConsoleButtonState();
}
if (source.is_control_domain && e.PropertyName == "name_label")
if (source.IsControlDomainZero && e.PropertyName == "name_label")
{
HostLabel.Text = string.Format(Messages.CONSOLE_HOST, source.AffinityServerString);
if (parentVNCView != null && parentVNCView.undockedForm != null)
@ -580,7 +586,7 @@ namespace XenAdmin.ConsoleView
private void Server_EnabledPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != "enabled" || source.is_control_domain)
if (e.PropertyName != "enabled" || source.IsControlDomainZero)
return;
Host host = sender as Host;
@ -601,14 +607,9 @@ namespace XenAdmin.ConsoleView
multipleDvdIsoList1.VM = source;
}
private void cdLabel_Click(object sender, EventArgs e)
{
new InstallToolsCommand(Program.MainWindow, source, this).Execute();
}
private void updatePowerState()
{
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
Host host = source.Connection.Resolve<Host>(source.resident_on);
if (host == null)
@ -674,7 +675,7 @@ namespace XenAdmin.ConsoleView
private void hideTopBarContents()
{
VMPowerOff();
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
log.DebugFormat("'{0}' console: Hide top bar contents, server is unavailable", source.Name);
DisablePowerStateLabel(Messages.CONSOLE_HOST_DEAD);
@ -767,17 +768,6 @@ namespace XenAdmin.ConsoleView
}
}
public bool isPaused
{
get
{
if (vncScreen != null && !isFullscreen)
return vncScreen.wasPaused;
else
return false;
}
}
public void Pause()
{
if (vncScreen != null && !isFullscreen)
@ -1411,7 +1401,7 @@ namespace XenAdmin.ConsoleView
ContextMenuItemCollection contextMenuItems = new ContextMenuItemCollection();
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
// We're looking at the host console
if (host.Connection.IsConnected)
@ -1571,7 +1561,7 @@ namespace XenAdmin.ConsoleView
if (source.IsWindows)
return false;
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
Host host = source.Connection.Resolve<Host>(source.resident_on);
if (host == null)

View File

@ -42,7 +42,7 @@ namespace XenAdmin.ConsoleView
public partial class VNCView : UserControl
{
private readonly VM source;
public readonly VNCTabView vncTabView;
private readonly VNCTabView vncTabView;
public Form undockedForm = null;
public bool isDocked
@ -53,14 +53,6 @@ namespace XenAdmin.ConsoleView
}
}
public bool isPaused
{
get
{
return vncTabView.isPaused;
}
}
public void Pause()
{
if (vncTabView != null && isDocked)
@ -78,10 +70,9 @@ namespace XenAdmin.ConsoleView
Program.AssertOnEventThread();
this.source = source;
this.vncTabView = new VNCTabView(this, source, elevatedUsername, elevatedPassword);
this.vncTabView = new VNCTabView(this, source, elevatedUsername, elevatedPassword) {Dock = DockStyle.Fill};
InitializeComponent();
this.Dock = DockStyle.Fill;
this.Controls.Add(this.vncTabView);
}
@ -128,9 +119,9 @@ namespace XenAdmin.ConsoleView
this.Controls.Remove(vncTabView);
undockedForm.Controls.Add(vncTabView);
oldScaledSetting = vncTabView.scaleCheckBox.Checked;
oldScaledSetting = vncTabView.IsScaled;
vncTabView.showHeaderBar(!source.is_control_domain, true);
vncTabView.showHeaderBar(!source.IsControlDomainZero, !source.is_control_domain);
undockedForm.ClientSize = vncTabView.GrowToFit();
@ -144,15 +135,13 @@ namespace XenAdmin.ConsoleView
}
undockedForm.HelpButton = true;
//undockedForm.MinimizeBox = false;
//undockedForm.MaximizeBox = false;
undockedForm.HelpButtonClicked += undockedForm_HelpButtonClicked;
undockedForm.HelpRequested += undockedForm_HelpRequested;
undockedForm.Show();
if(Properties.Settings.Default.PreserveScaleWhenUndocked)
vncTabView.scaleCheckBox.Checked = oldScaledSetting;
vncTabView.IsScaled = oldScaledSetting;
this.reattachConsoleButton.Show();
this.findConsoleButton.Show();
@ -164,7 +153,7 @@ namespace XenAdmin.ConsoleView
this.oldUndockedSize = undockedForm.Size;
if (!Properties.Settings.Default.PreserveScaleWhenUndocked)
vncTabView.scaleCheckBox.Checked = oldScaledSetting;
vncTabView.IsScaled = oldScaledSetting;
this.reattachConsoleButton.Hide();
this.findConsoleButton.Hide();
@ -189,7 +178,7 @@ namespace XenAdmin.ConsoleView
private string UndockedWindowTitle(VM source)
{
if (source.is_control_domain)
if (source.IsControlDomainZero)
{
Host host = source.Connection.Resolve(source.resident_on);
return host == null ? source.Name : string.Format(Messages.CONSOLE_HOST, host.Name);

View File

@ -225,7 +225,7 @@ namespace XenAdmin.ConsoleView
return true;
}
public bool wasPaused = true;
private bool wasPaused = true;
public void Pause()
{
@ -726,10 +726,9 @@ namespace XenAdmin.ConsoleView
{
parentVNCTabView.DisableToggleVNCButton();
}
//Start the polling again
if (Source != null && !Source.is_control_domain)
if (Source != null && !Source.IsControlDomainZero)
{
if (!Source.IsHVM)
{
@ -740,7 +739,7 @@ namespace XenAdmin.ConsoleView
connectionPoller = new Timer(PollRDPPort, null, RETRY_SLEEP_TIME, RDP_POLL_INTERVAL);
}
}
}
}
}
private void VM_PropertyChanged(object sender, PropertyChangedEventArgs e)

109
XenAdmin/Controls/ConsolePanel.Designer.cs generated Normal file
View File

@ -0,0 +1,109 @@
namespace XenAdmin.Controls
{
partial class ConsolePanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConsolePanel));
this.tableLayoutPanelRbac = new System.Windows.Forms.TableLayoutPanel();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.lableRbacWarning = new System.Windows.Forms.Label();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.tableLayoutPanelError = new System.Windows.Forms.TableLayoutPanel();
this.errorLabel = new System.Windows.Forms.Label();
this.tableLayoutPanelRbac.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.tableLayoutPanelError.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanelRbac
//
resources.ApplyResources(this.tableLayoutPanelRbac, "tableLayoutPanelRbac");
this.tableLayoutPanelRbac.Controls.Add(this.pictureBox2, 0, 0);
this.tableLayoutPanelRbac.Controls.Add(this.lableRbacWarning, 1, 0);
this.tableLayoutPanelRbac.Name = "tableLayoutPanelRbac";
//
// pictureBox2
//
resources.ApplyResources(this.pictureBox2, "pictureBox2");
this.pictureBox2.Image = global::XenAdmin.Properties.Resources._000_WarningAlert_h32bit_32;
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.TabStop = false;
//
// lableRbacWarning
//
resources.ApplyResources(this.lableRbacWarning, "lableRbacWarning");
this.lableRbacWarning.Name = "lableRbacWarning";
//
// pictureBox1
//
resources.ApplyResources(this.pictureBox1, "pictureBox1");
this.pictureBox1.Image = global::XenAdmin.Properties.Resources._000_error_h32bit_16;
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.TabStop = false;
//
// tableLayoutPanelError
//
resources.ApplyResources(this.tableLayoutPanelError, "tableLayoutPanelError");
this.tableLayoutPanelError.Controls.Add(this.pictureBox1, 0, 0);
this.tableLayoutPanelError.Controls.Add(this.errorLabel, 1, 0);
this.tableLayoutPanelError.Name = "tableLayoutPanelError";
//
// errorLabel
//
resources.ApplyResources(this.errorLabel, "errorLabel");
this.errorLabel.Name = "errorLabel";
//
// ConsolePanel
//
this.Controls.Add(this.tableLayoutPanelError);
this.Controls.Add(this.tableLayoutPanelRbac);
this.Name = "ConsolePanel";
resources.ApplyResources(this, "$this");
this.tableLayoutPanelRbac.ResumeLayout(false);
this.tableLayoutPanelRbac.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.tableLayoutPanelError.ResumeLayout(false);
this.tableLayoutPanelError.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lableRbacWarning;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelRbac;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelError;
private System.Windows.Forms.Label errorLabel;
}
}

View File

@ -35,37 +35,25 @@ using System.Linq;
using System.Windows.Forms;
using XenAdmin.ConsoleView;
using XenAPI;
using XenAdmin.Core;
using System.Drawing;
namespace XenAdmin.Controls
{
public class ConsolePanel : UserControl
public partial class ConsolePanel : UserControl
{
private const int MAX_ACTIVE_VM_CONSOLES = 10;
private List<VM> activeVMConsoles;
private Dictionary<VM, VNCView> vncViews;
private Label errorLabel;
private static string CouldNotConnect = Messages.VNC_COULD_NOT_CONNECT_CONSOLE;
private static string CouldNotFindConsole = Messages.VNC_COULD_NOT_FIND_CONSOLES;
public VNCView activeVNCView = null;
private Panel RbacWarningPanel;
private TableLayoutPanel tableLayoutPanel3;
private PictureBox pictureBox2;
private Label lableRbacWarning;
public VNCView activeVNCView;
private Dictionary<VM, VNCView> vncViews = new Dictionary<VM, VNCView>();
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public ConsolePanel()
: base()
{
InitializeComponent();
this.vncViews = new Dictionary<VM, VNCView>();
this.activeVMConsoles = new List<VM>();
this.Dock = DockStyle.Fill;
pictureBox2.Image = SystemIcons.Warning.ToBitmap();
tableLayoutPanelRbac.Visible = false;
ClearErrorMessage();
}
public void PauseAllViews()
@ -118,34 +106,37 @@ namespace XenAdmin.Controls
// Start a timer for closing the inactive VNC connection after an interval (20 seconds)
StartCloseVNCTimer(activeVNCView);
this.Controls.Clear();
tableLayoutPanelRbac.Visible = false;
if (activeVNCView != null)
{
Controls.Remove(activeVNCView);
activeVNCView = null;
}
if (source == null)
{
activeVNCView = null;
return;
}
List<Role> allowedRoles = null;
List<Role> allowedRoles;
if (RbacDenied(source, out allowedRoles))
{
lableRbacWarning.Text = String.Format(allowedRoles.Count == 1 ? Messages.RBAC_CONSOLE_WARNING_ONE : Messages.RBAC_CONSOLE_WARNING_MANY,
Role.FriendlyCSVRoleList(source.Connection.Session.Roles),
Role.FriendlyCSVRoleList(allowedRoles));
string msg = allowedRoles.Count == 1 ? Messages.RBAC_CONSOLE_WARNING_ONE : Messages.RBAC_CONSOLE_WARNING_MANY;
lableRbacWarning.Text = string.Format(msg,
Role.FriendlyCSVRoleList(source.Connection.Session.Roles),
Role.FriendlyCSVRoleList(allowedRoles));
this.Controls.Add(RbacWarningPanel);
if (activeVNCView != null)
this.Controls.Remove(activeVNCView);
tableLayoutPanelRbac.Visible = true;
return;
}
activeVMConsoles.Remove(source);
activeVMConsoles.Add(source);
StopCloseVncTimer(source);
while (activeVMConsoles.Count > MAX_ACTIVE_VM_CONSOLES)
{
closeVNCForSource(activeVMConsoles[0]);
}
//remove one more as we're adding the selected further down
//Take(arg) returns empty list if the arg <= 0
var viewsToRemove = vncViews.Where(v => v.Key.opaque_ref != source.opaque_ref).Take(vncViews.Count -1 - MAX_ACTIVE_VM_CONSOLES);
foreach (var view in viewsToRemove)
closeVNCForSource(view.Key);
if (vncViews.ContainsKey(source))
{
@ -153,102 +144,54 @@ namespace XenAdmin.Controls
}
else
{
activeVNCView = new VNCView(source, null, null);
activeVNCView = new VNCView(source, null, null) { Dock = DockStyle.Fill };
vncViews[source] = activeVNCView;
}
activeVNCView.refreshIsoList();
this.Controls.Add(activeVNCView);
this.ClearErrorMessage();
Controls.Add(activeVNCView);
ClearErrorMessage();
}
internal void setCurrentSource(Host source)
internal virtual void setCurrentSource(Host source)
{
// sanity...
if (source == null)
{
log.Error("null source when attempting to connect to host VNC");
SetErrorMessage(CouldNotConnect);
log.Error("No local copy of host information when connecting to host VNC console.");
SetErrorMessage(Messages.VNC_COULD_NOT_CONNECT_CONSOLE);
return;
}
if (source == null)
{
log.Error("No local copy of host information when connecting to host VNC console...");
SetErrorMessage(CouldNotConnect);
return;
}
if (source.resident_VMs == null)
VM dom0 = source.ControlDomainZero;
if (dom0 == null)
{
log.Error("No dom0 on host when connecting to host VNC console.");
SetErrorMessage(CouldNotConnect);
return;
}
List<XenRef<VM>> controlVMs =
source.resident_VMs.FindAll((Predicate<XenRef<VM>>)delegate(XenRef<VM> vmRef)
{
VM vm = source.Connection.Resolve<VM>(vmRef);
if (vm == null)
{
return false;
}
else
{
return vm.is_control_domain;
}
});
if (controlVMs.Count > 0)
{
VM vm = source.Connection.Resolve<VM>(controlVMs[0]);
if (vm == null)
{
SetErrorMessage(CouldNotFindConsole);
}
else
{
this.setCurrentSource(vm);
}
SetErrorMessage(Messages.VNC_COULD_NOT_FIND_CONSOLES);
}
else
{
SetErrorMessage(CouldNotFindConsole);
}
setCurrentSource(dom0);
}
public static bool RbacDenied(VM source, out List<Role> AllowedRoles)
public static bool RbacDenied(VM source, out List<Role> allowedRoles)
{
if (source == null || source.Connection == null)
{
AllowedRoles = null;
allowedRoles = null;
return false;
}
else
var session = source.Connection.Session;
if (session != null && session.IsLocalSuperuser)
{
var session = source.Connection.Session;
if (session != null && session.IsLocalSuperuser)
{
AllowedRoles = null;
return false;
}
}
List<Role> allowedRoles = null;
if (source.is_control_domain)
allowedRoles = Role.ValidRoleList("http/connect_console/host_console", source.Connection);
else
allowedRoles = Role.ValidRoleList("http/connect_console", source.Connection);
if (source.Connection.Session.Roles.Find(delegate(Role r) { return allowedRoles.Contains(r); }) != null)
{
AllowedRoles = allowedRoles;
allowedRoles = null;
return false;
}
AllowedRoles = allowedRoles;
return true;
string roleList = source.IsControlDomainZero ? "http/connect_console/host_console" : "http/connect_console";
List<Role> validRoles = Role.ValidRoleList(roleList, source.Connection);
allowedRoles = validRoles;
return source.Connection.Session.Roles.Find(r => validRoles.Contains(r)) == null;
}
internal Image Snapshot(VM vm, string elevatedUsername, string elevatedPassword)
@ -266,7 +209,7 @@ namespace XenAdmin.Controls
// use elevated credentials, if provided, to create a vncView (CA-91132)
useElevatedCredentials = !String.IsNullOrEmpty(elevatedUsername) && !String.IsNullOrEmpty(elevatedPassword);
if (useElevatedCredentials)
view = new VNCView(vm, elevatedUsername, elevatedPassword);
view = new VNCView(vm, elevatedUsername, elevatedPassword) { Dock = DockStyle.Fill };
else
{
setCurrentSource(vm);
@ -311,9 +254,6 @@ namespace XenAdmin.Controls
vncViews.Remove(source);
vncView.Dispose();
if (activeVMConsoles.Contains(source))
activeVMConsoles.Remove(source);
}
public void closeVNCForSource(VM source, bool vncOnly)
@ -324,93 +264,22 @@ namespace XenAdmin.Controls
closeVNCForSource(source);
}
public bool isVNCPausedForSource(VM source)
protected void SetErrorMessage(string message)
{
Program.AssertOnEventThread();
VNCView vncView = null;
if (vncViews.ContainsKey(source))
{
vncView = vncViews[source];
return vncView.isPaused;
}
return false;
}
private void SetErrorMessage(String message)
{
this.errorLabel.Text = message;
this.errorLabel.Visible = true;
this.Controls.Add(this.errorLabel);
this.setCurrentSource((VM)null);
errorLabel.Text = message;
tableLayoutPanelError.Visible = true;
setCurrentSource((VM)null);
}
private void ClearErrorMessage()
{
this.errorLabel.Text = "";
this.errorLabel.Visible = false;
this.Controls.Remove(this.errorLabel);
}
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConsolePanel));
this.errorLabel = new System.Windows.Forms.Label();
this.RbacWarningPanel = new System.Windows.Forms.Panel();
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.lableRbacWarning = new System.Windows.Forms.Label();
this.RbacWarningPanel.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.SuspendLayout();
//
// errorLabel
//
resources.ApplyResources(this.errorLabel, "errorLabel");
this.errorLabel.Name = "errorLabel";
//
// RbacWarningPanel
//
this.RbacWarningPanel.BackColor = System.Drawing.Color.Transparent;
this.RbacWarningPanel.Controls.Add(this.tableLayoutPanel3);
resources.ApplyResources(this.RbacWarningPanel, "RbacWarningPanel");
this.RbacWarningPanel.Name = "RbacWarningPanel";
//
// tableLayoutPanel3
//
resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3");
this.tableLayoutPanel3.Controls.Add(this.pictureBox2, 0, 0);
this.tableLayoutPanel3.Controls.Add(this.lableRbacWarning, 1, 0);
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
//
// pictureBox2
//
resources.ApplyResources(this.pictureBox2, "pictureBox2");
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.TabStop = false;
//
// lableRbacWarning
//
resources.ApplyResources(this.lableRbacWarning, "lableRbacWarning");
this.lableRbacWarning.Name = "lableRbacWarning";
//
// ConsolePanel
//
this.Controls.Add(this.RbacWarningPanel);
this.Name = "ConsolePanel";
resources.ApplyResources(this, "$this");
this.RbacWarningPanel.ResumeLayout(false);
this.tableLayoutPanel3.ResumeLayout(false);
this.tableLayoutPanel3.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.ResumeLayout(false);
tableLayoutPanelError.Visible = false;
}
public void SendCAD()
{
if (this.activeVNCView != null)
this.activeVNCView.SendCAD();
if (activeVNCView != null)
activeVNCView.SendCAD();
}
internal void SwitchIfRequired()
@ -487,4 +356,26 @@ namespace XenAdmin.Controls
#endregion
}
internal class CvmConsolePanel : ConsolePanel
{
internal override void setCurrentSource(Host source)
{
if (source == null)
{
log.Error("No local copy of host information when connecting to host VNC console.");
SetErrorMessage(Messages.VNC_COULD_NOT_CONNECT_CONSOLE);
return;
}
VM cvm = source.OtherControlDomains.FirstOrDefault();
if (cvm == null)
{
log.Error("Could not find CVM console on host.");
SetErrorMessage(Messages.VNC_COULD_NOT_FIND_CONSOLES);
}
else
setCurrentSource(cvm);
}
}
}

View File

@ -112,52 +112,28 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="errorLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="errorLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="errorLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>82, 70</value>
</data>
<data name="errorLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>0, 13</value>
</data>
<data name="errorLabel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="errorLabel.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;errorLabel.Name" xml:space="preserve">
<value>errorLabel</value>
</data>
<data name="&gt;&gt;errorLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel3.ColumnCount" type="System.Int32, mscorlib">
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanelRbac.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="pictureBox2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 13</value>
</data>
<data name="pictureBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 39</value>
<value>32, 32</value>
</data>
<data name="pictureBox2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -166,10 +142,10 @@
<value>pictureBox2</value>
</data>
<data name="&gt;&gt;pictureBox2.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox2.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>
<value>tableLayoutPanelRbac</value>
</data>
<data name="&gt;&gt;pictureBox2.ZOrder" xml:space="preserve">
<value>0</value>
@ -184,10 +160,10 @@
<value>NoControl</value>
</data>
<data name="lableRbacWarning.Location" type="System.Drawing.Point, System.Drawing">
<value>66, 10</value>
<value>51, 10</value>
</data>
<data name="lableRbacWarning.Size" type="System.Drawing.Size, System.Drawing">
<value>545, 196</value>
<value>560, 196</value>
</data>
<data name="lableRbacWarning.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -199,72 +175,141 @@
<value>lableRbacWarning</value>
</data>
<data name="&gt;&gt;lableRbacWarning.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lableRbacWarning.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>
<value>tableLayoutPanelRbac</value>
</data>
<data name="&gt;&gt;lableRbacWarning.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tableLayoutPanel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel3.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanel3.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>10, 10, 10, 10</value>
</data>
<data name="tableLayoutPanel3.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tableLayoutPanel3.Size" type="System.Drawing.Size, System.Drawing">
<value>624, 216</value>
</data>
<data name="tableLayoutPanel3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.Name" xml:space="preserve">
<value>tableLayoutPanel3</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.Parent" xml:space="preserve">
<value>RbacWarningPanel</value>
</data>
<data name="&gt;&gt;tableLayoutPanel3.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel3.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="pictureBox2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="lableRbacWarning" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="RbacWarningPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<data name="tableLayoutPanelRbac.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="RbacWarningPanel.Location" type="System.Drawing.Point, System.Drawing">
<data name="tableLayoutPanelRbac.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="RbacWarningPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>624, 216</value>
<data name="tableLayoutPanelRbac.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>10, 10, 10, 10</value>
</data>
<data name="RbacWarningPanel.TabIndex" type="System.Int32, mscorlib">
<data name="tableLayoutPanelRbac.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;RbacWarningPanel.Name" xml:space="preserve">
<value>RbacWarningPanel</value>
<data name="tableLayoutPanelRbac.Size" type="System.Drawing.Size, System.Drawing">
<value>624, 216</value>
</data>
<data name="&gt;&gt;RbacWarningPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="tableLayoutPanelRbac.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;RbacWarningPanel.Parent" xml:space="preserve">
<data name="&gt;&gt;tableLayoutPanelRbac.Name" xml:space="preserve">
<value>tableLayoutPanelRbac</value>
</data>
<data name="&gt;&gt;tableLayoutPanelRbac.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanelRbac.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;RbacWarningPanel.ZOrder" xml:space="preserve">
<data name="&gt;&gt;tableLayoutPanelRbac.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tableLayoutPanelRbac.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="pictureBox2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="lableRbacWarning" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="Percent,100,Absolute,20" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="pictureBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve">
<value>pictureBox1</value>
</data>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox1.Parent" xml:space="preserve">
<value>tableLayoutPanelError</value>
</data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<data name="tableLayoutPanelError.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="tableLayoutPanelError.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanelError.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="tableLayoutPanelError.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="errorLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="errorLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="errorLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>25, 4</value>
</data>
<data name="errorLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 13</value>
</data>
<data name="errorLabel.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="errorLabel.Text" xml:space="preserve">
<value>errorMsg</value>
</data>
<data name="&gt;&gt;errorLabel.Name" xml:space="preserve">
<value>errorLabel</value>
</data>
<data name="&gt;&gt;errorLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;errorLabel.Parent" xml:space="preserve">
<value>tableLayoutPanelError</value>
</data>
<data name="&gt;&gt;errorLabel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tableLayoutPanelError.Location" type="System.Drawing.Point, System.Drawing">
<value>261, 222</value>
</data>
<data name="tableLayoutPanelError.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tableLayoutPanelError.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 22</value>
</data>
<data name="tableLayoutPanelError.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;tableLayoutPanelError.Name" xml:space="preserve">
<value>tableLayoutPanelError</value>
</data>
<data name="&gt;&gt;tableLayoutPanelError.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanelError.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanelError.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanelError.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="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="errorLabel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0" /&gt;&lt;Rows Styles="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>
</metadata>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
@ -274,6 +319,6 @@
<value>ConsolePanel</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -70,7 +70,7 @@ namespace XenAdmin.Controls.ConsoleTab
if (_selectedScreen == null) //screen not assigned yet
return;
string connectionName = _selectedScreen.Source.is_control_domain
string connectionName = _selectedScreen.Source.IsControlDomainZero
? _selectedScreen.Source.AffinityServerString
: _selectedScreen.Source.Name;

View File

@ -31,92 +31,89 @@ namespace XenAdmin.Controls
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MultipleDvdIsoList));
this.labelSingleDvd = new System.Windows.Forms.Label();
this.newCDLabel = new System.Windows.Forms.Label();
this.comboBoxDrive = new System.Windows.Forms.ComboBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.panel1 = new System.Windows.Forms.Panel();
this.cdChanger1 = new XenAdmin.Controls.CDChanger();
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// labelSingleDvd
//
resources.ApplyResources(this.labelSingleDvd, "labelSingleDvd");
this.labelSingleDvd.MaximumSize = new System.Drawing.Size(100, 23);
this.labelSingleDvd.Name = "labelSingleDvd";
//
// newCDLabel
//
resources.ApplyResources(this.newCDLabel, "newCDLabel");
this.newCDLabel.Cursor = System.Windows.Forms.Cursors.Hand;
this.newCDLabel.ForeColor = System.Drawing.SystemColors.HotTrack;
this.newCDLabel.Name = "newCDLabel";
this.newCDLabel.Click += new System.EventHandler(this.newCDLabel_Click);
//
// comboBoxDrive
//
this.comboBoxDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxDrive.FormattingEnabled = true;
resources.ApplyResources(this.comboBoxDrive, "comboBoxDrive");
this.comboBoxDrive.MaximumSize = new System.Drawing.Size(120, 0);
this.comboBoxDrive.Name = "comboBoxDrive";
this.comboBoxDrive.SelectedIndexChanged += new System.EventHandler(this.comboBoxDrive_SelectedIndexChanged);
//
// tableLayoutPanel1
//
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
this.tableLayoutPanel1.Controls.Add(this.labelSingleDvd, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.comboBoxDrive, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.newCDLabel, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.panel1, 2, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// panel1
//
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Controls.Add(this.cdChanger1);
this.panel1.Controls.Add(this.linkLabel1);
this.panel1.Name = "panel1";
//
// cdChanger1
//
this.cdChanger1.connection = null;
resources.ApplyResources(this.cdChanger1, "cdChanger1");
this.cdChanger1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.cdChanger1.Drive = null;
this.cdChanger1.DropDownHeight = 500;
this.cdChanger1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cdChanger1.Empty = true;
this.cdChanger1.FormattingEnabled = true;
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MultipleDvdIsoList));
this.labelSingleDvd = new System.Windows.Forms.Label();
this.newCDLabel = new System.Windows.Forms.Label();
this.comboBoxDrive = new System.Windows.Forms.ComboBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.panel1 = new System.Windows.Forms.Panel();
this.cdChanger1 = new XenAdmin.Controls.CDChanger();
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// labelSingleDvd
//
resources.ApplyResources(this.labelSingleDvd, "labelSingleDvd");
this.labelSingleDvd.Name = "labelSingleDvd";
//
// newCDLabel
//
resources.ApplyResources(this.newCDLabel, "newCDLabel");
this.newCDLabel.Cursor = System.Windows.Forms.Cursors.Hand;
this.newCDLabel.ForeColor = System.Drawing.SystemColors.HotTrack;
this.newCDLabel.Name = "newCDLabel";
this.newCDLabel.Click += new System.EventHandler(this.newCDLabel_Click);
//
// comboBoxDrive
//
this.comboBoxDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxDrive.FormattingEnabled = true;
resources.ApplyResources(this.comboBoxDrive, "comboBoxDrive");
this.comboBoxDrive.Name = "comboBoxDrive";
this.comboBoxDrive.SelectedIndexChanged += new System.EventHandler(this.comboBoxDrive_SelectedIndexChanged);
//
// tableLayoutPanel1
//
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
this.tableLayoutPanel1.Controls.Add(this.labelSingleDvd, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.comboBoxDrive, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.newCDLabel, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.panel1, 2, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// panel1
//
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Controls.Add(this.cdChanger1);
this.panel1.Controls.Add(this.linkLabel1);
this.panel1.Name = "panel1";
//
// cdChanger1
//
this.cdChanger1.connection = null;
this.cdChanger1.DisplayISO = false;
this.cdChanger1.Name = "cdChanger1";
this.cdChanger1.DisplayPhysical = false;
this.cdChanger1.SelectedCD = null;
this.cdChanger1.TheVM = null;
//
// linkLabel1
//
resources.ApplyResources(this.linkLabel1, "linkLabel1");
this.linkLabel1.LinkColor = System.Drawing.Color.White;
this.linkLabel1.Name = "linkLabel1";
this.linkLabel1.TabStop = true;
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
//
// MultipleDvdIsoList
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "MultipleDvdIsoList";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
resources.ApplyResources(this.cdChanger1, "cdChanger1");
this.cdChanger1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.cdChanger1.Drive = null;
this.cdChanger1.DropDownHeight = 500;
this.cdChanger1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cdChanger1.Empty = true;
this.cdChanger1.FormattingEnabled = true;
this.cdChanger1.Name = "cdChanger1";
this.cdChanger1.SelectedCD = null;
this.cdChanger1.TheVM = null;
//
// linkLabel1
//
resources.ApplyResources(this.linkLabel1, "linkLabel1");
this.linkLabel1.Name = "linkLabel1";
this.linkLabel1.TabStop = true;
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
//
// MultipleDvdIsoList
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "MultipleDvdIsoList";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
@ -128,6 +125,6 @@ namespace XenAdmin.Controls
private System.Windows.Forms.Label newCDLabel;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Panel panel1;
internal System.Windows.Forms.LinkLabel linkLabel1;
private System.Windows.Forms.LinkLabel linkLabel1;
}
}

View File

@ -33,7 +33,6 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
@ -73,6 +72,34 @@ namespace XenAdmin.Controls
}
}
#region Designer browsable properties
[Browsable(true)]
[Category("Appearance")]
public Color LabelSingleDvdForeColor
{
get { return labelSingleDvd.ForeColor; }
set { labelSingleDvd.ForeColor = value; }
}
[Browsable(true)]
[Category("Appearance")]
public Color LabelNewCdForeColor
{
get { return newCDLabel.ForeColor; }
set { newCDLabel.ForeColor = value; }
}
[Browsable(true)]
[Category("Appearance")]
public Color LinkLabelLinkColor
{
get { return linkLabel1.LinkColor; }
set { linkLabel1.LinkColor = value; }
}
#endregion
protected virtual void DeregisterEvents()
{
if (vm == null)
@ -111,7 +138,7 @@ namespace XenAdmin.Controls
}
comboBoxDrive.Items.Clear();
if (VM != null)
if (VM != null && !VM.is_control_domain)
{
List<VBD> vbds = VM.Connection.ResolveAll(VM.VBDs);
if (vbds == null)
@ -235,12 +262,6 @@ namespace XenAdmin.Controls
}
}
public void SetTextColor(Color c)
{
labelSingleDvd.ForeColor = c;
newCDLabel.ForeColor = c;
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (cdChanger1.Drive != null)

View File

@ -112,29 +112,32 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelSingleDvd.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelSingleDvd.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="labelSingleDvd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labelSingleDvd.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 8</value>
</data>
<data name="labelSingleDvd.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 8, 3, 5</value>
</data>
<data name="labelSingleDvd.MaximumSize" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="labelSingleDvd.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 15</value>
</data>
@ -151,7 +154,7 @@
<value>labelSingleDvd</value>
</data>
<data name="&gt;&gt;labelSingleDvd.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelSingleDvd.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -196,7 +199,7 @@
<value>newCDLabel</value>
</data>
<data name="&gt;&gt;newCDLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;newCDLabel.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -210,6 +213,9 @@
<data name="comboBoxDrive.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 3</value>
</data>
<data name="comboBoxDrive.MaximumSize" type="System.Drawing.Size, System.Drawing">
<value>120, 0</value>
</data>
<data name="comboBoxDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 21</value>
</data>
@ -223,7 +229,7 @@
<value>comboBoxDrive</value>
</data>
<data name="&gt;&gt;comboBoxDrive.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;comboBoxDrive.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -301,7 +307,7 @@
<value>linkLabel1</value>
</data>
<data name="&gt;&gt;linkLabel1.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;linkLabel1.Parent" xml:space="preserve">
<value>panel1</value>
@ -331,7 +337,7 @@
<value>panel1</value>
</data>
<data name="&gt;&gt;panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -358,7 +364,7 @@
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
@ -369,7 +375,7 @@
<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="labelSingleDvd" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="comboBoxDrive" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="newCDLabel" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="panel1" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
@ -382,6 +388,6 @@
<value>MultipleDvdIsoList</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -83,6 +83,7 @@ namespace XenAdmin
this.TabPageWLB = new System.Windows.Forms.TabPage();
this.TabPageWLBUpsell = new System.Windows.Forms.TabPage();
this.TabPageAD = new System.Windows.Forms.TabPage();
this.TabPageADUpsell = new System.Windows.Forms.TabPage();
this.TabPageGPU = new System.Windows.Forms.TabPage();
this.TabPageSearch = new System.Windows.Forms.TabPage();
this.TabPageDockerProcess = new System.Windows.Forms.TabPage();
@ -280,7 +281,7 @@ namespace XenAdmin
this.StatusStrip = new System.Windows.Forms.StatusStrip();
this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.statusProgressBar = new System.Windows.Forms.ToolStripProgressBar();
this.TabPageADUpsell = new System.Windows.Forms.TabPage();
this.TabPageCvmConsole = new System.Windows.Forms.TabPage();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@ -342,6 +343,7 @@ namespace XenAdmin
this.TheTabControl.Controls.Add(this.TabPageBallooning);
this.TheTabControl.Controls.Add(this.TabPageBallooningUpsell);
this.TheTabControl.Controls.Add(this.TabPageConsole);
this.TheTabControl.Controls.Add(this.TabPageCvmConsole);
this.TheTabControl.Controls.Add(this.TabPageStorage);
this.TheTabControl.Controls.Add(this.TabPagePhysicalStorage);
this.TheTabControl.Controls.Add(this.TabPageSR);
@ -471,6 +473,12 @@ namespace XenAdmin
this.TabPageAD.Name = "TabPageAD";
this.TabPageAD.UseVisualStyleBackColor = true;
//
// TabPageADUpsell
//
resources.ApplyResources(this.TabPageADUpsell, "TabPageADUpsell");
this.TabPageADUpsell.Name = "TabPageADUpsell";
this.TabPageADUpsell.UseVisualStyleBackColor = true;
//
// TabPageGPU
//
resources.ApplyResources(this.TabPageGPU, "TabPageGPU");
@ -1839,11 +1847,11 @@ namespace XenAdmin
this.statusProgressBar.Name = "statusProgressBar";
this.statusProgressBar.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never;
//
// TabPageADUpsell
// TabPageCvmConsole
//
resources.ApplyResources(this.TabPageADUpsell, "TabPageADUpsell");
this.TabPageADUpsell.Name = "TabPageADUpsell";
this.TabPageADUpsell.UseVisualStyleBackColor = true;
resources.ApplyResources(this.TabPageCvmConsole, "TabPageCvmConsole");
this.TabPageCvmConsole.Name = "TabPageCvmConsole";
this.TabPageCvmConsole.UseVisualStyleBackColor = true;
//
// MainWindow
//
@ -2107,6 +2115,7 @@ namespace XenAdmin
private CommandToolStripButton restartContainerToolStripButton;
private CommandToolStripMenuItem healthCheckToolStripMenuItem1;
private TabPage TabPageADUpsell;
private TabPage TabPageCvmConsole;
}
}

View File

@ -85,6 +85,7 @@ namespace XenAdmin
internal readonly BallooningPage BallooningPage = new BallooningPage();
internal readonly BallooningUpsellPage BallooningUpsellPage = new BallooningUpsellPage();
internal readonly ConsolePanel ConsolePanel = new ConsolePanel();
internal readonly CvmConsolePanel CvmConsolePanel = new CvmConsolePanel();
internal readonly HAPage HAPage = new HAPage();
internal readonly HAUpsellPage HAUpsellPage = new HAUpsellPage();
internal readonly HomePage HomePage = new HomePage();
@ -153,6 +154,7 @@ namespace XenAdmin
components.Add(GeneralPage);
components.Add(BallooningPage);
components.Add(ConsolePanel);
components.Add(CvmConsolePanel);
components.Add(NetworkPage);
components.Add(HAPage);
components.Add(HomePage);
@ -171,6 +173,7 @@ namespace XenAdmin
AddTabContents(BallooningPage, TabPageBallooning);
AddTabContents(BallooningUpsellPage, TabPageBallooningUpsell);
AddTabContents(ConsolePanel, TabPageConsole);
AddTabContents(CvmConsolePanel, TabPageCvmConsole);
AddTabContents(NetworkPage, TabPageNetwork);
AddTabContents(HAPage, TabPageHA);
AddTabContents(HAUpsellPage, TabPageHAUpsell);
@ -246,8 +249,8 @@ namespace XenAdmin
if (SelectionManager.Selection.FirstIsRealVM)
ConsolePanel.setCurrentSource((VM)SelectionManager.Selection.First);
else if (SelectionManager.Selection.FirstIsHost)
ConsolePanel.setCurrentSource((Host)SelectionManager.Selection.First);
else if (SelectionManager.Selection.FirstIsHost)
ConsolePanel.setCurrentSource((Host)SelectionManager.Selection.First);
UnpauseVNC(sender == TheTabControl);
}
@ -765,13 +768,16 @@ namespace XenAdmin
foreach (VM vm in connection.Cache.VMs)
{
this.ConsolePanel.closeVNCForSource(vm);
ConsolePanel.closeVNCForSource(vm);
}
foreach (Host host in connection.Cache.Hosts)
foreach (VM vm in host.Connection.ResolveAll(host.resident_VMs))
if (vm.is_control_domain)
this.ConsolePanel.closeVNCForSource(vm);
{
ConsolePanel.closeVNCForSource(host.ControlDomainZero);
foreach (VM vm in host.OtherControlDomains)
CvmConsolePanel.closeVNCForSource(vm);
}
connection.EndConnect();
@ -1374,6 +1380,7 @@ namespace XenAdmin
bool isTemplateSelected = SelectionManager.Selection.FirstIsTemplate;
bool isHostLive = SelectionManager.Selection.FirstIsLiveHost;
bool isDockerContainerSelected = SelectionManager.Selection.First is DockerContainer;
bool hasManyControlDomains = isHostSelected && ((Host)SelectionManager.Selection.First).HasManyControlDomains;
bool selectedTemplateHasProvisionXML = SelectionManager.Selection.FirstIsTemplate && ((VM)SelectionManager.Selection[0].XenObject).HasProvisionXML;
@ -1403,6 +1410,7 @@ namespace XenAdmin
}
ShowTab(TabPageConsole, !shownConsoleReplacement && !multi && !SearchMode && (isRealVMSelected || (isHostSelected && isHostLive)));
ShowTab(TabPageCvmConsole, !shownConsoleReplacement && !multi && !SearchMode && isHostLive && hasManyControlDomains);
ShowTab(TabPagePeformance, !multi && !SearchMode && (isRealVMSelected || (isHostSelected && isHostLive)));
ShowTab(ha_upsell ? TabPageHAUpsell : TabPageHA, !multi && !SearchMode && isPoolSelected);
ShowTab(TabPageSnapshots, !multi && !SearchMode && isRealVMSelected);
@ -1768,13 +1776,23 @@ namespace XenAdmin
UnpauseVNC(e != null && sender == TheTabControl);
}
}
else if (t == TabPageCvmConsole)
{
if (SelectionManager.Selection.FirstIsHost)
{
CvmConsolePanel.setCurrentSource((Host)SelectionManager.Selection.First);
UnpauseVNC(e != null && sender == TheTabControl);
}
}
else
{
ConsolePanel.PauseAllViews();
ConsolePanel.PauseAllViews();
CvmConsolePanel.PauseAllViews();
// Start timer for closing the VNC connection after an interval (20 seconds)
// when the console tab is not selected
ConsolePanel.StartCloseVNCTimer(ConsolePanel.activeVNCView);
CvmConsolePanel.StartCloseVNCTimer(CvmConsolePanel.activeVNCView);
if (t == TabPageGeneral)
{
@ -1967,10 +1985,14 @@ namespace XenAdmin
private void UnpauseVNC(bool focus)
{
ConsolePanel.UnpauseActiveView();
CvmConsolePanel.UnpauseActiveView();
if (focus)
{
ConsolePanel.FocusActiveView();
CvmConsolePanel.FocusActiveView();
ConsolePanel.SwitchIfRequired();
CvmConsolePanel.SwitchIfRequired();
}
}
@ -1979,7 +2001,7 @@ namespace XenAdmin
/// </summary>
public enum Tab
{
Overview, Home, Settings, Storage, Network, Console, Performance, NICs, SR, DockerProcess, DockerDetails
Overview, Home, Settings, Storage, Network, Console, CvmConsole, Performance, NICs, SR, DockerProcess, DockerDetails
}
public void SwitchToTab(Tab tab)
@ -2004,6 +2026,9 @@ namespace XenAdmin
case Tab.Console:
TheTabControl.SelectedTab = TabPageConsole;
break;
case Tab.CvmConsole:
TheTabControl.SelectedTab = TabPageCvmConsole;
break;
case Tab.Performance:
TheTabControl.SelectedTab = TabPagePeformance;
break;
@ -2368,6 +2393,8 @@ namespace XenAdmin
return "TabPageSearch" + modelObj;
if (TheTabControl.SelectedTab == TabPageConsole)
return "TabPageConsole" + modelObj;
if (TheTabControl.SelectedTab == TabPageCvmConsole)
return "TabPageCvmConsole" + modelObj;
if (TheTabControl.SelectedTab == TabPageGeneral)
return "TabPageSettings" + modelObj;
if (TheTabControl.SelectedTab == TabPagePhysicalStorage || TheTabControl.SelectedTab == TabPageStorage || TheTabControl.SelectedTab == TabPageSR)

View File

@ -318,6 +318,30 @@
<data name="&gt;&gt;TabPageConsole.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="TabPageCvmConsole.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="TabPageCvmConsole.Size" type="System.Drawing.Size, System.Drawing">
<value>753, 592</value>
</data>
<data name="TabPageCvmConsole.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="TabPageCvmConsole.Text" xml:space="preserve">
<value>CVM Console</value>
</data>
<data name="&gt;&gt;TabPageCvmConsole.Name" xml:space="preserve">
<value>TabPageCvmConsole</value>
</data>
<data name="&gt;&gt;TabPageCvmConsole.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TabPageCvmConsole.Parent" xml:space="preserve">
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageCvmConsole.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="TabPageStorage.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@ -349,7 +373,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageStorage.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="TabPagePhysicalStorage.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -376,7 +400,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPagePhysicalStorage.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="TabPageSR.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
@ -406,7 +430,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageSR.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="TabPageNetwork.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -436,7 +460,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageNetwork.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="TabPageNICs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -469,7 +493,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageNICs.ZOrder" xml:space="preserve">
<value>9</value>
<value>10</value>
</data>
<data name="TabPagePeformance.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -499,7 +523,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPagePeformance.ZOrder" xml:space="preserve">
<value>10</value>
<value>11</value>
</data>
<data name="TabPageHA.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -526,7 +550,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageHA.ZOrder" xml:space="preserve">
<value>11</value>
<value>12</value>
</data>
<data name="TabPageHAUpsell.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -553,7 +577,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageHAUpsell.ZOrder" xml:space="preserve">
<value>12</value>
<value>13</value>
</data>
<data name="snapshotPage.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
@ -610,7 +634,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageSnapshots.ZOrder" xml:space="preserve">
<value>13</value>
<value>14</value>
</data>
<data name="TabPageWLB.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -634,7 +658,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageWLB.ZOrder" xml:space="preserve">
<value>14</value>
<value>15</value>
</data>
<data name="TabPageWLBUpsell.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -658,7 +682,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageWLBUpsell.ZOrder" xml:space="preserve">
<value>15</value>
<value>16</value>
</data>
<data name="TabPageAD.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -682,7 +706,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageAD.ZOrder" xml:space="preserve">
<value>16</value>
<value>17</value>
</data>
<data name="TabPageADUpsell.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -709,7 +733,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageADUpsell.ZOrder" xml:space="preserve">
<value>17</value>
<value>18</value>
</data>
<data name="TabPageGPU.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -733,7 +757,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageGPU.ZOrder" xml:space="preserve">
<value>18</value>
<value>19</value>
</data>
<data name="TabPageSearch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -763,7 +787,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageSearch.ZOrder" xml:space="preserve">
<value>19</value>
<value>20</value>
</data>
<data name="TabPageDockerProcess.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -793,7 +817,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageDockerProcess.ZOrder" xml:space="preserve">
<value>20</value>
<value>21</value>
</data>
<data name="TabPageDockerDetails.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -823,7 +847,7 @@
<value>TheTabControl</value>
</data>
<data name="&gt;&gt;TabPageDockerDetails.ZOrder" xml:space="preserve">
<value>21</value>
<value>22</value>
</data>
<data name="TheTabControl.Font" type="System.Drawing.Font, System.Drawing">
<value>Verdana, 8.25pt</value>
@ -1985,23 +2009,22 @@
</data>
<data name="powerOnToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA
CvIBPVL3EQAAAzRJREFUOE9tk21Mk1cYht9/BeGPYguzfsTFTzrnKAjO+bmZzLC5kCnQAHZKRVZGhcpa
EKGroWNStg4N1q0aSIYISjMx1BXCyhSDCmPpn20uuswumfHHEteK8SuGy/O+iwld9uM+yck59/PkPPd1
JCBOw8PD6sHBQUcgELja39//zO/3P+vp6bna1dXl6OjoUP/3ftxGmG3fDV3EN+Ll01EHNVfMfHTZxIFg
BY3+Ory+47S3t9tmemaavX2hs7jGDmEbs1D6fSFVo/swXzKSG9jMjuDb7Ox/h8YT9bjdbm9cAWF2nxk5
Tf21aiou72HnYC7bL77Fg6dTTAlln1uB7sxC1vals86/GkubGafT6VYKCLM2MDRA/ZiVvSPFlP1Qwm/3
fiFfFJl6el/RpvN6wn9PsubsSlZ2LuCNzgzsjTbsdrtWEgNzHQt5sIyaRNc3uXHvZ6XrlvNZ3PjjV0Xp
3VpiT2L8ePc6aW1J5JxcRX5zHlar1SWJaYdrQ1W8L97YMFZDLBbj49EKlp1OFaYo0cdRNCcSMQ0UKWcf
9BWyuEXDZvfrVFZWhiUR1ZPSkIGN32bgnTjK75FbLO3SML8zWTHLUrcloGlN4tbtmxwJNpHqSCbnyGuU
l5dHJZFztCSYR9a55bRPePjzToR5HclovkpEfSwB9RcJzP1MFGiaReSvCK3BZtS2JLKbXsVkMk1JApJw
yYUd6HuXiMh2Mz09TdnQLqXr3NYEUpqFnCpMvcXKWek3xSy0q1lfn43RaAxLgjDX/p4PlXhe+jqZn+5O
EH0UxTxQSkqTijkOFWW9RqIP/2EyMk6KJZFMh45tlVspKipySQJP7VFfGxu6M1nu06L3rWDyzoTSbaYm
b4+zumEZL1fPI6tuFYUlBRQUFGgVkASe7gPHq5R40r9chMY5i93dBjwhN57hFoynDMwxJ7LUOh99bTrb
Tbmy+V+Q5EWWjGd1i4VNnhyyPn+FxQ1pzK5SMbtCxaLqVPQHdaytyeC9Pe/K5niUX0jgaatrqCXfkccW
xzoyP9GReUjH+ppstpm3Yig2yOb//0wvJPBME4QdFpCMi5zlqORpj4uBHRbmtPj7SM8BGG2BcDWQi8oA
AAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAADNElE
QVQ4T22TbUyTVxiG338F4Y9iC7N+xMVPOucoCM75uZnMsLmQKdAAdkpFVkaFyloQoauhY1K2Dg3WrRpI
hghKMzHUFcLKFIMKY+mfbS66zC6Z8ccS14rxK4bL876LCV324z7JyTn38+Q893UkIE7Dw8PqwcFBRyAQ
uNrf3//M7/c/6+npudrV1eXo6OhQ//d+3EaYbd8NXcQ34uXTUQc1V8x8dNnEgWAFjf46vL7jtLe322Z6
Zpq9faGzuMYOYRuzUPp9IVWj+zBfMpIb2MyO4Nvs7H+HxhP1uN1ub1wBYXafGTlN/bVqKi7vYedgLtsv
vsWDp1NMCWWfW4HuzELW9qWzzr8aS5sZp9PpVgoIszYwNED9mJW9I8WU/VDCb/d+IV8UmXp6X9Gm83rC
f0+y5uxKVnYu4I3ODOyNNux2u1YSA3MdC3mwjJpE1ze5ce9npeuW81nc+ONXRendWmJPYvx49zppbUnk
nFxFfnMeVqvVJYlph2tDVbwv3tgwVkMsFuPj0QqWnU4VpijRx1E0JxIxDRQpZx/0FbK4RcNm9+tUVlaG
JRHVk9KQgY3fZuCdOMrvkVss7dIwvzNZMctStyWgaU3i1u2bHAk2kepIJufIa5SXl0clkXO0JJhH1rnl
tE94+PNOhHkdyWi+SkR9LAH1FwnM/UwUaJpF5K8IrcFm1LYksptexWQyTUkCknDJhR3oe5eIyHYzPT1N
2dAupevc1gRSmoWcKky9xcpZ6TfFLLSrWV+fjdFoDEuCMNf+ng+VeF76Opmf7k4QfRTFPFBKSpOKOQ4V
Zb1Gog//YTIyToolkUyHjm2VWykqKnJJAk/tUV8bG7ozWe7TovetYPLOhNJtpiZvj7O6YRkvV88jq24V
hSUFFBQUaBWQBJ7uA8erlHjSv1yExjmL3d0GPCE3nuEWjKcMzDEnstQ6H31tOttNubL5X5DkRZaMZ3WL
hU2eHLI+f4XFDWnMrlIxu0LFoupU9Ad1rK3J4L0978rmeJRfSOBpq2uoJd+RxxbHOjI/0ZF5SMf6mmy2
mbdiKDbI5v//TC8k8EwThB0WkIyLnOWo5GmPi4EdFua0+PtIzwEYbYFwNZCLygAAAABJRU5ErkJggg==
</value>
</data>
<data name="powerOnToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
@ -2015,22 +2038,21 @@
</data>
<data name="ShutdownHostToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA
CvIBPVL3EQAAAvVJREFUOE9tU1tIk2EY/kW9VcRTsgvTi6TEC01E0As1ETQUCZ06dCBTJjoJL6YiJAvF
cEwUnWJkUlqZMkg8lGkWUcxTOtM5T/N0Y1fhpiEdlk/P/4fgoovnP7zv83zv973v8wkA3DA1NRU4MTFR
PzY2Zh4eHnaZTCbXwMCAub+/v763tzfwX77bD8XayfFxLHR0wFZXhz2VCjtFRbCUluKNVouezk4YjUbt
Rc1FcdeH589hr6nBflkZ7NnZ2Csuxk5BAWzx8dhMSsJSWhoe1dZCr9d3uS1Asd7c14eDigrsFhZi48YN
rCcm4vfJCVzHx1i5fBnLQUFYCQ/HakQEetRq6HQ6vbQAxbKp0VHsVlbCnpMDu1yOU6sVm6mpktjldMIa
GYlv8/NYDgvDTGAg3l+7Bh2PVF1dLRPYsMYFgwF7POt6QgJOV1cloTUqCgc2Gw7W1rDs7w+XwwGn2YxJ
T09MX7mC7sxMVFVVNQrstmWtvBwbycnYvX0bTla0s2lLvr74dXQk4SNPasnNlXLmW7dgYq4/NhYajcYi
cFQ/thi0clvbLS042N7Gko8PPrGSKP5JvOYCo/zf39rCrE6Hx97eeEK+Wq12CJyzYz0jAyuhodjR6/Fl
fx8LJItVp4mXxAtiiLFD5mYaGtDt5YWHV69CpVKdCDSJZTErC59lMuwoFDg7O4MtLw+TFI0RJuIZ8Y4x
MfeK704eoTU6Gkql0iLQYY2TJSXSeMys4pidlba9yKYOUdgnirnwd8a+MGcgp5tNrGPPFApFo0B7ynrb
2jDLUb0LCMBbjuoriWK1izhkrJu5FnJauX0lxy2Xy2WSkWhP/SONRhrPSEgInrLKW3piqakJC8QIv+8x
ZggORhs55enpovivkcSHCNGe7XTiYEwMBkl64OeHVg8PNBMGfrcz1kxvlN28KYrdrXwO2lN7h3fBwKYa
4+JwnyIj0XT9OrQpKSjMzxfF/79M56A9L9Fhd2mSOc5ZHJXY7Tk27C7Fl9z5EP4AZymF8JGogOsAAAAA
SUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAC9UlE
QVQ4T21TW0iTYRj+Rb1VxFOyC9OLpMQLTUTQCzURNBQJnTp0IFMmOgkvpiIkC8VwTBSdYmRSWpkySDyU
aRZRzFM60zlP83RjV+GmIR2WT8//h+Cii+c/vO/zfO/3ve/zCQDcMDU1FTgxMVE/NjZmHh4edplMJtfA
wIC5v7+/vre3N/BfvtsPxdrJ8XEsdHTAVleHPZUKO0VFsJSW4o1Wi57OThiNRu1FzUVx14fnz2GvqcF+
WRns2dnYKy7GTkEBbPHx2ExKwlJaGh7V1kKv13e5LUCx3tzXh4OKCuwWFmLjxg2sJybi98kJXMfHWLl8
GctBQVgJD8dqRAR61GrodDq9tADFsqnRUexWVsKekwO7XI5TqxWbqamS2OV0whoZiW/z81gOC8NMYCDe
X7sGHY9UXV0tE9iwxgWDAXs863pCAk5XVyWhNSoKBzYbDtbWsOzvD5fDAafZjElPT0xfuYLuzExUVVU1
Cuy2Za28HBvJydi9fRtOVrSzaUu+vvh1dCThI09qyc2VcuZbt2Birj82FhqNxiJwVD+2GLRyW9stLTjY
3saSjw8+sZIo/km85gKj/N/f2sKsTofH3t54Qr5arXYInLNjPSMDK6Gh2NHr8WV/Hwski1WniZfEC2KI
sUPmZhoa0O3lhYdXr0KlUp0INIllMSsLn2Uy7CgUODs7gy0vD5MUjREm4hnxjjEx94rvTh6hNToaSqXS
ItBhjZMlJdJ4zKzimJ2Vtr3Ipg5R2CeKufB3xr4wZyCnm02sY88UCkWjQHvKetvaMMtRvQsIwFuO6iuJ
YrWLOGSsm7kWclq5fSXHLZfLZZKRaE/9I41GGs9ISAiesspbemKpqQkLxAi/7zFmCA5GGznl6emi+K+R
xIcI0Z7tdOJgTAwGSXrg54dWDw80EwZ+tzPWTG+U3bwpit2tfA7aU3uHd8HAphrj4nCfIiPRdP06tCkp
KMzPF8X/v0znoD0v0WF3aZI5zlkcldjtOTbsLsWX3PkQ/gBnKYXwkaiA6wAAAABJRU5ErkJggg==
</value>
</data>
<data name="ShutdownHostToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">

View File

@ -275,19 +275,20 @@ namespace XenAdmin.SettingsPanels
// Dom0 memory usage is stored in the other_config of the Dom0 vm not on the host (or any other XenObject)
try
{
if (_XenObject is Host)
var host = _XenObject as Host;
if (host != null)
{
var controlDomain = (_XenObject as Host).ControlDomain;
var dom0 = host.ControlDomainZero;
if (controlDomain != null)
if (dom0 != null)
{
var controlDomainPerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(controlDomain);
var controlDomainPerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(dom0);
if (controlDomainPerfmonDefinitions != null)
{
for (int ii = 0; ii < controlDomainPerfmonDefinitions.Length; ii++)
for (int i = 0; i < controlDomainPerfmonDefinitions.Length; i++)
{
var def = controlDomainPerfmonDefinitions[ii];
var def = controlDomainPerfmonDefinitions[i];
if (def != null && def.IsDom0MemoryUsage)
dom0MemoryAlert.Populate(def);

View File

@ -67,7 +67,6 @@ namespace XenAdmin.TabPages
TitleLabel.ForeColor = Program.HeaderGradientForeColor;
TitleLabel.Font = Program.HeaderGradientFont;
multipleDvdIsoList1.linkLabel1.LinkColor = Color.FromArgb(0, 0, 255);
dataGridViewStorage.SortCompare += new DataGridViewSortCompareEventHandler(dataGridViewStorage_SortCompare);
dataGridViewStorage.Sort(ColumnDevicePosition, ListSortDirection.Ascending);
}

View File

@ -154,6 +154,9 @@
<Compile Include="Controls\ComboBoxes\CPUTopologyComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\ConsolePanel.Designer.cs">
<DependentUpon>ConsolePanel.cs</DependentUpon>
</Compile>
<Compile Include="Controls\DataGridViewEx\DataGridViewEx.cs">
<SubType>Component</SubType>
</Compile>

View File

@ -74,7 +74,7 @@ namespace XenAdmin.Actions
{
perfmonDefinitions.Remove(dom0_memory_usage);
var dom0Vm = theHost == null ? null : theHost.ControlDomain;
var dom0Vm = theHost == null ? null : theHost.ControlDomainZero;
if (dom0Vm != null)
{
var dom0PerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(dom0Vm).ToList();
@ -102,7 +102,7 @@ namespace XenAdmin.Actions
}
else
{
var dom0Vm = theHost == null ? null : theHost.ControlDomain;
var dom0Vm = theHost == null ? null : theHost.ControlDomainZero;
if (dom0Vm != null)
{
var dom0PerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(dom0Vm).ToList();

View File

@ -1463,22 +1463,22 @@ namespace XenAdmin.Core
public static string GetNameAndObject(IXenObject XenObject)
{
if (XenObject is Pool)
return string.Format(Messages.POOL_X, Helpers.GetName(XenObject));
return string.Format(Messages.POOL_X, GetName(XenObject));
if (XenObject is Host)
return string.Format(Messages.SERVER_X, Helpers.GetName(XenObject));
return string.Format(Messages.SERVER_X, GetName(XenObject));
if (XenObject is VM)
{
VM vm = (VM)XenObject;
if (vm.is_control_domain)
return string.Format(Messages.SERVER_X, Helpers.GetName(XenObject.Connection.Resolve(vm.resident_on)));
if (vm.IsControlDomainZero)
return string.Format(Messages.SERVER_X, GetName(XenObject.Connection.Resolve(vm.resident_on)));
else
return string.Format(Messages.VM_X, Helpers.GetName(XenObject));
return string.Format(Messages.VM_X, GetName(XenObject));
}
if (XenObject is SR)
return string.Format(Messages.STORAGE_REPOSITORY_X, Helpers.GetName(XenObject));
return string.Format(Messages.STORAGE_REPOSITORY_X, GetName(XenObject));
return Messages.UNKNOWN_OBJECT;
}

View File

@ -1038,18 +1038,46 @@ namespace XenAPI
/// <summary>
/// Will return null if cannot find connection or any control domain in list of vms
/// </summary>
public VM ControlDomain
public VM ControlDomainZero
{
get
{
if (Connection == null)
return null;
foreach (VM vm in Connection.ResolveAll<VM>(resident_VMs))
{
if (vm.is_control_domain)
return vm;
}
return null;
if (Helpers.DundeePlusOrGreater(Connection))
return Connection.Resolve(control_domain);
var vms = Connection.ResolveAll(resident_VMs);
return vms.FirstOrDefault(vm => vm.is_control_domain && vm.domid == 0);
}
}
public bool HasManyControlDomains
{
get
{
if (Connection == null)
return false;
var vms = Connection.ResolveAll(resident_VMs);
return vms.FindAll(v => v.is_control_domain).Count > 1;
}
}
public IEnumerable<VM> OtherControlDomains
{
get
{
if (Connection == null)
return null;
var vms = Connection.ResolveAll(resident_VMs);
if (Helpers.DundeePlusOrGreater(Connection))
return vms.Where(v => v.is_control_domain && v.opaque_ref != control_domain);
return vms.Where(v => v.is_control_domain && v.domid != 0);
}
}

View File

@ -63,7 +63,7 @@ namespace XenAPI
private const int DEFAULT_NUM_VBDS_ALLOWED = 16;
public const long DEFAULT_MEM_ALLOWED = 1 * Util.BINARY_TERA;
public const int DEFAULT_CORES_PER_SOCKET = 1;
public const long MAX_SOCKETS = 16; // current hard limit in Xen: CA-198276
public const long MAX_SOCKETS = 16; // current hard limit in Xen: CA-198276
private SnapshotsView _snapshotView = SnapshotsView.None;
@ -1472,6 +1472,29 @@ namespace XenAPI
}
}
/// <summary>
/// Checks whether the VM is the dom0 (the flag is_control_domain may also apply to other control domains)
/// </summary>
public bool IsControlDomainZero
{
get
{
if (!is_control_domain)
return false;
var host = Connection.Resolve(resident_on);
if (host == null)
return false;
if (Helpers.DundeePlusOrGreater(Connection))
return host.control_domain == opaque_ref;
var vms = Connection.ResolveAll(host.resident_VMs);
var first = vms.FirstOrDefault(vm => vm.is_control_domain && vm.domid == 0);
return first != null && first.opaque_ref == opaque_ref;
}
}
public bool not_a_real_vm
{
get { return is_a_snapshot || is_a_template || is_control_domain; }