mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2025-01-20 15:29:26 +01:00
Merge pull request #1141 from GaborApatiNagy/CP-18014
CP-18014 + Merge master
This commit is contained in:
commit
9acf3950fd
92
XenAdmin/Actions/GUIActions/RestoreDismissedUpdatesAction.cs
Normal file
92
XenAdmin/Actions/GUIActions/RestoreDismissedUpdatesAction.cs
Normal file
@ -0,0 +1,92 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using XenAdmin.Network;
|
||||
using XenAdmin.Core;
|
||||
using System.Linq;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.Actions
|
||||
{
|
||||
public class RestoreDismissedUpdatesAction : AsyncAction
|
||||
{
|
||||
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
public RestoreDismissedUpdatesAction(IXenConnection connection)
|
||||
: base(connection, "restore_dismissed_updates", "restore_dismissed_updates", true)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Run()
|
||||
{
|
||||
if (!AllowedToRestoreDismissedUpdates())
|
||||
return;
|
||||
|
||||
XenAPI.Pool pool = Helpers.GetPoolOfOne(Connection);
|
||||
if (pool == null)
|
||||
return;
|
||||
|
||||
Dictionary<string, string> other_config = pool.other_config;
|
||||
|
||||
if (other_config.ContainsKey(IgnorePatchAction.IgnorePatchKey))
|
||||
other_config.Remove(IgnorePatchAction.IgnorePatchKey);
|
||||
|
||||
if (other_config.ContainsKey(IgnoreServerAction.LAST_SEEN_SERVER_VERSION_KEY))
|
||||
other_config.Remove(IgnoreServerAction.LAST_SEEN_SERVER_VERSION_KEY);
|
||||
|
||||
|
||||
XenAPI.Pool.set_other_config(Connection.Session, pool.opaque_ref, other_config);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks the user has sufficient RBAC privileges to restore dismissed alerts on a given connection
|
||||
/// </summary>
|
||||
private bool AllowedToRestoreDismissedUpdates()
|
||||
{
|
||||
if (Connection == null || Connection.Session == null)
|
||||
return false;
|
||||
|
||||
if (Connection.Session.IsLocalSuperuser)
|
||||
return true;
|
||||
|
||||
List<Role> rolesAbleToCompleteAction = Role.ValidRoleList("Pool.set_other_config", Connection);
|
||||
foreach (Role possibleRole in rolesAbleToCompleteAction)
|
||||
{
|
||||
if (Connection.Session.Roles.Contains(possibleRole))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -38,7 +38,7 @@ using XenAPI;
|
||||
namespace XenAdmin.Commands
|
||||
{
|
||||
/// <summary>
|
||||
/// The command for the 'Home Server' subitem which is shown when WLB isn't enabled in the submenu for start-on, resume-on or migrate.
|
||||
/// The command for the 'Target Server' subitem which is shown when WLB isn't enabled in the submenu for start-on, resume-on or migrate.
|
||||
/// </summary>
|
||||
internal class CrossPoolMigrateToHomeCommand : CrossPoolMigrateCommand
|
||||
{
|
||||
|
@ -71,7 +71,7 @@ namespace XenAdmin.Commands
|
||||
|
||||
protected override bool CanExecuteCore(SelectedItemCollection selection)
|
||||
{
|
||||
return _connection != null && _connection.IsConnected;
|
||||
return _connection != null && (_connection.IsConnected || _connection.InProgress);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -150,7 +150,7 @@ namespace XenAdmin.Commands
|
||||
DialogResult dr = new InstallToolsWarningDialog(vm.Connection).ShowDialog(Parent);
|
||||
if (dr == DialogResult.Yes)
|
||||
{
|
||||
InstallPVToolsAction installToolsAction = new InstallPVToolsAction( vm, XSToolsSRNotFound, Properties.Settings.Default.ShowHiddenVMs);
|
||||
var installToolsAction = new InstallPVToolsAction(vm, Properties.Settings.Default.ShowHiddenVMs);
|
||||
installToolsAction.Completed += InstallToolsActionCompleted;
|
||||
|
||||
installToolsAction.RunAsync();
|
||||
@ -160,18 +160,6 @@ namespace XenAdmin.Commands
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void XSToolsSRNotFound()
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, delegate
|
||||
{
|
||||
using (var dlg = new ThreeButtonDialog(
|
||||
new ThreeButtonDialog.Details(SystemIcons.Error, Messages.XS_TOOLS_SR_NOT_FOUND, Messages.XENCENTER)))
|
||||
{
|
||||
dlg.ShowDialog(Program.MainWindow);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to install tools on several VMs
|
||||
/// </summary>
|
||||
@ -225,7 +213,7 @@ namespace XenAdmin.Commands
|
||||
{
|
||||
foreach (VM vm in vms)
|
||||
{
|
||||
InstallPVToolsAction installToolsAction = new InstallPVToolsAction(vm, XSToolsSRNotFound, Properties.Settings.Default.ShowHiddenVMs);
|
||||
var installToolsAction = new InstallPVToolsAction(vm, Properties.Settings.Default.ShowHiddenVMs);
|
||||
|
||||
if (vms.IndexOf(vm) == 0)
|
||||
{
|
||||
|
@ -379,6 +379,11 @@ namespace XenAdmin.Core
|
||||
get { return ReadInstalledKey(ADDITIONAL_FEATURES); }
|
||||
}
|
||||
|
||||
public static string CustomUpdatesXmlLocation
|
||||
{
|
||||
get { return ReadKey(CUSTOM_UPDATES_XML_LOCATION); }
|
||||
}
|
||||
|
||||
private const string SSL_CERTIFICATES_CHANGED_ONLY = "CHANGED";
|
||||
private const string SSL_CERTIFICATES_ALL = "ALL";
|
||||
private const string SSL_CERTIFICATES_KEY = "ForceSSLCertificates";
|
||||
@ -402,6 +407,7 @@ namespace XenAdmin.Core
|
||||
private const string HEALTH_CHECK_PRODUCT_KEY = "HealthCheckProductKey";
|
||||
private const string HIDDEN_FEATURES = "HiddenFeatures";
|
||||
private const string ADDITIONAL_FEATURES = "AdditionalFeatures";
|
||||
private const string CUSTOM_UPDATES_XML_LOCATION = "CheckForUpdatesXmlLocationOverride";
|
||||
}
|
||||
|
||||
public enum SSLCertificateTypes { None, Changed, All }
|
||||
|
@ -37,7 +37,7 @@ using XenAdmin.Actions;
|
||||
using XenAPI;
|
||||
using XenAdmin.Alerts;
|
||||
using XenAdmin.Network;
|
||||
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace XenAdmin.Core
|
||||
{
|
||||
@ -47,12 +47,13 @@ namespace XenAdmin.Core
|
||||
|
||||
public static event Action<bool, string> CheckForUpdatesCompleted;
|
||||
public static event Action CheckForUpdatesStarted;
|
||||
public static event Action RestoreDismissedUpdatesStarted;
|
||||
|
||||
private static readonly object downloadedUpdatesLock = new object();
|
||||
private static List<XenServerVersion> XenServerVersionsForAutoCheck = new List<XenServerVersion>();
|
||||
private static List<XenServerPatch> XenServerPatches = new List<XenServerPatch>();
|
||||
private static List<XenCenterVersion> XenCenterVersions = new List<XenCenterVersion>();
|
||||
private static List<XenServerVersion> XenServerVersions = new List<XenServerVersion>();
|
||||
public static List<XenServerVersion> XenServerVersions = new List<XenServerVersion>();
|
||||
|
||||
private static readonly object updateAlertsLock = new object();
|
||||
private static readonly ChangeableList<Alert> updateAlerts = new ChangeableList<Alert>();
|
||||
@ -197,10 +198,9 @@ namespace XenAdmin.Core
|
||||
Properties.Settings.Default.AllowXenCenterUpdates || force,
|
||||
Properties.Settings.Default.AllowXenServerUpdates || force,
|
||||
Properties.Settings.Default.AllowPatchesUpdates || force,
|
||||
Branding.CheckForUpdatesUrl);
|
||||
{
|
||||
action.Completed += actionCompleted;
|
||||
}
|
||||
Updates.CheckForUpdatesUrl);
|
||||
|
||||
action.Completed += actionCompleted;
|
||||
|
||||
if (CheckForUpdatesStarted != null)
|
||||
CheckForUpdatesStarted();
|
||||
@ -208,7 +208,15 @@ namespace XenAdmin.Core
|
||||
action.RunAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static string CheckForUpdatesUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
return Registry.CustomUpdatesXmlLocation ?? Branding.CheckForUpdatesUrl;
|
||||
}
|
||||
}
|
||||
|
||||
private static void actionCompleted(ActionBase sender)
|
||||
{
|
||||
Program.AssertOffEventThread();
|
||||
@ -405,6 +413,229 @@ namespace XenAdmin.Core
|
||||
|
||||
return alerts;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method returns the minimal set of patches for a host if this class already has information about them. Otherwise it returns empty list.
|
||||
/// Calling this function will not initiate a download or update.
|
||||
/// </summary>
|
||||
/// <param name="host"></param>
|
||||
/// <returns></returns>
|
||||
public static List<XenServerPatch> RecommendedPatchesForHost(Host host)
|
||||
{
|
||||
var recommendedPatches = new List<XenServerPatch>();
|
||||
|
||||
if (XenServerVersions == null)
|
||||
return recommendedPatches;
|
||||
|
||||
var serverVersions = XenServerVersions.FindAll(version =>
|
||||
{
|
||||
if (version.BuildNumber != string.Empty)
|
||||
return (host.BuildNumberRaw == version.BuildNumber);
|
||||
|
||||
return Helpers.HostProductVersionWithOEM(host) == version.VersionAndOEM
|
||||
|| (version.Oem != null && Helpers.OEMName(host).StartsWith(version.Oem)
|
||||
&& Helpers.HostProductVersion(host) == version.Version.ToString());
|
||||
});
|
||||
|
||||
if (serverVersions.Count != 0)
|
||||
{
|
||||
var minimumPatches = serverVersions[0].MinimalPatches;
|
||||
|
||||
if (minimumPatches == null) //unknown
|
||||
return recommendedPatches;
|
||||
|
||||
var appliedPatches = host.AppliedPatches();
|
||||
recommendedPatches = minimumPatches.FindAll(p => !appliedPatches.Any(ap => string.Equals(ap.uuid, p.Uuid, StringComparison.OrdinalIgnoreCase)));
|
||||
|
||||
}
|
||||
|
||||
return recommendedPatches;
|
||||
}
|
||||
|
||||
public static UpgradeSequence GetUpgradeSequence(IXenConnection conn)
|
||||
{
|
||||
return GetUpgradeSequence(conn, XenServerVersions);
|
||||
}
|
||||
|
||||
public static UpgradeSequence GetUpgradeSequence(IXenConnection conn, List<XenServerVersion> xsVersions)
|
||||
{
|
||||
if (xsVersions == null)
|
||||
return null;
|
||||
|
||||
Host master = Helpers.GetMaster(conn);
|
||||
if (master == null)
|
||||
return null;
|
||||
|
||||
var version = GetCommonServerVersionOfHostsInAConnection(conn, xsVersions);
|
||||
|
||||
if (version != null)
|
||||
{
|
||||
if (version.MinimalPatches == null)
|
||||
return null;
|
||||
|
||||
var uSeq = new UpgradeSequence();
|
||||
uSeq.MinimalPatches = version.MinimalPatches;
|
||||
|
||||
List<Host> hosts = conn.Cache.Hosts.ToList();
|
||||
|
||||
foreach (Host h in hosts)
|
||||
{
|
||||
uSeq[h] = GetUpgradeSequenceForHost(h, uSeq.MinimalPatches);
|
||||
}
|
||||
|
||||
return uSeq;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a XenServerVersion if all hosts of the pool have the same version
|
||||
/// Returns null if it is unknown or they don't match
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private static XenServerVersion GetCommonServerVersionOfHostsInAConnection(IXenConnection connection, List<XenServerVersion> xsVersions)
|
||||
{
|
||||
XenServerVersion commonXenServerVersion = null;
|
||||
|
||||
if (connection == null)
|
||||
return null;
|
||||
|
||||
List<Host> hosts = connection.Cache.Hosts.ToList();
|
||||
|
||||
foreach (Host host in hosts)
|
||||
{
|
||||
var hostVersions = xsVersions.FindAll(version =>
|
||||
{
|
||||
if (version.BuildNumber != string.Empty)
|
||||
return (host.BuildNumberRaw == version.BuildNumber);
|
||||
|
||||
return Helpers.HostProductVersionWithOEM(host) == version.VersionAndOEM
|
||||
|| (version.Oem != null && Helpers.OEMName(host).StartsWith(version.Oem)
|
||||
&& Helpers.HostProductVersion(host) == version.Version.ToString());
|
||||
});
|
||||
|
||||
var foundVersion = hostVersions.FirstOrDefault();
|
||||
|
||||
if (foundVersion == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (commonXenServerVersion == null)
|
||||
{
|
||||
commonXenServerVersion = foundVersion;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (commonXenServerVersion != foundVersion)
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return commonXenServerVersion;
|
||||
}
|
||||
|
||||
private static List<XenServerPatch> GetUpgradeSequenceForHost(Host h, List<XenServerPatch> latestPatches)
|
||||
{
|
||||
var sequence = new List<XenServerPatch>();
|
||||
var appliedPatches = h.AppliedPatches();
|
||||
|
||||
var neededPatches = new List<XenServerPatch>(latestPatches);
|
||||
|
||||
//Iterate through latestPatches once; in each iteration, move the first item from L0 that has its dependencies met to the end of the Update Schedule (US)
|
||||
for (int ii = 0; ii < neededPatches.Count; ii++)
|
||||
{
|
||||
var p = neededPatches[ii];
|
||||
|
||||
//checking requirements
|
||||
if (//not applied yet
|
||||
!appliedPatches.Any(ap => string.Equals(ap.uuid, p.Uuid, StringComparison.OrdinalIgnoreCase))
|
||||
// and either no requirements or they are meet
|
||||
&& (p.RequiredPatches == null
|
||||
|| p.RequiredPatches.Count == 0
|
||||
// all requirements met?
|
||||
|| p.RequiredPatches.All(
|
||||
rp =>
|
||||
//sequence already has the required-patch
|
||||
(sequence.Count != 0 && sequence.Any(useqp => string.Equals(useqp.Uuid, rp, StringComparison.OrdinalIgnoreCase)))
|
||||
|
||||
//the required-patch has already been applied
|
||||
|| (appliedPatches.Count != 0 && appliedPatches.Any(ap => string.Equals(ap.uuid, rp, StringComparison.OrdinalIgnoreCase)))
|
||||
)
|
||||
))
|
||||
{
|
||||
// this patch can be added to the upgrade sequence now
|
||||
sequence.Add(p);
|
||||
|
||||
// by now the patch has either been added to the upgrade sequence or something already contains it among the installed patches
|
||||
neededPatches.RemoveAt(ii);
|
||||
|
||||
//resetting position - the loop will start on 0. item
|
||||
ii = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return sequence;
|
||||
}
|
||||
|
||||
public class UpgradeSequence : Dictionary<Host, List<XenServerPatch>>
|
||||
{
|
||||
private IEnumerable<XenServerPatch> AllPatches
|
||||
{
|
||||
get
|
||||
{
|
||||
foreach (var patches in this.Values)
|
||||
foreach(var patch in patches)
|
||||
yield return patch;
|
||||
}
|
||||
}
|
||||
|
||||
public List<XenServerPatch> UniquePatches
|
||||
{
|
||||
get
|
||||
{
|
||||
var uniquePatches = new List<XenServerPatch>();
|
||||
|
||||
foreach (var mp in MinimalPatches)
|
||||
{
|
||||
if (AllPatches.Any(p => p.Uuid == mp.Uuid))
|
||||
{
|
||||
uniquePatches.Add(mp);
|
||||
}
|
||||
}
|
||||
|
||||
return uniquePatches;
|
||||
}
|
||||
}
|
||||
|
||||
public bool AllHostsUpToDate
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.Count == 0)
|
||||
return false;
|
||||
|
||||
foreach (var host in this.Keys)
|
||||
{
|
||||
if (this[host].Count > 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public List<XenServerPatch> MinimalPatches
|
||||
{
|
||||
set;
|
||||
get;
|
||||
}
|
||||
}
|
||||
|
||||
public static XenServerVersionAlert NewXenServerVersionAlert(List<XenServerVersion> xenServerVersions)
|
||||
{
|
||||
@ -473,53 +704,28 @@ namespace XenAdmin.Core
|
||||
|
||||
public static void RestoreDismissedUpdates()
|
||||
{
|
||||
foreach (IXenConnection _connection in ConnectionsManager.XenConnectionsCopy)
|
||||
{
|
||||
if (!AllowedToRestoreDismissedUpdates(_connection))
|
||||
continue;
|
||||
var actions = new List<AsyncAction>();
|
||||
foreach (IXenConnection connection in ConnectionsManager.XenConnectionsCopy)
|
||||
actions.Add(new RestoreDismissedUpdatesAction(connection));
|
||||
|
||||
XenAPI.Pool pool = Helpers.GetPoolOfOne(_connection);
|
||||
if (pool == null)
|
||||
continue;
|
||||
var action = new ParallelAction(Messages.RESTORE_DISMISSED_UPDATES, Messages.RESTORING, Messages.COMPLETED, actions, true, false);
|
||||
action.Completed += action_Completed;
|
||||
|
||||
Dictionary<string, string> other_config = pool.other_config;
|
||||
if (RestoreDismissedUpdatesStarted != null)
|
||||
RestoreDismissedUpdatesStarted();
|
||||
|
||||
if (other_config.ContainsKey(IgnorePatchAction.IgnorePatchKey))
|
||||
{
|
||||
other_config.Remove(IgnorePatchAction.IgnorePatchKey);
|
||||
}
|
||||
if (other_config.ContainsKey(IgnoreServerAction.LAST_SEEN_SERVER_VERSION_KEY))
|
||||
{
|
||||
other_config.Remove(IgnoreServerAction.LAST_SEEN_SERVER_VERSION_KEY);
|
||||
}
|
||||
|
||||
XenAPI.Pool.set_other_config(_connection.Session, pool.opaque_ref, other_config);
|
||||
}
|
||||
|
||||
Properties.Settings.Default.LatestXenCenterSeen = "";
|
||||
Settings.TrySaveSettings();
|
||||
|
||||
Updates.CheckForUpdates(true);
|
||||
action.RunAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks the user has sufficient RBAC privileges to restore dismissed alerts on a given connection
|
||||
/// </summary>
|
||||
public static bool AllowedToRestoreDismissedUpdates(IXenConnection c)
|
||||
private static void action_Completed(ActionBase action)
|
||||
{
|
||||
if (c == null || c.Session == null)
|
||||
return false;
|
||||
|
||||
if (c.Session.IsLocalSuperuser)
|
||||
return true;
|
||||
|
||||
List<Role> rolesAbleToCompleteAction = Role.ValidRoleList("Pool.set_other_config", c);
|
||||
foreach (Role possibleRole in rolesAbleToCompleteAction)
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
if (c.Session.Roles.Contains(possibleRole))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
Properties.Settings.Default.LatestXenCenterSeen = "";
|
||||
Settings.TrySaveSettings();
|
||||
|
||||
CheckForUpdates(true);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
93
XenAdmin/Diagnostics/Checks/DiskSpaceForBatchUpdatesCheck.cs
Normal file
93
XenAdmin/Diagnostics/Checks/DiskSpaceForBatchUpdatesCheck.cs
Normal file
@ -0,0 +1,93 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using XenAPI;
|
||||
using XenAdmin.Diagnostics.Problems;
|
||||
using XenAdmin.Core;
|
||||
using System.IO;
|
||||
using XenAdmin.Diagnostics.Problems.HostProblem;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml;
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Actions;
|
||||
using System.Linq;
|
||||
|
||||
|
||||
namespace XenAdmin.Diagnostics.Checks
|
||||
{
|
||||
class DiskSpaceForBatchUpdatesCheck : Check
|
||||
{
|
||||
private readonly long size = 0;
|
||||
|
||||
public DiskSpaceForBatchUpdatesCheck(Host host, long size)
|
||||
: base(host)
|
||||
{
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
protected override Problem RunCheck()
|
||||
{
|
||||
if (!Host.IsLive)
|
||||
return new HostNotLiveWarning(this, Host);
|
||||
|
||||
if (!Host.Connection.IsConnected)
|
||||
throw new EndOfStreamException(Helpers.GetName(Host.Connection));
|
||||
|
||||
if (Helpers.CreamOrGreater(Host.Connection))
|
||||
{
|
||||
var action = new GetDiskSpaceRequirementsAction(Host, size, true, DiskSpaceRequirements.OperationTypes.autoupdate);
|
||||
|
||||
try
|
||||
{
|
||||
action.RunExternal(action.Session);
|
||||
}
|
||||
catch
|
||||
{
|
||||
log.WarnFormat("Could not get disk space requirements");
|
||||
}
|
||||
|
||||
if (action.Succeeded && action.DiskSpaceRequirements.AvailableDiskSpace < size)
|
||||
return new HostOutOfSpaceProblem(this, Host, null, action.DiskSpaceRequirements);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
public override string Description
|
||||
{
|
||||
get { return Messages.SERVER_SIDE_CHECK_AUTO_MODE_DESCRIPTION; }
|
||||
}
|
||||
|
||||
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
}
|
||||
}
|
@ -53,6 +53,11 @@ namespace XenAdmin.Diagnostics.Checks
|
||||
|
||||
private readonly Dictionary<string, LivePatchCode> livePatchCodesByHost;
|
||||
|
||||
public PatchPrecheckCheck(Host host, Pool_patch patch)
|
||||
: this(host, patch, null)
|
||||
{
|
||||
}
|
||||
|
||||
public PatchPrecheckCheck(Host host, Pool_patch patch, Dictionary<string, LivePatchCode> livePatchCodesByHost)
|
||||
: base(host)
|
||||
{
|
||||
|
@ -39,7 +39,8 @@ using XenAdmin.Actions.VMActions;
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Dialogs;
|
||||
using System.Drawing;
|
||||
using System;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
|
||||
namespace XenAdmin.Diagnostics.Problems.HostProblem
|
||||
@ -59,10 +60,22 @@ namespace XenAdmin.Diagnostics.Problems.HostProblem
|
||||
public override string Description
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format(diskSpaceReq.Operation == DiskSpaceRequirements.OperationTypes.install
|
||||
? Messages.NOT_ENOUGH_SPACE_MESSAGE_INSTALL
|
||||
: Messages.NOT_ENOUGH_SPACE_MESSAGE_UPLOAD, Server.Name, patch.Name);
|
||||
{
|
||||
switch (diskSpaceReq.Operation)
|
||||
{
|
||||
case DiskSpaceRequirements.OperationTypes.install :
|
||||
return string.Format(Messages.NOT_ENOUGH_SPACE_MESSAGE_INSTALL, Server.Name, patch.Name);
|
||||
|
||||
case DiskSpaceRequirements.OperationTypes.upload :
|
||||
return string.Format(Messages.NOT_ENOUGH_SPACE_MESSAGE_UPLOAD, Server.Name, patch.Name);
|
||||
|
||||
case DiskSpaceRequirements.OperationTypes.autoupdate :
|
||||
return string.Format(Messages.NOT_ENOUGH_SPACE_MESSAGE_AUTO_UPDATE, Server.Name);
|
||||
|
||||
default:
|
||||
Debug.Assert(false);
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,6 @@ namespace XenAdmin.Dialogs
|
||||
private VMEnlightenmentEditPage VMEnlightenmentEditPage;
|
||||
private Page_CloudConfigParameters CloudConfigParametersPage;
|
||||
private SecurityEditPage SecurityEditPage;
|
||||
private LivePatchingEditPage LivePatchingEditPage;
|
||||
#endregion
|
||||
|
||||
private IXenObject xenObject, xenObjectBefore, xenObjectCopy;
|
||||
@ -201,9 +200,6 @@ namespace XenAdmin.Dialogs
|
||||
if (is_pool_or_standalone && !Helpers.FeatureForbidden(xenObject.Connection, Host.RestrictSslLegacySwitch))
|
||||
ShowTab(SecurityEditPage = new SecurityEditPage());
|
||||
|
||||
if (is_pool_or_standalone && !Helpers.FeatureForbidden(xenObject.Connection, Host.RestrictLivePatching))
|
||||
ShowTab(LivePatchingEditPage = new LivePatchingEditPage());
|
||||
|
||||
if (is_network)
|
||||
ShowTab(editNetworkPage = new EditNetworkPage());
|
||||
|
||||
|
@ -2706,6 +2706,9 @@
|
||||
<data name="statusLabel.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name="statusLabel.ImageScaling" type="System.Windows.Forms.ToolStripItemImageScaling, System.Windows.Forms">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="statusLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>883, 22</value>
|
||||
</data>
|
||||
@ -3843,4 +3846,4 @@
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
||||
</root>
|
||||
|
@ -243,7 +243,7 @@ namespace XenAdmin.SettingsPanels
|
||||
{
|
||||
// Create the display label
|
||||
Label lblKey = new Label();
|
||||
lblKey.Text = customFieldDefinition.Name;
|
||||
lblKey.Text = customFieldDefinition.Name.EscapeAmpersands();
|
||||
lblKey.Margin = new Padding(3, 7, 3, 3);
|
||||
lblKey.Font = Program.DefaultFont;
|
||||
lblKey.Width = (int)tableLayoutPanel.ColumnStyles[0].Width;
|
||||
|
@ -84,10 +84,7 @@ namespace XenAdmin.SettingsPanels
|
||||
return;
|
||||
|
||||
Host currentAffinity = vm.Connection.Resolve(vm.affinity);
|
||||
picker.SetAffinity(vm.Connection, currentAffinity,
|
||||
vm.HasNoDisksAndNoLocalCD
|
||||
? null
|
||||
: vm.GetStorageHost(false));
|
||||
picker.SetAffinity(vm.Connection, currentAffinity, null);
|
||||
}
|
||||
|
||||
public bool ValidToSave
|
||||
|
@ -1,88 +0,0 @@
|
||||
namespace XenAdmin.SettingsPanels
|
||||
{
|
||||
partial class LivePatchingEditPage
|
||||
{
|
||||
/// <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(LivePatchingEditPage));
|
||||
this.radioButtonDisable = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonEnable = new System.Windows.Forms.RadioButton();
|
||||
this.labelRubric = new System.Windows.Forms.Label();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// radioButtonDisable
|
||||
//
|
||||
resources.ApplyResources(this.radioButtonDisable, "radioButtonDisable");
|
||||
this.radioButtonDisable.Name = "radioButtonDisable";
|
||||
this.radioButtonDisable.TabStop = true;
|
||||
this.radioButtonDisable.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// radioButtonEnable
|
||||
//
|
||||
resources.ApplyResources(this.radioButtonEnable, "radioButtonEnable");
|
||||
this.radioButtonEnable.Name = "radioButtonEnable";
|
||||
this.radioButtonEnable.TabStop = true;
|
||||
this.radioButtonEnable.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// labelRubric
|
||||
//
|
||||
resources.ApplyResources(this.labelRubric, "labelRubric");
|
||||
this.labelRubric.BackColor = System.Drawing.Color.Transparent;
|
||||
this.labelRubric.Name = "labelRubric";
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelRubric, 0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
//
|
||||
// LivePatchingEditPage
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Controls.Add(this.radioButtonDisable);
|
||||
this.Controls.Add(this.radioButtonEnable);
|
||||
this.Name = "LivePatchingEditPage";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.RadioButton radioButtonDisable;
|
||||
private System.Windows.Forms.RadioButton radioButtonEnable;
|
||||
private System.Windows.Forms.Label labelRubric;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
|
||||
}
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using XenAdmin.Actions;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.SettingsPanels
|
||||
{
|
||||
public partial class LivePatchingEditPage : UserControl, IEditPage
|
||||
{
|
||||
private Pool pool;
|
||||
|
||||
public LivePatchingEditPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
Text = Messages.LIVE_PATCHING;
|
||||
}
|
||||
|
||||
#region IEditPage Members
|
||||
|
||||
public AsyncAction SaveSettings()
|
||||
{
|
||||
bool now_enabled = radioButtonEnable.Checked;
|
||||
|
||||
string title = null;
|
||||
string description = null;
|
||||
|
||||
if (now_enabled)
|
||||
{
|
||||
title = Messages.ACTION_ENABLE_LIVE_PATCHING;
|
||||
description = Messages.ACTION_ENABLING_LIVE_PATCHING;
|
||||
}
|
||||
else
|
||||
{
|
||||
title = Messages.ACTION_DISABLE_LIVE_PATCHING;
|
||||
description = Messages.ACTION_DISABLING_LIVE_PATCHING;
|
||||
}
|
||||
|
||||
return new DelegatedAsyncAction(pool.Connection, title, description, null,
|
||||
delegate(Session session) { Pool.set_live_patching_disabled(session, pool.opaque_ref, radioButtonDisable.Checked); }, true);
|
||||
}
|
||||
|
||||
public void SetXenObjects(IXenObject orig, IXenObject clone)
|
||||
{
|
||||
pool = Helpers.GetPoolOfOne(clone.Connection); // clone could be a pool or a host
|
||||
|
||||
if (pool.live_patching_disabled)
|
||||
{
|
||||
radioButtonDisable.Checked = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
radioButtonEnable.Checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool ValidToSave
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public void ShowLocalValidationMessages()
|
||||
{ }
|
||||
|
||||
public void Cleanup()
|
||||
{ }
|
||||
|
||||
public bool HasChanged
|
||||
{
|
||||
// Server flag is for disabled, so compare to disable radio
|
||||
get { return pool.live_patching_disabled != radioButtonDisable.Checked; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region VerticalTab Members
|
||||
|
||||
public string SubText
|
||||
{
|
||||
get { return radioButtonEnable.Checked? Messages.ENABLED : Messages.DISABLED; }
|
||||
}
|
||||
|
||||
public Image Image
|
||||
{
|
||||
get { return Properties.Resources._000_Patch_h32bit_16; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -1,273 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
|
||||
<xsd:element msdata:IsDataSet="true" name="root">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element minOccurs="0" name="value" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||
<xsd:attribute name="type" type="xsd:string"/>
|
||||
<xsd:attribute name="mimetype" type="xsd:string"/>
|
||||
<xsd:attribute ref="xml:space"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string"/>
|
||||
<xsd:attribute name="name" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element minOccurs="0" msdata:Ordinal="1" name="value" type="xsd:string"/>
|
||||
<xsd:element minOccurs="0" msdata:Ordinal="2" name="comment" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute msdata:Ordinal="1" name="name" type="xsd:string" use="required"/>
|
||||
<xsd:attribute msdata:Ordinal="3" name="type" type="xsd:string"/>
|
||||
<xsd:attribute msdata:Ordinal="4" name="mimetype" type="xsd:string"/>
|
||||
<xsd:attribute ref="xml:space"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element minOccurs="0" msdata:Ordinal="1" name="value" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
|
||||
<data name="labelRubric.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
|
||||
<data name="labelRubric.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 4</value>
|
||||
</data>
|
||||
<data name="labelRubric.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>473, 17</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
|
||||
<data name="labelRubric.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelRubric.Text" xml:space="preserve">
|
||||
<value>このプールとの通信に使用できるセキュリティ プロトコルを選択します。</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.Name" xml:space="preserve">
|
||||
<value>labelRubric</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.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=">>labelRubric.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 31</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>174, 17</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.Text" xml:space="preserve">
|
||||
<value>最大セキュリティ: TLS 1.2 のみ(&M)</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.Name" xml:space="preserve">
|
||||
<value>radioButtonTLS</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 54</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>292, 17</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.Text" xml:space="preserve">
|
||||
<value>後方互換性: SSL 3.0 および TLS 1.0, 1.1 && 1.2(&B)</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.Name" xml:space="preserve">
|
||||
<value>radioButtonSSL</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 88</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 16</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxDisruption.Name" xml:space="preserve">
|
||||
<value>pictureBoxDisruption</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxDisruption.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=">>pictureBoxDisruption.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxDisruption.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelDisruption.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>30, 90</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>363, 13</value>
|
||||
</data>
|
||||
<data name="labelDisruption.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Text" xml:space="preserve">
|
||||
<value>この設定を変更すると、一時的に [XenServer] にアクセスできなくなります</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>labelDisruption.Name" xml:space="preserve">
|
||||
<value>labelDisruption</value>
|
||||
</data>
|
||||
<data name=">>labelDisruption.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=">>labelDisruption.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelDisruption.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>477, 198</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>SecurityEditPage</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
@ -1,273 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
|
||||
<xsd:element msdata:IsDataSet="true" name="root">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element minOccurs="0" name="value" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||
<xsd:attribute name="type" type="xsd:string"/>
|
||||
<xsd:attribute name="mimetype" type="xsd:string"/>
|
||||
<xsd:attribute ref="xml:space"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string"/>
|
||||
<xsd:attribute name="name" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element minOccurs="0" msdata:Ordinal="1" name="value" type="xsd:string"/>
|
||||
<xsd:element minOccurs="0" msdata:Ordinal="2" name="comment" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute msdata:Ordinal="1" name="name" type="xsd:string" use="required"/>
|
||||
<xsd:attribute msdata:Ordinal="3" name="type" type="xsd:string"/>
|
||||
<xsd:attribute msdata:Ordinal="4" name="mimetype" type="xsd:string"/>
|
||||
<xsd:attribute ref="xml:space"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element minOccurs="0" msdata:Ordinal="1" name="value" type="xsd:string"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
|
||||
<data name="labelRubric.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
|
||||
<data name="labelRubric.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 4</value>
|
||||
</data>
|
||||
<data name="labelRubric.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>473, 17</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
|
||||
<data name="labelRubric.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelRubric.Text" xml:space="preserve">
|
||||
<value>选择与此池进行通信时可以使用的安全协议。</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.Name" xml:space="preserve">
|
||||
<value>labelRubric</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.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=">>labelRubric.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 31</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>174, 17</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="radioButtonTLS.Text" xml:space="preserve">
|
||||
<value>最大安全性(&M): 仅限 TLS 1.2</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.Name" xml:space="preserve">
|
||||
<value>radioButtonTLS</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>radioButtonTLS.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 54</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>292, 17</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="radioButtonSSL.Text" xml:space="preserve">
|
||||
<value>向后兼容性(&B): SSL 3.0 以及 TLS 1.0、1.1 和 1.2</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.Name" xml:space="preserve">
|
||||
<value>radioButtonSSL</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>radioButtonSSL.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 88</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 16</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="pictureBoxDisruption.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxDisruption.Name" xml:space="preserve">
|
||||
<value>pictureBoxDisruption</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxDisruption.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=">>pictureBoxDisruption.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxDisruption.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelDisruption.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>30, 90</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>363, 13</value>
|
||||
</data>
|
||||
<data name="labelDisruption.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Text" xml:space="preserve">
|
||||
<value>更改此设置将导致您暂时失去对 [XenServer] 的访问权限</value>
|
||||
</data>
|
||||
<data name="labelDisruption.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>labelDisruption.Name" xml:space="preserve">
|
||||
<value>labelDisruption</value>
|
||||
</data>
|
||||
<data name=">>labelDisruption.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=">>labelDisruption.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelDisruption.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>477, 198</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>SecurityEditPage</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
110
XenAdmin/SettingsPanels/PerfmonAlertEditPage.Designer.cs
generated
110
XenAdmin/SettingsPanels/PerfmonAlertEditPage.Designer.cs
generated
@ -32,8 +32,8 @@ namespace XenAdmin.SettingsPanels
|
||||
this.AlertIntervalLabel = new System.Windows.Forms.Label();
|
||||
this.AlertIntervalMinutesLabel = new System.Windows.Forms.Label();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.nudAlertInterval = new XenAdmin.SettingsPanels.AlertNumericUpDown();
|
||||
this.labelRubric = new System.Windows.Forms.Label();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.PhysicalUtilisationGroupBox = new XenAdmin.Controls.DecentGroupBox();
|
||||
this.physicalUtilisationMinutesLabel = new System.Windows.Forms.Label();
|
||||
this.nudPhysicalUtilisationDurationThreshold = new XenAdmin.SettingsPanels.AlertNumericUpDown();
|
||||
@ -90,8 +90,9 @@ namespace XenAdmin.SettingsPanels
|
||||
this.CPUAlertCheckBox = new XenAdmin.SettingsPanels.AlertCheckBox();
|
||||
this.CPUUsagePercentLabel = new System.Windows.Forms.Label();
|
||||
this.CPUDurationThresholdLabel = new System.Windows.Forms.Label();
|
||||
this.nudAlertInterval = new XenAdmin.SettingsPanels.AlertNumericUpDown();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudAlertInterval)).BeginInit();
|
||||
this.panel1.SuspendLayout();
|
||||
this.PhysicalUtilisationGroupBox.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudPhysicalUtilisationDurationThreshold)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudPhysicalUtilisation)).BeginInit();
|
||||
@ -113,6 +114,7 @@ namespace XenAdmin.SettingsPanels
|
||||
this.CpuGroupBox.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudCPUUsagePercent)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudCPUDurationThreshold)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudAlertInterval)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// AlertIntervalLabel
|
||||
@ -128,47 +130,33 @@ namespace XenAdmin.SettingsPanels
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
||||
this.tableLayoutPanel1.Controls.Add(this.PhysicalUtilisationGroupBox, 0, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.Dom0MemoryUsageGroupBox, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.MemoryGroupBox, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.SrGroupBox, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.DiskGroupBox, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.NetGroupBox, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.CpuGroupBox, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelRubric, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.PhysicalUtilisationGroupBox, 0, 8);
|
||||
this.tableLayoutPanel1.Controls.Add(this.Dom0MemoryUsageGroupBox, 0, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.MemoryGroupBox, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.SrGroupBox, 0, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.DiskGroupBox, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.NetGroupBox, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.CpuGroupBox, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 1);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
//
|
||||
// label1
|
||||
// labelRubric
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
resources.ApplyResources(this.labelRubric, "labelRubric");
|
||||
this.labelRubric.Name = "labelRubric";
|
||||
//
|
||||
// nudAlertInterval
|
||||
// panel1
|
||||
//
|
||||
this.nudAlertInterval.Increment = new decimal(new int[] {
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
resources.ApplyResources(this.nudAlertInterval, "nudAlertInterval");
|
||||
this.nudAlertInterval.Maximum = new decimal(new int[] {
|
||||
86400,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudAlertInterval.Minimum = new decimal(new int[] {
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudAlertInterval.Name = "nudAlertInterval";
|
||||
this.nudAlertInterval.Value = new decimal(new int[] {
|
||||
60,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Controls.Add(this.AlertIntervalLabel);
|
||||
this.panel1.Controls.Add(this.AlertIntervalMinutesLabel);
|
||||
this.panel1.Controls.Add(this.nudAlertInterval);
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// PhysicalUtilisationGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.PhysicalUtilisationGroupBox, "PhysicalUtilisationGroupBox");
|
||||
this.PhysicalUtilisationGroupBox.Controls.Add(this.physicalUtilisationMinutesLabel);
|
||||
this.PhysicalUtilisationGroupBox.Controls.Add(this.nudPhysicalUtilisationDurationThreshold);
|
||||
this.PhysicalUtilisationGroupBox.Controls.Add(this.physicalUtilisationPercentLabel);
|
||||
@ -176,7 +164,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.PhysicalUtilisationGroupBox.Controls.Add(this.physicalUtilisationAlertCheckBox);
|
||||
this.PhysicalUtilisationGroupBox.Controls.Add(this.physicalUtilisationDurationLabel);
|
||||
this.PhysicalUtilisationGroupBox.Controls.Add(this.physicalUtilisationLabel);
|
||||
resources.ApplyResources(this.PhysicalUtilisationGroupBox, "PhysicalUtilisationGroupBox");
|
||||
this.PhysicalUtilisationGroupBox.Name = "PhysicalUtilisationGroupBox";
|
||||
this.PhysicalUtilisationGroupBox.TabStop = false;
|
||||
//
|
||||
@ -249,6 +236,7 @@ namespace XenAdmin.SettingsPanels
|
||||
//
|
||||
// Dom0MemoryUsageGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.Dom0MemoryUsageGroupBox, "Dom0MemoryUsageGroupBox");
|
||||
this.Dom0MemoryUsageGroupBox.Controls.Add(this.nudDom0MemUsage);
|
||||
this.Dom0MemoryUsageGroupBox.Controls.Add(this.Dom0MemoryDurationThresholdLabel);
|
||||
this.Dom0MemoryUsageGroupBox.Controls.Add(this.nudDom0MemoryDurationThreshold);
|
||||
@ -256,7 +244,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.Dom0MemoryUsageGroupBox.Controls.Add(this.Dom0MemoryAlertCheckBox);
|
||||
this.Dom0MemoryUsageGroupBox.Controls.Add(this.dom0MemoryMinutesLabel);
|
||||
this.Dom0MemoryUsageGroupBox.Controls.Add(this.dom0MemoryPercentLabel);
|
||||
resources.ApplyResources(this.Dom0MemoryUsageGroupBox, "Dom0MemoryUsageGroupBox");
|
||||
this.Dom0MemoryUsageGroupBox.Name = "Dom0MemoryUsageGroupBox";
|
||||
this.Dom0MemoryUsageGroupBox.TabStop = false;
|
||||
//
|
||||
@ -329,6 +316,7 @@ namespace XenAdmin.SettingsPanels
|
||||
//
|
||||
// MemoryGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.MemoryGroupBox, "MemoryGroupBox");
|
||||
this.MemoryGroupBox.Controls.Add(this.memoryMinutesLabel);
|
||||
this.MemoryGroupBox.Controls.Add(this.nudMemoryDurationThreshold);
|
||||
this.MemoryGroupBox.Controls.Add(this.memoryUnitsLabel);
|
||||
@ -336,7 +324,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.MemoryGroupBox.Controls.Add(this.MemoryAlertCheckBox);
|
||||
this.MemoryGroupBox.Controls.Add(this.memoryDurationThresholdLabel);
|
||||
this.MemoryGroupBox.Controls.Add(this.memoryUsageLabel);
|
||||
resources.ApplyResources(this.MemoryGroupBox, "MemoryGroupBox");
|
||||
this.MemoryGroupBox.Name = "MemoryGroupBox";
|
||||
this.MemoryGroupBox.TabStop = false;
|
||||
//
|
||||
@ -414,6 +401,7 @@ namespace XenAdmin.SettingsPanels
|
||||
//
|
||||
// SrGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.SrGroupBox, "SrGroupBox");
|
||||
this.SrGroupBox.Controls.Add(this.srMinutesLabel);
|
||||
this.SrGroupBox.Controls.Add(this.nudSrMinutes);
|
||||
this.SrGroupBox.Controls.Add(this.srUnitsLabel);
|
||||
@ -421,7 +409,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.SrGroupBox.Controls.Add(this.SrAlertCheckBox);
|
||||
this.SrGroupBox.Controls.Add(this.SrDurationThresholdLabel);
|
||||
this.SrGroupBox.Controls.Add(this.SrUsageLabel);
|
||||
resources.ApplyResources(this.SrGroupBox, "SrGroupBox");
|
||||
this.SrGroupBox.Name = "SrGroupBox";
|
||||
this.SrGroupBox.TabStop = false;
|
||||
//
|
||||
@ -499,6 +486,7 @@ namespace XenAdmin.SettingsPanels
|
||||
//
|
||||
// DiskGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.DiskGroupBox, "DiskGroupBox");
|
||||
this.DiskGroupBox.Controls.Add(this.DiskMinutesLabel);
|
||||
this.DiskGroupBox.Controls.Add(this.nudDiskDurationThreshold);
|
||||
this.DiskGroupBox.Controls.Add(this.DiskPercentLabel);
|
||||
@ -506,7 +494,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.DiskGroupBox.Controls.Add(this.DiskAlertCheckBox);
|
||||
this.DiskGroupBox.Controls.Add(this.DiskDurationThresholdLabel);
|
||||
this.DiskGroupBox.Controls.Add(this.DiskUsagePercentLabel);
|
||||
resources.ApplyResources(this.DiskGroupBox, "DiskGroupBox");
|
||||
this.DiskGroupBox.Name = "DiskGroupBox";
|
||||
this.DiskGroupBox.TabStop = false;
|
||||
//
|
||||
@ -584,6 +571,7 @@ namespace XenAdmin.SettingsPanels
|
||||
//
|
||||
// NetGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.NetGroupBox, "NetGroupBox");
|
||||
this.NetGroupBox.Controls.Add(this.NetPercentLabel);
|
||||
this.NetGroupBox.Controls.Add(this.nudNetUsagePercent);
|
||||
this.NetGroupBox.Controls.Add(this.NetMinutesLabel);
|
||||
@ -591,7 +579,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.NetGroupBox.Controls.Add(this.NetAlertCheckBox);
|
||||
this.NetGroupBox.Controls.Add(this.NetDurationThresholdLabel);
|
||||
this.NetGroupBox.Controls.Add(this.NetUsagePercentLabel);
|
||||
resources.ApplyResources(this.NetGroupBox, "NetGroupBox");
|
||||
this.NetGroupBox.Name = "NetGroupBox";
|
||||
this.NetGroupBox.TabStop = false;
|
||||
//
|
||||
@ -664,6 +651,7 @@ namespace XenAdmin.SettingsPanels
|
||||
//
|
||||
// CpuGroupBox
|
||||
//
|
||||
resources.ApplyResources(this.CpuGroupBox, "CpuGroupBox");
|
||||
this.CpuGroupBox.Controls.Add(this.cpuPercentLabel);
|
||||
this.CpuGroupBox.Controls.Add(this.nudCPUUsagePercent);
|
||||
this.CpuGroupBox.Controls.Add(this.cpuMinutesLabel);
|
||||
@ -671,7 +659,6 @@ namespace XenAdmin.SettingsPanels
|
||||
this.CpuGroupBox.Controls.Add(this.CPUAlertCheckBox);
|
||||
this.CpuGroupBox.Controls.Add(this.CPUUsagePercentLabel);
|
||||
this.CpuGroupBox.Controls.Add(this.CPUDurationThresholdLabel);
|
||||
resources.ApplyResources(this.CpuGroupBox, "CpuGroupBox");
|
||||
this.CpuGroupBox.Name = "CpuGroupBox";
|
||||
this.CpuGroupBox.TabStop = false;
|
||||
//
|
||||
@ -742,18 +729,41 @@ namespace XenAdmin.SettingsPanels
|
||||
resources.ApplyResources(this.CPUDurationThresholdLabel, "CPUDurationThresholdLabel");
|
||||
this.CPUDurationThresholdLabel.Name = "CPUDurationThresholdLabel";
|
||||
//
|
||||
// nudAlertInterval
|
||||
//
|
||||
this.nudAlertInterval.Increment = new decimal(new int[] {
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
resources.ApplyResources(this.nudAlertInterval, "nudAlertInterval");
|
||||
this.nudAlertInterval.Maximum = new decimal(new int[] {
|
||||
86400,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudAlertInterval.Minimum = new decimal(new int[] {
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudAlertInterval.Name = "nudAlertInterval";
|
||||
this.nudAlertInterval.Value = new decimal(new int[] {
|
||||
60,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// PerfmonAlertEditPage
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.AlertIntervalLabel);
|
||||
this.Controls.Add(this.nudAlertInterval);
|
||||
this.Controls.Add(this.AlertIntervalMinutesLabel);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Name = "PerfmonAlertEditPage";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudAlertInterval)).EndInit();
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.PhysicalUtilisationGroupBox.ResumeLayout(false);
|
||||
this.PhysicalUtilisationGroupBox.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudPhysicalUtilisationDurationThreshold)).EndInit();
|
||||
@ -782,6 +792,7 @@ namespace XenAdmin.SettingsPanels
|
||||
this.CpuGroupBox.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudCPUUsagePercent)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudCPUDurationThreshold)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudAlertInterval)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@ -833,7 +844,7 @@ namespace XenAdmin.SettingsPanels
|
||||
private AlertCheckBox SrAlertCheckBox;
|
||||
private System.Windows.Forms.Label SrDurationThresholdLabel;
|
||||
private System.Windows.Forms.Label SrUsageLabel;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label labelRubric;
|
||||
private Controls.DecentGroupBox Dom0MemoryUsageGroupBox;
|
||||
private AlertNumericUpDown nudDom0MemUsage;
|
||||
private System.Windows.Forms.Label Dom0MemoryDurationThresholdLabel;
|
||||
@ -850,5 +861,6 @@ namespace XenAdmin.SettingsPanels
|
||||
private AlertCheckBox physicalUtilisationAlertCheckBox;
|
||||
private System.Windows.Forms.Label physicalUtilisationDurationLabel;
|
||||
private System.Windows.Forms.Label physicalUtilisationLabel;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -688,6 +688,12 @@ namespace XenAdmin.TabPages
|
||||
s.AddEntry(FriendlyName("Pool_patch.applied"), hostAppliedPatches(host));
|
||||
}
|
||||
|
||||
var recommendedPatches = RecommendedPatchesForHost(host);
|
||||
if (!string.IsNullOrEmpty(recommendedPatches))
|
||||
{
|
||||
s.AddEntry(FriendlyName("Pool_patch.required-updates"), recommendedPatches);
|
||||
}
|
||||
|
||||
// add supplemental packs
|
||||
var suppPacks = hostInstalledSuppPacks(host);
|
||||
if (!string.IsNullOrEmpty(suppPacks))
|
||||
@ -1625,6 +1631,17 @@ namespace XenAdmin.TabPages
|
||||
return true;
|
||||
}
|
||||
|
||||
private string RecommendedPatchesForHost(Host host)
|
||||
{
|
||||
var result = new List<string>();
|
||||
var recommendedPatches = Updates.RecommendedPatchesForHost(host);
|
||||
|
||||
foreach (var patch in recommendedPatches)
|
||||
result.Add(patch.Name);
|
||||
|
||||
return string.Join(Environment.NewLine, result.ToArray());
|
||||
}
|
||||
|
||||
private string hostAppliedPatches(Host host)
|
||||
{
|
||||
List<string> result = new List<string>();
|
||||
|
1
XenAdmin/TabPages/ManageUpdatesPage.Designer.cs
generated
1
XenAdmin/TabPages/ManageUpdatesPage.Designer.cs
generated
@ -16,6 +16,7 @@
|
||||
if (disposing)
|
||||
{
|
||||
XenAdmin.Core.Updates.DeregisterCollectionChanged(UpdatesCollectionChanged);
|
||||
XenAdmin.Core.Updates.RestoreDismissedUpdatesStarted -= Updates_RestoreDismissedUpdatesStarted;
|
||||
XenAdmin.Core.Updates.CheckForUpdatesStarted -= CheckForUpdates_CheckForUpdatesStarted;
|
||||
XenAdmin.Core.Updates.CheckForUpdatesCompleted -= CheckForUpdates_CheckForUpdatesCompleted;
|
||||
|
||||
|
@ -64,6 +64,7 @@ namespace XenAdmin.TabPages
|
||||
private List<string> selectedUpdates = new List<string>();
|
||||
private int checksQueue;
|
||||
private bool PageWasRefreshed;
|
||||
private bool CheckForUpdatesInProgress;
|
||||
|
||||
public ManageUpdatesPage()
|
||||
{
|
||||
@ -74,6 +75,7 @@ namespace XenAdmin.TabPages
|
||||
dataGridViewUpdates.Sort(ColumnDate, ListSortDirection.Descending);
|
||||
informationLabel.Click += informationLabel_Click;
|
||||
Updates.RegisterCollectionChanged(UpdatesCollectionChanged);
|
||||
Updates.RestoreDismissedUpdatesStarted += Updates_RestoreDismissedUpdatesStarted;
|
||||
Updates.CheckForUpdatesStarted += CheckForUpdates_CheckForUpdatesStarted;
|
||||
Updates.CheckForUpdatesCompleted += CheckForUpdates_CheckForUpdatesCompleted;
|
||||
pictureBox1.Image = SystemIcons.Information.ToBitmap();
|
||||
@ -94,23 +96,35 @@ namespace XenAdmin.TabPages
|
||||
|
||||
private void CheckForUpdates_CheckForUpdatesStarted()
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
checksQueue++;
|
||||
if (checksQueue > 1)
|
||||
return;
|
||||
Program.Invoke(Program.MainWindow, StartCheckForUpdates);
|
||||
}
|
||||
|
||||
toolStripButtonRefresh.Enabled = false;
|
||||
toolStripButtonRestoreDismissed.Enabled = false;
|
||||
private void Updates_RestoreDismissedUpdatesStarted()
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, StartCheckForUpdates);
|
||||
}
|
||||
|
||||
StoreSelectedUpdates();
|
||||
dataGridViewUpdates.Rows.Clear();
|
||||
dataGridViewUpdates.Refresh();
|
||||
private void StartCheckForUpdates()
|
||||
{
|
||||
if (CheckForUpdatesInProgress)
|
||||
return;
|
||||
|
||||
spinningTimer.Start();
|
||||
tableLayoutPanel3.Visible = true;
|
||||
labelProgress.Text = Messages.AVAILABLE_UPDATES_SEARCHING;
|
||||
});
|
||||
CheckForUpdatesInProgress = true;
|
||||
|
||||
checksQueue++;
|
||||
if (checksQueue > 1)
|
||||
return;
|
||||
|
||||
toolStripButtonRefresh.Enabled = false;
|
||||
toolStripButtonRestoreDismissed.Enabled = false;
|
||||
|
||||
StoreSelectedUpdates();
|
||||
dataGridViewUpdates.Rows.Clear();
|
||||
dataGridViewUpdates.Refresh();
|
||||
|
||||
spinningTimer.Start();
|
||||
tableLayoutPanel3.Visible = true;
|
||||
labelProgress.Text = Messages.AVAILABLE_UPDATES_SEARCHING;
|
||||
}
|
||||
|
||||
private void CheckForUpdates_CheckForUpdatesCompleted(bool succeeded, string errorMessage)
|
||||
@ -145,6 +159,8 @@ namespace XenAdmin.TabPages
|
||||
? Messages.AVAILABLE_UPDATES_NOT_FOUND
|
||||
: errorMessage;
|
||||
}
|
||||
|
||||
CheckForUpdatesInProgress = false;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -362,7 +362,7 @@ namespace XenAdmin.TabPages
|
||||
{
|
||||
using (ThreeButtonDialog dlog = new ThreeButtonDialog(
|
||||
new ThreeButtonDialog.Details(SystemIcons.Warning,
|
||||
string.Format(Messages.DELETE_GRAPH_MESSAGE, GraphList.SelectedGraph.DisplayName),
|
||||
string.Format(Messages.DELETE_GRAPH_MESSAGE, GraphList.SelectedGraph.DisplayName.EscapeAmpersands()),
|
||||
Messages.XENCENTER),
|
||||
ThreeButtonDialog.ButtonYes,
|
||||
ThreeButtonDialog.ButtonNo))
|
||||
|
@ -191,7 +191,7 @@
|
||||
<value>173, 22</value>
|
||||
</data>
|
||||
<data name="editVirtualDiskToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Properties</value>
|
||||
<value>P&roperties</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TitleLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
|
@ -112,9 +112,9 @@ namespace XenAdmin.Wizards.CrossPoolMigrateWizard
|
||||
}
|
||||
}
|
||||
|
||||
protected override string HomeServerText { get { return Messages.CPM_WIZARD_DESTINATION_DESTINATION; } }
|
||||
protected override string TargetServerText { get { return Messages.CPM_WIZARD_DESTINATION_DESTINATION; } }
|
||||
|
||||
protected override string HomeServerSelectionIntroText { get { return Messages.CPM_WIZARD_DESTINATION_TABLE_INTRO; } }
|
||||
protected override string TargetServerSelectionIntroText { get { return Messages.CPM_WIZARD_DESTINATION_TABLE_INTRO; } }
|
||||
|
||||
|
||||
public override DelayLoadingOptionComboBoxItem CreateDelayLoadingOptionComboBoxItem(IXenObject xenItem)
|
||||
@ -122,7 +122,7 @@ namespace XenAdmin.Wizards.CrossPoolMigrateWizard
|
||||
return new CrossPoolMigrateDelayLoadingComboBoxItem(xenItem, preSelectedHost, selectedVMs);
|
||||
}
|
||||
|
||||
protected override List<ReasoningFilter> CreateHomeServerFilterList(IEnableableXenObjectComboBoxItem selectedItem)
|
||||
protected override List<ReasoningFilter> CreateTargetServerFilterList(IEnableableXenObjectComboBoxItem selectedItem)
|
||||
{
|
||||
List<ReasoningFilter> filters = new List<ReasoningFilter>{ new ResidentHostIsSameAsSelectionFilter(selectedVMs) };
|
||||
|
||||
@ -168,5 +168,13 @@ namespace XenAdmin.Wizards.CrossPoolMigrateWizard
|
||||
return TemplatesOnly ? Messages.TEMPLATE : Messages.VM;
|
||||
}
|
||||
}
|
||||
|
||||
protected override string TargetColumnHeaderText
|
||||
{
|
||||
get
|
||||
{
|
||||
return Messages.TARGET_SERVER;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -67,10 +67,10 @@
|
||||
resources.ApplyResources(this.networkComboBox, "networkComboBox");
|
||||
this.networkComboBox.Name = "networkComboBox";
|
||||
//
|
||||
// label3
|
||||
// blurbText
|
||||
//
|
||||
resources.ApplyResources(this.blurbText, "label3");
|
||||
this.blurbText.Name = "label3";
|
||||
resources.ApplyResources(this.blurbText, "blurbText");
|
||||
this.blurbText.Name = "blurbText";
|
||||
//
|
||||
// CrossPoolMigrateTransferNetworkPage
|
||||
//
|
||||
|
@ -145,7 +145,7 @@
|
||||
<value>0, 0, 10, 0</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>88, 27</value>
|
||||
<value>229, 46</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@ -172,10 +172,10 @@
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="networkComboBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>101, 3</value>
|
||||
<value>242, 3</value>
|
||||
</data>
|
||||
<data name="networkComboBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 21</value>
|
||||
<value>432, 39</value>
|
||||
</data>
|
||||
<data name="networkComboBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
@ -196,13 +196,13 @@
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 36</value>
|
||||
<value>3, 55</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>608, 27</value>
|
||||
<value>1529, 46</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
@ -222,40 +222,40 @@
|
||||
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="networkComboBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,100" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<data name="blurbText.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<data name="blurbText.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="blurbText.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<data name="blurbText.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
</data>
|
||||
<data name="label3.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<data name="blurbText.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 20</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>608, 33</value>
|
||||
<data name="blurbText.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1529, 52</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name="blurbText.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<data name="blurbText.Text" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
<data name=">>blurbText.Name" xml:space="preserve">
|
||||
<value>blurbText</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<data name=">>blurbText.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=">>label3.Parent" xml:space="preserve">
|
||||
<data name=">>blurbText.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<data name=">>blurbText.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
@ -268,7 +268,7 @@
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>614, 332</value>
|
||||
<value>1535, 830</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@ -286,16 +286,19 @@
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,Percent,100" /></TableLayoutSettings></value>
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="blurbText" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,Percent,100" /></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.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
<value>240, 240</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>8, 8, 8, 8</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>614, 332</value>
|
||||
<value>1535, 830</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>CrossPoolMigrateTransferNetworkPage</value>
|
||||
|
@ -419,7 +419,7 @@ namespace XenAdmin.Wizards.CrossPoolMigrateWizard
|
||||
summary = new VmTitleSummary(summary, pair.Value);
|
||||
|
||||
summary = new DestinationPoolSummary(summary, pair.Value, TargetConnection);
|
||||
summary = new HomeServerSummary(summary, pair.Value, TargetConnection);
|
||||
summary = new TargetServerSummary(summary, pair.Value, TargetConnection);
|
||||
summary = new TransferNetworkSummary(summary, m_pageTransferNetwork.NetworkUuid.Value);
|
||||
summary = new StorageSummary(summary, pair.Value, xenConnection);
|
||||
summary = new NetworkSummary(summary, pair.Value, xenConnection);
|
||||
|
@ -112,16 +112,16 @@
|
||||
<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="labelText.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="tableLayoutPanel1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
|
||||
<value>GrowAndShrink</value>
|
||||
</data>
|
||||
@ -148,7 +148,7 @@
|
||||
<value>buttonClearAll</value>
|
||||
</data>
|
||||
<data name=">>buttonClearAll.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonClearAll.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -156,7 +156,7 @@
|
||||
<data name=">>buttonClearAll.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="columnTick.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="columnTick.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="columnTick.HeaderText" xml:space="preserve">
|
||||
@ -165,7 +165,7 @@
|
||||
<data name="columnTick.Width" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<metadata name="columnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="columnName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="columnName.HeaderText" xml:space="preserve">
|
||||
@ -177,7 +177,7 @@
|
||||
<data name="columnName.Width" type="System.Int32, mscorlib">
|
||||
<value>115</value>
|
||||
</data>
|
||||
<metadata name="columnDesc.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="columnDesc.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="columnDesc.HeaderText" xml:space="preserve">
|
||||
@ -189,7 +189,7 @@
|
||||
<data name="columnDesc.Width" type="System.Int32, mscorlib">
|
||||
<value>115</value>
|
||||
</data>
|
||||
<metadata name="columnType.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="columnType.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="columnType.HeaderText" xml:space="preserve">
|
||||
@ -201,7 +201,7 @@
|
||||
<data name="columnType.Width" type="System.Int32, mscorlib">
|
||||
<value>90</value>
|
||||
</data>
|
||||
<metadata name="columnMetadata.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="columnMetadata.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="columnMetadata.HeaderText" xml:space="preserve">
|
||||
@ -268,7 +268,7 @@
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="FindSrsButton.Text" xml:space="preserve">
|
||||
<value>Find &Storage Repositories</value>
|
||||
<value>Find Storage &Repositories</value>
|
||||
</data>
|
||||
<data name="FindSrsButton.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
@ -280,7 +280,7 @@
|
||||
<value>FindSrsButton</value>
|
||||
</data>
|
||||
<data name=">>FindSrsButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>FindSrsButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -307,7 +307,7 @@
|
||||
<value>buttonSelectAll</value>
|
||||
</data>
|
||||
<data name=">>buttonSelectAll.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonSelectAll.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -334,7 +334,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>
|
||||
@ -370,7 +370,7 @@
|
||||
<value>labelText</value>
|
||||
</data>
|
||||
<data name=">>labelText.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=">>labelText.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
|
@ -101,9 +101,10 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
protected void InitializeText()
|
||||
{
|
||||
m_labelIntro.Text = InstructionText;
|
||||
label1.Text = HomeServerText;
|
||||
label2.Text = HomeServerSelectionIntroText;
|
||||
label1.Text = TargetServerText;
|
||||
label2.Text = TargetServerSelectionIntroText;
|
||||
m_colVmName.HeaderText = VmColumnHeaderText;
|
||||
m_colTarget.HeaderText = TargetColumnHeaderText;
|
||||
}
|
||||
|
||||
private IXenObject _chosenItem;
|
||||
@ -123,9 +124,9 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
protected abstract string InstructionText { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Text demarking what the label fot the home server drop down should be
|
||||
/// Text demarking what the label for the target server drop down should be
|
||||
/// </summary>
|
||||
protected abstract string HomeServerText { get; }
|
||||
protected abstract string TargetServerText { get; }
|
||||
|
||||
protected virtual string VmColumnHeaderText
|
||||
{
|
||||
@ -135,10 +136,19 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual string TargetColumnHeaderText
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_colTarget.HeaderText;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Text above the table containing a list of VMs and concomitant home server
|
||||
/// </summary>
|
||||
protected abstract string HomeServerSelectionIntroText { get; }
|
||||
protected abstract string TargetServerSelectionIntroText { get; }
|
||||
|
||||
protected virtual void OnChosenItemChanged()
|
||||
{}
|
||||
@ -553,7 +563,7 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
{
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
ChosenItem = item == null ? null : item.Item;
|
||||
Program.Invoke(Program.MainWindow, ()=> PopulateDataGridView(CreateHomeServerFilterList(item)));
|
||||
Program.Invoke(Program.MainWindow, ()=> PopulateDataGridView(CreateTargetServerFilterList(item)));
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -569,7 +579,7 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
/// </summary>
|
||||
/// <param name="item">selected item from the host combobox</param>
|
||||
/// <returns></returns>
|
||||
protected virtual List<ReasoningFilter> CreateHomeServerFilterList(IEnableableXenObjectComboBoxItem item)
|
||||
protected virtual List<ReasoningFilter> CreateTargetServerFilterList(IEnableableXenObjectComboBoxItem item)
|
||||
{
|
||||
return new List<ReasoningFilter>();
|
||||
}
|
||||
|
@ -112,26 +112,26 @@
|
||||
<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="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="m_labelIntro.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="m_labelIntro.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="m_labelIntro.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="m_labelIntro.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
</data>
|
||||
@ -285,18 +285,18 @@
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<metadata name="m_colVmName.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="m_colVmName.UserAddedColumn" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="m_colVmName.HeaderText" xml:space="preserve">
|
||||
<value>VM</value>
|
||||
</data>
|
||||
<data name="m_colVmName.Width" type="System.Int32, mscorlib">
|
||||
<value>48</value>
|
||||
</data>
|
||||
<metadata name="m_colTarget.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="m_colTarget.UserAddedColumn" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="m_colTarget.HeaderText" xml:space="preserve">
|
||||
<value>Home Server</value>
|
||||
</data>
|
||||
@ -447,9 +447,9 @@
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="m_labelIntro" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="m_dataGridView" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanelWarning" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,Absolute,20" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
</data>
|
||||
|
@ -168,12 +168,12 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
}
|
||||
}
|
||||
|
||||
public class HomeServerSummary : MappingSummaryDecorator
|
||||
public class TargetServerSummary : MappingSummaryDecorator
|
||||
{
|
||||
private readonly VmMapping mapping;
|
||||
private readonly IXenConnection connection;
|
||||
|
||||
public HomeServerSummary(MappingSummary summary, VmMapping mapping, IXenConnection connection)
|
||||
public TargetServerSummary(MappingSummary summary, VmMapping mapping, IXenConnection connection)
|
||||
: base(summary)
|
||||
{
|
||||
this.mapping = mapping;
|
||||
@ -185,7 +185,7 @@ namespace XenAdmin.Wizards.GenericPages
|
||||
get
|
||||
{
|
||||
List<SummaryDetails> decoratedSummary = summary.Details;
|
||||
decoratedSummary.Add(new SummaryDetails(Messages.CPM_SUMMARY_KEY_HOME_SERVER, ResolveLabel()));
|
||||
decoratedSummary.Add(new SummaryDetails(Messages.CPM_SUMMARY_KEY_TARGET_SERVER, ResolveLabel()));
|
||||
return decoratedSummary;
|
||||
}
|
||||
}
|
||||
|
@ -84,9 +84,9 @@ namespace XenAdmin.Wizards.ImportWizard
|
||||
|
||||
protected override string InstructionText { get { return Messages.IMPORT_WIZARD_DESTINATION_INSTRUCTIONS; } }
|
||||
|
||||
protected override string HomeServerText { get { return Messages.IMPORT_WIZARD_DESTINATION_DESTINATION; } }
|
||||
protected override string TargetServerText { get { return Messages.IMPORT_WIZARD_DESTINATION_DESTINATION; } }
|
||||
|
||||
protected override string HomeServerSelectionIntroText { get { return Messages.IMPORT_WIZARD_DESTINATION_TABLE_INTRO; } }
|
||||
protected override string TargetServerSelectionIntroText { get { return Messages.IMPORT_WIZARD_DESTINATION_TABLE_INTRO; } }
|
||||
|
||||
protected override void OnChosenItemChanged()
|
||||
{
|
||||
|
@ -55,6 +55,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private readonly PatchingWizard_UploadPage PatchingWizard_UploadPage;
|
||||
private readonly PatchingWizard_PrecheckPage PatchingWizard_PrecheckPage;
|
||||
private readonly PatchingWizard_FirstPage PatchingWizard_FirstPage;
|
||||
private readonly PatchingWizard_AutoUpdatingPage PatchingWizard_AutoUpdatingPage;
|
||||
|
||||
public PatchingWizard()
|
||||
{
|
||||
@ -67,6 +68,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
PatchingWizard_UploadPage = new PatchingWizard_UploadPage();
|
||||
PatchingWizard_PrecheckPage = new PatchingWizard_PrecheckPage();
|
||||
PatchingWizard_FirstPage = new PatchingWizard_FirstPage();
|
||||
PatchingWizard_AutoUpdatingPage = new PatchingWizard_AutoUpdatingPage();
|
||||
|
||||
AddPage(PatchingWizard_FirstPage);
|
||||
AddPage(PatchingWizard_SelectPatchPage);
|
||||
@ -102,17 +104,36 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
if (prevPageType == typeof(PatchingWizard_SelectPatchPage))
|
||||
{
|
||||
var updateType = PatchingWizard_SelectPatchPage.SelectedUpdateType;
|
||||
var newPatch = PatchingWizard_SelectPatchPage.SelectedNewPatch;
|
||||
var existPatch = PatchingWizard_SelectPatchPage.SelectedExistingPatch;
|
||||
var alertPatch = PatchingWizard_SelectPatchPage.SelectedUpdateAlert;
|
||||
var fileFromDiskAlertPatch = PatchingWizard_SelectPatchPage.FileFromDiskAlert;
|
||||
var wizardModeAutomatic = PatchingWizard_SelectPatchPage.IsInAutomaticMode;
|
||||
|
||||
var updateType = wizardModeAutomatic ? UpdateType.NewRetail : PatchingWizard_SelectPatchPage.SelectedUpdateType;
|
||||
var newPatch = wizardModeAutomatic ? null : PatchingWizard_SelectPatchPage.SelectedNewPatch;
|
||||
var existPatch = wizardModeAutomatic ? null : PatchingWizard_SelectPatchPage.SelectedExistingPatch;
|
||||
var alertPatch = wizardModeAutomatic ? null : PatchingWizard_SelectPatchPage.SelectedUpdateAlert;
|
||||
var fileFromDiskAlertPatch = wizardModeAutomatic ? null : PatchingWizard_SelectPatchPage.FileFromDiskAlert;
|
||||
|
||||
PatchingWizard_SelectServers.IsInAutomaticMode = wizardModeAutomatic;
|
||||
PatchingWizard_SelectServers.AutoDownloadedXenServerVersions = PatchingWizard_SelectPatchPage.AutoDownloadedXenServerVersions;
|
||||
PatchingWizard_SelectServers.SelectedUpdateType = updateType;
|
||||
PatchingWizard_SelectServers.Patch = existPatch;
|
||||
PatchingWizard_SelectServers.SelectedUpdateAlert = alertPatch;
|
||||
PatchingWizard_SelectServers.FileFromDiskAlert = fileFromDiskAlertPatch;
|
||||
|
||||
RemovePage(PatchingWizard_UploadPage);
|
||||
RemovePage(PatchingWizard_ModePage);
|
||||
RemovePage(PatchingWizard_PatchingPage);
|
||||
RemovePage(PatchingWizard_AutoUpdatingPage);
|
||||
if (!wizardModeAutomatic)
|
||||
{
|
||||
AddAfterPage(PatchingWizard_SelectServers, PatchingWizard_UploadPage);
|
||||
AddAfterPage(PatchingWizard_PrecheckPage, PatchingWizard_ModePage);
|
||||
AddAfterPage(PatchingWizard_ModePage, PatchingWizard_PatchingPage);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddAfterPage(PatchingWizard_PrecheckPage, PatchingWizard_AutoUpdatingPage);
|
||||
}
|
||||
|
||||
PatchingWizard_UploadPage.SelectedUpdateType = updateType;
|
||||
PatchingWizard_UploadPage.SelectedExistingPatch = existPatch;
|
||||
PatchingWizard_UploadPage.SelectedNewPatchPath = newPatch;
|
||||
@ -121,6 +142,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
PatchingWizard_ModePage.Patch = existPatch;
|
||||
PatchingWizard_ModePage.SelectedUpdateAlert = alertPatch;
|
||||
|
||||
PatchingWizard_PrecheckPage.IsInAutomaticMode = wizardModeAutomatic;
|
||||
PatchingWizard_PrecheckPage.Patch = existPatch;
|
||||
PatchingWizard_PatchingPage.Patch = existPatch;
|
||||
|
||||
@ -134,17 +156,21 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
else if (prevPageType == typeof(PatchingWizard_SelectServers))
|
||||
{
|
||||
var selectedServers = PatchingWizard_SelectServers.SelectedServers;
|
||||
|
||||
var selectedPools = PatchingWizard_SelectServers.SelectedPools;
|
||||
var selectedMasters = PatchingWizard_SelectServers.SelectedMasters;
|
||||
|
||||
PatchingWizard_PrecheckPage.SelectedServers = selectedServers;
|
||||
|
||||
PatchingWizard_ModePage.SelectedServers = selectedServers;
|
||||
|
||||
PatchingWizard_PatchingPage.SelectedMasters = PatchingWizard_SelectServers.SelectedMasters;
|
||||
PatchingWizard_PatchingPage.SelectedMasters = selectedMasters;
|
||||
PatchingWizard_PatchingPage.SelectedServers = selectedServers;
|
||||
PatchingWizard_PatchingPage.SelectedPools = PatchingWizard_SelectServers.SelectedPools;
|
||||
PatchingWizard_PatchingPage.SelectedPools = selectedPools;
|
||||
|
||||
PatchingWizard_UploadPage.SelectedMasters = PatchingWizard_SelectServers.SelectedMasters;
|
||||
PatchingWizard_UploadPage.SelectedMasters = selectedMasters;
|
||||
PatchingWizard_UploadPage.SelectedServers = selectedServers;
|
||||
|
||||
PatchingWizard_AutoUpdatingPage.SelectedPools = selectedPools;
|
||||
}
|
||||
else if (prevPageType == typeof(PatchingWizard_UploadPage))
|
||||
{
|
||||
@ -175,6 +201,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
PatchingWizard_PatchingPage.ProblemsResolvedPreCheck = PatchingWizard_PrecheckPage.ProblemsResolvedPreCheck;
|
||||
PatchingWizard_PatchingPage.LivePatchCodesByHost = PatchingWizard_PrecheckPage.LivePatchCodesByHost;
|
||||
PatchingWizard_ModePage.LivePatchCodesByHost = PatchingWizard_PrecheckPage.LivePatchCodesByHost;
|
||||
PatchingWizard_AutoUpdatingPage.ProblemsResolvedPreCheck = PatchingWizard_PrecheckPage.ProblemsResolvedPreCheck;
|
||||
}
|
||||
}
|
||||
|
||||
@ -290,7 +317,20 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
private void RemoveDownloadedPatches()
|
||||
{
|
||||
foreach (string downloadedPatch in PatchingWizard_UploadPage.AllDownloadedPatches.Values)
|
||||
var isInAutomaticMode = PatchingWizard_SelectPatchPage.IsInAutomaticMode;
|
||||
|
||||
List<string> listOfDownloadedFiles = new List<string>();
|
||||
|
||||
if (isInAutomaticMode)
|
||||
{
|
||||
listOfDownloadedFiles.AddRange(PatchingWizard_AutoUpdatingPage.AllDownloadedPatches.Values);
|
||||
}
|
||||
else
|
||||
{
|
||||
listOfDownloadedFiles.AddRange(PatchingWizard_UploadPage.AllDownloadedPatches.Values);
|
||||
}
|
||||
|
||||
foreach (string downloadedPatch in listOfDownloadedFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -0,0 +1,542 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using log4net;
|
||||
using XenAdmin.Controls;
|
||||
using XenAdmin.Diagnostics.Problems;
|
||||
using XenAdmin.Dialogs;
|
||||
using XenAdmin.Wizards.PatchingWizard.PlanActions;
|
||||
using XenAPI;
|
||||
using XenAdmin.Actions;
|
||||
using System.Linq;
|
||||
using XenAdmin.Core;
|
||||
using XenAdmin.Network;
|
||||
using System.Text;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
public partial class PatchingWizard_AutoUpdatingPage : XenTabPage
|
||||
{
|
||||
protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
public XenAdmin.Core.Updates.UpgradeSequence UpgradeSequences { get; set; }
|
||||
private bool _thisPageIsCompleted = false;
|
||||
|
||||
public List<Problem> ProblemsResolvedPreCheck { private get; set; }
|
||||
|
||||
public List<Pool> SelectedPools { private get; set; }
|
||||
|
||||
private List<PoolPatchMapping> patchMappings = new List<PoolPatchMapping>();
|
||||
public Dictionary<XenServerPatch, string> AllDownloadedPatches = new Dictionary<XenServerPatch, string>();
|
||||
|
||||
private List<UpdateProgressBackgroundWorker> backgroundWorkers = new List<UpdateProgressBackgroundWorker>();
|
||||
|
||||
public PatchingWizard_AutoUpdatingPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public override string Text
|
||||
{
|
||||
get
|
||||
{
|
||||
return Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_TEXT;
|
||||
}
|
||||
}
|
||||
|
||||
public override string PageTitle
|
||||
{
|
||||
get
|
||||
{
|
||||
return Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_TITLE;
|
||||
}
|
||||
}
|
||||
|
||||
public override string HelpID
|
||||
{
|
||||
get { return ""; }
|
||||
}
|
||||
|
||||
public override bool EnablePrevious()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool _nextEnabled;
|
||||
public override bool EnableNext()
|
||||
{
|
||||
return _nextEnabled;
|
||||
}
|
||||
|
||||
private bool _cancelEnabled;
|
||||
public override bool EnableCancel()
|
||||
{
|
||||
return _cancelEnabled;
|
||||
}
|
||||
|
||||
public override void PageCancelled()
|
||||
{
|
||||
if (!_thisPageIsCompleted)
|
||||
{
|
||||
backgroundWorkers.ForEach(bgw => bgw.CancelAsync());
|
||||
backgroundWorkers.Clear();
|
||||
}
|
||||
|
||||
base.PageCancelled();
|
||||
}
|
||||
|
||||
public override void PageLeave(PageLoadedDirection direction, ref bool cancel)
|
||||
{
|
||||
base.PageLeave(direction, ref cancel);
|
||||
}
|
||||
|
||||
public override void PageLoaded(PageLoadedDirection direction)
|
||||
{
|
||||
base.PageLoaded(direction);
|
||||
|
||||
if (_thisPageIsCompleted)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var pool in SelectedPools)
|
||||
{
|
||||
var master = Helpers.GetMaster(pool.Connection);
|
||||
|
||||
var planActions = new List<PlanAction>();
|
||||
var delayedActionsByHost = new Dictionary<Host, List<PlanAction>>();
|
||||
|
||||
foreach (var host in pool.Connection.Cache.Hosts)
|
||||
{
|
||||
delayedActionsByHost.Add(host, new List<PlanAction>());
|
||||
}
|
||||
|
||||
var hosts = pool.Connection.Cache.Hosts;
|
||||
|
||||
var us = Updates.GetUpgradeSequence(pool.Connection);
|
||||
|
||||
foreach (var patch in us.UniquePatches)
|
||||
{
|
||||
var hostsToApply = us.Where(u => u.Value.Contains(patch)).Select(u => u.Key).ToList();
|
||||
hostsToApply.Sort();
|
||||
|
||||
planActions.Add(new DownloadPatchPlanAction(master.Connection, patch, AllDownloadedPatches));
|
||||
planActions.Add(new UploadPatchToMasterPlanAction(master.Connection, patch, patchMappings, AllDownloadedPatches));
|
||||
planActions.Add(new PatchPrechecksOnMultipleHostsInAPoolPlanAction(master.Connection, patch, hostsToApply, patchMappings));
|
||||
|
||||
foreach (var host in hostsToApply)
|
||||
{
|
||||
planActions.Add(new ApplyXenServerPatchPlanAction(host, patch, patchMappings));
|
||||
planActions.AddRange(GetMandatoryActionListForPatch(delayedActionsByHost[host], host, patch));
|
||||
UpdateDelayedAfterPatchGuidanceActionListForHost(delayedActionsByHost[host], host, patch);
|
||||
}
|
||||
|
||||
//clean up master at the end:
|
||||
planActions.Add(new RemoveUpdateFileFromMasterPlanAction(master, patchMappings, patch));
|
||||
|
||||
}//patch
|
||||
|
||||
//add all delayed actions to the end of the actions, per host
|
||||
var delayedActions = new List<PlanAction>();
|
||||
if (delayedActionsByHost.ContainsKey(master))
|
||||
{
|
||||
delayedActions.AddRange(delayedActionsByHost[master]);
|
||||
}
|
||||
foreach (var kvp in delayedActionsByHost)
|
||||
{
|
||||
if (kvp.Key != master)
|
||||
{
|
||||
delayedActions.AddRange(kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
if (planActions.Count > 0)
|
||||
{
|
||||
var bgw = new UpdateProgressBackgroundWorker(master, planActions, delayedActions);
|
||||
backgroundWorkers.Add(bgw);
|
||||
|
||||
}
|
||||
} //foreach in SelectedMasters
|
||||
|
||||
foreach (var bgw in backgroundWorkers)
|
||||
{
|
||||
bgw.DoWork += new DoWorkEventHandler(WorkerDoWork);
|
||||
bgw.WorkerReportsProgress = true;
|
||||
bgw.ProgressChanged += new ProgressChangedEventHandler(WorkerProgressChanged);
|
||||
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
|
||||
bgw.WorkerSupportsCancellation = true;
|
||||
bgw.RunWorkerAsync();
|
||||
}
|
||||
|
||||
if (backgroundWorkers.Count == 0)
|
||||
{
|
||||
_thisPageIsCompleted = true;
|
||||
_nextEnabled = true;
|
||||
|
||||
OnPageUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
#region automatic_mode
|
||||
|
||||
private List<PlanAction> doneActions = new List<PlanAction>();
|
||||
private List<PlanAction> inProgressActions = new List<PlanAction>();
|
||||
private List<PlanAction> errorActions = new List<PlanAction>();
|
||||
|
||||
private void WorkerProgressChanged(object sender, ProgressChangedEventArgs e)
|
||||
{
|
||||
var actionsWorker = sender as BackgroundWorker;
|
||||
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
if (!actionsWorker.CancellationPending)
|
||||
{
|
||||
PlanAction action = (PlanAction)e.UserState;
|
||||
if (action != null)
|
||||
{
|
||||
if (e.ProgressPercentage == 0)
|
||||
{
|
||||
inProgressActions.Add(action);
|
||||
}
|
||||
else
|
||||
{
|
||||
doneActions.Add(action);
|
||||
inProgressActions.Remove(action);
|
||||
|
||||
progressBar.Value += (int)((float)e.ProgressPercentage / (float)backgroundWorkers.Count); //extend with error handling related numbers
|
||||
}
|
||||
}
|
||||
|
||||
UpdateStatusTextBox();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void UpdateStatusTextBox()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
foreach (var pa in doneActions)
|
||||
{
|
||||
if (pa.Visible)
|
||||
{
|
||||
sb.Append(pa);
|
||||
sb.AppendLine(Messages.DONE);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var pa in errorActions)
|
||||
{
|
||||
sb.Append(pa);
|
||||
sb.AppendLine(Messages.ERROR);
|
||||
}
|
||||
|
||||
foreach (var pa in inProgressActions)
|
||||
{
|
||||
if (pa.Visible)
|
||||
{
|
||||
sb.Append(pa);
|
||||
sb.AppendLine();
|
||||
}
|
||||
}
|
||||
|
||||
textBoxLog.Text = sb.ToString();
|
||||
|
||||
textBoxLog.SelectionStart = textBoxLog.Text.Length;
|
||||
textBoxLog.ScrollToCaret();
|
||||
}
|
||||
|
||||
private void WorkerDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
|
||||
{
|
||||
var bgw = sender as UpdateProgressBackgroundWorker;
|
||||
|
||||
foreach (PlanAction action in bgw.AllActions)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (bgw.CancellationPending)
|
||||
{
|
||||
doWorkEventArgs.Cancel = true;
|
||||
return;
|
||||
}
|
||||
|
||||
InitializePlanAction(bgw, action);
|
||||
|
||||
bgw.ReportProgress(0, action);
|
||||
action.Run();
|
||||
|
||||
Thread.Sleep(1000);
|
||||
|
||||
bgw.doneActions.Add(action);
|
||||
bgw.ReportProgress((int)((1.0 / (double)bgw.AllActions.Count) * 100), action);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
bgw.FailedWithExceptionAction = action;
|
||||
errorActions.Add(action);
|
||||
inProgressActions.Remove(action);
|
||||
|
||||
log.Error("Failed to carry out plan.", e);
|
||||
log.Debug(action.Title);
|
||||
|
||||
doWorkEventArgs.Result = new Exception(action.Title, e);
|
||||
|
||||
bgw.ReportProgress(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void InitializePlanAction(UpdateProgressBackgroundWorker bgw, PlanAction action)
|
||||
{
|
||||
if (action is IAvoidRestartHostsAware)
|
||||
{
|
||||
var avoidRestartAction = action as IAvoidRestartHostsAware;
|
||||
avoidRestartAction.AvoidRestartHosts = bgw.AvoidRestartHosts;
|
||||
}
|
||||
}
|
||||
|
||||
private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||
{
|
||||
var bgw = (UpdateProgressBackgroundWorker)sender;
|
||||
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
if (!e.Cancelled)
|
||||
{
|
||||
Exception exception = e.Result as Exception;
|
||||
if (exception != null)
|
||||
{
|
||||
//not showing exceptions in the meantime
|
||||
}
|
||||
|
||||
//if all finished
|
||||
if (backgroundWorkers.All(w => !w.IsBusy))
|
||||
{
|
||||
AllWorkersFinished();
|
||||
ShowErrors();
|
||||
|
||||
_thisPageIsCompleted = true;
|
||||
|
||||
_cancelEnabled = false;
|
||||
_nextEnabled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void UpdateDelayedAfterPatchGuidanceActionListForHost(List<PlanAction> delayedGuidances, Host host, XenServerPatch patch)
|
||||
{
|
||||
List<PlanAction> actions = GetAfterApplyGuidanceActionsForPatch(host, patch);
|
||||
|
||||
//if this is a restart, clean delayed list
|
||||
if (patch.after_apply_guidance == after_apply_guidance.restartHost)
|
||||
delayedGuidances.Clear();
|
||||
|
||||
if (!patch.GuidanceMandatory)
|
||||
{
|
||||
//not mandatory, so these actions will have to be run later
|
||||
//add the ones that are not yet there
|
||||
foreach (var ap in actions)
|
||||
if (!delayedGuidances.Any(da => da.GetType() == ap.GetType()))
|
||||
{
|
||||
//special rules
|
||||
//do not add restartXAPI if there is already a restartHost on the list
|
||||
if (delayedGuidances.Any(da => da is RebootHostPlanAction) && ap is RestartAgentPlanAction)
|
||||
continue;
|
||||
|
||||
delayedGuidances.Add(ap);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//remove delayed action of the same kind for this host (because it is mandatory and will run immediately)
|
||||
delayedGuidances.RemoveAll(dg => actions.Any(ma => ma.GetType() == dg.GetType()));
|
||||
}
|
||||
}
|
||||
|
||||
private static List<PlanAction> GetAfterApplyGuidanceActionsForPatch(Host host, XenServerPatch patch)
|
||||
{
|
||||
List<PlanAction> actions = new List<PlanAction>();
|
||||
|
||||
List<XenRef<VM>> runningVMs = RunningVMs(host);
|
||||
|
||||
if (patch.after_apply_guidance == after_apply_guidance.restartHost)
|
||||
{
|
||||
actions.Add(new EvacuateHostPlanAction(host));
|
||||
actions.Add(new RebootHostPlanAction(host));
|
||||
actions.Add(new BringBabiesBackAction(runningVMs, host, false));
|
||||
}
|
||||
|
||||
if (patch.after_apply_guidance == after_apply_guidance.restartXAPI)
|
||||
{
|
||||
actions.Add(new RestartAgentPlanAction(host));
|
||||
}
|
||||
|
||||
if (patch.after_apply_guidance == after_apply_guidance.restartHVM)
|
||||
{
|
||||
actions.Add(new RebootVMsPlanAction(host, RunningHvmVMs(host)));
|
||||
}
|
||||
|
||||
if (patch.after_apply_guidance == after_apply_guidance.restartPV)
|
||||
{
|
||||
actions.Add(new RebootVMsPlanAction(host, RunningPvVMs(host)));
|
||||
}
|
||||
|
||||
return actions;
|
||||
}
|
||||
|
||||
private List<PlanAction> GetMandatoryActionListForPatch(List<PlanAction> delayedGuidances, Host host, XenServerPatch patch)
|
||||
{
|
||||
var actions = new List<PlanAction>();
|
||||
|
||||
if (!patch.GuidanceMandatory)
|
||||
return actions;
|
||||
|
||||
actions = GetAfterApplyGuidanceActionsForPatch(host, patch);
|
||||
|
||||
return actions;
|
||||
}
|
||||
|
||||
private static List<XenRef<VM>> RunningHvmVMs(Host host)
|
||||
{
|
||||
List<XenRef<VM>> vms = new List<XenRef<VM>>();
|
||||
foreach (VM vm in host.Connection.ResolveAll(host.resident_VMs))
|
||||
{
|
||||
if (!vm.IsHVM || !vm.is_a_real_vm)
|
||||
continue;
|
||||
vms.Add(new XenRef<VM>(vm.opaque_ref));
|
||||
}
|
||||
return vms;
|
||||
}
|
||||
|
||||
private static List<XenRef<VM>> RunningPvVMs(Host host)
|
||||
{
|
||||
List<XenRef<VM>> vms = new List<XenRef<VM>>();
|
||||
foreach (VM vm in host.Connection.ResolveAll(host.resident_VMs))
|
||||
{
|
||||
if (vm.IsHVM || !vm.is_a_real_vm)
|
||||
continue;
|
||||
vms.Add(new XenRef<VM>(vm.opaque_ref));
|
||||
}
|
||||
return vms;
|
||||
}
|
||||
|
||||
private static List<XenRef<VM>> RunningVMs(Host host)
|
||||
{
|
||||
List<XenRef<VM>> vms = new List<XenRef<VM>>();
|
||||
foreach (VM vm in host.Connection.ResolveAll(host.resident_VMs))
|
||||
{
|
||||
if (!vm.is_a_real_vm)
|
||||
continue;
|
||||
|
||||
vms.Add(new XenRef<VM>(vm.opaque_ref));
|
||||
}
|
||||
return vms;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
private void ShowErrors()
|
||||
{
|
||||
if (ErrorMessages != null)
|
||||
{
|
||||
labelTitle.Text = Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_FAILED;
|
||||
labelError.Text = Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR;
|
||||
|
||||
textBoxLog.Text += ErrorMessages;
|
||||
|
||||
log.ErrorFormat("Error message displayed: {0}", labelError.Text);
|
||||
pictureBox1.Image = SystemIcons.Error.ToBitmap();
|
||||
panel1.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private string ErrorMessages
|
||||
{
|
||||
get
|
||||
{
|
||||
if (errorActions.Count == 0)
|
||||
return null;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(errorActions.Count > 1 ? Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERRORS_OCCURRED : Messages.PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_OCCURRED);
|
||||
|
||||
foreach (var action in errorActions)
|
||||
{
|
||||
var exception = action.Error;
|
||||
if (exception == null)
|
||||
{
|
||||
log.ErrorFormat("An action has failed with an empty exception. Action: {0}", action.ToString());
|
||||
continue;
|
||||
}
|
||||
|
||||
log.Error(exception);
|
||||
|
||||
if (exception != null && exception.InnerException != null && exception.InnerException is Failure)
|
||||
{
|
||||
var innerEx = exception.InnerException as Failure;
|
||||
log.Error(innerEx);
|
||||
|
||||
sb.AppendLine(innerEx.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine(exception.Message);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void AllWorkersFinished()
|
||||
{
|
||||
labelTitle.Text = Messages.PATCHINGWIZARD_UPDATES_DONE_AUTOMATIC_MODE;
|
||||
progressBar.Value = 100;
|
||||
pictureBox1.Image = null;
|
||||
labelError.Text = Messages.CLOSE_WIZARD_CLICK_FINISH;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
117
XenAdmin/Wizards/PatchingWizard/PatchingWizard_AutoUpdatingPage.designer.cs
generated
Normal file
117
XenAdmin/Wizards/PatchingWizard/PatchingWizard_AutoUpdatingPage.designer.cs
generated
Normal file
@ -0,0 +1,117 @@
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
partial class PatchingWizard_AutoUpdatingPage
|
||||
{
|
||||
/// <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(PatchingWizard_AutoUpdatingPage));
|
||||
this.labelTitle = new System.Windows.Forms.Label();
|
||||
this.textBoxLog = new System.Windows.Forms.TextBox();
|
||||
this.progressBar = new System.Windows.Forms.ProgressBar();
|
||||
this.labelError = new System.Windows.Forms.Label();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.panel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.errorLinkLabel = new System.Windows.Forms.LinkLabel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// labelTitle
|
||||
//
|
||||
resources.ApplyResources(this.labelTitle, "labelTitle");
|
||||
this.labelTitle.Name = "labelTitle";
|
||||
//
|
||||
// textBoxLog
|
||||
//
|
||||
resources.ApplyResources(this.textBoxLog, "textBoxLog");
|
||||
this.textBoxLog.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.textBoxLog.Name = "textBoxLog";
|
||||
this.textBoxLog.ReadOnly = true;
|
||||
//
|
||||
// progressBar
|
||||
//
|
||||
resources.ApplyResources(this.progressBar, "progressBar");
|
||||
this.progressBar.Name = "progressBar";
|
||||
//
|
||||
// labelError
|
||||
//
|
||||
resources.ApplyResources(this.labelError, "labelError");
|
||||
this.labelError.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.labelError.Name = "labelError";
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.BackColor = System.Drawing.SystemColors.Control;
|
||||
resources.ApplyResources(this.pictureBox1, "pictureBox1");
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.panel1.Controls.Add(this.pictureBox1, 0, 0);
|
||||
this.panel1.Controls.Add(this.errorLinkLabel, 2, 0);
|
||||
this.panel1.Controls.Add(this.labelError, 1, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// errorLinkLabel
|
||||
//
|
||||
resources.ApplyResources(this.errorLinkLabel, "errorLinkLabel");
|
||||
this.errorLinkLabel.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.errorLinkLabel.Name = "errorLinkLabel";
|
||||
this.errorLinkLabel.TabStop = true;
|
||||
//
|
||||
// PatchingWizard_AutoUpdatingPage
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.progressBar);
|
||||
this.Controls.Add(this.textBoxLog);
|
||||
this.Controls.Add(this.labelTitle);
|
||||
this.Name = "PatchingWizard_AutoUpdatingPage";
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label labelTitle;
|
||||
private System.Windows.Forms.TextBox textBoxLog;
|
||||
private System.Windows.Forms.ProgressBar progressBar;
|
||||
private System.Windows.Forms.Label labelError;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.TableLayoutPanel panel1;
|
||||
private System.Windows.Forms.LinkLabel errorLinkLabel;
|
||||
|
||||
}
|
||||
}
|
@ -112,159 +112,201 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="radioButtonDisable.AutoSize" type="System.Boolean, mscorlib">
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labelTitle.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="radioButtonDisable.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="labelTitle.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 13</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="radioButtonDisable.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 156</value>
|
||||
<data name="labelTitle.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 17</value>
|
||||
</data>
|
||||
<data name="radioButtonDisable.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>8, 8, 8, 8</value>
|
||||
<data name="labelTitle.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="radioButtonDisable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>337, 36</value>
|
||||
<data name="labelTitle.Text" xml:space="preserve">
|
||||
<value>アップデートのインストール中:</value>
|
||||
</data>
|
||||
<data name="radioButtonDisable.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
<data name=">>labelTitle.Name" xml:space="preserve">
|
||||
<value>labelTitle</value>
|
||||
</data>
|
||||
<data name="radioButtonDisable.Text" xml:space="preserve">
|
||||
<value>&Don't use live patching</value>
|
||||
<data name=">>labelTitle.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=">>radioButtonDisable.Name" xml:space="preserve">
|
||||
<value>radioButtonDisable</value>
|
||||
</data>
|
||||
<data name=">>radioButtonDisable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>radioButtonDisable.Parent" xml:space="preserve">
|
||||
<data name=">>labelTitle.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>radioButtonDisable.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 104</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>8, 8, 8, 8</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>457, 36</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>labelTitle.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="radioButtonEnable.Text" xml:space="preserve">
|
||||
<value>&Use live patching when possible</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="textBoxLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>radioButtonEnable.Name" xml:space="preserve">
|
||||
<value>radioButtonEnable</value>
|
||||
<data name="textBoxLog.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 71</value>
|
||||
</data>
|
||||
<data name=">>radioButtonEnable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="textBoxLog.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>radioButtonEnable.Parent" xml:space="preserve">
|
||||
<data name="textBoxLog.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Both</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 230</value>
|
||||
</data>
|
||||
<data name="textBoxLog.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Name" xml:space="preserve">
|
||||
<value>textBoxLog</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>radioButtonEnable.ZOrder" xml:space="preserve">
|
||||
<data name=">>textBoxLog.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="labelRubric.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name="progressBar.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="labelRubric.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
<data name="progressBar.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labelRubric.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1186, 64</value>
|
||||
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 42</value>
|
||||
</data>
|
||||
<data name="labelRubric.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 23</value>
|
||||
</data>
|
||||
<data name="labelRubric.Text" xml:space="preserve">
|
||||
<value>Live patching allows some Linux kernel and Xen updates to be installed without rebooting the server. Select whether you wish to use live patches when they are available.</value>
|
||||
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.Name" xml:space="preserve">
|
||||
<value>labelRubric</value>
|
||||
<data name=">>progressBar.Name" xml:space="preserve">
|
||||
<value>progressBar</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>progressBar.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>labelRubric.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1192, 64</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Parent" xml:space="preserve">
|
||||
<data name=">>progressBar.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.ZOrder" xml:space="preserve">
|
||||
<data name=">>progressBar.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelError.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelError.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labelError.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>35, 0</value>
|
||||
</data>
|
||||
<data name="labelError.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>31, 17</value>
|
||||
</data>
|
||||
<data name="labelError.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelError.Text" xml:space="preserve">
|
||||
<value>エラー</value>
|
||||
</data>
|
||||
<data name=">>labelError.Name" xml:space="preserve">
|
||||
<value>labelError</value>
|
||||
</data>
|
||||
<data name=">>labelError.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=">>labelError.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>labelError.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelRubric" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,50,Percent,50" /></TableLayoutSettings></value>
|
||||
<data name="panel1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="pictureBox1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 32</value>
|
||||
</data>
|
||||
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 312</value>
|
||||
</data>
|
||||
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>511, 32</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="panel1.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>240, 240</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>8, 8, 8, 8</value>
|
||||
<value>96, 96</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1192, 495</value>
|
||||
<value>511, 344</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>LivePatchingEditPage</value>
|
||||
<value>PatchingWizard_PatchingPage</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,363 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labelTitle.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="labelTitle.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 13</value>
|
||||
</data>
|
||||
<data name="labelTitle.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>92, 13</value>
|
||||
</data>
|
||||
<data name="labelTitle.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelTitle.Text" xml:space="preserve">
|
||||
<value>Installing updates:</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.Name" xml:space="preserve">
|
||||
<value>labelTitle</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.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=">>labelTitle.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="textBoxLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 71</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="textBoxLog.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Both</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 216</value>
|
||||
</data>
|
||||
<data name="textBoxLog.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Name" xml:space="preserve">
|
||||
<value>textBoxLog</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="progressBar.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="progressBar.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 42</value>
|
||||
</data>
|
||||
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 23</value>
|
||||
</data>
|
||||
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>progressBar.Name" xml:space="preserve">
|
||||
<value>progressBar</value>
|
||||
</data>
|
||||
<data name=">>progressBar.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>progressBar.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>progressBar.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelError.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelError.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelError.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labelError.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>35, 18</value>
|
||||
</data>
|
||||
<data name="labelError.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 8, 3, 3</value>
|
||||
</data>
|
||||
<data name="labelError.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>407, 21</value>
|
||||
</data>
|
||||
<data name="labelError.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelError.Text" xml:space="preserve">
|
||||
<value>Error</value>
|
||||
</data>
|
||||
<data name=">>labelError.Name" xml:space="preserve">
|
||||
<value>labelError</value>
|
||||
</data>
|
||||
<data name=">>labelError.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=">>labelError.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>labelError.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="pictureBox1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 10</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 32</value>
|
||||
</data>
|
||||
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</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>panel1</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="panel1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="panel1.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>448, 18</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 8, 3, 3</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 13</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.Text" xml:space="preserve">
|
||||
<value>&More info...</value>
|
||||
</data>
|
||||
<data name="errorLinkLabel.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>errorLinkLabel.Name" xml:space="preserve">
|
||||
<value>errorLinkLabel</value>
|
||||
</data>
|
||||
<data name=">>errorLinkLabel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>errorLinkLabel.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>errorLinkLabel.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 293</value>
|
||||
</data>
|
||||
<data name="panel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 10, 0, 0</value>
|
||||
</data>
|
||||
<data name="panel1.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>511, 42</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="panel1.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>panel1.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=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="panel1.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="errorLinkLabel" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="labelError" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100,AutoSize,0" /><Rows Styles="Percent,100" /></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.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>511, 335</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PatchingWizard_AutoUpdatingPage</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,312 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labelTitle.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="labelTitle.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 13</value>
|
||||
</data>
|
||||
<data name="labelTitle.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>92, 13</value>
|
||||
</data>
|
||||
<data name="labelTitle.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelTitle.Text" xml:space="preserve">
|
||||
<value>正在安装更新:</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.Name" xml:space="preserve">
|
||||
<value>labelTitle</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.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=">>labelTitle.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="textBoxLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 71</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="textBoxLog.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Both</value>
|
||||
</data>
|
||||
<data name="textBoxLog.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 230</value>
|
||||
</data>
|
||||
<data name="textBoxLog.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Name" xml:space="preserve">
|
||||
<value>textBoxLog</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxLog.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="progressBar.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="progressBar.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="progressBar.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 42</value>
|
||||
</data>
|
||||
<data name="progressBar.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>502, 23</value>
|
||||
</data>
|
||||
<data name="progressBar.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>progressBar.Name" xml:space="preserve">
|
||||
<value>progressBar</value>
|
||||
</data>
|
||||
<data name=">>progressBar.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>progressBar.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>progressBar.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelError.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelError.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labelError.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>35, 0</value>
|
||||
</data>
|
||||
<data name="labelError.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 13</value>
|
||||
</data>
|
||||
<data name="labelError.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelError.Text" xml:space="preserve">
|
||||
<value>错误</value>
|
||||
</data>
|
||||
<data name=">>labelError.Name" xml:space="preserve">
|
||||
<value>labelError</value>
|
||||
</data>
|
||||
<data name=">>labelError.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=">>labelError.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>labelError.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="panel1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="pictureBox1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 32</value>
|
||||
</data>
|
||||
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 312</value>
|
||||
</data>
|
||||
<data name="panel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>511, 32</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="panel1.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<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>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>511, 344</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PatchingWizard_PatchingPage</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
@ -41,9 +41,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.pictureBox4 = new System.Windows.Forms.PictureBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.labelDownloadUpdate = new System.Windows.Forms.Label();
|
||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.panel4.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
|
||||
@ -51,8 +48,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
|
||||
this.panel3.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
|
||||
this.panel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
@ -71,7 +66,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.tableLayoutPanel1.Controls.Add(this.panel4, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.panel3, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
@ -133,25 +127,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.labelDownloadUpdate);
|
||||
this.panel1.Controls.Add(this.pictureBox2);
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// labelDownloadUpdate
|
||||
//
|
||||
resources.ApplyResources(this.labelDownloadUpdate, "labelDownloadUpdate");
|
||||
this.labelDownloadUpdate.Name = "labelDownloadUpdate";
|
||||
//
|
||||
// pictureBox2
|
||||
//
|
||||
this.pictureBox2.Image = global::XenAdmin.Properties.Resources.homepage_bullet;
|
||||
resources.ApplyResources(this.pictureBox2, "pictureBox2");
|
||||
this.pictureBox2.Name = "pictureBox2";
|
||||
this.pictureBox2.TabStop = false;
|
||||
//
|
||||
// PatchingWizard_FirstPage
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
@ -166,8 +141,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
|
||||
this.panel3.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
|
||||
this.panel1.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@ -178,8 +151,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.PictureBox pictureBox2;
|
||||
private System.Windows.Forms.Panel panel4;
|
||||
private System.Windows.Forms.PictureBox pictureBox5;
|
||||
private System.Windows.Forms.Label label9;
|
||||
@ -189,7 +160,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.PictureBox pictureBox4;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label labelDownloadUpdate;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -126,7 +126,7 @@
|
||||
<value>3, 0</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>363, 13</value>
|
||||
<value>369, 13</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@ -145,7 +145,7 @@
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@ -172,7 +172,7 @@
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@ -245,7 +245,7 @@
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panel4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 183</value>
|
||||
<value>3, 143</value>
|
||||
</data>
|
||||
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>594, 34</value>
|
||||
@ -329,7 +329,7 @@
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 103</value>
|
||||
<value>3, 63</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>594, 34</value>
|
||||
@ -413,7 +413,7 @@
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 143</value>
|
||||
<value>3, 103</value>
|
||||
</data>
|
||||
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>594, 34</value>
|
||||
@ -433,90 +433,6 @@
|
||||
<data name=">>panel3.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>17, 0</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>20, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 0, 3, 0</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>577, 34</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.Text" xml:space="preserve">
|
||||
<value>Download the relevant update and ensure that you can access the update file from your computer.</value>
|
||||
</data>
|
||||
<data name="labelDownloadUpdate.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>labelDownloadUpdate.Name" xml:space="preserve">
|
||||
<value>labelDownloadUpdate</value>
|
||||
</data>
|
||||
<data name=">>labelDownloadUpdate.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=">>labelDownloadUpdate.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>labelDownloadUpdate.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="pictureBox2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 15</value>
|
||||
</data>
|
||||
<data name="pictureBox2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>4, 4</value>
|
||||
</data>
|
||||
<data name="pictureBox2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>pictureBox2.Name" xml:space="preserve">
|
||||
<value>pictureBox2</value>
|
||||
</data>
|
||||
<data name=">>pictureBox2.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=">>pictureBox2.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>pictureBox2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 63</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>594, 34</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
@ -527,7 +443,7 @@
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 220</value>
|
||||
<value>600, 180</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
@ -545,7 +461,7 @@
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="panel4" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel2" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel3" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel1" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,30,Absolute,30,Absolute,40,Absolute,40,Absolute,40,Absolute,40" /></TableLayoutSettings></value>
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="panel4" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel2" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel3" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,30,Absolute,30,AutoSize,40,Absolute,40,Absolute,40,Absolute,40" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
@ -562,4 +478,4 @@
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>XenAdmin.Controls.XenTabPage, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
||||
</root>
|
@ -41,19 +41,21 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.buttonReCheckProblems = new System.Windows.Forms.Button();
|
||||
this.buttonResolveAll = new System.Windows.Forms.Button();
|
||||
this.progressBar1 = new System.Windows.Forms.ProgressBar();
|
||||
this.panelErrorsFound = new System.Windows.Forms.Panel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.labelIssues = new System.Windows.Forms.Label();
|
||||
this.pictureBoxIssues = new System.Windows.Forms.PictureBox();
|
||||
this.checkBoxViewPrecheckFailuresOnly = new System.Windows.Forms.CheckBox();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.labelProgress = new System.Windows.Forms.Label();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||
this.panelErrorsFound.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIssues)).BeginInit();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// labelPrechecksFirstLine
|
||||
//
|
||||
resources.ApplyResources(this.labelPrechecksFirstLine, "labelPrechecksFirstLine");
|
||||
this.labelPrechecksFirstLine.AutoEllipsis = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.labelPrechecksFirstLine, 4);
|
||||
this.labelPrechecksFirstLine.Name = "labelPrechecksFirstLine";
|
||||
//
|
||||
// dataGridView1
|
||||
@ -68,6 +70,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.ColumnState,
|
||||
this.ColumnDescription,
|
||||
this.ColumnSolution});
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.dataGridView1, 4);
|
||||
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
|
||||
dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
@ -79,9 +82,9 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.dataGridView1.HideSelection = true;
|
||||
this.dataGridView1.Name = "dataGridView1";
|
||||
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect;
|
||||
this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);
|
||||
this.dataGridView1.CellMouseMove += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_CellMouseMove);
|
||||
this.dataGridView1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dataGridView1_KeyPress);
|
||||
this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);
|
||||
//
|
||||
// ColumnState
|
||||
//
|
||||
@ -124,52 +127,65 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
//
|
||||
// progressBar1
|
||||
//
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.progressBar1, 4);
|
||||
resources.ApplyResources(this.progressBar1, "progressBar1");
|
||||
this.progressBar1.Name = "progressBar1";
|
||||
//
|
||||
// panelErrorsFound
|
||||
// labelIssues
|
||||
//
|
||||
resources.ApplyResources(this.panelErrorsFound, "panelErrorsFound");
|
||||
this.panelErrorsFound.Controls.Add(this.label1);
|
||||
this.panelErrorsFound.Controls.Add(this.pictureBox1);
|
||||
this.panelErrorsFound.Name = "panelErrorsFound";
|
||||
this.labelIssues.AutoEllipsis = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.labelIssues, 3);
|
||||
resources.ApplyResources(this.labelIssues, "labelIssues");
|
||||
this.labelIssues.Name = "labelIssues";
|
||||
//
|
||||
// label1
|
||||
// pictureBoxIssues
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.AutoEllipsis = true;
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
resources.ApplyResources(this.pictureBox1, "pictureBox1");
|
||||
this.pictureBox1.Image = global::XenAdmin.Properties.Resources._000_Abort_h32bit_16;
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.TabStop = false;
|
||||
this.pictureBoxIssues.Image = global::XenAdmin.Properties.Resources._000_Abort_h32bit_16;
|
||||
resources.ApplyResources(this.pictureBoxIssues, "pictureBoxIssues");
|
||||
this.pictureBoxIssues.Name = "pictureBoxIssues";
|
||||
this.pictureBoxIssues.TabStop = false;
|
||||
//
|
||||
// checkBoxViewPrecheckFailuresOnly
|
||||
//
|
||||
resources.ApplyResources(this.checkBoxViewPrecheckFailuresOnly, "checkBoxViewPrecheckFailuresOnly");
|
||||
this.checkBoxViewPrecheckFailuresOnly.Checked = true;
|
||||
this.checkBoxViewPrecheckFailuresOnly.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.checkBoxViewPrecheckFailuresOnly, 2);
|
||||
this.checkBoxViewPrecheckFailuresOnly.Name = "checkBoxViewPrecheckFailuresOnly";
|
||||
this.checkBoxViewPrecheckFailuresOnly.UseVisualStyleBackColor = true;
|
||||
this.checkBoxViewPrecheckFailuresOnly.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelPrechecksFirstLine, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.dataGridView1, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelProgress, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.buttonResolveAll, 3, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.checkBoxViewPrecheckFailuresOnly, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.buttonReCheckProblems, 2, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.pictureBoxIssues, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.progressBar1, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelIssues, 1, 4);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
//
|
||||
// labelProgress
|
||||
//
|
||||
this.labelProgress.AutoEllipsis = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.labelProgress, 4);
|
||||
resources.ApplyResources(this.labelProgress, "labelProgress");
|
||||
this.labelProgress.Name = "labelProgress";
|
||||
//
|
||||
// PatchingWizard_PrecheckPage
|
||||
//
|
||||
this.Controls.Add(this.checkBoxViewPrecheckFailuresOnly);
|
||||
this.Controls.Add(this.panelErrorsFound);
|
||||
this.Controls.Add(this.progressBar1);
|
||||
this.Controls.Add(this.buttonResolveAll);
|
||||
this.Controls.Add(this.buttonReCheckProblems);
|
||||
this.Controls.Add(this.dataGridView1);
|
||||
this.Controls.Add(this.labelPrechecksFirstLine);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.Name = "PatchingWizard_PrecheckPage";
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||
this.panelErrorsFound.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBoxIssues)).EndInit();
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
@ -180,13 +196,14 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private System.Windows.Forms.Button buttonReCheckProblems;
|
||||
private System.Windows.Forms.Button buttonResolveAll;
|
||||
private System.Windows.Forms.ProgressBar progressBar1;
|
||||
private System.Windows.Forms.Panel panelErrorsFound;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Label labelIssues;
|
||||
private System.Windows.Forms.PictureBox pictureBoxIssues;
|
||||
private System.Windows.Forms.CheckBox checkBoxViewPrecheckFailuresOnly;
|
||||
private System.Windows.Forms.DataGridViewImageColumn ColumnState;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnDescription;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnSolution;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.Label labelProgress;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,8 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private BackgroundWorker _worker = null;
|
||||
public List<Host> SelectedServers = new List<Host>();
|
||||
public List<Problem> ProblemsResolvedPreCheck = new List<Problem>();
|
||||
public bool IsInAutomaticMode { get; set; }
|
||||
private AsyncAction resolvePrechecksAction = null;
|
||||
|
||||
protected List<Pool> SelectedPools
|
||||
{
|
||||
@ -68,7 +70,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
InitializeComponent();
|
||||
dataGridView1.BackgroundColor = dataGridView1.DefaultCellStyle.BackColor;
|
||||
checkBoxViewPrecheckFailuresOnly.Checked = true;
|
||||
}
|
||||
|
||||
public override string PageTitle
|
||||
@ -92,11 +93,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
get { return "UpdatePrechecks"; }
|
||||
}
|
||||
|
||||
public override bool EnablePrevious()
|
||||
{
|
||||
return _worker != null && !_worker.IsBusy;
|
||||
}
|
||||
|
||||
void Connection_ConnectionStateChanged(object sender, EventArgs e)
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, RefreshRechecks);
|
||||
@ -127,9 +123,17 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
if (direction == PageLoadedDirection.Back)
|
||||
return;
|
||||
|
||||
labelPrechecksFirstLine.Text = Patch != null
|
||||
? string.Format(Messages.PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE, Patch.Name)
|
||||
: Messages.PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_NO_PATCH_NAME;
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
labelPrechecksFirstLine.Text = Messages.PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_AUTOMATIC_MODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
labelPrechecksFirstLine.Text = Patch != null
|
||||
? string.Format(Messages.PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE, Patch.Name)
|
||||
: Messages.PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_NO_PATCH_NAME;
|
||||
}
|
||||
|
||||
RefreshRechecks();
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -141,7 +145,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
protected void RefreshRechecks()
|
||||
{
|
||||
buttonResolveAll.Enabled = buttonReCheckProblems.Enabled = false;
|
||||
buttonResolveAll.Enabled = buttonReCheckProblems.Enabled = checkBoxViewPrecheckFailuresOnly.Enabled = false;
|
||||
_worker = null;
|
||||
_worker = new BackgroundWorker();
|
||||
_worker.DoWork += new DoWorkEventHandler(worker_DoWork);
|
||||
@ -157,6 +161,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
if (!e.Cancelled)
|
||||
OnPageUpdated();
|
||||
progressBar1.Value = 100;
|
||||
labelProgress.Text = string.Empty;
|
||||
|
||||
bool showResolveAllButton = false;
|
||||
foreach (PreCheckGridRow row in dataGridView1.Rows)
|
||||
@ -179,7 +184,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
|
||||
buttonResolveAll.Enabled = showResolveAllButton;
|
||||
buttonReCheckProblems.Enabled = true;
|
||||
buttonReCheckProblems.Enabled = checkBoxViewPrecheckFailuresOnly.Enabled = true;
|
||||
}
|
||||
|
||||
private void AddRowToGridView(DataGridViewRow row)
|
||||
@ -214,6 +219,16 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
catch (Exception) { }
|
||||
}
|
||||
|
||||
private bool IsCheckInProgress
|
||||
{
|
||||
get { return _worker != null && _worker.IsBusy; }
|
||||
}
|
||||
|
||||
private bool IsResolveActionInProgress
|
||||
{
|
||||
get { return resolvePrechecksAction != null && !resolvePrechecksAction.IsCompleted; }
|
||||
}
|
||||
|
||||
private List<PreCheckHostRow> ExecuteCheck(Check check)
|
||||
{
|
||||
var rows = new List<PreCheckHostRow>();
|
||||
@ -259,6 +274,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
dataGridView1.Rows.Clear();
|
||||
progressBar1.Value = 0;
|
||||
labelProgress.Text = Messages.PATCHING_WIZARD_RUNNING_PRECHECKS;
|
||||
});
|
||||
Pool_patch patch = e.Argument as Pool_patch;
|
||||
|
||||
@ -365,6 +381,29 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
}
|
||||
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
checks.Add(new KeyValuePair<string, List<Check>>(Messages.PATCHINGWIZARD_PRECHECKPAGE_CHECKING_DISK_SPACE, new List<Check>()));
|
||||
checkGroup = checks[checks.Count - 1].Value;
|
||||
foreach (Pool pool in SelectedPools)
|
||||
{
|
||||
var us = Updates.GetUpgradeSequence(pool.Connection);
|
||||
|
||||
foreach (Host host in us.Keys)
|
||||
{
|
||||
checkGroup.Add(
|
||||
new DiskSpaceForBatchUpdatesCheck(
|
||||
host,
|
||||
|
||||
host.IsMaster()
|
||||
? us[host].Sum(p => p.InstallationSize) + us.Values.SelectMany(a => a).Max(p => p.InstallationSize) // master: all updates on master + largest update in pool
|
||||
: us[host].Sum(p => p.InstallationSize) + us[host].Max(p => p.InstallationSize) // non-master: all updates on this host + largest on this host
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return checks;
|
||||
}
|
||||
|
||||
@ -381,6 +420,8 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
DeregisterEventHandlers();
|
||||
if (_worker != null)
|
||||
_worker.CancelAsync();
|
||||
if (resolvePrechecksAction != null && !resolvePrechecksAction.IsCompleted)
|
||||
resolvePrechecksAction.Cancel();
|
||||
}
|
||||
|
||||
public override void PageLeave(PageLoadedDirection direction, ref bool cancel)
|
||||
@ -395,6 +436,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
base.PageLeave(direction, ref cancel);
|
||||
}
|
||||
|
||||
public override bool EnablePrevious()
|
||||
{
|
||||
return !IsCheckInProgress && !IsResolveActionInProgress;
|
||||
}
|
||||
|
||||
public override bool EnableNext()
|
||||
{
|
||||
bool problemsFound = false;
|
||||
@ -406,21 +452,18 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
problemsFound = true;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool result = _worker != null && !_worker.IsBusy && !problemsFound;
|
||||
panelErrorsFound.Visible = problemsFound;
|
||||
return result;
|
||||
UpdateControls(problemsFound);
|
||||
return !IsCheckInProgress && !IsResolveActionInProgress && !problemsFound;
|
||||
}
|
||||
|
||||
public UpdateType SelectedUpdateType { private get; set; }
|
||||
public Pool_patch Patch { private get; set; }
|
||||
public List<Pool_patch> NewUploadedPatches { private get; set; }
|
||||
|
||||
internal enum PreCheckResult { OK, Warning, Failed }
|
||||
|
||||
private abstract class PreCheckGridRow : DataGridViewRow
|
||||
private abstract class PreCheckGridRow : XenAdmin.Controls.DataGridViewEx.DataGridViewExRow
|
||||
{
|
||||
protected DataGridViewImageCell _iconCell = new DataGridViewImageCell();
|
||||
protected DataGridViewTextBoxCell _descriptionCell = new DataGridViewTextBoxCell();
|
||||
@ -508,8 +551,20 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
if (Problem is ProblemWithInformationUrl)
|
||||
_solutionCell.Value = (Problem as ProblemWithInformationUrl).LinkText;
|
||||
|
||||
_solutionCell.Style.Font = new Font(Program.DefaultFont, FontStyle.Underline);
|
||||
_solutionCell.Style.ForeColor = Color.Blue;
|
||||
UpdateSolutionCellStyle();
|
||||
}
|
||||
|
||||
private void UpdateSolutionCellStyle()
|
||||
{
|
||||
if (_solutionCell == null)
|
||||
return;
|
||||
if (Enabled)
|
||||
{
|
||||
_solutionCell.Style.Font = new Font(Program.DefaultFont, FontStyle.Underline);
|
||||
_solutionCell.Style.ForeColor = Color.Blue;
|
||||
}
|
||||
else
|
||||
_solutionCell.Style = DefaultCellStyle;
|
||||
}
|
||||
|
||||
public Problem Problem
|
||||
@ -543,14 +598,24 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return (_problem != null ? _problem.GetHashCode() : 0);
|
||||
}
|
||||
|
||||
public override bool Enabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return base.Enabled;
|
||||
}
|
||||
set
|
||||
{
|
||||
base.Enabled = value;
|
||||
UpdateSolutionCellStyle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ActionProgressDialog _progressDialog = null;
|
||||
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
PreCheckHostRow preCheckHostRow = dataGridView1.Rows[e.RowIndex] as PreCheckHostRow;
|
||||
if (preCheckHostRow != null && e.ColumnIndex == 2)
|
||||
if (preCheckHostRow != null && preCheckHostRow.Enabled && e.ColumnIndex == 2)
|
||||
{
|
||||
ExecuteSolution(preCheckHostRow);
|
||||
}
|
||||
@ -563,7 +628,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
PreCheckHostRow preCheckHostRow = dataGridView1.CurrentCell.OwningRow as PreCheckHostRow;
|
||||
int columnIndex = dataGridView1.CurrentCell.ColumnIndex;
|
||||
|
||||
if (preCheckHostRow != null && columnIndex == 2)
|
||||
if (preCheckHostRow != null && preCheckHostRow.Enabled && columnIndex == 2)
|
||||
ExecuteSolution(preCheckHostRow);
|
||||
}
|
||||
}
|
||||
@ -571,13 +636,20 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private void ExecuteSolution(PreCheckHostRow preCheckHostRow)
|
||||
{
|
||||
bool cancelled;
|
||||
AsyncAction action = preCheckHostRow.Problem.SolveImmediately(out cancelled);
|
||||
resolvePrechecksAction = preCheckHostRow.Problem.SolveImmediately(out cancelled);
|
||||
|
||||
if (action != null)
|
||||
if (resolvePrechecksAction != null)
|
||||
{
|
||||
action.Completed += action_Completed;
|
||||
_progressDialog = new ActionProgressDialog(action, ProgressBarStyle.Blocks);
|
||||
_progressDialog.ShowDialog(this);
|
||||
// disable all problems
|
||||
foreach (DataGridViewRow row in dataGridView1.Rows)
|
||||
{
|
||||
PreCheckHostRow preCheckRow = row as PreCheckHostRow;
|
||||
if (preCheckRow != null && preCheckRow.Problem != null)
|
||||
{
|
||||
preCheckRow.Enabled = false;
|
||||
}
|
||||
}
|
||||
StartResolvePrechecksAction();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -596,13 +668,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
}
|
||||
|
||||
private void action_Completed(ActionBase sender)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
Program.Invoke(Program.MainWindow, RefreshRechecks);
|
||||
}
|
||||
|
||||
|
||||
private void buttonReCheckProblems_Click(object sender, EventArgs e)
|
||||
{
|
||||
RefreshRechecks();
|
||||
@ -618,17 +683,69 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
bool cancelled;
|
||||
AsyncAction action = preCheckHostRow.Problem.SolveImmediately(out cancelled);
|
||||
|
||||
if (action != null)
|
||||
{
|
||||
preCheckHostRow.Enabled = false;
|
||||
actions.Add(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
var multipleAction = new ParallelAction(Messages.PATCHINGWIZARD_PRECHECKPAGE_RESOLVING_ALL, Messages.PATCHINGWIZARD_PRECHECKPAGE_RESOLVING_ALL, Messages.COMPLETED, actions, true, false);
|
||||
_progressDialog = new ActionProgressDialog(multipleAction, ProgressBarStyle.Blocks);
|
||||
_progressDialog.ShowDialog(this);
|
||||
Program.Invoke(Program.MainWindow, RefreshRechecks);
|
||||
resolvePrechecksAction = new ParallelAction(Messages.PATCHINGWIZARD_PRECHECKPAGE_RESOLVING_ALL, Messages.PATCHINGWIZARD_PRECHECKPAGE_RESOLVING_ALL, Messages.COMPLETED, actions, true, false);
|
||||
StartResolvePrechecksAction();
|
||||
}
|
||||
|
||||
private void resolvePrecheckAction_Changed(object sender)
|
||||
{
|
||||
var action = sender as AsyncAction;
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
Program.Invoke(this, () => UpdateActionProgress(action));
|
||||
}
|
||||
|
||||
private void resolvePrecheckAction_Completed(object sender)
|
||||
{
|
||||
var action = sender as AsyncAction;
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
action.Changed -= resolvePrecheckAction_Changed;
|
||||
action.Completed -= resolvePrecheckAction_Completed;
|
||||
|
||||
Program.Invoke(this, () =>
|
||||
{
|
||||
UpdateControls();
|
||||
RefreshRechecks();
|
||||
});
|
||||
}
|
||||
|
||||
private void StartResolvePrechecksAction()
|
||||
{
|
||||
if (resolvePrechecksAction == null)
|
||||
return;
|
||||
resolvePrechecksAction.Changed += resolvePrecheckAction_Changed;
|
||||
resolvePrechecksAction.Completed += resolvePrecheckAction_Completed;
|
||||
resolvePrechecksAction.RunAsync();
|
||||
UpdateActionProgress(resolvePrechecksAction);
|
||||
UpdateControls();
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void UpdateActionProgress(AsyncAction action)
|
||||
{
|
||||
progressBar1.Value = action == null ? 0 : action.PercentComplete;
|
||||
labelProgress.Text = action == null ? string.Empty : action.Description;
|
||||
}
|
||||
|
||||
private void UpdateControls(bool problemsFound = false)
|
||||
{
|
||||
bool actionInProgress = IsResolveActionInProgress;
|
||||
bool checkInProgress = IsCheckInProgress;
|
||||
buttonResolveAll.Enabled = buttonReCheckProblems.Enabled = checkBoxViewPrecheckFailuresOnly.Enabled = !actionInProgress && !checkInProgress;
|
||||
labelProgress.Visible = actionInProgress || checkInProgress || !problemsFound;
|
||||
pictureBoxIssues.Visible = labelIssues.Visible = problemsFound && !actionInProgress && !checkInProgress;
|
||||
}
|
||||
|
||||
private void checkBox1_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
RefreshRechecks();
|
||||
@ -637,10 +754,8 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
|
||||
{
|
||||
PreCheckHostRow preCheckHostRow = dataGridView1.Rows[e.RowIndex] as PreCheckHostRow;
|
||||
if (preCheckHostRow != null && e.ColumnIndex == 2 && !string.IsNullOrEmpty(preCheckHostRow.Solution))
|
||||
{
|
||||
if (preCheckHostRow != null && preCheckHostRow.Enabled && e.ColumnIndex == 2 && !string.IsNullOrEmpty(preCheckHostRow.Solution))
|
||||
Cursor = Cursors.Hand;
|
||||
}
|
||||
else
|
||||
Cursor = Cursors.Arrow;
|
||||
}
|
||||
|
@ -112,45 +112,23 @@
|
||||
<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" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labelPrechecksFirstLine.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="labelPrechecksFirstLine.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="labelPrechecksFirstLine.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>558, 31</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labelPrechecksFirstLine.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelPrechecksFirstLine.Text" xml:space="preserve">
|
||||
<value>Update pre-checks are performed to verify that the update "{0}" can be applied to the servers.</value>
|
||||
</data>
|
||||
<data name=">>labelPrechecksFirstLine.Name" xml:space="preserve">
|
||||
<value>labelPrechecksFirstLine</value>
|
||||
</data>
|
||||
<data name=">>labelPrechecksFirstLine.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=">>labelPrechecksFirstLine.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelPrechecksFirstLine.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="dataGridView1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<metadata name="ColumnState.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="ColumnState.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnState.HeaderText" xml:space="preserve">
|
||||
@ -162,13 +140,13 @@
|
||||
<data name="ColumnState.Width" type="System.Int32, mscorlib">
|
||||
<value>20</value>
|
||||
</data>
|
||||
<metadata name="ColumnDescription.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="ColumnDescription.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnDescription.HeaderText" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<metadata name="ColumnSolution.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<metadata name="ColumnSolution.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnSolution.HeaderText" xml:space="preserve">
|
||||
@ -180,11 +158,12 @@
|
||||
<data name="ColumnSolution.Width" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="dataGridView1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 63</value>
|
||||
<value>3, 34</value>
|
||||
</data>
|
||||
<data name="dataGridView1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>561, 269</value>
|
||||
<value>564, 268</value>
|
||||
</data>
|
||||
<data name="dataGridView1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@ -196,43 +175,49 @@
|
||||
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>dataGridView1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>dataGridView1.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
<data name="labelProgress.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>382, 338</value>
|
||||
<data name="labelProgress.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 23</value>
|
||||
<data name="labelProgress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 334</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name="labelProgress.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="labelProgress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>570, 22</value>
|
||||
</data>
|
||||
<data name="labelProgress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Text" xml:space="preserve">
|
||||
<value>&Check Again</value>
|
||||
<data name="labelProgress.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.Name" xml:space="preserve">
|
||||
<value>buttonReCheckProblems</value>
|
||||
<data name=">>labelProgress.Name" xml:space="preserve">
|
||||
<value>labelProgress</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>labelProgress.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=">>buttonReCheckProblems.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<data name=">>labelProgress.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<data name=">>labelProgress.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="buttonResolveAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="buttonResolveAll.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>473, 338</value>
|
||||
<value>482, 308</value>
|
||||
</data>
|
||||
<data name="buttonResolveAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 23</value>
|
||||
@ -247,122 +232,14 @@
|
||||
<value>buttonResolveAll</value>
|
||||
</data>
|
||||
<data name=">>buttonResolveAll.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonResolveAll.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>buttonResolveAll.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="progressBar1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="progressBar1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 34</value>
|
||||
</data>
|
||||
<data name="progressBar1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>561, 23</value>
|
||||
</data>
|
||||
<data name="progressBar1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.Name" xml:space="preserve">
|
||||
<value>progressBar1</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="panelErrorsFound.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>25, 0</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>364, 23</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>You need to resolve the issues found before you can continue.</value>
|
||||
</data>
|
||||
<data name="label1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>panelErrorsFound</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 0, 0</value>
|
||||
</data>
|
||||
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>25, 23</value>
|
||||
</data>
|
||||
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.Parent" xml:space="preserve">
|
||||
<value>panelErrorsFound</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panelErrorsFound.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 361</value>
|
||||
</data>
|
||||
<data name="panelErrorsFound.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>389, 23</value>
|
||||
</data>
|
||||
<data name="panelErrorsFound.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="panelErrorsFound.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>panelErrorsFound.Name" xml:space="preserve">
|
||||
<value>panelErrorsFound</value>
|
||||
</data>
|
||||
<data name=">>panelErrorsFound.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panelErrorsFound.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panelErrorsFound.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="checkBoxViewPrecheckFailuresOnly.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
@ -370,7 +247,7 @@
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="checkBoxViewPrecheckFailuresOnly.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 342</value>
|
||||
<value>3, 314</value>
|
||||
</data>
|
||||
<data name="checkBoxViewPrecheckFailuresOnly.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 17</value>
|
||||
@ -385,40 +262,205 @@
|
||||
<value>checkBoxViewPrecheckFailuresOnly</value>
|
||||
</data>
|
||||
<data name=">>checkBoxViewPrecheckFailuresOnly.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>checkBoxViewPrecheckFailuresOnly.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>checkBoxViewPrecheckFailuresOnly.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>391, 308</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 23</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="buttonReCheckProblems.Text" xml:space="preserve">
|
||||
<value>&Check Again</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.Name" xml:space="preserve">
|
||||
<value>buttonReCheckProblems</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>buttonReCheckProblems.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="pictureBoxIssues.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 359</value>
|
||||
</data>
|
||||
<data name="pictureBoxIssues.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 16</value>
|
||||
</data>
|
||||
<data name="pictureBoxIssues.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>AutoSize</value>
|
||||
</data>
|
||||
<data name="pictureBoxIssues.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxIssues.Name" xml:space="preserve">
|
||||
<value>pictureBoxIssues</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxIssues.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=">>pictureBoxIssues.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>pictureBoxIssues.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="progressBar1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="progressBar1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="progressBar1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 381</value>
|
||||
</data>
|
||||
<data name="progressBar1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>564, 16</value>
|
||||
</data>
|
||||
<data name="progressBar1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.Name" xml:space="preserve">
|
||||
<value>progressBar1</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>progressBar1.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="labelIssues.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelIssues.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>22, 356</value>
|
||||
</data>
|
||||
<data name="labelIssues.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="labelIssues.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>548, 22</value>
|
||||
</data>
|
||||
<data name="labelIssues.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="labelIssues.Text" xml:space="preserve">
|
||||
<value>You need to resolve the issues found before you can continue.</value>
|
||||
</data>
|
||||
<data name="labelIssues.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>labelIssues.Name" xml:space="preserve">
|
||||
<value>labelIssues</value>
|
||||
</data>
|
||||
<data name=">>labelIssues.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=">>labelIssues.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>labelIssues.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>570, 400</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelPrechecksFirstLine" Row="0" RowSpan="1" Column="0" ColumnSpan="4" /><Control Name="dataGridView1" Row="1" RowSpan="1" Column="0" ColumnSpan="4" /><Control Name="labelProgress" Row="3" RowSpan="1" Column="0" ColumnSpan="4" /><Control Name="buttonResolveAll" Row="2" RowSpan="1" Column="3" ColumnSpan="1" /><Control Name="checkBoxViewPrecheckFailuresOnly" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="buttonReCheckProblems" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="pictureBoxIssues" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="progressBar1" Row="5" RowSpan="1" Column="0" ColumnSpan="4" /><Control Name="labelIssues" Row="4" RowSpan="1" Column="1" ColumnSpan="3" /></Controls><Columns Styles="AutoSize,0,Percent,100,AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,Percent,100,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="labelPrechecksFirstLine.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
</data>
|
||||
<data name="labelPrechecksFirstLine.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>564, 31</value>
|
||||
</data>
|
||||
<data name="labelPrechecksFirstLine.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelPrechecksFirstLine.Text" xml:space="preserve">
|
||||
<value>Update pre-checks are performed to verify that the update "{0}" can be applied to the servers.</value>
|
||||
</data>
|
||||
<data name=">>labelPrechecksFirstLine.Name" xml:space="preserve">
|
||||
<value>labelPrechecksFirstLine</value>
|
||||
</data>
|
||||
<data name=">>labelPrechecksFirstLine.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=">>labelPrechecksFirstLine.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>labelPrechecksFirstLine.ZOrder" xml:space="preserve">
|
||||
<value>0</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.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>561, 384</value>
|
||||
<value>570, 400</value>
|
||||
</data>
|
||||
<data name=">>ColumnState.Name" xml:space="preserve">
|
||||
<value>ColumnState</value>
|
||||
</data>
|
||||
<data name=">>ColumnState.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.DataGridViewImageColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnDescription.Name" xml:space="preserve">
|
||||
<value>ColumnDescription</value>
|
||||
</data>
|
||||
<data name=">>ColumnDescription.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnSolution.Name" xml:space="preserve">
|
||||
<value>ColumnSolution</value>
|
||||
</data>
|
||||
<data name=">>ColumnSolution.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PatchingWizard_PrecheckPage</value>
|
||||
|
@ -33,57 +33,99 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PatchingWizard_SelectPatchPage));
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.automaticOptionLabel = new System.Windows.Forms.Label();
|
||||
this.labelWithoutAutomatic = new System.Windows.Forms.Label();
|
||||
this.labelWithAutomatic = new System.Windows.Forms.Label();
|
||||
this.AutomaticRadioButton = new System.Windows.Forms.RadioButton();
|
||||
this.automaticOptionLabel = new System.Windows.Forms.Label();
|
||||
this.downloadUpdateRadioButton = new System.Windows.Forms.RadioButton();
|
||||
this.RefreshListButton = new System.Windows.Forms.Button();
|
||||
this.RestoreDismUpdatesButton = new System.Windows.Forms.Button();
|
||||
this.selectFromDiskRadioButton = new System.Windows.Forms.RadioButton();
|
||||
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.fileNameTextBox = new System.Windows.Forms.TextBox();
|
||||
this.BrowseButton = new System.Windows.Forms.Button();
|
||||
this.selectFromDiskRadioButton = new System.Windows.Forms.RadioButton();
|
||||
this.downloadUpdateRadioButton = new System.Windows.Forms.RadioButton();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.tableLayoutPanelSpinner = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.dataGridViewPatches = new XenAdmin.Controls.DataGridViewEx.DataGridViewEx();
|
||||
this.ColumnUpdate = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnDescription = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnDate = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.webPageColumn = new System.Windows.Forms.DataGridViewLinkColumn();
|
||||
this.RefreshListButton = new System.Windows.Forms.Button();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.tableLayoutPanel2.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.tableLayoutPanelSpinner.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewPatches)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
||||
this.tableLayoutPanel1.Controls.Add(this.automaticOptionLabel, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelWithoutAutomatic, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.labelWithAutomatic, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.AutomaticRadioButton, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.RestoreDismUpdatesButton, 1, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.fileNameTextBox, 1, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.BrowseButton, 2, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.selectFromDiskRadioButton, 1, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.automaticOptionLabel, 1, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.downloadUpdateRadioButton, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.dataGridViewPatches, 0, 4);
|
||||
this.tableLayoutPanel1.Controls.Add(this.RefreshListButton, 0, 5);
|
||||
this.tableLayoutPanel1.Controls.Add(this.RefreshListButton, 1, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.RestoreDismUpdatesButton, 2, 6);
|
||||
this.tableLayoutPanel1.Controls.Add(this.selectFromDiskRadioButton, 0, 7);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 1, 8);
|
||||
this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 5);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
//
|
||||
// automaticOptionLabel
|
||||
// labelWithoutAutomatic
|
||||
//
|
||||
resources.ApplyResources(this.automaticOptionLabel, "automaticOptionLabel");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.automaticOptionLabel, 3);
|
||||
this.automaticOptionLabel.Name = "automaticOptionLabel";
|
||||
resources.ApplyResources(this.labelWithoutAutomatic, "labelWithoutAutomatic");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.labelWithoutAutomatic, 3);
|
||||
this.labelWithoutAutomatic.Name = "labelWithoutAutomatic";
|
||||
//
|
||||
// labelWithAutomatic
|
||||
//
|
||||
resources.ApplyResources(this.labelWithAutomatic, "labelWithAutomatic");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.labelWithAutomatic, 3);
|
||||
this.labelWithAutomatic.Name = "labelWithAutomatic";
|
||||
//
|
||||
// AutomaticRadioButton
|
||||
//
|
||||
resources.ApplyResources(this.AutomaticRadioButton, "AutomaticRadioButton");
|
||||
this.AutomaticRadioButton.Checked = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.AutomaticRadioButton, 3);
|
||||
this.AutomaticRadioButton.Name = "AutomaticRadioButton";
|
||||
this.AutomaticRadioButton.TabStop = true;
|
||||
this.AutomaticRadioButton.UseVisualStyleBackColor = true;
|
||||
this.AutomaticRadioButton.CheckedChanged += new System.EventHandler(this.AutomaticRadioButton_CheckedChanged);
|
||||
this.AutomaticRadioButton.TabStopChanged += new System.EventHandler(this.AutomaticRadioButton_TabStopChanged);
|
||||
//
|
||||
// automaticOptionLabel
|
||||
//
|
||||
resources.ApplyResources(this.automaticOptionLabel, "automaticOptionLabel");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.automaticOptionLabel, 2);
|
||||
this.automaticOptionLabel.Name = "automaticOptionLabel";
|
||||
//
|
||||
// downloadUpdateRadioButton
|
||||
//
|
||||
resources.ApplyResources(this.downloadUpdateRadioButton, "downloadUpdateRadioButton");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.downloadUpdateRadioButton, 3);
|
||||
this.downloadUpdateRadioButton.Name = "downloadUpdateRadioButton";
|
||||
this.downloadUpdateRadioButton.UseVisualStyleBackColor = true;
|
||||
this.downloadUpdateRadioButton.CheckedChanged += new System.EventHandler(this.downloadUpdateRadioButton_CheckedChanged);
|
||||
this.downloadUpdateRadioButton.TabStopChanged += new System.EventHandler(this.downloadUpdateRadioButton_TabStopChanged);
|
||||
//
|
||||
// RefreshListButton
|
||||
//
|
||||
resources.ApplyResources(this.RefreshListButton, "RefreshListButton");
|
||||
this.RefreshListButton.Name = "RefreshListButton";
|
||||
this.RefreshListButton.UseVisualStyleBackColor = true;
|
||||
this.RefreshListButton.Click += new System.EventHandler(this.RefreshListButton_Click);
|
||||
//
|
||||
// RestoreDismUpdatesButton
|
||||
//
|
||||
@ -92,6 +134,24 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.RestoreDismUpdatesButton.UseVisualStyleBackColor = true;
|
||||
this.RestoreDismUpdatesButton.Click += new System.EventHandler(this.RestoreDismUpdatesButton_Click);
|
||||
//
|
||||
// selectFromDiskRadioButton
|
||||
//
|
||||
resources.ApplyResources(this.selectFromDiskRadioButton, "selectFromDiskRadioButton");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.selectFromDiskRadioButton, 3);
|
||||
this.selectFromDiskRadioButton.Name = "selectFromDiskRadioButton";
|
||||
this.selectFromDiskRadioButton.UseVisualStyleBackColor = true;
|
||||
this.selectFromDiskRadioButton.CheckedChanged += new System.EventHandler(this.selectFromDiskRadioButton_CheckedChanged);
|
||||
this.selectFromDiskRadioButton.TabStopChanged += new System.EventHandler(this.selectFromDiskRadioButton_TabStopChanged);
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 2);
|
||||
this.tableLayoutPanel2.Controls.Add(this.label2, 0, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.fileNameTextBox, 1, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.BrowseButton, 2, 0);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
@ -111,55 +171,70 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.BrowseButton.UseVisualStyleBackColor = true;
|
||||
this.BrowseButton.Click += new System.EventHandler(this.BrowseButton_Click);
|
||||
//
|
||||
// selectFromDiskRadioButton
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.selectFromDiskRadioButton, "selectFromDiskRadioButton");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.selectFromDiskRadioButton, 4);
|
||||
this.selectFromDiskRadioButton.Name = "selectFromDiskRadioButton";
|
||||
this.selectFromDiskRadioButton.UseVisualStyleBackColor = true;
|
||||
this.selectFromDiskRadioButton.CheckedChanged += new System.EventHandler(this.selectFromDiskRadioButton_CheckedChanged);
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.panel1, 2);
|
||||
this.panel1.Controls.Add(this.tableLayoutPanelSpinner);
|
||||
this.panel1.Controls.Add(this.dataGridViewPatches);
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// downloadUpdateRadioButton
|
||||
// tableLayoutPanelSpinner
|
||||
//
|
||||
resources.ApplyResources(this.downloadUpdateRadioButton, "downloadUpdateRadioButton");
|
||||
this.downloadUpdateRadioButton.Checked = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.downloadUpdateRadioButton, 3);
|
||||
this.downloadUpdateRadioButton.Name = "downloadUpdateRadioButton";
|
||||
this.downloadUpdateRadioButton.TabStop = true;
|
||||
this.downloadUpdateRadioButton.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.tableLayoutPanelSpinner, "tableLayoutPanelSpinner");
|
||||
this.tableLayoutPanelSpinner.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.tableLayoutPanelSpinner.Controls.Add(this.pictureBox1, 0, 0);
|
||||
this.tableLayoutPanelSpinner.Controls.Add(this.label1, 1, 0);
|
||||
this.tableLayoutPanelSpinner.Name = "tableLayoutPanelSpinner";
|
||||
//
|
||||
// label3
|
||||
// pictureBox1
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.label3, 3);
|
||||
this.label3.Name = "label3";
|
||||
this.pictureBox1.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.pictureBox1.Image = global::XenAdmin.Properties.Resources.ajax_loader;
|
||||
resources.ApplyResources(this.pictureBox1, "pictureBox1");
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// dataGridViewPatches
|
||||
//
|
||||
this.dataGridViewPatches.AllowUserToResizeColumns = false;
|
||||
this.dataGridViewPatches.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
|
||||
this.dataGridViewPatches.BackgroundColor = System.Drawing.SystemColors.Window;
|
||||
this.dataGridViewPatches.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;
|
||||
this.dataGridViewPatches.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
|
||||
this.dataGridViewPatches.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.dataGridViewPatches.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.ColumnUpdate,
|
||||
this.ColumnDescription,
|
||||
this.ColumnDate,
|
||||
this.webPageColumn});
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.dataGridViewPatches, 3);
|
||||
dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||
dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window;
|
||||
dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Window;
|
||||
dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.ControlText;
|
||||
dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewPatches.DefaultCellStyle = dataGridViewCellStyle4;
|
||||
resources.ApplyResources(this.dataGridViewPatches, "dataGridViewPatches");
|
||||
this.dataGridViewPatches.HideSelection = true;
|
||||
this.dataGridViewPatches.Name = "dataGridViewPatches";
|
||||
this.dataGridViewPatches.ReadOnly = true;
|
||||
dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||
dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control;
|
||||
dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||
dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
||||
dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
||||
dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewPatches.RowHeadersDefaultCellStyle = dataGridViewCellStyle4;
|
||||
dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||
this.dataGridViewPatches.RowsDefaultCellStyle = dataGridViewCellStyle5;
|
||||
dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||
dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control;
|
||||
dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||
dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
||||
dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
||||
dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||
this.dataGridViewPatches.RowHeadersDefaultCellStyle = dataGridViewCellStyle5;
|
||||
dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||
this.dataGridViewPatches.RowsDefaultCellStyle = dataGridViewCellStyle6;
|
||||
this.dataGridViewPatches.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.True;
|
||||
this.dataGridViewPatches.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewPatches_CellContentClick);
|
||||
this.dataGridViewPatches.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridViewPatches_CellMouseClick);
|
||||
@ -210,13 +285,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.webPageColumn.ReadOnly = true;
|
||||
this.webPageColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
|
||||
//
|
||||
// RefreshListButton
|
||||
//
|
||||
resources.ApplyResources(this.RefreshListButton, "RefreshListButton");
|
||||
this.RefreshListButton.Name = "RefreshListButton";
|
||||
this.RefreshListButton.UseVisualStyleBackColor = true;
|
||||
this.RefreshListButton.Click += new System.EventHandler(this.RefreshListButton_Click);
|
||||
//
|
||||
// PatchingWizard_SelectPatchPage
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
@ -225,6 +293,13 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
this.Name = "PatchingWizard_SelectPatchPage";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.tableLayoutPanel2.ResumeLayout(false);
|
||||
this.tableLayoutPanel2.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.tableLayoutPanelSpinner.ResumeLayout(false);
|
||||
this.tableLayoutPanelSpinner.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewPatches)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
@ -240,7 +315,7 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private System.Windows.Forms.RadioButton selectFromDiskRadioButton;
|
||||
private System.Windows.Forms.Button RefreshListButton;
|
||||
private System.Windows.Forms.RadioButton downloadUpdateRadioButton;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label labelWithAutomatic;
|
||||
private System.Windows.Forms.Button RestoreDismUpdatesButton;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnUpdate;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnDescription;
|
||||
@ -248,5 +323,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
private System.Windows.Forms.DataGridViewLinkColumn webPageColumn;
|
||||
private System.Windows.Forms.Label automaticOptionLabel;
|
||||
private System.Windows.Forms.RadioButton AutomaticRadioButton;
|
||||
private System.Windows.Forms.Label labelWithoutAutomatic;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSpinner;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,6 @@ using System.Windows.Forms;
|
||||
using XenAdmin.Controls;
|
||||
using XenAdmin.Controls.DataGridViewEx;
|
||||
using XenAdmin.Core;
|
||||
using XenAdmin.Network;
|
||||
using XenAdmin.Properties;
|
||||
using XenAPI;
|
||||
using System.ComponentModel;
|
||||
@ -44,6 +43,8 @@ using System.IO;
|
||||
using XenAdmin.Dialogs;
|
||||
using System.Drawing;
|
||||
using XenAdmin.Alerts;
|
||||
using System.Linq;
|
||||
using XenAdmin.Actions;
|
||||
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
@ -57,31 +58,51 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
public PatchingWizard_SelectPatchPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
PopulatePatchesBox();
|
||||
tableLayoutPanelSpinner.Visible = false;
|
||||
|
||||
labelWithAutomatic.Visible = automaticOptionLabel.Visible = AutomaticRadioButton.Visible = false;
|
||||
downloadUpdateRadioButton.Checked = true;
|
||||
|
||||
dataGridViewPatches.Sort(ColumnDate, ListSortDirection.Descending);
|
||||
}
|
||||
|
||||
|
||||
private void CheckForUpdates_CheckForUpdatesStarted()
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
dataGridViewPatches.Focus();
|
||||
RestoreDismUpdatesButton.Enabled = false;
|
||||
RefreshListButton.Enabled = false;
|
||||
});
|
||||
Program.Invoke(Program.MainWindow, StartCheckForUpdates);
|
||||
}
|
||||
|
||||
private void Updates_RestoreDismissedUpdatesStarted()
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, StartCheckForUpdates);
|
||||
}
|
||||
|
||||
private void StartCheckForUpdates()
|
||||
{
|
||||
if (CheckForUpdatesInProgress)
|
||||
return;
|
||||
|
||||
CheckForUpdatesInProgress = true;
|
||||
dataGridViewPatches.Rows.Clear();
|
||||
dataGridViewPatches.Focus();
|
||||
tableLayoutPanelSpinner.Visible = true;
|
||||
RestoreDismUpdatesButton.Enabled = false;
|
||||
RefreshListButton.Enabled = false;
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void CheckForUpdates_CheckForUpdatesCompleted(bool succeeded, string errorMessage)
|
||||
{
|
||||
Program.Invoke(Program.MainWindow, delegate
|
||||
{
|
||||
PopulatePatchesBox();
|
||||
tableLayoutPanelSpinner.Visible = false;
|
||||
if (!IsInAutomaticMode)
|
||||
{
|
||||
PopulatePatchesBox();
|
||||
}
|
||||
RefreshListButton.Enabled = true;
|
||||
RestoreDismUpdatesButton.Enabled = true;
|
||||
CheckForUpdatesInProgress = false;
|
||||
OnPageUpdated();
|
||||
RestoreDismUpdatesButton.Enabled = true;
|
||||
});
|
||||
}
|
||||
|
||||
@ -121,59 +142,94 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
public override void PageLoaded(PageLoadedDirection direction)
|
||||
{
|
||||
base.PageLoaded(direction);
|
||||
RefreshListButton.Enabled = true;
|
||||
Updates.CheckForUpdatesStarted += CheckForUpdates_CheckForUpdatesStarted;
|
||||
Updates.CheckForUpdatesCompleted += CheckForUpdates_CheckForUpdatesCompleted;
|
||||
Updates.RestoreDismissedUpdatesStarted += Updates_RestoreDismissedUpdatesStarted;
|
||||
|
||||
if (direction == PageLoadedDirection.Forward)
|
||||
{
|
||||
//if any connected host is licensed for automatic updating
|
||||
bool autoUpdatePossible = ConnectionsManager.XenConnectionsCopy.Any(c => c != null && c.Cache.Hosts.Any(h => !Host.RestrictBatchHotfixApply(h)));
|
||||
|
||||
labelWithAutomatic.Visible = automaticOptionLabel.Visible = AutomaticRadioButton.Visible = autoUpdatePossible;
|
||||
labelWithoutAutomatic.Visible = !autoUpdatePossible;
|
||||
|
||||
AutomaticRadioButton.Checked = autoUpdatePossible;
|
||||
downloadUpdateRadioButton.Checked = !autoUpdatePossible;
|
||||
|
||||
PopulatePatchesBox();
|
||||
UpdateEnablement();
|
||||
OnPageUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsInAutomaticMode { get { return AutomaticRadioButton.Visible && AutomaticRadioButton.Checked; } }
|
||||
|
||||
public List<XenServerVersion> AutoDownloadedXenServerVersions { get; private set; }
|
||||
|
||||
public override void PageLeave(PageLoadedDirection direction, ref bool cancel)
|
||||
{
|
||||
if (direction == PageLoadedDirection.Forward)
|
||||
{
|
||||
var fileName = fileNameTextBox.Text;
|
||||
if (downloadUpdateRadioButton.Checked)
|
||||
if (!IsInAutomaticMode)
|
||||
{
|
||||
SelectedUpdateType = UpdateType.NewRetail;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isValidFile())
|
||||
var fileName = fileNameTextBox.Text;
|
||||
if (downloadUpdateRadioButton.Checked)
|
||||
{
|
||||
if (fileName.EndsWith(UpdateExtension))
|
||||
SelectedUpdateType = UpdateType.NewRetail;
|
||||
else if (fileName.EndsWith(".iso"))
|
||||
SelectedUpdateType = UpdateType.NewSuppPack;
|
||||
else
|
||||
SelectedUpdateType = UpdateType.Existing;
|
||||
SelectedUpdateType = UpdateType.NewRetail;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isValidFile())
|
||||
{
|
||||
if (fileName.EndsWith(UpdateExtension))
|
||||
SelectedUpdateType = UpdateType.NewRetail;
|
||||
else if (fileName.EndsWith(".iso"))
|
||||
SelectedUpdateType = UpdateType.NewSuppPack;
|
||||
else
|
||||
SelectedUpdateType = UpdateType.Existing;
|
||||
}
|
||||
}
|
||||
SelectedUpdateAlert = downloadUpdateRadioButton.Checked
|
||||
? (XenServerPatchAlert)((PatchGridViewRow)dataGridViewPatches.SelectedRows[0]).UpdateAlert
|
||||
: null;
|
||||
FileFromDiskAlert = selectFromDiskRadioButton.Checked
|
||||
? GetAlertFromFileName(fileName)
|
||||
: null;
|
||||
|
||||
|
||||
if (SelectedExistingPatch != null && !SelectedExistingPatch.Connection.IsConnected)
|
||||
{
|
||||
cancel = true;
|
||||
PageLeaveCancelled(string.Format(Messages.UPDATES_WIZARD_CANNOT_DOWNLOAD_PATCH,
|
||||
SelectedExistingPatch.Connection.Name));
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(SelectedNewPatch) && !File.Exists(SelectedNewPatch))
|
||||
{
|
||||
cancel = true;
|
||||
PageLeaveCancelled(string.Format(Messages.UPDATES_WIZARD_FILE_NOT_FOUND, SelectedNewPatch));
|
||||
}
|
||||
}
|
||||
SelectedUpdateAlert = downloadUpdateRadioButton.Checked
|
||||
? (XenServerPatchAlert)((PatchGridViewRow)dataGridViewPatches.SelectedRows[0]).UpdateAlert
|
||||
: null;
|
||||
FileFromDiskAlert = selectFromDiskRadioButton.Checked
|
||||
? GetAlertFromFileName(fileName)
|
||||
: null;
|
||||
|
||||
|
||||
if (SelectedExistingPatch != null && !SelectedExistingPatch.Connection.IsConnected)
|
||||
else //In Automatic Mode
|
||||
{
|
||||
cancel = true;
|
||||
PageLeaveCancelled(string.Format(Messages.UPDATES_WIZARD_CANNOT_DOWNLOAD_PATCH,
|
||||
SelectedExistingPatch.Connection.Name));
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(SelectedNewPatch) && !File.Exists(SelectedNewPatch))
|
||||
{
|
||||
cancel = true;
|
||||
PageLeaveCancelled(string.Format(Messages.UPDATES_WIZARD_FILE_NOT_FOUND, SelectedNewPatch));
|
||||
var downloadUpdatesAction = new DownloadUpdatesXmlAction(false, true, true, Updates.CheckForUpdatesUrl);
|
||||
|
||||
using (var dialog = new ActionProgressDialog(downloadUpdatesAction, ProgressBarStyle.Marquee))
|
||||
dialog.ShowDialog(this.Parent); //Will block until dialog closes, action completed
|
||||
|
||||
if (!downloadUpdatesAction.Succeeded)
|
||||
{
|
||||
cancel = true;
|
||||
}
|
||||
AutoDownloadedXenServerVersions = downloadUpdatesAction.XenServerVersions;
|
||||
}
|
||||
}
|
||||
Updates.CheckForUpdatesCompleted -= CheckForUpdates_CheckForUpdatesCompleted;
|
||||
|
||||
if (!cancel) //unsubscribe only if we are really leaving this page
|
||||
{
|
||||
Updates.RestoreDismissedUpdatesStarted -= Updates_RestoreDismissedUpdatesStarted;
|
||||
Updates.CheckForUpdatesStarted -= CheckForUpdates_CheckForUpdatesStarted;
|
||||
Updates.CheckForUpdatesCompleted -= CheckForUpdates_CheckForUpdatesCompleted;
|
||||
}
|
||||
base.PageLeave(direction, ref cancel);
|
||||
}
|
||||
|
||||
@ -231,6 +287,8 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
|
||||
public override void PageCancelled()
|
||||
{
|
||||
Updates.RestoreDismissedUpdatesStarted -= Updates_RestoreDismissedUpdatesStarted;
|
||||
Updates.CheckForUpdatesStarted -= CheckForUpdates_CheckForUpdatesStarted;
|
||||
Updates.CheckForUpdatesCompleted -= CheckForUpdates_CheckForUpdatesCompleted;
|
||||
}
|
||||
|
||||
@ -240,6 +298,12 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (downloadUpdateRadioButton.Checked)
|
||||
{
|
||||
if (dataGridViewPatches.SelectedRows.Count == 1)
|
||||
@ -261,6 +325,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool EnablePrevious()
|
||||
{
|
||||
return !CheckForUpdatesInProgress;
|
||||
}
|
||||
|
||||
private string UpdateExtension
|
||||
{
|
||||
get { return "." + Branding.Update; }
|
||||
@ -272,13 +341,6 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return !string.IsNullOrEmpty(fileName) && File.Exists(fileName) && (fileName.EndsWith(UpdateExtension) || fileName.EndsWith(".iso"));
|
||||
}
|
||||
|
||||
|
||||
private void UpdateEnablement()
|
||||
{
|
||||
dataGridViewPatches.HideSelection = !downloadUpdateRadioButton.Checked;
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void BrowseButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Showing this dialog has the (undocumented) side effect of changing the working directory
|
||||
@ -290,18 +352,19 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
try
|
||||
{
|
||||
oldDir = Directory.GetCurrentDirectory();
|
||||
OpenFileDialog dlg = new OpenFileDialog();
|
||||
dlg.Multiselect = false;
|
||||
dlg.ShowReadOnly = false;
|
||||
dlg.Filter = string.Format(Messages.PATCHINGWIZARD_SELECTPATCHPAGE_UPDATESEXT, Branding.Update);
|
||||
dlg.FilterIndex = 0;
|
||||
dlg.CheckFileExists = true;
|
||||
dlg.ShowHelp = false;
|
||||
dlg.Title = Messages.PATCHINGWIZARD_SELECTPATCHPAGE_CHOOSE;
|
||||
|
||||
if (dlg.ShowDialog(this) == DialogResult.OK && dlg.CheckFileExists)
|
||||
using (OpenFileDialog dlg = new OpenFileDialog
|
||||
{
|
||||
Multiselect = false,
|
||||
ShowReadOnly = false,
|
||||
Filter = string.Format(Messages.PATCHINGWIZARD_SELECTPATCHPAGE_UPDATESEXT, Branding.Update),
|
||||
FilterIndex = 0,
|
||||
CheckFileExists = true,
|
||||
ShowHelp = false,
|
||||
Title = Messages.PATCHINGWIZARD_SELECTPATCHPAGE_CHOOSE
|
||||
})
|
||||
{
|
||||
AddFile(dlg.FileName);
|
||||
if (dlg.ShowDialog(this) == DialogResult.OK && dlg.CheckFileExists)
|
||||
AddFile(dlg.FileName);
|
||||
}
|
||||
OnPageUpdated();
|
||||
}
|
||||
@ -352,15 +415,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
}
|
||||
|
||||
#region DataGridView
|
||||
|
||||
private void dataGridViewPatches_SelectionChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateEnablement();
|
||||
}
|
||||
|
||||
private void fileNameTextBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
selectFromDiskRadioButton.Checked = true;
|
||||
UpdateEnablement();
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void dataGridViewPatches_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
|
||||
@ -373,24 +432,11 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
return;
|
||||
PatchGridViewRow row = (PatchGridViewRow)dataGridViewPatches.Rows[e.RowIndex];
|
||||
row.toggleExpandedState();
|
||||
UpdateEnablement();
|
||||
}
|
||||
|
||||
private void RefreshListButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
CheckForUpdatesInProgress = true;
|
||||
Updates.CheckForUpdates(true);
|
||||
PopulatePatchesBox();
|
||||
}
|
||||
|
||||
private void selectFromDiskRadioButton_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateEnablement();
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void dataGridViewPatches_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
|
||||
{
|
||||
|
||||
Alert alert1 = ((PatchGridViewRow)dataGridViewPatches.Rows[e.RowIndex1]).UpdateAlert;
|
||||
Alert alert2 = ((PatchGridViewRow)dataGridViewPatches.Rows[e.RowIndex2]).UpdateAlert;
|
||||
|
||||
@ -408,14 +454,9 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
PopulatePatchesBox();
|
||||
}
|
||||
|
||||
private void fileNameTextBox_Enter(object sender, EventArgs e)
|
||||
{
|
||||
selectFromDiskRadioButton.Checked = true;
|
||||
UpdateEnablement();
|
||||
}
|
||||
|
||||
private void dataGridViewPatches_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||
{ // The click is on a column header
|
||||
{
|
||||
// The click is on a column header
|
||||
if (e.RowIndex == -1)
|
||||
{
|
||||
return;
|
||||
@ -424,14 +465,13 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
if (row != null && e.ColumnIndex == 3)
|
||||
{
|
||||
row.UpdateAlert.FixLinkAction();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void dataGridViewPatches_Enter(object sender, EventArgs e)
|
||||
{
|
||||
downloadUpdateRadioButton.Checked = true;
|
||||
UpdateEnablement();
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private class PatchGridViewRow : DataGridViewExRow, IEquatable<PatchGridViewRow>
|
||||
@ -559,11 +599,81 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Buttons
|
||||
|
||||
private void RestoreDismUpdatesButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
Updates.RestoreDismissedUpdates();
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshListButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
Updates.CheckForUpdates(true);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region TextBox
|
||||
|
||||
private void fileNameTextBox_Enter(object sender, EventArgs e)
|
||||
{
|
||||
selectFromDiskRadioButton.Checked = true;
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void fileNameTextBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
selectFromDiskRadioButton.Checked = true;
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region RadioButtons
|
||||
|
||||
private void AutomaticRadioButton_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void downloadUpdateRadioButton_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
dataGridViewPatches.HideSelection = !downloadUpdateRadioButton.Checked;
|
||||
if (downloadUpdateRadioButton.Checked)
|
||||
dataGridViewPatches.Focus();
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void selectFromDiskRadioButton_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
OnPageUpdated();
|
||||
}
|
||||
|
||||
private void AutomaticRadioButton_TabStopChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!AutomaticRadioButton.TabStop)
|
||||
AutomaticRadioButton.TabStop = true;
|
||||
}
|
||||
|
||||
private void downloadUpdateRadioButton_TabStopChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!downloadUpdateRadioButton.TabStop)
|
||||
downloadUpdateRadioButton.TabStop = true;
|
||||
}
|
||||
|
||||
private void selectFromDiskRadioButton_TabStopChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!selectFromDiskRadioButton.TabStop)
|
||||
selectFromDiskRadioButton.TabStop = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public enum UpdateType { NewRetail, Existing, NewSuppPack}
|
||||
}
|
||||
}
|
||||
|
@ -121,82 +121,100 @@
|
||||
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<data name="labelWithoutAutomatic.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="automaticOptionLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<data name="labelWithoutAutomatic.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Enabled" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="labelWithoutAutomatic.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="automaticOptionLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>36, 65</value>
|
||||
<data name="labelWithoutAutomatic.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 40</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>36, 3, 3, 3</value>
|
||||
<data name="labelWithoutAutomatic.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 0, 3, 6</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>562, 26</value>
|
||||
<data name="labelWithoutAutomatic.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>745, 17</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
<data name="labelWithoutAutomatic.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Text" xml:space="preserve">
|
||||
<value>[XenCenter] will &automatically download and install all current updates from [Citrix], usually with only a single reboot at the end.</value>
|
||||
<data name="labelWithoutAutomatic.Text" xml:space="preserve">
|
||||
<value>Select an update to be downloaded from [Citrix], or browse your computer for an update or supplemental pack file.</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
<data name=">>labelWithoutAutomatic.Name" xml:space="preserve">
|
||||
<value>labelWithoutAutomatic</value>
|
||||
</data>
|
||||
<data name=">>automaticOptionLabel.Name" xml:space="preserve">
|
||||
<value>automaticOptionLabel</value>
|
||||
</data>
|
||||
<data name=">>automaticOptionLabel.Type" xml:space="preserve">
|
||||
<data name=">>labelWithoutAutomatic.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=">>automaticOptionLabel.Parent" xml:space="preserve">
|
||||
<data name=">>labelWithoutAutomatic.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>automaticOptionLabel.ZOrder" xml:space="preserve">
|
||||
<data name=">>labelWithoutAutomatic.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
<data name="labelWithAutomatic.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 0, 3, 6</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>745, 34</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelWithAutomatic.Text" xml:space="preserve">
|
||||
<value>Select Automatic mode or choose an update to be downloaded from [Citrix], or browse your computer for an update or supplemental pack file.</value>
|
||||
</data>
|
||||
<data name=">>labelWithAutomatic.Name" xml:space="preserve">
|
||||
<value>labelWithAutomatic</value>
|
||||
</data>
|
||||
<data name=">>labelWithAutomatic.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=">>labelWithAutomatic.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>labelWithAutomatic.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Enabled" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 42</value>
|
||||
<value>3, 75</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 16, 3, 3</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.RightToLeft" type="System.Windows.Forms.RightToLeft, System.Windows.Forms">
|
||||
<value>No</value>
|
||||
<value>3, 12, 3, 3</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>72, 17</value>
|
||||
<value>91, 21</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Text" xml:space="preserve">
|
||||
<value>Automatic</value>
|
||||
</data>
|
||||
<data name="AutomaticRadioButton.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
<value>&Automatic</value>
|
||||
</data>
|
||||
<data name=">>AutomaticRadioButton.Name" xml:space="preserve">
|
||||
<value>AutomaticRadioButton</value>
|
||||
@ -208,25 +226,121 @@
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>AutomaticRadioButton.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
<data name="automaticOptionLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>23, 99</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>725, 34</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="automaticOptionLabel.Text" xml:space="preserve">
|
||||
<value>[XenCenter] will automatically download and install all current updates from [Citrix], usually with only a single reboot at the end.</value>
|
||||
</data>
|
||||
<data name=">>automaticOptionLabel.Name" xml:space="preserve">
|
||||
<value>automaticOptionLabel</value>
|
||||
</data>
|
||||
<data name=">>automaticOptionLabel.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=">>automaticOptionLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>automaticOptionLabel.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 145</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 12, 3, 3</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>213, 21</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Text" xml:space="preserve">
|
||||
<value>&Download update from [Citrix]</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.Name" xml:space="preserve">
|
||||
<value>downloadUpdateRadioButton</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>23, 429</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>94, 27</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Text" xml:space="preserve">
|
||||
<value>&Refresh List</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.Name" xml:space="preserve">
|
||||
<value>RefreshListButton</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>118, 337</value>
|
||||
<value>123, 429</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>178, 23</value>
|
||||
<value>193, 27</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="RestoreDismUpdatesButton.Text" xml:space="preserve">
|
||||
<value>Restore &Dismissed Updates</value>
|
||||
<value>Restore Dismissed &Updates</value>
|
||||
</data>
|
||||
<data name=">>RestoreDismUpdatesButton.Name" xml:space="preserve">
|
||||
<value>RestoreDismUpdatesButton</value>
|
||||
@ -238,101 +352,8 @@
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>RestoreDismUpdatesButton.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>36, 404</value>
|
||||
</data>
|
||||
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>36, 5, 3, 0</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>76, 13</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>&Filename:</value>
|
||||
</data>
|
||||
<data name="label2.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label2.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=">>label2.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>118, 402</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>388, 20</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.Name" xml:space="preserve">
|
||||
<value>fileNameTextBox</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="BrowseButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BrowseButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>512, 402</value>
|
||||
</data>
|
||||
<data name="BrowseButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>70, 22</value>
|
||||
</data>
|
||||
<data name="BrowseButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="BrowseButton.Text" xml:space="preserve">
|
||||
<value>&Browse...</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.Name" xml:space="preserve">
|
||||
<value>BrowseButton</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
@ -340,16 +361,16 @@
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 379</value>
|
||||
<value>3, 471</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 16, 3, 3</value>
|
||||
<value>3, 12, 3, 3</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>240, 17</value>
|
||||
<value>316, 21</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="selectFromDiskRadioButton.Text" xml:space="preserve">
|
||||
<value>&Select update or supplemental pack from disk</value>
|
||||
@ -364,80 +385,230 @@
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>selectFromDiskRadioButton.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 110</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 16, 3, 3</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.RightToLeft" type="System.Windows.Forms.RightToLeft, System.Windows.Forms">
|
||||
<value>No</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>163, 17</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="downloadUpdateRadioButton.Text" xml:space="preserve">
|
||||
<value>Download &update from [Citrix]</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.Name" xml:space="preserve">
|
||||
<value>downloadUpdateRadioButton</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>downloadUpdateRadioButton.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<data name="tableLayoutPanel2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
<data name="tableLayoutPanel2.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
|
||||
<value>GrowAndShrink</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 8</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>595, 26</value>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>69, 17</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Select an update that you wish to download from [Citrix], or an update or supplemental pack that you have already downloaded to your local disk.</value>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>&Filename:</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
<data name="label2.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleLeft</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label2.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=">>label3.Parent" xml:space="preserve">
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Left, Right</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>78, 5</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>562, 22</value>
|
||||
</data>
|
||||
<data name="fileNameTextBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.Name" xml:space="preserve">
|
||||
<value>fileNameTextBox</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name=">>fileNameTextBox.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="BrowseButton.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="BrowseButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BrowseButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>646, 3</value>
|
||||
</data>
|
||||
<data name="BrowseButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>76, 27</value>
|
||||
</data>
|
||||
<data name="BrowseButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BrowseButton.Text" xml:space="preserve">
|
||||
<value>&Browse...</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.Name" xml:space="preserve">
|
||||
<value>BrowseButton</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name=">>BrowseButton.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>23, 498</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>725, 33</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel2.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel2.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=">>tableLayoutPanel2.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<data name=">>tableLayoutPanel2.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="fileNameTextBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="BrowseButton" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100,AutoSize,0" /><Rows Styles="AutoSize,0" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
|
||||
<value>GrowAndShrink</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>2</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.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>AutoSize</value>
|
||||
</data>
|
||||
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</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>tableLayoutPanelSpinner</value>
|
||||
</data>
|
||||
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Left, Right</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>25, 2</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 17</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Checking for updates...</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name=">>label1.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=">>label1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanelSpinner</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>253, 112</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>182, 22</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanelSpinner.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanelSpinner</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanelSpinner.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=">>tableLayoutPanelSpinner.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanelSpinner.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanelSpinner.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="label1" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<metadata name="ColumnUpdate.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
@ -448,7 +619,7 @@
|
||||
<value>50</value>
|
||||
</data>
|
||||
<data name="ColumnUpdate.Width" type="System.Int32, mscorlib">
|
||||
<value>67</value>
|
||||
<value>83</value>
|
||||
</data>
|
||||
<metadata name="ColumnDescription.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
@ -487,19 +658,16 @@
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="dataGridViewPatches.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>36, 133</value>
|
||||
</data>
|
||||
<data name="dataGridViewPatches.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>36, 3, 3, 3</value>
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="dataGridViewPatches.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="dataGridViewPatches.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>562, 198</value>
|
||||
<value>725, 251</value>
|
||||
</data>
|
||||
<data name="dataGridViewPatches.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>dataGridViewPatches.Name" xml:space="preserve">
|
||||
<value>dataGridViewPatches</value>
|
||||
@ -508,43 +676,34 @@
|
||||
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>dataGridViewPatches.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>dataGridViewPatches.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>23, 172</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>36, 337</value>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>725, 251</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>36, 3, 3, 3</value>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 23</value>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="RefreshListButton.Text" xml:space="preserve">
|
||||
<value>&Refresh List</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.Name" xml:space="preserve">
|
||||
<value>RefreshListButton</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.Parent" xml:space="preserve">
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>RefreshListButton.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
@ -556,10 +715,10 @@
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>601, 427</value>
|
||||
<value>751, 534</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
@ -574,16 +733,19 @@
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="automaticOptionLabel" Row="3" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="AutomaticRadioButton" Row="2" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="RestoreDismUpdatesButton" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="label2" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="fileNameTextBox" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="BrowseButton" Row="7" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="selectFromDiskRadioButton" Row="6" RowSpan="1" Column="1" ColumnSpan="4" /><Control Name="downloadUpdateRadioButton" Row="4" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="dataGridViewPatches" Row="4" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="RefreshListButton" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Absolute,115,Percent,100,Absolute,92" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings></value>
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelWithoutAutomatic" Row="1" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="labelWithAutomatic" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="AutomaticRadioButton" Row="2" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="automaticOptionLabel" Row="3" RowSpan="1" Column="1" ColumnSpan="2" /><Control Name="downloadUpdateRadioButton" Row="4" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="RefreshListButton" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="RestoreDismUpdatesButton" Row="6" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="selectFromDiskRadioButton" Row="7" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="tableLayoutPanel2" Row="8" RowSpan="1" Column="1" ColumnSpan="2" /><Control Name="panel1" Row="5" RowSpan="1" Column="1" ColumnSpan="2" /></Controls><Columns Styles="Absolute,20,AutoSize,0,Percent,100,Absolute,20" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,0,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.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>96, 96</value>
|
||||
<value>120, 120</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>601, 427</value>
|
||||
<value>751, 534</value>
|
||||
</data>
|
||||
<data name=">>ColumnUpdate.Name" xml:space="preserve">
|
||||
<value>ColumnUpdate</value>
|
||||
|
@ -41,6 +41,7 @@ using XenAdmin.Network;
|
||||
using XenAdmin.Properties;
|
||||
using XenAPI;
|
||||
using XenAdmin.Alerts;
|
||||
using System.Linq;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
@ -92,33 +93,66 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
base.PageLoaded(direction);
|
||||
try
|
||||
{
|
||||
label1.Text = IsInAutomaticMode ? Messages.PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_AUTOMATIC_MODE : Messages.PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_DEFAULT;
|
||||
|
||||
// catch selected servers, in order to restore selection after the dataGrid is reloaded
|
||||
List<Host> selectedServers = SelectedServers;
|
||||
|
||||
dataGridViewHosts.Rows.Clear();
|
||||
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
//hides expand column
|
||||
dataGridViewHosts.Columns[0].Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
dataGridViewHosts.Columns[0].Visible = true;
|
||||
}
|
||||
|
||||
List<IXenConnection> xenConnections = ConnectionsManager.XenConnectionsCopy;
|
||||
xenConnections.Sort();
|
||||
foreach (IXenConnection xenConnection in xenConnections)
|
||||
{
|
||||
Pool pool = Helpers.GetPool(xenConnection);
|
||||
bool hasPool = true;
|
||||
if (pool != null)
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
int index = dataGridViewHosts.Rows.Add(new PatchingHostsDataGridViewRow(pool));
|
||||
if (!xenConnection.IsConnected)
|
||||
continue;
|
||||
|
||||
var pool = Helpers.GetPoolOfOne(xenConnection);
|
||||
Host master = pool.Connection.Resolve(pool.master);
|
||||
|
||||
int index = -1;
|
||||
if (Helpers.GetPool(xenConnection) != null) //pools
|
||||
{
|
||||
index = dataGridViewHosts.Rows.Add(new PatchingHostsDataGridViewRow(pool));
|
||||
}
|
||||
else //standalone hosts
|
||||
{
|
||||
index = dataGridViewHosts.Rows.Add(new PatchingHostsDataGridViewRow(master, false));
|
||||
}
|
||||
|
||||
EnabledRow(master, SelectedUpdateType, index);
|
||||
}
|
||||
else
|
||||
{
|
||||
hasPool = false;
|
||||
Pool pool = Helpers.GetPool(xenConnection);
|
||||
bool hasPool = pool != null;
|
||||
if (hasPool)
|
||||
{
|
||||
int index = dataGridViewHosts.Rows.Add(new PatchingHostsDataGridViewRow(pool));
|
||||
Host master = pool.Connection.Resolve(pool.master);
|
||||
EnabledRow(master, SelectedUpdateType, index);
|
||||
}
|
||||
|
||||
Host[] hosts = xenConnection.Cache.Hosts;
|
||||
Array.Sort(hosts);
|
||||
foreach (Host host in hosts)
|
||||
{
|
||||
int index = dataGridViewHosts.Rows.Add(new PatchingHostsDataGridViewRow(host, hasPool));
|
||||
EnabledRow(host, SelectedUpdateType, index);
|
||||
}
|
||||
}
|
||||
Host[] hosts = xenConnection.Cache.Hosts;
|
||||
Array.Sort(hosts);
|
||||
foreach (Host host in hosts)
|
||||
{
|
||||
int index = dataGridViewHosts.Rows.Add(new PatchingHostsDataGridViewRow(host, hasPool));
|
||||
EnabledRow(host, SelectedUpdateType, index);
|
||||
}
|
||||
}
|
||||
|
||||
// restore server selection
|
||||
@ -131,9 +165,66 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsInAutomaticMode { set; get; }
|
||||
|
||||
public List<XenServerVersion> AutoDownloadedXenServerVersions { private get; set; }
|
||||
|
||||
private void EnabledRow(Host host, UpdateType type, int index)
|
||||
{
|
||||
var row = (PatchingHostsDataGridViewRow)dataGridViewHosts.Rows[index];
|
||||
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
var pool = Helpers.GetPool(host.Connection);
|
||||
if (pool != null && !pool.IsPoolFullyUpgraded) //partially upgraded pool is not supported
|
||||
{
|
||||
row.Enabled = false;
|
||||
row.Cells[3].ToolTipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_PARTIALLY_UPGRADED;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//check updgrade sequences
|
||||
Updates.UpgradeSequence us = Updates.GetUpgradeSequence(host.Connection, AutoDownloadedXenServerVersions);
|
||||
|
||||
if (us == null) //version not supported
|
||||
{
|
||||
row.Enabled = false;
|
||||
row.Cells[3].ToolTipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_HOST_VERSION;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//unlicensed servers are not enabled
|
||||
if (Host.RestrictBatchHotfixApply(host))
|
||||
{
|
||||
row.Enabled = false;
|
||||
row.Cells[3].ToolTipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_HOST_UNLICENSED_FOR_BATCH_UPDATING;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//if there is a host missing from the upgrade sequence
|
||||
if (host.Connection.Cache.Hosts.Any(h => !us.Keys.Contains(h)))
|
||||
{
|
||||
row.Enabled = false;
|
||||
row.Cells[3].ToolTipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_NOT_AUTO_UPGRADABLE;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//if all hosts are up-to-date
|
||||
if (us.AllHostsUpToDate)
|
||||
{
|
||||
row.Enabled = false;
|
||||
row.Cells[3].ToolTipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_UP_TO_DATE;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
List<Host> selectedHosts = null;
|
||||
if (SelectedUpdateAlert != null)
|
||||
{
|
||||
@ -144,8 +235,8 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
selectedHosts = FileFromDiskAlert.DistinctHosts;
|
||||
}
|
||||
|
||||
Pool pool = Helpers.GetPoolOfOne(host.Connection);
|
||||
if (pool != null && pool.IsPatchingForbidden)
|
||||
Pool poolOfOne = Helpers.GetPoolOfOne(host.Connection);
|
||||
if (poolOfOne != null && poolOfOne.IsPatchingForbidden)
|
||||
{
|
||||
row.Enabled = false;
|
||||
row.Cells[3].ToolTipText = Messages.PATCHINGWIZARD_SELECTSERVERPAGE_PATCHING_FORBIDDEN;
|
||||
@ -342,16 +433,23 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
get
|
||||
{
|
||||
List<Host> hosts = new List<Host>();
|
||||
foreach (PatchingHostsDataGridViewRow row in dataGridViewHosts.Rows)
|
||||
if (IsInAutomaticMode)
|
||||
{
|
||||
if (row.Tag is Host)
|
||||
{
|
||||
if ((row.HasPool && ((int)row.Cells[POOL_ICON_HOST_CHECKBOX_COL].Value) == CHECKED) || (!row.HasPool && ((int)row.Cells[POOL_CHECKBOX_COL].Value) == CHECKED))
|
||||
hosts.Add((Host)row.Tag);
|
||||
}
|
||||
return SelectedPools.SelectMany(p => p.Connection.Cache.Hosts).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
List<Host> hosts = new List<Host>();
|
||||
foreach (PatchingHostsDataGridViewRow row in dataGridViewHosts.Rows)
|
||||
{
|
||||
if (row.Tag is Host)
|
||||
{
|
||||
if ((row.HasPool && ((int)row.Cells[POOL_ICON_HOST_CHECKBOX_COL].Value) == CHECKED) || (!row.HasPool && ((int)row.Cells[POOL_CHECKBOX_COL].Value) == CHECKED))
|
||||
hosts.Add((Host)row.Tag);
|
||||
}
|
||||
}
|
||||
return hosts;
|
||||
}
|
||||
return hosts;
|
||||
}
|
||||
}
|
||||
|
||||
@ -432,6 +530,10 @@ namespace XenAdmin.Wizards.PatchingWizard
|
||||
else if ((int)row.Cells[POOL_CHECKBOX_COL].Value != value)
|
||||
dataGridViewHosts.CheckBoxChange(row.Index, POOL_CHECKBOX_COL);
|
||||
}
|
||||
if (IsInAutomaticMode && row.Tag is Pool)
|
||||
{
|
||||
dataGridViewHosts.CheckBoxChange(row.Index, POOL_CHECKBOX_COL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -133,8 +133,7 @@
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Select one or more servers from the list of available servers.
|
||||
Servers where the selected update cannot be applied appear disabled in this list.</value>
|
||||
<value>rubric</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
|
@ -0,0 +1,78 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class ApplyXenServerPatchPlanAction : PlanActionWithSession
|
||||
{
|
||||
private readonly Host host;
|
||||
private readonly XenServerPatch xenServerPatch;
|
||||
private readonly List<PoolPatchMapping> mappings;
|
||||
|
||||
public ApplyXenServerPatchPlanAction(Host host, XenServerPatch xenServerPatch, List<PoolPatchMapping> mappings)
|
||||
: base(host.Connection, string.Format(Messages.UPDATES_WIZARD_APPLYING_UPDATE, xenServerPatch.Name, host.Name))
|
||||
{
|
||||
this.host = host;
|
||||
this.xenServerPatch = xenServerPatch;
|
||||
this.mappings = mappings;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
|
||||
var master = Helpers.GetMaster(host.Connection);
|
||||
var mapping = mappings.Find(m => m.XenServerPatch.Equals(xenServerPatch)
|
||||
&& m.MasterHost != null && master != null && m.MasterHost.uuid == master.uuid);
|
||||
|
||||
if (mapping != null && mapping.Pool_patch != null)
|
||||
{
|
||||
var patchRef = mapping.Pool_patch;
|
||||
|
||||
XenRef<Task> task = Pool_patch.async_apply(session, patchRef.opaque_ref, host.opaque_ref);
|
||||
|
||||
PollTaskForResultAndDestroy(Connection, ref session, task);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (xenServerPatch != null && master != null)
|
||||
log.ErrorFormat("Mapping not found for patch {0} on master {1}", xenServerPatch.Uuid, master.uuid);
|
||||
|
||||
throw new Exception("Pool_patch not found.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -38,13 +38,14 @@ using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class BringBabiesBackAction : PlanActionWithSession
|
||||
public class BringBabiesBackAction : PlanActionWithSession, IAvoidRestartHostsAware
|
||||
{
|
||||
private readonly XenRef<Host> _host;
|
||||
private readonly Host currentHost;
|
||||
private readonly List<XenRef<VM>> _vms;
|
||||
private readonly bool _enableOnly = false;
|
||||
|
||||
public List<string> AvoidRestartHosts { private get; set; }
|
||||
|
||||
public BringBabiesBackAction(List<XenRef<VM>> vms, Host host,bool enableOnly)
|
||||
: base(host.Connection, string.Format(Messages.UPDATES_WIZARD_EXITING_MAINTENANCE_MODE,host.Name))
|
||||
{
|
||||
@ -53,6 +54,7 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
this._vms = vms;
|
||||
this._enableOnly = enableOnly;
|
||||
currentHost = host;
|
||||
visible = false;
|
||||
}
|
||||
|
||||
protected override Host CurrentHost
|
||||
@ -62,6 +64,15 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
if (Helpers.ElyOrGreater(currentHost) && AvoidRestartHosts != null && AvoidRestartHosts.Contains(currentHost.uuid))
|
||||
{
|
||||
log.Debug("Skipped scheduled restart (livepatching succeeded), BringBabiesBackAction is skipped.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
visible = true;
|
||||
|
||||
Status = Messages.PLAN_ACTION_STATUS_RECONNECTING_STORAGE;
|
||||
PBD.CheckAndBestEffortPlugPBDsFor(Connection, _vms);
|
||||
|
||||
|
@ -0,0 +1,141 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Actions;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using XenAdmin.Network;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
class DownloadPatchPlanAction : PlanActionWithSession
|
||||
{
|
||||
private readonly XenServerPatch patch;
|
||||
private Dictionary<XenServerPatch, string> AllDownloadedPatches = new Dictionary<XenServerPatch, string>();
|
||||
private string tempFileName = null;
|
||||
|
||||
public DownloadPatchPlanAction(IXenConnection connection, XenServerPatch patch, Dictionary<XenServerPatch, string> allDownloadedPatches)
|
||||
: base(connection, string.Format(Messages.PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_WAITING, patch.Name))
|
||||
{
|
||||
this.patch = patch;
|
||||
this.AllDownloadedPatches = allDownloadedPatches;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
this.visible = false;
|
||||
|
||||
lock (patch)
|
||||
{
|
||||
this.visible = true;
|
||||
this._title = string.Format(Messages.PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_DOWNLOADING, patch.Name);
|
||||
|
||||
if (Cancelling)
|
||||
return;
|
||||
|
||||
//if it has not been already downloaded
|
||||
if (!AllDownloadedPatches.Any(dp => dp.Key == patch && !string.IsNullOrEmpty(dp.Value))
|
||||
|| !File.Exists(AllDownloadedPatches[patch]))
|
||||
{
|
||||
DownloadFile(ref session);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.visible = false;
|
||||
this._title = string.Format(Messages.PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_SKIPPING, patch.Name);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void DownloadFile(ref Session session)
|
||||
{
|
||||
string patchUri = patch.PatchUrl;
|
||||
if (string.IsNullOrEmpty(patchUri))
|
||||
return;
|
||||
|
||||
Uri address = new Uri(patchUri);
|
||||
tempFileName = Path.GetTempFileName();
|
||||
|
||||
var downloadAction = new DownloadAndUnzipXenServerPatchAction(patch.Name, address, tempFileName, Branding.Update);
|
||||
|
||||
if (downloadAction != null)
|
||||
{
|
||||
downloadAction.Changed += downloadAndUnzipXenServerPatchAction_Changed;
|
||||
downloadAction.Completed += downloadAndUnzipXenServerPatchAction_Completed;
|
||||
}
|
||||
|
||||
downloadAction.RunExternal(session);
|
||||
}
|
||||
|
||||
private void downloadAndUnzipXenServerPatchAction_Changed(object sender)
|
||||
{
|
||||
var action = sender as AsyncAction;
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
if (Cancelling)
|
||||
action.Cancel();
|
||||
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
//UpdateActionProgress(action);
|
||||
//flickerFreeListBox1.Refresh();
|
||||
//OnPageUpdated();
|
||||
});
|
||||
}
|
||||
|
||||
private void downloadAndUnzipXenServerPatchAction_Completed(ActionBase sender)
|
||||
{
|
||||
var action = sender as AsyncAction;
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
action.Changed -= downloadAndUnzipXenServerPatchAction_Changed;
|
||||
action.Completed -= downloadAndUnzipXenServerPatchAction_Completed;
|
||||
|
||||
if (action.Succeeded)
|
||||
{
|
||||
if (action is DownloadAndUnzipXenServerPatchAction)
|
||||
{
|
||||
Host master = Helpers.GetMaster(action.Connection);
|
||||
|
||||
AllDownloadedPatches[patch] = (action as DownloadAndUnzipXenServerPatchAction).PatchPath;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -29,22 +29,26 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class EvacuateHostPlanAction : PlanActionWithSession
|
||||
public class EvacuateHostPlanAction : PlanActionWithSession, IAvoidRestartHostsAware
|
||||
{
|
||||
private readonly XenRef<Host> _host;
|
||||
private readonly Host currentHost;
|
||||
|
||||
public List<string> AvoidRestartHosts { private get; set; }
|
||||
|
||||
public EvacuateHostPlanAction(Host host)
|
||||
: base(host.Connection, string.Format(Messages.PLANACTION_VMS_MIGRATING, host.Name))
|
||||
{
|
||||
base.TitlePlan = string.Format(Messages.MIGRATE_VMS_OFF_SERVER, host.Name);
|
||||
this._host = new XenRef<Host>(host);
|
||||
currentHost = host;
|
||||
visible = false;
|
||||
}
|
||||
|
||||
protected override Host CurrentHost
|
||||
@ -56,6 +60,31 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
Host hostObject = TryResolveWithTimeout(_host);
|
||||
|
||||
if (Helpers.ElyOrGreater(hostObject))
|
||||
{
|
||||
log.DebugFormat("Checking host.patches_requiring_reboot now on '{0}'...", hostObject);
|
||||
|
||||
if (hostObject.patches_requiring_reboot.Count > 0)
|
||||
{
|
||||
AvoidRestartHosts.Remove(hostObject.uuid);
|
||||
|
||||
log.DebugFormat("Restart is needed now (hostObject.patches_requiring_reboot has {0} items in it). Evacuating now. Will restart after.", hostObject.patches_requiring_reboot.Count);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!AvoidRestartHosts.Contains(hostObject.uuid))
|
||||
{
|
||||
AvoidRestartHosts.Add(hostObject.uuid);
|
||||
}
|
||||
|
||||
log.Debug("Will skip scheduled restart (livepatching succeeded), because hostObject.patches_requiring_reboot is empty.");
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
visible = true;
|
||||
|
||||
PBD.CheckAndPlugPBDsFor(Connection.ResolveAll(hostObject.resident_VMs));
|
||||
|
||||
log.DebugFormat("Disabling host {0}", hostObject.Name);
|
||||
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
interface IAvoidRestartHostsAware
|
||||
{
|
||||
List<string> AvoidRestartHosts { set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Actions;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using XenAdmin.Network;
|
||||
using XenAdmin.Diagnostics.Checks;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
class PatchPrechecksOnMultipleHostsInAPoolPlanAction : PlanActionWithSession
|
||||
{
|
||||
private readonly XenServerPatch patch;
|
||||
private readonly List<PoolPatchMapping> mappings;
|
||||
private List<Host> hosts = null;
|
||||
|
||||
public PatchPrechecksOnMultipleHostsInAPoolPlanAction(IXenConnection connection, XenServerPatch patch, List<Host> hosts, List<PoolPatchMapping> mappings)
|
||||
: base(connection, string.Format("Precheck for {0} in {1}...", patch.Name, connection.Name))
|
||||
{
|
||||
this.patch = patch;
|
||||
this.hosts = hosts;
|
||||
this.mappings = mappings;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
var master = Helpers.GetMaster(Connection);
|
||||
var mapping = mappings.Find(m => m.XenServerPatch.Equals(patch) && m.MasterHost != null && master != null && m.MasterHost.uuid == master.uuid);
|
||||
|
||||
if (mapping != null && mapping.Pool_patch != null)
|
||||
{
|
||||
foreach (var host in hosts)
|
||||
{
|
||||
if (Cancelling)
|
||||
{
|
||||
throw new CancelledException();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var check = new PatchPrecheckCheck(host, mapping.Pool_patch);
|
||||
var problems = check.RunAllChecks();
|
||||
|
||||
Diagnostics.Problems.Problem problem = null;
|
||||
|
||||
if (problems != null && problems.Count > 0)
|
||||
problem = problems[0];
|
||||
|
||||
if (problem != null)
|
||||
{
|
||||
throw new Exception(string.Format("{0}: {1}. {2}", host, problem.Title, problem.Description));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error(string.Format("Precheck failed on host {0}", host.Name), ex);
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -35,6 +35,7 @@ using System.Threading;
|
||||
using log4net;
|
||||
using XenAdmin.Network;
|
||||
using XenAPI;
|
||||
using System.Diagnostics;
|
||||
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
@ -48,7 +49,17 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
public event EventHandler OnActionError;
|
||||
public event Action<PlanAction, Host> StatusChanged;
|
||||
public Exception Error;
|
||||
protected bool Cancelling = false;
|
||||
|
||||
protected bool visible = true;
|
||||
public bool Visible
|
||||
{
|
||||
get
|
||||
{
|
||||
return visible;
|
||||
}
|
||||
}
|
||||
|
||||
private string status;
|
||||
public string Status
|
||||
{
|
||||
@ -81,7 +92,7 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
}
|
||||
}
|
||||
|
||||
private string _title;
|
||||
protected string _title;
|
||||
|
||||
public string Title
|
||||
{
|
||||
@ -230,6 +241,11 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
return this.Title;
|
||||
}
|
||||
|
||||
public virtual void Cancel()
|
||||
{
|
||||
Cancelling = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,51 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class PoolPatchMapping
|
||||
{
|
||||
public XenServerPatch XenServerPatch { get; private set; }
|
||||
public Pool_patch Pool_patch { get; private set; }
|
||||
public Host MasterHost { get; private set; }
|
||||
|
||||
public PoolPatchMapping(XenServerPatch xenServerPatch, Pool_patch pool_patch, Host masterHost)
|
||||
{
|
||||
if (xenServerPatch == null)
|
||||
throw new ArgumentNullException("xenServerPatch");
|
||||
|
||||
if (pool_patch == null)
|
||||
throw new ArgumentNullException("pool_patch");
|
||||
|
||||
if (masterHost == null)
|
||||
throw new ArgumentNullException("masterHost");
|
||||
|
||||
this.XenServerPatch = xenServerPatch;
|
||||
this.Pool_patch = pool_patch;
|
||||
this.MasterHost = masterHost;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
var that = obj as PoolPatchMapping;
|
||||
|
||||
if (that == null)
|
||||
return false;
|
||||
|
||||
return
|
||||
this.XenServerPatch != null && this.XenServerPatch.Equals(that.XenServerPatch)
|
||||
&& this.Pool_patch != null && this.Pool_patch.Equals(that.Pool_patch)
|
||||
&& this.MasterHost != null && that.MasterHost != null & this.MasterHost.uuid == that.MasterHost.uuid;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return XenServerPatch.GetHashCode() ^ Pool_patch.GetHashCode() ^ MasterHost.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
@ -29,25 +29,41 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Core;
|
||||
using XenAdmin.Network;
|
||||
using XenAPI;
|
||||
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
public class RebootHostPlanAction : RebootPlanAction
|
||||
public class RebootHostPlanAction : RebootPlanAction, IAvoidRestartHostsAware
|
||||
{
|
||||
|
||||
private readonly Host _host;
|
||||
|
||||
public List<string> AvoidRestartHosts { private get; set; }
|
||||
|
||||
public RebootHostPlanAction(Host host)
|
||||
: base(host.Connection, new XenRef<Host>(host.opaque_ref), string.Format(Messages.UPDATES_WIZARD_REBOOTING, host))
|
||||
{
|
||||
_host = host;
|
||||
visible = false;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
if (Helpers.ElyOrGreater(_host))
|
||||
{
|
||||
if (AvoidRestartHosts != null && AvoidRestartHosts.Contains(_host.uuid))
|
||||
{
|
||||
log.Debug("Skipping scheduled restart (livepatching succeeded). RebootHostPlanAction is skipped.");
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
visible = true;
|
||||
|
||||
_host.Connection.ExpectDisruption = true;
|
||||
try
|
||||
{
|
||||
|
@ -106,7 +106,7 @@ namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
return agentStartTime;
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
public override void Cancel()
|
||||
{
|
||||
_cancelled = true;
|
||||
|
||||
|
@ -0,0 +1,87 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
using System.Linq;
|
||||
using System;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
class RemoveUpdateFileFromMasterPlanAction : PlanActionWithSession
|
||||
{
|
||||
private readonly List<PoolPatchMapping> patchMappings = new List<PoolPatchMapping>();
|
||||
private readonly XenServerPatch patch = null;
|
||||
private readonly Host master = null;
|
||||
|
||||
public RemoveUpdateFileFromMasterPlanAction(Host master, List<PoolPatchMapping> patchMappings, XenServerPatch patch)
|
||||
: base(master.Connection, string.Format(Messages.UPDATES_WIZARD_REMOVING_UPDATES_FROM_POOL, master.Name))
|
||||
{
|
||||
this.patchMappings = patchMappings;
|
||||
this.patch = patch;
|
||||
this.master = master;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
try
|
||||
{
|
||||
Pool_patch poolPatch = null;
|
||||
|
||||
var mapping = patchMappings.FirstOrDefault(pm => pm.MasterHost != null && master != null &&
|
||||
pm.MasterHost.uuid == master.uuid && pm.XenServerPatch.Equals(patch));
|
||||
|
||||
if (mapping != null || mapping.Pool_patch != null && mapping.Pool_patch.opaque_ref != null)
|
||||
{
|
||||
poolPatch = mapping.Pool_patch;
|
||||
}
|
||||
else
|
||||
{
|
||||
poolPatch = session.Connection.Cache.Pool_patches.FirstOrDefault(pp => string.Equals(pp.uuid, patch.Uuid, System.StringComparison.InvariantCultureIgnoreCase));
|
||||
}
|
||||
|
||||
if (poolPatch != null && poolPatch.opaque_ref != null )
|
||||
{
|
||||
var task = Pool_patch.async_pool_clean(session, mapping.Pool_patch.opaque_ref);
|
||||
PollTaskForResultAndDestroy(Connection, ref session, task);
|
||||
|
||||
patchMappings.Remove(mapping);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//best effort
|
||||
log.Error("Failed to remove Pool_patch from the server.", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,175 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using XenAdmin.Actions;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using XenAdmin.Network;
|
||||
using XenAdmin.Diagnostics.Problems.HostProblem;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard.PlanActions
|
||||
{
|
||||
class UploadPatchToMasterPlanAction : PlanActionWithSession
|
||||
{
|
||||
private readonly XenServerPatch patch;
|
||||
private readonly List<PoolPatchMapping> mappings;
|
||||
private Dictionary<XenServerPatch, string> AllDownloadedPatches = new Dictionary<XenServerPatch, string>();
|
||||
private string tempFileName = null;
|
||||
private AsyncAction inProgressAction = null;
|
||||
|
||||
public UploadPatchToMasterPlanAction(IXenConnection connection, XenServerPatch patch, List<PoolPatchMapping> mappings, Dictionary<XenServerPatch, string> allDownloadedPatches)
|
||||
: base(connection, string.Format("Uploading update {0} to {1}...", patch.Name, connection.Name))
|
||||
{
|
||||
this.patch = patch;
|
||||
this.mappings = mappings;
|
||||
this.AllDownloadedPatches = allDownloadedPatches;
|
||||
}
|
||||
|
||||
protected override void RunWithSession(ref Session session)
|
||||
{
|
||||
var path = AllDownloadedPatches[patch];
|
||||
|
||||
var poolPatches = new List<Pool_patch>(session.Connection.Cache.Pool_patches);
|
||||
var conn = session.Connection;
|
||||
var master = Helpers.GetMaster(conn);
|
||||
|
||||
var existingMapping = mappings.Find(m => m.MasterHost != null && master != null &&
|
||||
m.MasterHost.uuid == master.uuid && m.Pool_patch != null && m.XenServerPatch.Equals(patch));
|
||||
|
||||
if (existingMapping == null
|
||||
|| !poolPatches.Any(p => string.Equals(p.uuid, existingMapping.Pool_patch.uuid, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
//free space check for upload:
|
||||
try
|
||||
{
|
||||
var checkSpaceForUpload = new CheckDiskSpaceForPatchUploadAction(Helpers.GetMaster(conn), path, true);
|
||||
inProgressAction = checkSpaceForUpload;
|
||||
checkSpaceForUpload.RunExternal(session);
|
||||
|
||||
var uploadPatchAction = new UploadPatchAction(session.Connection, path, true, false);
|
||||
inProgressAction = uploadPatchAction;
|
||||
uploadPatchAction.RunExternal(session);
|
||||
|
||||
// this has to be run again to refresh poolPatches (to get the recently uploaded one as well)
|
||||
poolPatches = new List<Pool_patch>(session.Connection.Cache.Pool_patches);
|
||||
|
||||
var poolPatch = poolPatches.Find(p => string.Equals(p.uuid, patch.Uuid, StringComparison.OrdinalIgnoreCase));
|
||||
if (poolPatch == null)
|
||||
{
|
||||
log.ErrorFormat("Upload finished successfully, but Pool_patch object has not been found for patch (uuid={0}) on host (uuid={1}).", patch.Uuid, session.Connection);
|
||||
|
||||
throw new Exception(Messages.ACTION_UPLOADPATCHTOMASTERPLANACTION_FAILED);
|
||||
}
|
||||
|
||||
var newMapping = new PoolPatchMapping(patch, poolPatch, Helpers.GetMaster(session.Connection));
|
||||
|
||||
if (!mappings.Contains(newMapping))
|
||||
mappings.Add(newMapping);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Error = ex;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DownloadFile(ref Session session)
|
||||
{
|
||||
string patchUri = patch.PatchUrl;
|
||||
if (string.IsNullOrEmpty(patchUri))
|
||||
return;
|
||||
|
||||
Uri address = new Uri(patchUri);
|
||||
tempFileName = Path.GetTempFileName();
|
||||
|
||||
var downloadAction = new DownloadAndUnzipXenServerPatchAction(patch.Name, address, tempFileName, Branding.Update);
|
||||
|
||||
if (downloadAction != null)
|
||||
{
|
||||
downloadAction.Changed += downloadAndUnzipXenServerPatchAction_Changed;
|
||||
downloadAction.Completed += downloadAndUnzipXenServerPatchAction_Completed;
|
||||
}
|
||||
|
||||
downloadAction.RunExternal(session);
|
||||
}
|
||||
|
||||
private void downloadAndUnzipXenServerPatchAction_Changed(object sender)
|
||||
{
|
||||
var action = sender as AsyncAction;
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
if (Cancelling)
|
||||
action.Cancel();
|
||||
|
||||
Program.Invoke(Program.MainWindow, () =>
|
||||
{
|
||||
//UpdateActionProgress(action);
|
||||
//flickerFreeListBox1.Refresh();
|
||||
//OnPageUpdated();
|
||||
});
|
||||
}
|
||||
|
||||
private void downloadAndUnzipXenServerPatchAction_Completed(ActionBase sender)
|
||||
{
|
||||
var action = sender as AsyncAction;
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
action.Changed -= downloadAndUnzipXenServerPatchAction_Changed;
|
||||
action.Completed -= downloadAndUnzipXenServerPatchAction_Completed;
|
||||
|
||||
if (action.Succeeded)
|
||||
{
|
||||
if (action is DownloadAndUnzipXenServerPatchAction)
|
||||
{
|
||||
Host master = Helpers.GetMaster(action.Connection);
|
||||
|
||||
AllDownloadedPatches[patch] = (action as DownloadAndUnzipXenServerPatchAction).PatchPath;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override void Cancel()
|
||||
{
|
||||
if (inProgressAction != null)
|
||||
inProgressAction.Cancel();
|
||||
|
||||
base.Cancel();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using XenAdmin.Wizards.PatchingWizard.PlanActions;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
class UpdateProgressBackgroundWorker : BackgroundWorker
|
||||
{
|
||||
public List<PlanAction> PlanActions { get; private set; }
|
||||
public List<PlanAction> DelayedActions { get; private set; }
|
||||
private Host master;
|
||||
|
||||
public List<PlanAction> FinsihedActions = new List<PlanAction>();
|
||||
public PlanAction FailedWithExceptionAction = null;
|
||||
public List<PlanAction> doneActions = new List<PlanAction>();
|
||||
public PlanAction InProgressAction { get; set; }
|
||||
|
||||
|
||||
private readonly List<string> avoidRestartHosts = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// This list lists uuids of hosts that does not need to be restarted
|
||||
/// </summary>
|
||||
public List<string> AvoidRestartHosts
|
||||
{
|
||||
get
|
||||
{
|
||||
return avoidRestartHosts;
|
||||
}
|
||||
}
|
||||
|
||||
public UpdateProgressBackgroundWorker(Host master, List<PlanAction> planActions, List<PlanAction> delayedActions)
|
||||
{
|
||||
this.master = master;
|
||||
this.PlanActions = planActions;
|
||||
this.DelayedActions = delayedActions;
|
||||
}
|
||||
|
||||
public List<PlanAction> AllActions
|
||||
{
|
||||
get
|
||||
{
|
||||
return PlanActions.Concat(DelayedActions).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public int TotalNumberOfActions
|
||||
{
|
||||
get
|
||||
{
|
||||
return PlanActions.Count + DelayedActions.Count;
|
||||
}
|
||||
}
|
||||
|
||||
public int ProgressPercent
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int)(1.0 / (double)TotalNumberOfActions * (double)(FinsihedActions.Count));
|
||||
}
|
||||
}
|
||||
|
||||
public new void CancelAsync()
|
||||
{
|
||||
if (PlanActions != null)
|
||||
PlanActions.ForEach(pa =>
|
||||
{
|
||||
if (!pa.IsComplete)
|
||||
pa.Cancel();
|
||||
});
|
||||
|
||||
base.CancelAsync();
|
||||
}
|
||||
}
|
||||
}
|
39
XenAdmin/Wizards/PatchingWizard/UpgradeProgressDescriptor.cs
Normal file
39
XenAdmin/Wizards/PatchingWizard/UpgradeProgressDescriptor.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using XenAdmin.Wizards.PatchingWizard.PlanActions;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.Wizards.PatchingWizard
|
||||
{
|
||||
public class UpgradeProgressDescriptor
|
||||
{
|
||||
public List<PlanAction> planActions { get; private set; }
|
||||
public List<PlanAction> delayedActions { get; private set; }
|
||||
private Host master;
|
||||
public float ProgressPercent = 0;
|
||||
|
||||
public PlanAction InProgressAction = null;
|
||||
public PlanAction FailedWithExceptionAction = null;
|
||||
public List<PlanAction> doneActions = new List<PlanAction>();
|
||||
|
||||
public UpgradeProgressDescriptor(Host master, List<PlanAction> planActions, List<PlanAction> delayedActions)
|
||||
{
|
||||
this.master = master;
|
||||
this.planActions = planActions;
|
||||
this.delayedActions = delayedActions;
|
||||
}
|
||||
|
||||
public int TotalNumberOfActions
|
||||
{
|
||||
get
|
||||
{
|
||||
return planActions.Count + delayedActions.Count;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -97,6 +97,7 @@
|
||||
<Compile Include="Actions\GUIActions\ExportResourceReportAction.cs" />
|
||||
<Compile Include="Actions\GUIActions\DeleteAllAlertsAction.cs" />
|
||||
<Compile Include="Actions\GUIActions\ExternalPluginAction.cs" />
|
||||
<Compile Include="Actions\GUIActions\RestoreDismissedUpdatesAction.cs" />
|
||||
<Compile Include="Actions\GUIActions\MeddlingAction.cs" />
|
||||
<Compile Include="Actions\GUIActions\IgnoreServerAction.cs" />
|
||||
<Compile Include="Actions\GUIActions\IgnorePatchAction.cs" />
|
||||
@ -211,6 +212,7 @@
|
||||
<Compile Include="Core\HiddenFeatures.cs" />
|
||||
<Compile Include="Diagnostics\Checks\AssertCanEvacuateCheck.cs" />
|
||||
<Compile Include="Diagnostics\Checks\AssertCanEvacuateUpgradeCheck.cs" />
|
||||
<Compile Include="Diagnostics\Checks\DiskSpaceForBatchUpdatesCheck.cs" />
|
||||
<Compile Include="Diagnostics\Checks\SafeToUpgradeCheck.cs" />
|
||||
<Compile Include="Diagnostics\Checks\HostHasUnsupportedStorageLinkSRCheck.cs" />
|
||||
<Compile Include="Diagnostics\Problems\HostProblem\HostNotSafeToUpgradeWarning.cs" />
|
||||
@ -293,12 +295,6 @@
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="SettingsPanels\LivePatchingEditPage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="SettingsPanels\LivePatchingEditPage.Designer.cs">
|
||||
<DependentUpon>LivePatchingEditPage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="SettingsPanels\SecurityEditPage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
@ -858,14 +854,31 @@
|
||||
<DependentUpon>HAPage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Alerts\Types\XenCenterUpdateAlert.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PatchingWizard_AutoUpdatingPage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Wizards\PatchingWizard\PatchingWizard_AutoUpdatingPage.designer.cs">
|
||||
<DependentUpon>PatchingWizard_AutoUpdatingPage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Wizards\PatchingWizard\PatchingWizard_UploadPage.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Wizards\PatchingWizard\PatchingWizard_UploadPage.Designer.cs">
|
||||
<DependentUpon>PatchingWizard_UploadPage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\ApplyXenServerPatchPlanAction.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\IAvoidRestartCapable.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\PatchPrechecksOnMultipleHostsAction.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\DownloadPatchPlanAction.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\UploadPatchToMasterPlanAction.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\PoolPatchMapping.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\RemoveUpdateFilesFromMaster.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\RemoveUpdateFile.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\PlanActions\InstallSupplementalPackPlanAction.cs" />
|
||||
<Compile Include="Wizards\PatchingWizard\UpdateProgressBackgroundWorker.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Wizards\PatchingWizard\UpgradeProgressDescriptor.cs" />
|
||||
<Compile Include="XenSearch\TreeNodeGroupAcceptor.cs">
|
||||
</Compile>
|
||||
<Compile Include="Dialogs\FolderChangeDialog.cs">
|
||||
@ -1746,15 +1759,6 @@
|
||||
<DependentUpon>EditNetworkPage.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="SettingsPanels\LivePatchingEditPage.ja.resx">
|
||||
<DependentUpon>LivePatchingEditPage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="SettingsPanels\LivePatchingEditPage.resx">
|
||||
<DependentUpon>LivePatchingEditPage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="SettingsPanels\LivePatchingEditPage.zh-CN.resx">
|
||||
<DependentUpon>LivePatchingEditPage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="SettingsPanels\SecurityEditPage.ja.resx">
|
||||
<DependentUpon>SecurityEditPage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@ -2058,6 +2062,16 @@
|
||||
<SubType>Designer</SubType>
|
||||
<DependentUpon>PatchingWizard_ModePage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Wizards\PatchingWizard\PatchingWizard_AutoUpdatingPage.ja.resx">
|
||||
<DependentUpon>PatchingWizard_AutoUpdatingPage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Wizards\PatchingWizard\PatchingWizard_AutoUpdatingPage.resx">
|
||||
<DependentUpon>PatchingWizard_AutoUpdatingPage.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Wizards\PatchingWizard\PatchingWizard_AutoUpdatingPage.zh-CN.resx">
|
||||
<DependentUpon>PatchingWizard_AutoUpdatingPage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Wizards\PatchingWizard\PatchingWizard_PatchingPage.resx">
|
||||
<SubType>Designer</SubType>
|
||||
<DependentUpon>PatchingWizard_PatchingPage.cs</DependentUpon>
|
||||
|
@ -55,7 +55,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithConnectionAndHosts()
|
||||
{
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "", "");
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", string.Empty, "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "", "");
|
||||
XenServerPatchAlert alert = new XenServerPatchAlert(p);
|
||||
alert.IncludeConnection(connA.Object);
|
||||
alert.IncludeConnection(connB.Object);
|
||||
@ -83,7 +83,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithHostsAndNoConnection()
|
||||
{
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "1", "");
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", string.Empty, "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "1", "");
|
||||
XenServerPatchAlert alert = new XenServerPatchAlert(p);
|
||||
alert.IncludeHosts(new List<Host>() { hostA.Object, hostB.Object });
|
||||
|
||||
@ -109,7 +109,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithConnectionAndNoHosts()
|
||||
{
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "0", "");
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", string.Empty, "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "0", "");
|
||||
XenServerPatchAlert alert = new XenServerPatchAlert(p);
|
||||
alert.IncludeConnection(connA.Object);
|
||||
alert.IncludeConnection(connB.Object);
|
||||
@ -136,7 +136,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithNoConnectionAndNoHosts()
|
||||
{
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "5", "");
|
||||
XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", string.Empty, "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "5", "");
|
||||
XenServerPatchAlert alert = new XenServerPatchAlert(p);
|
||||
|
||||
IUnitTestVerifier validator = new VerifyGetters(alert);
|
||||
|
@ -55,7 +55,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithConnectionAndHosts()
|
||||
{
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new DateTime(2011,4,1).ToString(), "123");
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
var alert = new XenServerVersionAlert(ver);
|
||||
alert.IncludeConnection(connA.Object);
|
||||
alert.IncludeConnection(connB.Object);
|
||||
@ -83,7 +83,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithHostsAndNoConnection()
|
||||
{
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
var alert = new XenServerVersionAlert(ver);
|
||||
alert.IncludeHosts(new List<Host> { hostA.Object, hostB.Object });
|
||||
|
||||
@ -109,7 +109,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithConnectionAndNoHosts()
|
||||
{
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
var alert = new XenServerVersionAlert(ver);
|
||||
alert.IncludeConnection(connA.Object);
|
||||
alert.IncludeConnection(connB.Object);
|
||||
@ -136,7 +136,7 @@ namespace XenAdminTests.UnitTests.AlertTests
|
||||
[Test]
|
||||
public void TestAlertWithNoConnectionAndNoHosts()
|
||||
{
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
XenServerVersion ver = new XenServerVersion("1.2.3", "name", true, "http://url", new List<XenServerPatch>(), new List<XenServerPatch>(), new DateTime(2011, 4, 1).ToString(), "123");
|
||||
var alert = new XenServerVersionAlert(ver);
|
||||
|
||||
IUnitTestVerifier validator = new VerifyGetters(alert);
|
||||
|
420
XenAdminTests/UnitTests/BatchUpdatesTests/BatchUpdatesTests.cs
Normal file
420
XenAdminTests/UnitTests/BatchUpdatesTests/BatchUpdatesTests.cs
Normal file
@ -0,0 +1,420 @@
|
||||
/* Copyright (c) Citrix Systems Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using XenAdmin.Actions;
|
||||
using Moq;
|
||||
using XenAdmin.Core;
|
||||
using XenAPI;
|
||||
using System.Linq;
|
||||
|
||||
namespace XenAdminTests.UnitTests
|
||||
{
|
||||
[TestFixture, Category(TestCategories.Unit)]
|
||||
public class BatchUpdatesTests
|
||||
{
|
||||
|
||||
private static Mock<Host> GetAMockHost(string productVersion, string buildNumber, List<Pool_patch> applied_patches = null)
|
||||
{
|
||||
var id = System.Guid.NewGuid().ToString();
|
||||
|
||||
MockObjectManager mom = new MockObjectManager();
|
||||
|
||||
mom.CreateNewConnection(id);
|
||||
|
||||
Mock<Host> master = mom.NewXenObject<Host>(id);
|
||||
Mock<Pool> pool = mom.NewXenObject<Pool>(id);
|
||||
XenRef<Host> masterRef = new XenRef<Host>("master-ref");
|
||||
pool.Setup(p => p.master).Returns(masterRef);
|
||||
|
||||
mom.MockCacheFor(id).Setup(c => c.Resolve(It.IsAny<XenRef<Pool>>())).Returns(pool.Object);
|
||||
|
||||
mom.MockConnectionFor(id).Setup(c => c.Resolve(masterRef)).Returns(master.Object);
|
||||
mom.MockConnectionFor(id).Setup(c => c.Cache.Hosts).Returns(new Host[] { master.Object });
|
||||
mom.MockConnectionFor(id).Setup(c => c.Cache.Pools).Returns(new Pool[] { pool.Object });
|
||||
|
||||
master.Setup(h => h.software_version).Returns(new Dictionary<string, string>());
|
||||
master.Setup(h => h.ProductVersion).Returns(productVersion);
|
||||
master.Setup(h => h.AppliedPatches()).Returns(applied_patches ?? new List<Pool_patch>());
|
||||
master.Setup(h => h.BuildNumberRaw).Returns(buildNumber);
|
||||
master.Setup(h => h.uuid).Returns(id);
|
||||
return master;
|
||||
}
|
||||
|
||||
|
||||
private static List<XenServerVersion> GetAVersionWithGivenNumberOfPatches(int numberOfPatches)
|
||||
{
|
||||
var serverVersions = new List<XenServerVersion>();
|
||||
|
||||
var version = new XenServerVersion("7.0.0", "XenServer Test 7", true, "", new List<XenServerPatch>(), new List<XenServerPatch>(), DateTime.MinValue.ToString(), "buildNo");
|
||||
for (int ii = 0; ii < numberOfPatches; ii++)
|
||||
{
|
||||
var patch = new XenServerPatch("patch_uuid_" + ii, "patch name " + ii, "patch description" + ii, "", "", "1.0", "", "", "1970-01-01T00:00:00Z", "", "1000");
|
||||
version.Patches.Add(patch);
|
||||
version.MinimalPatches.Add(patch);
|
||||
}
|
||||
serverVersions.Add(version);
|
||||
|
||||
return serverVersions;
|
||||
}
|
||||
|
||||
|
||||
private static void RemoveANumberOfPatchesPseudoRandomly(List<XenServerPatch> patches, int numberOfPatchesToRemove)
|
||||
{
|
||||
int expectedCount = patches.Count - numberOfPatchesToRemove;
|
||||
var rnd = new Random(777); //pseudo random to be able to repeat this test...
|
||||
|
||||
while (patches.Count > expectedCount)
|
||||
{
|
||||
patches.RemoveAt(rnd.Next(patches.Count));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void GetUpgradeSequenceForNullConnection()
|
||||
{
|
||||
Assert.AreEqual(XenAdmin.Core.Updates.GetUpgradeSequence(null), null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// No patches in updates
|
||||
/// Nothing installed on host
|
||||
/// Result: update sequence has the host, but empty sequence
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void NoPatchesForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(0);
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber);
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
Assert.NotNull(upgradeSequence.First().Key);
|
||||
Assert.AreEqual(upgradeSequence.First().Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(upgradeSequence.First().Value);
|
||||
Assert.AreEqual(upgradeSequence.First().Value.Count, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 1 patch in updates. 1 in minimal list.
|
||||
/// 1 has to be installed on host
|
||||
/// Result: update sequence has the host, with the one single patch in it
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void OnePatchToBeInstalledForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(1);
|
||||
var patch = serverVersions.First().Patches[0];
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber);
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
Assert.NotNull(upgradeSequence.First().Key);
|
||||
Assert.AreEqual(upgradeSequence.First().Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(upgradeSequence.First().Value);
|
||||
Assert.AreEqual(upgradeSequence.First().Value.Count, 1);
|
||||
Assert.AreEqual(upgradeSequence.First().Value[0], patch);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 1 patch in updates. 1 in minimal list. But it is applied already on master.
|
||||
/// 0 has to be installed on host
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void AlreadyInstalledOneFromMinimalForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(1);
|
||||
var patch = serverVersions.First().Patches[0];
|
||||
|
||||
Pool_patch pool_patch = new Pool_patch();
|
||||
pool_patch.uuid = patch.Uuid;
|
||||
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber, new List<Pool_patch>() { pool_patch });
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
Assert.NotNull(upgradeSequence.First().Key);
|
||||
Assert.AreEqual(upgradeSequence.First().Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(upgradeSequence.First().Value);
|
||||
Assert.AreEqual(upgradeSequence.First().Value.Count, 0);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 100 patch in updates. 100 in minimal list.
|
||||
/// 100 has to be installed on host
|
||||
/// Result: update sequence has all the 100 patches in it
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void HundredPatchToBeInstalledForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(100);
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber);
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
var seqToCheck = upgradeSequence.First();
|
||||
Assert.NotNull(seqToCheck.Key);
|
||||
Assert.AreEqual(seqToCheck.Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(seqToCheck.Value);
|
||||
Assert.AreEqual(seqToCheck.Value.Count, 100);
|
||||
|
||||
for (int ii = 100; ii < 0; --ii)
|
||||
Assert.AreEqual(seqToCheck.Value[ii], serverVersions.First().Patches[ii]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 100 patch in updates. 51 in minimal list.
|
||||
/// 51 has to be installed on host
|
||||
/// Result: update sequence has all the 51 patches in it
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void FiftyOnePatchToBeInstalledForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(100);
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber);
|
||||
RemoveANumberOfPatchesPseudoRandomly(serverVersions.First().MinimalPatches, 49);
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
var seqToCheck = upgradeSequence.First();
|
||||
Assert.NotNull(seqToCheck.Key);
|
||||
Assert.AreEqual(seqToCheck.Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(seqToCheck.Value);
|
||||
Assert.AreEqual(seqToCheck.Value.Count, 51);
|
||||
|
||||
foreach (var patch in seqToCheck.Value)
|
||||
Assert.IsTrue(serverVersions.First().MinimalPatches.Contains(patch));
|
||||
|
||||
Assert.False(seqToCheck.Value.Exists(seqpatch => !serverVersions.First().MinimalPatches.Contains(seqpatch)));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 100 patch in updates. 51 in minimal list.
|
||||
/// 41 has to be installed on host (only 41 of 51, because 10 is already installed from the Minimal list (as well as 5 other))
|
||||
/// Result: update sequence has all the 41 patches in it and all are from Minimal List and also not installed on the host
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void FourtyOnePatchToBeInstalledForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(100);
|
||||
RemoveANumberOfPatchesPseudoRandomly(serverVersions.First().MinimalPatches, 49);
|
||||
|
||||
var pool_patches = new List<Pool_patch>();
|
||||
for (int ii = 0; ii < 10; ii++)
|
||||
{
|
||||
pool_patches.Add(new Pool_patch() { uuid = serverVersions.First().MinimalPatches[ii].Uuid });
|
||||
}
|
||||
|
||||
var notMinimalPatchesInVersion = serverVersions.First().Patches.Where(p => !serverVersions.First().MinimalPatches.Exists(mp => mp.Uuid == p.Uuid)).ToList();
|
||||
for (int ii = 0; ii < 5; ii++)
|
||||
{
|
||||
pool_patches.Add(new Pool_patch() { uuid = notMinimalPatchesInVersion[ii].Uuid });
|
||||
}
|
||||
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber, pool_patches);
|
||||
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
var seqToCheck = upgradeSequence.First();
|
||||
Assert.NotNull(seqToCheck.Key);
|
||||
Assert.AreEqual(seqToCheck.Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(seqToCheck.Value);
|
||||
Assert.AreEqual(seqToCheck.Value.Count, 41);
|
||||
|
||||
foreach (var patch in seqToCheck.Value)
|
||||
Assert.IsTrue(serverVersions.First().MinimalPatches.Contains(patch) && !pool_patches.Exists(p => p.uuid == patch.Uuid));
|
||||
|
||||
Assert.False(seqToCheck.Value.Exists(seqpatch => !serverVersions.First().MinimalPatches.Contains(seqpatch)));
|
||||
Assert.True(seqToCheck.Value.Exists(seqpatch => !pool_patches.Exists(pp => pp.uuid == seqpatch.Uuid)));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 2 patch in updates. 1 in minimal list.
|
||||
/// 1 has to be installed on host
|
||||
/// Result: update sequence has the host, with the one single patch in it
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void OnePatchOutOfTwoToBeInstalledForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(2);
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber);
|
||||
RemoveANumberOfPatchesPseudoRandomly(serverVersions.First().MinimalPatches, 1);
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
Assert.NotNull(upgradeSequence.First().Key);
|
||||
Assert.AreEqual(upgradeSequence.First().Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(upgradeSequence.First().Value);
|
||||
Assert.AreEqual(upgradeSequence.First().Value.Count, 1);
|
||||
Assert.AreEqual(upgradeSequence.First().Value[0], serverVersions.First().MinimalPatches[0]);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Version exist
|
||||
/// 2 patch in updates. 2 in minimal list.
|
||||
/// 2 has to be installed on host
|
||||
/// Result: update sequence has the host, with the one single patch in it
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TwoPatchToBeInstalleOutOfTwodForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(2);
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber);
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.NotNull(upgradeSequence);
|
||||
Assert.AreEqual(1, upgradeSequence.Count);
|
||||
Assert.NotNull(upgradeSequence.First().Key);
|
||||
Assert.AreEqual(upgradeSequence.First().Key.uuid, master.Object.uuid);
|
||||
Assert.NotNull(upgradeSequence.First().Value);
|
||||
Assert.AreEqual(upgradeSequence.First().Value.Count, 2);
|
||||
Assert.AreEqual(upgradeSequence.First().Value[0], serverVersions.First().MinimalPatches[0]);
|
||||
Assert.AreEqual(upgradeSequence.First().Value[1], serverVersions.First().MinimalPatches[1]);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Version does not exist
|
||||
/// Result: update sequence is null
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void NoInfoForCurrentVersion()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var serverVersions = GetAVersionWithGivenNumberOfPatches(200);
|
||||
var master = GetAMockHost(serverVersions.First().Oem, serverVersions.First().BuildNumber + "to_make_it_not_match");
|
||||
SetXenServerVersionsInUpdates(serverVersions);
|
||||
|
||||
// Act
|
||||
|
||||
var upgradeSequence = XenAdmin.Core.Updates.GetUpgradeSequence(master.Object.Connection);
|
||||
|
||||
// Assert
|
||||
|
||||
Assert.Null(upgradeSequence);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Updates is static class, can't be mocked without refactoring - using this method instead
|
||||
/// </summary>
|
||||
/// <param name="serverVersions"></param>
|
||||
private void SetXenServerVersionsInUpdates(List<XenServerVersion> serverVersions)
|
||||
{
|
||||
Updates.XenServerVersions = serverVersions;
|
||||
}
|
||||
}
|
||||
}
|
@ -67,6 +67,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="HealthCheckTests\CredentialTests.cs" />
|
||||
<Compile Include="HealthCheckTests\RequestUploadTaskTests.cs" />
|
||||
<Compile Include="UnitTests\BatchUpdatesTests\BatchUpdatesTests.cs" />
|
||||
<Compile Include="UnitTests\CPUFeaturesTest.cs" />
|
||||
<Compile Include="UnitTests\HealthCheckAnalysisProgressTest.cs" />
|
||||
<Compile Include="UnitTests\SubnetworkMaskValidatorTest.cs" />
|
||||
|
@ -37,7 +37,7 @@ using XenAPI;
|
||||
|
||||
namespace XenAdmin.Actions
|
||||
{
|
||||
public class DestroyHostCrashDumpAction : AsyncAction
|
||||
public class DestroyHostCrashDumpAction : PureAsyncAction
|
||||
{
|
||||
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -126,6 +126,7 @@ namespace XenAdmin.Actions
|
||||
protected override void Run()
|
||||
{
|
||||
SafeToExit = false;
|
||||
|
||||
foreach (Pool_patch patch in patches)
|
||||
{
|
||||
foreach (Host host in hosts)
|
||||
|
@ -44,7 +44,8 @@ namespace XenAdmin.Actions
|
||||
|
||||
private readonly string updateName;
|
||||
private readonly long updateSize;
|
||||
private readonly Pool_patch currentPatch;
|
||||
private readonly Pool_patch currentPatch;
|
||||
private readonly Actions.DiskSpaceRequirements.OperationTypes operation = Actions.DiskSpaceRequirements.OperationTypes.upload;
|
||||
|
||||
public DiskSpaceRequirements DiskSpaceRequirements { get; private set; }
|
||||
|
||||
@ -62,7 +63,16 @@ namespace XenAdmin.Actions
|
||||
/// </summary>
|
||||
public GetDiskSpaceRequirementsAction(Host host, string path, bool suppressHistory)
|
||||
: this(host, FileName(path), FileSize(path), suppressHistory)
|
||||
{ }
|
||||
{ }
|
||||
|
||||
/// <summary>
|
||||
/// This constructor is used to calculate the disk space when the required space is known only
|
||||
/// </summary>
|
||||
public GetDiskSpaceRequirementsAction(Host host, long size, bool suppressHistory, XenAdmin.Actions.DiskSpaceRequirements.OperationTypes operation)
|
||||
: this(host, null, size, suppressHistory)
|
||||
{
|
||||
this.operation = operation;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This constructor is used to check disk space for installing or uploading an update of given size
|
||||
@ -124,21 +134,23 @@ namespace XenAdmin.Actions
|
||||
}
|
||||
|
||||
// get reclaimable disk space (excluding current patch)
|
||||
long reclaimableDiskSpace = 0;
|
||||
try
|
||||
{
|
||||
var args = new Dictionary<string, string>();
|
||||
if (currentPatch != null)
|
||||
args.Add("exclude", currentPatch.uuid);
|
||||
result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args);
|
||||
reclaimableDiskSpace = Convert.ToInt64(result);
|
||||
long reclaimableDiskSpace = 0;
|
||||
|
||||
if (availableDiskSpace < requiredDiskSpace)
|
||||
{
|
||||
try
|
||||
{
|
||||
var args = new Dictionary<string, string>();
|
||||
if (currentPatch != null)
|
||||
args.Add("exclude", currentPatch.uuid);
|
||||
result = Host.call_plugin(Session, Host.opaque_ref, "disk-space", "get_reclaimable_disk_space", args);
|
||||
reclaimableDiskSpace = Convert.ToInt64(result);
|
||||
}
|
||||
catch (Failure failure)
|
||||
{
|
||||
log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message);
|
||||
}
|
||||
}
|
||||
catch (Failure failure)
|
||||
{
|
||||
log.WarnFormat("Plugin call disk-space.get_reclaimable_disk_space on {0} failed with {1}", Host.Name, failure.Message);
|
||||
}
|
||||
|
||||
var operation = Actions.DiskSpaceRequirements.OperationTypes.upload;
|
||||
|
||||
DiskSpaceRequirements = new DiskSpaceRequirements(operation, Host, updateName, requiredDiskSpace, availableDiskSpace, reclaimableDiskSpace);
|
||||
|
||||
@ -156,7 +168,7 @@ namespace XenAdmin.Actions
|
||||
public readonly long AvailableDiskSpace;
|
||||
public readonly long ReclaimableDiskSpace;
|
||||
|
||||
public enum OperationTypes { install, upload }
|
||||
public enum OperationTypes { install, upload, autoupdate }
|
||||
|
||||
public DiskSpaceRequirements(OperationTypes operation, Host host, string updateName, long requiredDiskSpace, long availableDiskSpace, long reclaimableDiskSpace)
|
||||
{
|
||||
@ -185,6 +197,9 @@ namespace XenAdmin.Actions
|
||||
case OperationTypes.upload :
|
||||
sbMessage.AppendFormat(Messages.NOT_ENOUGH_SPACE_MESSAGE_UPLOAD, Host.Name, UpdateName);
|
||||
break;
|
||||
case OperationTypes.autoupdate :
|
||||
sbMessage.AppendFormat(Messages.NOT_ENOUGH_SPACE_MESSAGE_AUTO_UPDATE, Host.Name);
|
||||
break;
|
||||
}
|
||||
|
||||
sbMessage.AppendLine();
|
||||
|
@ -36,6 +36,7 @@ using XenAPI;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using XenAdmin.Core;
|
||||
using System.Diagnostics;
|
||||
|
||||
|
||||
namespace XenAdmin.Actions
|
||||
@ -51,6 +52,7 @@ namespace XenAdmin.Actions
|
||||
private const string ConflictingPatchNode = "conflictingpatch";
|
||||
private const string RequiredPatchNode = "requiredpatch";
|
||||
|
||||
|
||||
public List<XenCenterVersion> XenCenterVersions { get; private set; }
|
||||
public List<XenServerVersion> XenServerVersions { get; private set; }
|
||||
public List<XenServerPatch> XenServerPatches { get; private set; }
|
||||
@ -72,9 +74,11 @@ namespace XenAdmin.Actions
|
||||
private readonly bool _checkForPatches;
|
||||
private readonly string _checkForUpdatesUrl;
|
||||
|
||||
public DownloadUpdatesXmlAction(bool checkForXenCenter, bool checkForServerVersion, bool checkForPatches, string checkForUpdatesUrl)
|
||||
public DownloadUpdatesXmlAction(bool checkForXenCenter, bool checkForServerVersion, bool checkForPatches, string checkForUpdatesUrl = null)
|
||||
: base(null, "_get_updates", "_get_updates", true)
|
||||
{
|
||||
Debug.Assert(checkForUpdatesUrl != null, "Parameter checkForUpdatesUrl should not be null. This class does not default its value anymore.");
|
||||
|
||||
XenServerPatches = new List<XenServerPatch>();
|
||||
XenServerVersions = new List<XenServerVersion>();
|
||||
XenCenterVersions = new List<XenCenterVersion>();
|
||||
@ -82,13 +86,9 @@ namespace XenAdmin.Actions
|
||||
_checkForXenCenter = checkForXenCenter;
|
||||
_checkForServerVersion = checkForServerVersion;
|
||||
_checkForPatches = checkForPatches;
|
||||
_checkForUpdatesUrl = string.IsNullOrEmpty(checkForUpdatesUrl) ? InvisibleMessages.XENSERVER_UPDATE_URL : checkForUpdatesUrl;
|
||||
_checkForUpdatesUrl = checkForUpdatesUrl;
|
||||
}
|
||||
|
||||
public DownloadUpdatesXmlAction(bool checkForXenCenter, bool checkForServerVersion, bool checkForPatches)
|
||||
: this(checkForXenCenter, checkForServerVersion, checkForPatches, null)
|
||||
{ }
|
||||
|
||||
protected override void Run()
|
||||
{
|
||||
this.Description = Messages.AVAILABLE_UPDATES_SEARCHING;
|
||||
@ -98,6 +98,7 @@ namespace XenAdmin.Actions
|
||||
GetXenCenterVersions(xdoc);
|
||||
GetXenServerPatches(xdoc);
|
||||
GetXenServerVersions(xdoc);
|
||||
|
||||
}
|
||||
|
||||
private void GetXenCenterVersions(XmlDocument xdoc)
|
||||
@ -147,6 +148,7 @@ namespace XenAdmin.Actions
|
||||
string name = "";
|
||||
string description = "";
|
||||
string guidance = "";
|
||||
string guidance_mandatory = "";
|
||||
string patchVersion = "";
|
||||
string url = "";
|
||||
string patchUrl = "";
|
||||
@ -164,6 +166,8 @@ namespace XenAdmin.Actions
|
||||
description = attrib.Value;
|
||||
else if (attrib.Name == "after-apply-guidance")
|
||||
guidance = attrib.Value;
|
||||
else if (attrib.Name == "guidance-mandatory")
|
||||
guidance_mandatory = attrib.Value;
|
||||
else if (attrib.Name == "version")
|
||||
patchVersion = attrib.Value;
|
||||
else if (attrib.Name == "url")
|
||||
@ -181,7 +185,7 @@ namespace XenAdmin.Actions
|
||||
var conflictingPatches = GetPatchDependencies(version, ConflictingPatchesNode, ConflictingPatchNode);
|
||||
var requiredPatches = GetPatchDependencies(version, RequiredPatchesNode, RequiredPatchNode);
|
||||
|
||||
XenServerPatches.Add(new XenServerPatch(uuid, name, description, guidance, patchVersion, url,
|
||||
XenServerPatches.Add(new XenServerPatch(uuid, name, description, guidance, guidance_mandatory, patchVersion, url,
|
||||
patchUrl, timestamp, priority, installationSize, conflictingPatches, requiredPatches));
|
||||
}
|
||||
}
|
||||
@ -206,6 +210,7 @@ namespace XenAdmin.Actions
|
||||
var dependencies = new List<string>();
|
||||
|
||||
dependencies.AddRange(from XmlNode node in dependenciesNode.ChildNodes
|
||||
where node.Attributes != null
|
||||
from XmlAttribute attrib in node.Attributes
|
||||
where node.Name == dependencyNodeName && node.Attributes != null && attrib.Name == "uuid"
|
||||
select attrib.Value);
|
||||
@ -245,18 +250,38 @@ namespace XenAdmin.Actions
|
||||
}
|
||||
|
||||
List<XenServerPatch> patches = new List<XenServerPatch>();
|
||||
List<XenServerPatch> minimalPatches = null; //keep it null to indicate that there is no a minimalpatches tag
|
||||
|
||||
foreach (XmlNode childnode in version.ChildNodes)
|
||||
{
|
||||
if (childnode.Name != "patch")
|
||||
continue;
|
||||
XenServerPatch patch = XenServerPatches.Find(item => string.Equals(item.Uuid, childnode.Attributes["uuid"].Value, StringComparison.OrdinalIgnoreCase));
|
||||
if (patch == null)
|
||||
continue;
|
||||
patches.Add(patch);
|
||||
if (childnode.Name == "minimalpatches")
|
||||
{
|
||||
minimalPatches = new List<XenServerPatch>();
|
||||
|
||||
foreach (XmlNode minimalpatch in childnode.ChildNodes)
|
||||
{
|
||||
if (minimalpatch.Name != "patch")
|
||||
continue;
|
||||
|
||||
XenServerPatch mp = XenServerPatches.Find(p => string.Equals(p.Uuid, minimalpatch.Attributes["uuid"].Value, StringComparison.OrdinalIgnoreCase));
|
||||
if (mp == null)
|
||||
continue;
|
||||
minimalPatches.Add(mp);
|
||||
}
|
||||
}
|
||||
|
||||
if (childnode.Name == "patch")
|
||||
{
|
||||
|
||||
XenServerPatch patch = XenServerPatches.Find(item => string.Equals(item.Uuid, childnode.Attributes["uuid"].Value, StringComparison.OrdinalIgnoreCase));
|
||||
if (patch == null)
|
||||
continue;
|
||||
patches.Add(patch);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
XenServerVersions.Add(new XenServerVersion(version_oem, name, is_latest, url, patches, timestamp,
|
||||
XenServerVersions.Add(new XenServerVersion(version_oem, name, is_latest, url, patches, minimalPatches, timestamp,
|
||||
buildNumber));
|
||||
}
|
||||
}
|
||||
@ -264,10 +289,19 @@ namespace XenAdmin.Actions
|
||||
|
||||
protected virtual XmlDocument FetchCheckForUpdatesXml(string location)
|
||||
{
|
||||
XmlDocument xdoc;
|
||||
using (Stream xmlstream = HTTPHelper.GET(new Uri(location), Connection, false, true))
|
||||
var xdoc = new XmlDocument();
|
||||
var uri = new Uri(location);
|
||||
|
||||
if (uri.IsFile)
|
||||
{
|
||||
xdoc = Helpers.LoadXmlDocument(xmlstream);
|
||||
xdoc.Load(location);
|
||||
}
|
||||
else
|
||||
{
|
||||
using (Stream xmlstream = HTTPHelper.GET(new Uri(location), Connection, false, true))
|
||||
{
|
||||
xdoc = Helpers.LoadXmlDocument(xmlstream);
|
||||
}
|
||||
}
|
||||
return xdoc;
|
||||
}
|
||||
|
@ -31,15 +31,19 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using XenAPI;
|
||||
|
||||
namespace XenAdmin.Core
|
||||
{
|
||||
[DebuggerDisplay("XenServerPatch (Name={Name}; Uuid={Uuid})")]
|
||||
public class XenServerPatch : IEquatable<XenServerPatch>
|
||||
{
|
||||
private string _uuid;
|
||||
public readonly string Name;
|
||||
public readonly string Description;
|
||||
public readonly string Guidance;
|
||||
public readonly string Guidance_mandatory;
|
||||
public readonly Version Version;
|
||||
public readonly string Url;
|
||||
public readonly string PatchUrl;
|
||||
@ -52,13 +56,14 @@ namespace XenAdmin.Core
|
||||
|
||||
private const int DEFAULT_PRIORITY = 2;
|
||||
|
||||
public XenServerPatch(string uuid, string name, string description, string guidance, string version, string url,
|
||||
public XenServerPatch(string uuid, string name, string description, string guidance, string guidance_mandatory , string version, string url,
|
||||
string patchUrl, string timestamp, string priority, string installationSize)
|
||||
{
|
||||
_uuid = uuid;
|
||||
Name = name;
|
||||
Description = description;
|
||||
Guidance = guidance;
|
||||
Guidance_mandatory = guidance_mandatory;
|
||||
Version = new Version(version);
|
||||
if (url.StartsWith("/XenServer"))
|
||||
url = XenServerVersion.UpdateRoot + url;
|
||||
@ -71,10 +76,11 @@ namespace XenAdmin.Core
|
||||
InstallationSize = 0;
|
||||
}
|
||||
|
||||
public XenServerPatch(string uuid, string name, string description, string guidance, string version, string url,
|
||||
public XenServerPatch(string uuid, string name, string description, string guidance, string guidance_mandatory, string version, string url,
|
||||
string patchUrl, string timestamp, string priority, string installationSize, List<string> conflictingPatches, List<string> requiredPatches)
|
||||
: this(uuid, name, description, guidance, version, url, patchUrl, timestamp, priority, installationSize)
|
||||
: this(uuid, name, description, guidance, guidance_mandatory, version, url, patchUrl, timestamp, priority, installationSize)
|
||||
{
|
||||
|
||||
ConflictingPatches = conflictingPatches;
|
||||
RequiredPatches = requiredPatches;
|
||||
}
|
||||
@ -86,7 +92,43 @@ namespace XenAdmin.Core
|
||||
|
||||
public bool Equals(XenServerPatch other)
|
||||
{
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return string.Equals(Uuid, other.Uuid, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public after_apply_guidance after_apply_guidance
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Guidance)
|
||||
{
|
||||
case "restartHVM":
|
||||
return after_apply_guidance.restartHVM;
|
||||
|
||||
case "restartPV":
|
||||
return after_apply_guidance.restartPV;
|
||||
|
||||
case "restartHost":
|
||||
return after_apply_guidance.restartHost;
|
||||
|
||||
case "restartXAPI":
|
||||
return after_apply_guidance.restartXAPI;
|
||||
|
||||
default:
|
||||
return after_apply_guidance.unknown;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool GuidanceMandatory
|
||||
{
|
||||
get
|
||||
{
|
||||
return !string.IsNullOrEmpty(Guidance_mandatory) && this.Guidance_mandatory.ToLowerInvariant().Contains("true");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -31,9 +31,11 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace XenAdmin.Core
|
||||
{
|
||||
[DebuggerDisplay("XenServerVersion (Name={Name}; Patches.Count={Patches.Count}; MinimalPatches.Count={MinimalPatches.Count})")]
|
||||
public class XenServerVersion
|
||||
{
|
||||
public Version Version;
|
||||
@ -42,11 +44,29 @@ namespace XenAdmin.Core
|
||||
public string Url;
|
||||
public string Oem;
|
||||
public List<XenServerPatch> Patches;
|
||||
|
||||
/// <summary>
|
||||
/// A host of this version is considered up-to-date when it has all the patches in this list installed on it
|
||||
/// <value>null</value> means that the list is not known (batch updates/automatic updating is not supported)
|
||||
/// </summary>
|
||||
public List<XenServerPatch> MinimalPatches;
|
||||
|
||||
public DateTime TimeStamp;
|
||||
public const string UpdateRoot = @"http://updates.xensource.com";
|
||||
public string BuildNumber;
|
||||
|
||||
public XenServerVersion(string version_oem, string name, bool latest, string url, List<XenServerPatch> patches,
|
||||
/// <summary>
|
||||
/// Defines metadata for a XenServer version
|
||||
/// </summary>
|
||||
/// <param name="version_oem"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="latest"></param>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="patches"></param>
|
||||
/// <param name="minimumPatches">can be null (see <paramref name="MinimalPatches"/></param>
|
||||
/// <param name="timestamp"></param>
|
||||
/// <param name="buildNumber"></param>
|
||||
public XenServerVersion(string version_oem, string name, bool latest, string url, List<XenServerPatch> patches, List<XenServerPatch> minimumPatches,
|
||||
string timestamp, string buildNumber)
|
||||
{
|
||||
ParseVersion(version_oem);
|
||||
@ -56,6 +76,7 @@ namespace XenAdmin.Core
|
||||
url = UpdateRoot + url;
|
||||
Url = url;
|
||||
Patches = patches;
|
||||
MinimalPatches = minimumPatches;
|
||||
DateTime.TryParse(timestamp, out TimeStamp);
|
||||
BuildNumber = buildNumber;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using XenAPI;
|
||||
|
||||
|
||||
@ -41,16 +42,15 @@ namespace XenAdmin.Actions
|
||||
public class InstallPVToolsAction : AsyncAction
|
||||
{
|
||||
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private readonly Action _xsToolsNotFound;
|
||||
private readonly bool _searchHiddenIsOs;
|
||||
|
||||
public InstallPVToolsAction(VM vm, Action xsToolsNotfound, bool searchHiddenISOs)
|
||||
public InstallPVToolsAction(VM vm, bool searchHiddenISOs)
|
||||
: base(vm.Connection, string.Format(Messages.INSTALLTOOLS_TITLE, vm.Name))
|
||||
{
|
||||
VM = vm;
|
||||
_xsToolsNotFound = xsToolsNotfound;
|
||||
_searchHiddenIsOs = searchHiddenISOs;
|
||||
#region RBAC Dependencies
|
||||
|
||||
#region RBAC Dependencies
|
||||
foreach (SR sr in VM.Connection.Cache.SRs)
|
||||
{
|
||||
if (sr.IsToolsSR && sr.IsBroken())
|
||||
@ -63,7 +63,7 @@ namespace XenAdmin.Actions
|
||||
ApiMethodsToRoleCheck.Add("vbd.eject");
|
||||
ApiMethodsToRoleCheck.Add("vbd.insert");
|
||||
ApiMethodsToRoleCheck.AddRange(Role.CommonSessionApiList);
|
||||
#endregion
|
||||
#endregion
|
||||
}
|
||||
|
||||
protected override void Run()
|
||||
@ -75,12 +75,12 @@ namespace XenAdmin.Actions
|
||||
{
|
||||
try
|
||||
{
|
||||
SrRepairAction action = new SrRepairAction(sr.Connection, sr,false);
|
||||
SrRepairAction action = new SrRepairAction(sr.Connection, sr, false);
|
||||
action.RunExternal(Session);
|
||||
}
|
||||
catch (Failure)
|
||||
catch (Failure f)
|
||||
{
|
||||
_xsToolsNotFound();
|
||||
throw new Failure(Messages.XS_TOOLS_SR_NOT_FOUND, f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,17 +98,14 @@ namespace XenAdmin.Actions
|
||||
XenAPI.VBD cdrom = VM.FindVMCDROM();
|
||||
if (cdrom == null)
|
||||
{
|
||||
Description = Messages.INSTALLTOOLS_COULDNOTFIND_CD;
|
||||
return;
|
||||
throw new Failure(Messages.INSTALLTOOLS_COULDNOTFIND_CD);
|
||||
}
|
||||
|
||||
// Find the tools ISO...
|
||||
XenAPI.VDI winIso = findWinISO(_searchHiddenIsOs);
|
||||
if (winIso == null)
|
||||
{
|
||||
// Could not find the windows PV drivers ISO.
|
||||
Description = Messages.INSTALLTOOLS_COULDNOTFIND_WIN;
|
||||
return;
|
||||
throw new Failure(Messages.INSTALLTOOLS_COULDNOTFIND_WIN);
|
||||
}
|
||||
|
||||
Description = Messages.INSTALLTOOLS_STARTING;
|
||||
@ -122,7 +119,7 @@ namespace XenAdmin.Actions
|
||||
// Insert the tools ISO...
|
||||
XenAPI.VBD.insert(Session, cdrom.opaque_ref, winIso.opaque_ref);
|
||||
|
||||
// done(ish)...
|
||||
// done here; installation continues on the VM
|
||||
Description = Messages.INSTALLTOOLS_DONE;
|
||||
}
|
||||
|
||||
@ -134,11 +131,10 @@ namespace XenAdmin.Actions
|
||||
{
|
||||
if (XenAPI.SR.SRTypes.iso.ToString() == sr.content_type)
|
||||
{
|
||||
foreach (VDI vdi in Connection.ResolveAllShownXenModelObjects(sr.VDIs, searchHiddenISOs))
|
||||
{
|
||||
if (vdi.IsToolsIso)
|
||||
return vdi;
|
||||
}
|
||||
var vdis = Connection.ResolveAllShownXenModelObjects(sr.VDIs, searchHiddenISOs);
|
||||
var vdi = vdis.FirstOrDefault(v => v.IsToolsIso);
|
||||
if (vdi != null)
|
||||
return vdi;
|
||||
}
|
||||
}
|
||||
|
||||
|
13
XenModel/FriendlyNames.Designer.cs
generated
13
XenModel/FriendlyNames.Designer.cs
generated
@ -1,7 +1,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
// Runtime Version:4.0.30319.34209
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@ -2652,6 +2652,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Required Updates.
|
||||
/// </summary>
|
||||
public static string Label_Pool_patch_required_updates {
|
||||
get {
|
||||
return ResourceManager.GetString("Label-Pool_patch.required-updates", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disk space allocations.
|
||||
/// </summary>
|
||||
@ -4059,7 +4068,7 @@ namespace XenAdmin {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Pool '{0}' failed to retrieve placement recommendations from WLB for VM '{1}'..
|
||||
/// Looks up a localized string similar to Pool '{0}' failed to retrieve placement recommendations from WLB for '{1}'..
|
||||
/// </summary>
|
||||
public static string Message_body_wlb_consultation_failed {
|
||||
get {
|
||||
|
@ -1859,6 +1859,9 @@
|
||||
<data name="Label-host.edition-standard" xml:space="preserve">
|
||||
<value>[Citrix] [XenServer product] Standard Edition</value>
|
||||
</data>
|
||||
<data name="Label-Pool_patch.required-updates" xml:space="preserve">
|
||||
<value>Required Updates</value>
|
||||
</data>
|
||||
<data name="Label-SR.SRTypes-nutanix" xml:space="preserve">
|
||||
<value>Nutanix</value>
|
||||
</data>
|
||||
|
303
XenModel/Messages.Designer.cs
generated
303
XenModel/Messages.Designer.cs
generated
@ -1,7 +1,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
// Runtime Version:4.0.30319.34209
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@ -501,15 +501,6 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disable live patching.
|
||||
/// </summary>
|
||||
public static string ACTION_DISABLE_LIVE_PATCHING {
|
||||
get {
|
||||
return ResourceManager.GetString("ACTION_DISABLE_LIVE_PATCHING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disabling .
|
||||
/// </summary>
|
||||
@ -528,15 +519,6 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disabling live patching for '{0}'.
|
||||
/// </summary>
|
||||
public static string ACTION_DISABLING_LIVE_PATCHING {
|
||||
get {
|
||||
return ResourceManager.GetString("ACTION_DISABLING_LIVE_PATCHING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Activated disk....
|
||||
/// </summary>
|
||||
@ -825,15 +807,6 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enable live patching.
|
||||
/// </summary>
|
||||
public static string ACTION_ENABLE_LIVE_PATCHING {
|
||||
get {
|
||||
return ResourceManager.GetString("ACTION_ENABLE_LIVE_PATCHING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enabling.
|
||||
/// </summary>
|
||||
@ -852,15 +825,6 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enabling live patching for '{0}'.
|
||||
/// </summary>
|
||||
public static string ACTION_ENABLING_LIVE_PATCHING {
|
||||
get {
|
||||
return ResourceManager.GetString("ACTION_ENABLING_LIVE_PATCHING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Export failed due to a block checksum mismatch. Please retry the export..
|
||||
/// </summary>
|
||||
@ -2490,6 +2454,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Upload error. The patch was uploaded, but it cannot be found on the host..
|
||||
/// </summary>
|
||||
public static string ACTION_UPLOADPATCHTOMASTERPLANACTION_FAILED {
|
||||
get {
|
||||
return ResourceManager.GetString("ACTION_UPLOADPATCHTOMASTERPLANACTION_FAILED", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Virtual disk created.
|
||||
/// </summary>
|
||||
@ -8607,15 +8580,6 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Home Server:.
|
||||
/// </summary>
|
||||
public static string CPM_SUMMARY_KEY_HOME_SERVER {
|
||||
get {
|
||||
return ResourceManager.GetString("CPM_SUMMARY_KEY_HOME_SERVER", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Template:.
|
||||
/// </summary>
|
||||
@ -8652,6 +8616,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Target Server:.
|
||||
/// </summary>
|
||||
public static string CPM_SUMMARY_KEY_TARGET_SERVER {
|
||||
get {
|
||||
return ResourceManager.GetString("CPM_SUMMARY_KEY_TARGET_SERVER", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Migration Network:.
|
||||
/// </summary>
|
||||
@ -8779,7 +8752,7 @@ namespace XenAdmin {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Specify a &home server in the destination pool (optional):.
|
||||
/// Looks up a localized string similar to Specify a &target server in the destination pool (optional):.
|
||||
/// </summary>
|
||||
public static string CPM_WIZARD_DESTINATION_TABLE_INTRO {
|
||||
get {
|
||||
@ -24981,6 +24954,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to There is not enough space to automatically update '{0}'..
|
||||
/// </summary>
|
||||
public static string NOT_ENOUGH_SPACE_MESSAGE_AUTO_UPDATE {
|
||||
get {
|
||||
return ResourceManager.GetString("NOT_ENOUGH_SPACE_MESSAGE_AUTO_UPDATE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Space available: {0}.
|
||||
/// </summary>
|
||||
@ -25785,6 +25767,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Running prechecks....
|
||||
/// </summary>
|
||||
public static string PATCHING_WIZARD_RUNNING_PRECHECKS {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHING_WIZARD_RUNNING_PRECHECKS", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Unable to resolve this issue:\n{0}\n\nPlease resolve this issue manually and then click Check Again.
|
||||
///.
|
||||
@ -25813,6 +25804,60 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Update process was not completed successfully..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Following error occurred while automatic upgrade was in progress: .
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_OCCURRED {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_OCCURRED", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Following errors occurred while automatic upgrade was in progress:.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_ERRORS_OCCURRED {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_ERRORS_OCCURRED", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Update was not completed successfully.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_FAILED {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_FAILED", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Upload and Install.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_TEXT {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_TEXT", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Automatically uploading and installing updates.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_AUTOUPDATINGPAGE_TITLE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_AUTOUPDATINGPAGE_TITLE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Clean up....
|
||||
/// </summary>
|
||||
@ -25822,6 +25867,33 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Downloading update {0}....
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_DOWNLOADING {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_DOWNLOADING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Skipping download: Already downloaded update {0}....
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_SKIPPING {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_SKIPPING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Waiting to download update {0}....
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_WAITING {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_WAITING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No action required.
|
||||
/// </summary>
|
||||
@ -26047,6 +26119,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Checking disk space requirements.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_PRECHECKPAGE_CHECKING_DISK_SPACE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_PRECHECKPAGE_CHECKING_DISK_SPACE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Prechecks failed..
|
||||
/// </summary>
|
||||
@ -26065,6 +26146,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Prechecks are performed to verify that the automatic update can proceed..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_AUTOMATIC_MODE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_AUTOMATIC_MODE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Update prechecks are performed to verify that the selected update can be applied to the servers..
|
||||
/// </summary>
|
||||
@ -26146,6 +26236,24 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Automatic update is not supported on this [XenServer] version.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_HOST_VERSION {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_HOST_VERSION", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Automatic update is not supported on partially upgraded [XenServer] pools.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_PARTIALLY_UPGRADED {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_PARTIALLY_UPGRADED", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Cannot install supplemental packs on this [XenServer] version.
|
||||
/// </summary>
|
||||
@ -26164,6 +26272,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to This server is not licensed for automatic updating.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_HOST_UNLICENSED_FOR_BATCH_UPDATING {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGE_HOST_UNLICENSED_FOR_BATCH_UPDATING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Update already applied.
|
||||
/// </summary>
|
||||
@ -26191,6 +26308,24 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to This server cannot be updated automatically.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_NOT_AUTO_UPGRADABLE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_NOT_AUTO_UPGRADABLE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to This server is already up-to-date.
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_UP_TO_DATE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_UP_TO_DATE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select Servers.
|
||||
/// </summary>
|
||||
@ -26209,6 +26344,35 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select one or more pools or standalone hosts that you want to have automatically updated.
|
||||
///Greyed out servers cannot be updated automatically..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_AUTOMATIC_MODE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_AUTOMATIC_MODE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select one or more servers from the list of available servers.
|
||||
///Servers where the selected update cannot be applied appear disabled in this list..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_DEFAULT {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_DEFAULT", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Automatic update has finished..
|
||||
/// </summary>
|
||||
public static string PATCHINGWIZARD_UPDATES_DONE_AUTOMATIC_MODE {
|
||||
get {
|
||||
return ResourceManager.GetString("PATCHINGWIZARD_UPDATES_DONE_AUTOMATIC_MODE", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to [XenCenter] is now downloading your update and uploading it to the servers specified in the previous step.
|
||||
///Please wait for these operations to complete, then click Next to continue with the installation..
|
||||
@ -28360,6 +28524,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Restore dismissed updates.
|
||||
/// </summary>
|
||||
public static string RESTORE_DISMISSED_UPDATES {
|
||||
get {
|
||||
return ResourceManager.GetString("RESTORE_DISMISSED_UPDATES", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Backup file loaded to server '{0}'. Refer to the "[XenServer product] Administrator's Guide" for instructions on how to complete the restore procedure..
|
||||
/// </summary>
|
||||
@ -28378,6 +28551,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Restoring....
|
||||
/// </summary>
|
||||
public static string RESTORING {
|
||||
get {
|
||||
return ResourceManager.GetString("RESTORING", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Restoring server '{0}'.
|
||||
/// </summary>
|
||||
@ -29277,6 +29459,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disk space check.
|
||||
/// </summary>
|
||||
public static string SERVER_SIDE_CHECK_AUTO_MODE_DESCRIPTION {
|
||||
get {
|
||||
return ResourceManager.GetString("SERVER_SIDE_CHECK_AUTO_MODE_DESCRIPTION", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Server side patch check.
|
||||
/// </summary>
|
||||
@ -31335,6 +31526,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Target Server.
|
||||
/// </summary>
|
||||
public static string TARGET_SERVER {
|
||||
get {
|
||||
return ResourceManager.GetString("TARGET_SERVER", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Tell me more ....
|
||||
/// </summary>
|
||||
@ -32986,6 +33186,15 @@ namespace XenAdmin {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Removing update files from {0}....
|
||||
/// </summary>
|
||||
public static string UPDATES_WIZARD_REMOVING_UPDATES_FROM_POOL {
|
||||
get {
|
||||
return ResourceManager.GetString("UPDATES_WIZARD_REMOVING_UPDATES_FROM_POOL", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Click here to repair.
|
||||
/// </summary>
|
||||
|
@ -264,18 +264,12 @@
|
||||
<data name="ACTION_DETATCHING_MULTIPLE_VDIS_TITLE" xml:space="preserve">
|
||||
<value>Detaching Multiple Storage Items</value>
|
||||
</data>
|
||||
<data name="ACTION_DISABLE_LIVE_PATCHING" xml:space="preserve">
|
||||
<value>Disable live patching</value>
|
||||
</data>
|
||||
<data name="ACTION_DISABLE_VM_ENLIGHTENMENT_DESCRIPTION" xml:space="preserve">
|
||||
<value>Disabling </value>
|
||||
</data>
|
||||
<data name="ACTION_DISABLE_VM_ENLIGHTENMENT_TITLE" xml:space="preserve">
|
||||
<value>Disable container management on VM '{0}'</value>
|
||||
</data>
|
||||
<data name="ACTION_DISABLING_LIVE_PATCHING" xml:space="preserve">
|
||||
<value>Disabling live patching for '{0}'</value>
|
||||
</data>
|
||||
<data name="ACTION_DISK_ACTIVATED" xml:space="preserve">
|
||||
<value>Activated disk...</value>
|
||||
</data>
|
||||
@ -372,18 +366,12 @@
|
||||
<data name="ACTION_DR_TASK_DESTROY_TITLE" xml:space="preserve">
|
||||
<value>DR cleanup ({0})</value>
|
||||
</data>
|
||||
<data name="ACTION_ENABLE_LIVE_PATCHING" xml:space="preserve">
|
||||
<value>Enable live patching</value>
|
||||
</data>
|
||||
<data name="ACTION_ENABLE_VM_ENLIGHTENMENT_DESCRIPTION" xml:space="preserve">
|
||||
<value>Enabling</value>
|
||||
</data>
|
||||
<data name="ACTION_ENABLE_VM_ENLIGHTENMENT_TITLE" xml:space="preserve">
|
||||
<value>Enable container management on VM '{0}'</value>
|
||||
</data>
|
||||
<data name="ACTION_ENABLING_LIVE_PATCHING" xml:space="preserve">
|
||||
<value>Enabling live patching for '{0}'</value>
|
||||
</data>
|
||||
<data name="ACTION_EXPORT_DESCRIPTION_BLOCK_CHECKSUM_FAILED" xml:space="preserve">
|
||||
<value>Export failed due to a block checksum mismatch. Please retry the export.</value>
|
||||
</data>
|
||||
@ -918,6 +906,9 @@
|
||||
<data name="ACTION_UPDATE_INTEGRATED_GPU_PASSTHROUGH_TITLE" xml:space="preserve">
|
||||
<value>Updating integrated GPU passthrough on '{0}'</value>
|
||||
</data>
|
||||
<data name="ACTION_UPLOADPATCHTOMASTERPLANACTION_FAILED" xml:space="preserve">
|
||||
<value>Upload error. The patch was uploaded, but it cannot be found on the host.</value>
|
||||
</data>
|
||||
<data name="ACTION_UPLOAD_SERVER_STATUS_REPORT" xml:space="preserve">
|
||||
<value>Upload server status report to [Citrix] Insight Services</value>
|
||||
</data>
|
||||
@ -3122,9 +3113,6 @@ You can only connect to a single [Citrix] [XenServer product] Express Edition se
|
||||
<data name="CPM_SUMMARY_KEY_DESTINATION" xml:space="preserve">
|
||||
<value>Destination:</value>
|
||||
</data>
|
||||
<data name="CPM_SUMMARY_KEY_HOME_SERVER" xml:space="preserve">
|
||||
<value>Home Server:</value>
|
||||
</data>
|
||||
<data name="CPM_SUMMARY_KEY_MIGRATE_TEMPLATE" xml:space="preserve">
|
||||
<value>Template:</value>
|
||||
</data>
|
||||
@ -3137,6 +3125,9 @@ You can only connect to a single [Citrix] [XenServer product] Express Edition se
|
||||
<data name="CPM_SUMMARY_KEY_STORAGE" xml:space="preserve">
|
||||
<value>Storage:</value>
|
||||
</data>
|
||||
<data name="CPM_SUMMARY_KEY_TARGET_SERVER" xml:space="preserve">
|
||||
<value>Target Server:</value>
|
||||
</data>
|
||||
<data name="CPM_SUMMARY_KEY_TRANSFER_NETWORK" xml:space="preserve">
|
||||
<value>Migration Network:</value>
|
||||
</data>
|
||||
@ -3177,7 +3168,7 @@ You can only connect to a single [Citrix] [XenServer product] Express Edition se
|
||||
<value>Select the pool or standalone server where you want to migrate the selected VM to.</value>
|
||||
</data>
|
||||
<data name="CPM_WIZARD_DESTINATION_TABLE_INTRO" xml:space="preserve">
|
||||
<value>Specify a &home server in the destination pool (optional):</value>
|
||||
<value>Specify a &target server in the destination pool (optional):</value>
|
||||
</data>
|
||||
<data name="CPM_WIZARD_DESTINATION_TAB_TITLE" xml:space="preserve">
|
||||
<value>Destination Pool</value>
|
||||
@ -8698,6 +8689,9 @@ It is strongly recommended that you Cancel and apply the latest version of the p
|
||||
<data name="NOT_ENOUGH_SPACE_DESCRIPTION" xml:space="preserve">
|
||||
<value>This host does not have enough disk space to install this update</value>
|
||||
</data>
|
||||
<data name="NOT_ENOUGH_SPACE_MESSAGE_AUTO_UPDATE" xml:space="preserve">
|
||||
<value>There is not enough space to automatically update '{0}'.</value>
|
||||
</data>
|
||||
<data name="NOT_ENOUGH_SPACE_MESSAGE_AVAILABLE_SPACE" xml:space="preserve">
|
||||
<value>Space available: {0}</value>
|
||||
</data>
|
||||
@ -8934,9 +8928,36 @@ However, there is not enough space to perform the repartitioning, so the current
|
||||
<data name="PASTE" xml:space="preserve">
|
||||
<value>Paste</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR" xml:space="preserve">
|
||||
<value>Update process was not completed successfully.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_ERRORS_OCCURRED" xml:space="preserve">
|
||||
<value>Following errors occurred while automatic upgrade was in progress:</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_ERROR_OCCURRED" xml:space="preserve">
|
||||
<value>Following error occurred while automatic upgrade was in progress: </value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_FAILED" xml:space="preserve">
|
||||
<value>Update was not completed successfully</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_TEXT" xml:space="preserve">
|
||||
<value>Upload and Install</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_AUTOUPDATINGPAGE_TITLE" xml:space="preserve">
|
||||
<value>Automatically uploading and installing updates</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_CLEANUP" xml:space="preserve">
|
||||
<value>Clean up...</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_DOWNLOADING" xml:space="preserve">
|
||||
<value>Downloading update {0}...</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_SKIPPING" xml:space="preserve">
|
||||
<value>Skipping download: Already downloaded update {0}...</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_DOWNLOADUPDATE_ACTION_TITLE_WAITING" xml:space="preserve">
|
||||
<value>Waiting to download update {0}...</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_MODEPAGE_NOACTION" xml:space="preserve">
|
||||
<value>No action required</value>
|
||||
</data>
|
||||
@ -9012,12 +9033,18 @@ However, there is not enough space to perform the repartitioning, so the current
|
||||
<data name="PATCHINGWIZARD_PATCHINGPAGE_TITLE" xml:space="preserve">
|
||||
<value>Install the update</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_PRECHECKPAGE_CHECKING_DISK_SPACE" xml:space="preserve">
|
||||
<value>Checking disk space requirements</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_PRECHECKPAGE_FAILED" xml:space="preserve">
|
||||
<value>Prechecks failed.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE" xml:space="preserve">
|
||||
<value>Update prechecks are performed to verify that the update "{0}" can be applied to the servers.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_AUTOMATIC_MODE" xml:space="preserve">
|
||||
<value>Prechecks are performed to verify that the automatic update can proceed.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_PRECHECKPAGE_FIRSTLINE_NO_PATCH_NAME" xml:space="preserve">
|
||||
<value>Update prechecks are performed to verify that the selected update can be applied to the servers.</value>
|
||||
</data>
|
||||
@ -9045,12 +9072,21 @@ However, there is not enough space to perform the repartitioning, so the current
|
||||
<data name="PATCHINGWIZARD_SELECTPATCHPAGE_UPDATESEXT" xml:space="preserve">
|
||||
<value>[XenServer] Updates and Supplemental Packs (*.{0}, *.iso)|*.{0};*.iso</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_HOST_VERSION" xml:space="preserve">
|
||||
<value>Automatic update is not supported on this [XenServer] version</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_AUTO_UPDATE_NOT_SUPPORTED_PARTIALLY_UPGRADED" xml:space="preserve">
|
||||
<value>Automatic update is not supported on partially upgraded [XenServer] pools</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_CANNOT_INSTALL_SUPP_PACKS" xml:space="preserve">
|
||||
<value>Cannot install supplemental packs on this [XenServer] version</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_HOST_UNLICENSED" xml:space="preserve">
|
||||
<value>Subscription Advantage required</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_HOST_UNLICENSED_FOR_BATCH_UPDATING" xml:space="preserve">
|
||||
<value>This server is not licensed for automatic updating</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_PATCHING_FORBIDDEN" xml:space="preserve">
|
||||
<value>You cannot apply updates using [XenCenter].</value>
|
||||
</data>
|
||||
@ -9060,12 +9096,29 @@ However, there is not enough space to perform the repartitioning, so the current
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_PATCH_NOT_APPLICABLE" xml:space="preserve">
|
||||
<value>Update not applicable</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_NOT_AUTO_UPGRADABLE" xml:space="preserve">
|
||||
<value>This server cannot be updated automatically</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_SERVER_UP_TO_DATE" xml:space="preserve">
|
||||
<value>This server is already up-to-date</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_TEXT" xml:space="preserve">
|
||||
<value>Select Servers</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGE_TITLE" xml:space="preserve">
|
||||
<value>Select the servers you wish to update</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_AUTOMATIC_MODE" xml:space="preserve">
|
||||
<value>Select one or more pools or standalone hosts that you want to have automatically updated.
|
||||
Greyed out servers cannot be updated automatically.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_SELECTSERVERPAGGE_RUBRIC_DEFAULT" xml:space="preserve">
|
||||
<value>Select one or more servers from the list of available servers.
|
||||
Servers where the selected update cannot be applied appear disabled in this list.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_UPDATES_DONE_AUTOMATIC_MODE" xml:space="preserve">
|
||||
<value>Automatic update has finished.</value>
|
||||
</data>
|
||||
<data name="PATCHINGWIZARD_UPLOADPAGE_MESSAGE_DOWNLOAD_AND_UPLOAD" xml:space="preserve">
|
||||
<value>[XenCenter] is now downloading your update and uploading it to the servers specified in the previous step.
|
||||
Please wait for these operations to complete, then click Next to continue with the installation.</value>
|
||||
@ -9104,6 +9157,9 @@ Please wait for this operation to complete, then click Next to continue with the
|
||||
<data name="PATCHING_WIZARD_PRECHECK_STATUS" xml:space="preserve">
|
||||
<value>{0} ...</value>
|
||||
</data>
|
||||
<data name="PATCHING_WIZARD_RUNNING_PRECHECKS" xml:space="preserve">
|
||||
<value>Running prechecks...</value>
|
||||
</data>
|
||||
<data name="PATCHING_WIZARD_SOLVE_MANUALLY" xml:space="preserve">
|
||||
<value>Unable to resolve this issue:\n{0}\n\nPlease resolve this issue manually and then click Check Again.
|
||||
</value>
|
||||
@ -9881,12 +9937,18 @@ Click Server Status Report to open the Compile Server Status Report Wizard or cl
|
||||
<data name="RESOLVED_AS" xml:space="preserve">
|
||||
<value>Resolved as {0}</value>
|
||||
</data>
|
||||
<data name="RESTORE_DISMISSED_UPDATES" xml:space="preserve">
|
||||
<value>Restore dismissed updates</value>
|
||||
</data>
|
||||
<data name="RESTORE_FROM_BACKUP_FINALIZE" xml:space="preserve">
|
||||
<value>Backup file loaded to server '{0}'. Refer to the "[XenServer product] Administrator's Guide" for instructions on how to complete the restore procedure.</value>
|
||||
</data>
|
||||
<data name="RESTORE_HOST" xml:space="preserve">
|
||||
<value>Restore From Backup...</value>
|
||||
</data>
|
||||
<data name="RESTORING" xml:space="preserve">
|
||||
<value>Restoring...</value>
|
||||
</data>
|
||||
<data name="RESTORING_HOST" xml:space="preserve">
|
||||
<value>Restoring server '{0}'</value>
|
||||
</data>
|
||||
@ -10207,6 +10269,9 @@ The master must be upgraded first, so if you skip the master, the rolling pool u
|
||||
<data name="SERVER_REQUEST_IN_PROGRESS" xml:space="preserve">
|
||||
<value>A server request is in progress</value>
|
||||
</data>
|
||||
<data name="SERVER_SIDE_CHECK_AUTO_MODE_DESCRIPTION" xml:space="preserve">
|
||||
<value>Disk space check</value>
|
||||
</data>
|
||||
<data name="SERVER_SIDE_CHECK_DESCRIPTION" xml:space="preserve">
|
||||
<value>Server side patch check</value>
|
||||
</data>
|
||||
@ -10885,6 +10950,9 @@ Refer to the "[XenServer product] Administrator's Guide" for instructions on how
|
||||
<data name="TARGET" xml:space="preserve">
|
||||
<value>Target</value>
|
||||
</data>
|
||||
<data name="TARGET_SERVER" xml:space="preserve">
|
||||
<value>Target Server</value>
|
||||
</data>
|
||||
<data name="TELL_ME_MORE" xml:space="preserve">
|
||||
<value>Tell me more ...</value>
|
||||
</data>
|
||||
@ -11408,6 +11476,9 @@ Check your settings and try again.</value>
|
||||
<data name="UPDATES_WIZARD_REMOVING_UPDATE" xml:space="preserve">
|
||||
<value>Deleting update installation file {0} from {1}... </value>
|
||||
</data>
|
||||
<data name="UPDATES_WIZARD_REMOVING_UPDATES_FROM_POOL" xml:space="preserve">
|
||||
<value>Removing update files from {0}...</value>
|
||||
</data>
|
||||
<data name="UPDATES_WIZARD_REPAIR_SR" xml:space="preserve">
|
||||
<value>Click here to repair</value>
|
||||
</data>
|
||||
|
@ -1932,10 +1932,7 @@ namespace XenAdmin.Network
|
||||
public List<VDI> ResolveAllShownXenModelObjects(List<XenRef<VDI>> xenRefs, bool showHiddenObjects)
|
||||
{
|
||||
List<VDI> result = ResolveAll(xenRefs);
|
||||
result.RemoveAll(delegate(VDI vdi)
|
||||
{
|
||||
return !vdi.Show(showHiddenObjects);
|
||||
});
|
||||
result.RemoveAll(vdi => !vdi.Show(showHiddenObjects));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -246,6 +246,16 @@ namespace XenAPI
|
||||
return h._RestrictHotfixApply;
|
||||
}
|
||||
|
||||
private bool _RestrictBatchHotfixApply
|
||||
{
|
||||
get { return BoolKeyPreferTrue(license_params, "restrict_batch_hotfix_apply"); }
|
||||
}
|
||||
|
||||
public static bool RestrictBatchHotfixApply(Host h)
|
||||
{
|
||||
return h._RestrictBatchHotfixApply;
|
||||
}
|
||||
|
||||
private bool _RestrictCheckpoint
|
||||
{
|
||||
get { return BoolKeyPreferTrue(license_params, "restrict_checkpoint"); }
|
||||
@ -521,16 +531,6 @@ namespace XenAPI
|
||||
return h._RestrictSslLegacySwitch;
|
||||
}
|
||||
|
||||
private bool _RestrictLivePatching
|
||||
{
|
||||
get { return BoolKeyPreferTrue(license_params, "restrict_live_patching"); }
|
||||
}
|
||||
|
||||
public static bool RestrictLivePatching(Host h)
|
||||
{
|
||||
return h._RestrictLivePatching;
|
||||
}
|
||||
|
||||
public bool HasPBDTo(SR sr)
|
||||
{
|
||||
foreach (XenRef<PBD> pbd in PBDs)
|
||||
|
@ -302,20 +302,15 @@ namespace XenAPI
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Whether this is a Tools ISO. Finds the old method (by name) as well as
|
||||
/// the new method (field on the VDI).
|
||||
/// Whether this is a Tools ISO.
|
||||
/// The new method is to check the is_tools_iso flag, the old one to check the name_label.
|
||||
/// </summary>
|
||||
public bool IsToolsIso
|
||||
{
|
||||
get
|
||||
{
|
||||
const string ISONameOld = "xswindrivers.iso";
|
||||
const string ISONameNew = "xs-tools.iso";
|
||||
|
||||
return
|
||||
is_tools_iso ||
|
||||
ISONameOld.Equals(name_label) ||
|
||||
ISONameNew.Equals(name_label);
|
||||
string[] toolIsoNames = {"xswindrivers.iso", "xs-tools.iso", "guest-tools.iso"};
|
||||
return is_tools_iso || toolIsoNames.Contains(name_label);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user