using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace Vestris.VMWareLib { /// /// VMWare job timeout metadata. /// public class VMWareTimeoutAttribute : Attribute { private int _multiplier = 1; /// /// A default base timeout multiplier. /// public int Multiplier { get { return _multiplier; } set { _multiplier = value; } } } /// /// A collection of default timeouts used in VMWareTasks functions exposed without a timeout parameter. /// public class VMWareTimeouts { /// /// Maximum time, in seconds, to establish a connection to a VMWare host. /// [VMWareTimeoutAttribute] public int ConnectTimeout; /// /// Maximum time, in seconds, to open a virtual machine. /// [VMWareTimeoutAttribute] public int OpenVMTimeout; /// /// Maximum time, in seconds, to register or unregister a virtual machine. /// [VMWareTimeoutAttribute] public int RegisterVMTimeout; /// /// Maximum time, in seconds, to revert a snapshot. /// [VMWareTimeoutAttribute] public int RevertToSnapshotTimeout; /// /// Maximum time, in seconds, to remove (delete) a snapshot. /// [VMWareTimeoutAttribute(Multiplier = 10)] public int RemoveSnapshotTimeout; /// /// Maximum time, in seconds, to create a snapshot. /// [VMWareTimeoutAttribute(Multiplier = 10)] public int CreateSnapshotTimeout; /// /// The maximum operational time, in seconds, to bring the power to/from the vm, not to boot it /// [VMWareTimeoutAttribute] public int PowerOnTimeout; /// /// The maximum time, in seconds, to power off a virtual machine. /// [VMWareTimeoutAttribute] public int PowerOffTimeout; /// /// The maximum time, in seconds, to reset a virtual machine. /// [VMWareTimeoutAttribute] public int ResetTimeout; /// /// The maximum time, in seconds, to suspend a virtual machine. /// [VMWareTimeoutAttribute] public int SuspendTimeout; /// /// The maximum time, in seconds, to pause a virtual machine. /// [VMWareTimeoutAttribute] public int PauseTimeout; /// /// The maximum time, in seconds, to unpause (continue execution of) a virtual machine. /// [VMWareTimeoutAttribute] public int UnpauseTimeout; /// /// The maximum time, in seconds, to wait for tools in a guest operating system. /// [VMWareTimeoutAttribute(Multiplier = 5)] public int WaitForToolsTimeout; /// /// The maximum time, in seconds, to wait for a log-in to a guest operating system. /// [VMWareTimeoutAttribute] public int LoginTimeout; /// /// Maximum time, in seconds, to copy a file from guest to host and from host to guest. /// /// Copy is very slow, see http://communities.vmware.com/thread/184489. /// /// [VMWareTimeoutAttribute(Multiplier = 20)] public int CopyFileTimeout; /// /// Maximum time, in seconds, to wait for a file to be deleted in the guest operating system. /// [VMWareTimeoutAttribute] public int DeleteFileTimeout; /// /// Maximum time, in seconds, to wait for a directory to be deleted in the guest operating system. /// [VMWareTimeoutAttribute] public int DeleteDirectoryTimeout; /// /// Maximum time, in seconds, to wait for a program to run in the guest operating system. /// [VMWareTimeoutAttribute(Multiplier = 5)] public int RunProgramTimeout; /// /// Maximum time, in seconds, to wait for a script to run in the guest operating system. /// [VMWareTimeoutAttribute(Multiplier = 5)] public int RunScriptTimeout; /// /// Maximum time, in seconds, to wait for an url to open in a browser on the guest operating system. /// [VMWareTimeoutAttribute(Multiplier = 5)] public int OpenUrlTimeout; /// /// Maximum time, in seconds, to wait to check whether a file exists in the guest operating system. /// [VMWareTimeoutAttribute] public int FileExistsTimeout; /// /// Maximum time, in seconds, to wait to check whether a directory exists in the guest operating system. /// [VMWareTimeoutAttribute] public int DirectoryExistsTimeout; /// /// Maximum time, in seconds, to wait for a logout from a guest operating system to complete. /// [VMWareTimeoutAttribute] public int LogoutTimeout; /// /// Maximum time, in seconds, to list the contents of a directory in the guest operating system. /// [VMWareTimeoutAttribute] public int ListDirectoryTimeout; /// /// Maximum time, in seconds, to wait to read a remote variable. /// [VMWareTimeoutAttribute] public int ReadVariableTimeout; /// /// Maximum time, in seconds, to wait to write a remote variable. /// [VMWareTimeoutAttribute] public int WriteVariableTimeout; /// /// Maximum time, in seconds, to wait to enable or disable shared folders. /// [VMWareTimeoutAttribute] public int EnableSharedFoldersTimeout; /// /// Maximum time, in seconds, to wait to fetch the list of shared folders. /// [VMWareTimeoutAttribute] public int GetSharedFoldersTimeout; /// /// Maximum time, in seconds, to add/remove a shared folder. /// [VMWareTimeoutAttribute] public int AddRemoveSharedFolderTimeout; /// /// Maximum time, in seconds, to capture a screen image. /// [VMWareTimeoutAttribute] public int CaptureScreenImageTimeout; /// /// Maximum time, in seconds, to create a directory in the guest operating system. /// [VMWareTimeoutAttribute] public int CreateDirectoryTimeout; /// /// Maximum time, in seconds, to create a temporary file in the guest operating system. /// [VMWareTimeoutAttribute] public int CreateTempFileTimeout; /// /// Maximum time, in seconds, to list processes in the guest operating system. /// [VMWareTimeoutAttribute] public int ListProcessesTimeout; /// /// Maximum time, in seconds, to fetch a collection of items in find operations. /// [VMWareTimeoutAttribute] public int FindItemsTimeout; /// /// Maximum time, in seconds, to kill a process in the guest operating system. /// [VMWareTimeoutAttribute] public int KillProcessTimeout; /// /// Maximum time, in seconds, to begin and end a recording. /// [VMWareTimeoutAttribute(Multiplier = 10)] public int RecordingTimeout; /// /// Maximum time, in seconds, to replay a snapshot. /// [VMWareTimeoutAttribute(Multiplier = 10)] public int ReplayTimeout; /// /// Maximum time, in seconds, to wait for an upgrade for the virtual hardware. /// [VMWareTimeoutAttribute(Multiplier = 5)] public int UpgradeVirtualHardwareTimeout; /// /// Maximum time, in seconds, to clone a virtual machine. /// [VMWareTimeoutAttribute(Multiplier = 5)] public int CloneTimeout; /// /// Maximum time, in seconds, to delete a virtual machine. /// [VMWareTimeoutAttribute] public int DeleteTimeout; /// /// Maximum time, in seconds, to get file information from a guest operating system. /// [VMWareTimeoutAttribute] public int GetFileInfoTimeout; /// /// Maximum time, in seconds, to prepare to install or upgrade VMWare Tools. /// [VMWareTimeoutAttribute] public int InstallToolsTimeout; /// /// A collection of timeouts based on a default 60-seconds base timeout. /// public VMWareTimeouts() : this(60) { } /// /// A collection of timeouts based on a configurable base timeout. /// /// a base timeout public VMWareTimeouts(int baseTimeout) { FieldInfo[] timeouts = GetType().GetFields(); foreach (FieldInfo timeout in timeouts) { object[] timeoutAttributes = timeout.GetCustomAttributes(typeof(VMWareTimeoutAttribute), false); if (timeoutAttributes == null || timeoutAttributes.Length == 0) continue; VMWareTimeoutAttribute timeoutAttribute = timeoutAttributes[0] as VMWareTimeoutAttribute; timeout.SetValue(this, baseTimeout * timeoutAttribute.Multiplier); } } } }