mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-11-25 14:27:26 +01:00
Merge pull request #1054 from kc284/car-2217
CP-17756: use new field Host.control_domain to find dom0
This commit is contained in:
commit
605511908c
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1,2 +1,3 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* -crlf
|
||||
*.sh text eol=lf
|
||||
|
8
XenAdmin/ConsoleView/VNCTabView.Designer.cs
generated
8
XenAdmin/ConsoleView/VNCTabView.Designer.cs
generated
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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
109
XenAdmin/Controls/ConsolePanel.Designer.cs
generated
Normal 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;
|
||||
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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=">>errorLabel.Name" xml:space="preserve">
|
||||
<value>errorLabel</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>pictureBox2.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
<value>tableLayoutPanelRbac</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>lableRbacWarning.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
<value>tableLayoutPanelRbac</value>
|
||||
</data>
|
||||
<data name=">>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=">>tableLayoutPanel3.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name=">>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=">>tableLayoutPanel3.Parent" xml:space="preserve">
|
||||
<value>RbacWarningPanel</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel3.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="pictureBox2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lableRbacWarning" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="Percent,100" /></TableLayoutSettings></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=">>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=">>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=">>RbacWarningPanel.Parent" xml:space="preserve">
|
||||
<data name=">>tableLayoutPanelRbac.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanelRbac</value>
|
||||
</data>
|
||||
<data name=">>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=">>tableLayoutPanelRbac.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>RbacWarningPanel.ZOrder" xml:space="preserve">
|
||||
<data name=">>tableLayoutPanelRbac.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelRbac.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="pictureBox2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lableRbacWarning" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="Percent,100,Absolute,20" /></TableLayoutSettings></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=">>pictureBox1.Name" xml:space="preserve">
|
||||
<value>pictureBox1</value>
|
||||
</data>
|
||||
<data name=">>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=">>pictureBox1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanelError</value>
|
||||
</data>
|
||||
<data name=">>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=">>errorLabel.Name" xml:space="preserve">
|
||||
<value>errorLabel</value>
|
||||
</data>
|
||||
<data name=">>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=">>errorLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanelError</value>
|
||||
</data>
|
||||
<data name=">>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=">>tableLayoutPanelError.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanelError</value>
|
||||
</data>
|
||||
<data name=">>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=">>tableLayoutPanelError.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanelError.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelError.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="errorLabel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0" /></TableLayoutSettings></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=">>$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>
|
@ -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;
|
||||
|
||||
|
167
XenAdmin/Controls/MultipleDvdIsoList.Designer.cs
generated
167
XenAdmin/Controls/MultipleDvdIsoList.Designer.cs
generated
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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=">>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=">>labelSingleDvd.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -196,7 +199,7 @@
|
||||
<value>newCDLabel</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>comboBoxDrive.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -301,7 +307,7 @@
|
||||
<value>linkLabel1</value>
|
||||
</data>
|
||||
<data name=">>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=">>linkLabel1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
@ -331,7 +337,7 @@
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>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=">>panel1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -358,7 +364,7 @@
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>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=">>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><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelSingleDvd" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="comboBoxDrive" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="newCDLabel" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="panel1" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0,Percent,100,AutoSize,0" /><Rows Styles="AutoSize,0,Percent,100" /></TableLayoutSettings></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=">>$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>
|
19
XenAdmin/MainWindow.Designer.cs
generated
19
XenAdmin/MainWindow.Designer.cs
generated
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -318,6 +318,30 @@
|
||||
<data name=">>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=">>TabPageCvmConsole.Name" xml:space="preserve">
|
||||
<value>TabPageCvmConsole</value>
|
||||
</data>
|
||||
<data name=">>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=">>TabPageCvmConsole.Parent" xml:space="preserve">
|
||||
<value>TheTabControl</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>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">
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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; }
|
||||
|
Loading…
Reference in New Issue
Block a user