wsp-10323 Step 10 final
This commit is contained in:
parent
477b82e69c
commit
9fcad0455d
10 changed files with 2270 additions and 319 deletions
|
@ -34,6 +34,7 @@ namespace WebsitePanel.Providers.Virtualization
|
||||||
{
|
{
|
||||||
public class MountedDiskInfo
|
public class MountedDiskInfo
|
||||||
{
|
{
|
||||||
|
public int DiskNumber { get; set; }
|
||||||
public string DiskAddress { get; set; }
|
public string DiskAddress { get; set; }
|
||||||
public string[] DiskVolumes { get; set; }
|
public string[] DiskVolumes { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
using System;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace WebsitePanel.Providers.Virtualization.Extensions
|
||||||
|
{
|
||||||
|
public static class StringExtensions
|
||||||
|
{
|
||||||
|
public static string[] ParseExact(
|
||||||
|
this string data,
|
||||||
|
string format)
|
||||||
|
{
|
||||||
|
return ParseExact(data, format, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string[] ParseExact(
|
||||||
|
this string data,
|
||||||
|
string format,
|
||||||
|
bool ignoreCase)
|
||||||
|
{
|
||||||
|
string[] values;
|
||||||
|
|
||||||
|
if (TryParseExact(data, format, out values, ignoreCase))
|
||||||
|
return values;
|
||||||
|
else
|
||||||
|
throw new ArgumentException("Format not compatible with value.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryExtract(
|
||||||
|
this string data,
|
||||||
|
string format,
|
||||||
|
out string[] values)
|
||||||
|
{
|
||||||
|
return TryParseExact(data, format, out values, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryParseExact(
|
||||||
|
this string data,
|
||||||
|
string format,
|
||||||
|
out string[] values,
|
||||||
|
bool ignoreCase)
|
||||||
|
{
|
||||||
|
int tokenCount = 0;
|
||||||
|
format = Regex.Escape(format).Replace("\\{", "{");
|
||||||
|
|
||||||
|
for (tokenCount = 0; ; tokenCount++)
|
||||||
|
{
|
||||||
|
string token = string.Format("{{{0}}}", tokenCount);
|
||||||
|
if (!format.Contains(token)) break;
|
||||||
|
format = format.Replace(token,
|
||||||
|
string.Format("(?'group{0}'.*)", tokenCount));
|
||||||
|
}
|
||||||
|
|
||||||
|
RegexOptions options =
|
||||||
|
ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;
|
||||||
|
|
||||||
|
Match match = new Regex(format, options).Match(data);
|
||||||
|
|
||||||
|
if (tokenCount != (match.Groups.Count - 1))
|
||||||
|
{
|
||||||
|
values = new string[] { };
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
values = new string[tokenCount];
|
||||||
|
for (int index = 0; index < tokenCount; index++)
|
||||||
|
values[index] =
|
||||||
|
match.Groups[string.Format("group{0}", index)].Value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,294 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.IO;
|
||||||
|
using System.Management;
|
||||||
|
using System.Threading;
|
||||||
|
using Microsoft.Storage.Vds;
|
||||||
|
using Microsoft.Storage.Vds.Advanced;
|
||||||
|
using WebsitePanel.Providers.HostedSolution;
|
||||||
|
using WebsitePanel.Providers.Virtualization.Extensions;
|
||||||
|
using Path = System.IO.Path;
|
||||||
|
|
||||||
|
namespace WebsitePanel.Providers.Virtualization
|
||||||
|
{
|
||||||
|
public static class VdsHelper
|
||||||
|
{
|
||||||
|
public static MountedDiskInfo GetMountedDiskInfo(string serverName, int driveNumber)
|
||||||
|
{
|
||||||
|
MountedDiskInfo diskInfo = new MountedDiskInfo { DiskNumber = driveNumber };
|
||||||
|
|
||||||
|
// find mounted disk using VDS
|
||||||
|
AdvancedDisk advancedDisk = null;
|
||||||
|
Pack diskPack = null;
|
||||||
|
|
||||||
|
// first attempt
|
||||||
|
Thread.Sleep(3000);
|
||||||
|
HostedSolutionLog.LogInfo("Trying to find mounted disk - first attempt");
|
||||||
|
FindVdsDisk(serverName, diskInfo.DiskNumber, out advancedDisk, out diskPack);
|
||||||
|
|
||||||
|
// second attempt
|
||||||
|
if (advancedDisk == null)
|
||||||
|
{
|
||||||
|
Thread.Sleep(20000);
|
||||||
|
HostedSolutionLog.LogInfo("Trying to find mounted disk - second attempt");
|
||||||
|
FindVdsDisk(serverName, diskInfo.DiskNumber, out advancedDisk, out diskPack);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (advancedDisk == null)
|
||||||
|
throw new Exception("Could not find mounted disk");
|
||||||
|
|
||||||
|
// Set disk address
|
||||||
|
diskInfo.DiskAddress = advancedDisk.DiskAddress;
|
||||||
|
var addressParts = diskInfo.DiskAddress.ParseExact("Port{0}Path{1}Target{2}Lun{3}");
|
||||||
|
var portNumber = addressParts[0];
|
||||||
|
var targetId = addressParts[2];
|
||||||
|
var lun = addressParts[3];
|
||||||
|
|
||||||
|
// check if DiskPart must be used to bring disk online and clear read-only flag
|
||||||
|
bool useDiskPartToClearReadOnly = false;
|
||||||
|
if (ConfigurationManager.AppSettings[Constants.CONFIG_USE_DISKPART_TO_CLEAR_READONLY_FLAG] != null)
|
||||||
|
useDiskPartToClearReadOnly = Boolean.Parse(ConfigurationManager.AppSettings[Constants.CONFIG_USE_DISKPART_TO_CLEAR_READONLY_FLAG]);
|
||||||
|
|
||||||
|
// determine disk index for DiskPart
|
||||||
|
Wmi cimv2 = new Wmi(serverName, Constants.WMI_CIMV2_NAMESPACE);
|
||||||
|
ManagementObject objDisk = cimv2.GetWmiObject("win32_diskdrive",
|
||||||
|
"Model='Msft Virtual Disk SCSI Disk Device' and ScsiTargetID={0} and ScsiLogicalUnit={1} and scsiPort={2}",
|
||||||
|
targetId, lun, portNumber);
|
||||||
|
|
||||||
|
if (useDiskPartToClearReadOnly)
|
||||||
|
{
|
||||||
|
// *** Clear Read-Only and bring disk online with DiskPart ***
|
||||||
|
HostedSolutionLog.LogInfo("Clearing disk Read-only flag and bringing disk online");
|
||||||
|
|
||||||
|
if (objDisk != null)
|
||||||
|
{
|
||||||
|
// disk found
|
||||||
|
// run DiskPart
|
||||||
|
string diskPartResult = RunDiskPart(serverName, String.Format(@"select disk {0}
|
||||||
|
attributes disk clear readonly
|
||||||
|
online disk
|
||||||
|
exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
|
|
||||||
|
HostedSolutionLog.LogInfo("DiskPart Result: " + diskPartResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// *** Clear Read-Only and bring disk online with VDS ***
|
||||||
|
// clear Read-Only
|
||||||
|
if ((advancedDisk.Flags & DiskFlags.ReadOnly) == DiskFlags.ReadOnly)
|
||||||
|
{
|
||||||
|
HostedSolutionLog.LogInfo("Clearing disk Read-only flag");
|
||||||
|
advancedDisk.ClearFlags(DiskFlags.ReadOnly);
|
||||||
|
while ((advancedDisk.Flags & DiskFlags.ReadOnly) == DiskFlags.ReadOnly)
|
||||||
|
{
|
||||||
|
Thread.Sleep(100);
|
||||||
|
advancedDisk.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// bring disk ONLINE
|
||||||
|
if (advancedDisk.Status == DiskStatus.Offline)
|
||||||
|
{
|
||||||
|
HostedSolutionLog.LogInfo("Bringing disk online");
|
||||||
|
advancedDisk.Online();
|
||||||
|
while (advancedDisk.Status == DiskStatus.Offline)
|
||||||
|
{
|
||||||
|
Thread.Sleep(100);
|
||||||
|
advancedDisk.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// small pause after getting disk online
|
||||||
|
Thread.Sleep(3000);
|
||||||
|
|
||||||
|
// get disk again
|
||||||
|
FindVdsDisk(serverName, diskInfo.DiskNumber, out advancedDisk, out diskPack);
|
||||||
|
|
||||||
|
// find volumes using VDS
|
||||||
|
List<string> volumes = new List<string>();
|
||||||
|
HostedSolutionLog.LogInfo("Querying disk volumes with VDS");
|
||||||
|
foreach (Volume volume in diskPack.Volumes)
|
||||||
|
{
|
||||||
|
string letter = volume.DriveLetter.ToString();
|
||||||
|
if (letter != "")
|
||||||
|
volumes.Add(letter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// find volumes using WMI
|
||||||
|
if (volumes.Count == 0 && objDisk != null)
|
||||||
|
{
|
||||||
|
HostedSolutionLog.LogInfo("Querying disk volumes with WMI");
|
||||||
|
foreach (ManagementObject objPartition in objDisk.GetRelated("Win32_DiskPartition"))
|
||||||
|
{
|
||||||
|
foreach (ManagementObject objVolume in objPartition.GetRelated("Win32_LogicalDisk"))
|
||||||
|
{
|
||||||
|
volumes.Add(objVolume["Name"].ToString().TrimEnd(':'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HostedSolutionLog.LogInfo("Volumes found: " + volumes.Count);
|
||||||
|
|
||||||
|
// Set volumes
|
||||||
|
diskInfo.DiskVolumes = volumes.ToArray();
|
||||||
|
|
||||||
|
return diskInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void FindVdsDisk(string serverName, int driveNumber, out AdvancedDisk advancedDisk, out Pack diskPack)
|
||||||
|
{
|
||||||
|
Func<Disk, bool> compareFunc = disk => disk.Name.EndsWith("PhysicalDrive" + driveNumber);
|
||||||
|
FindVdsDisk(serverName, compareFunc, out advancedDisk, out diskPack);
|
||||||
|
}
|
||||||
|
public static void FindVdsDisk(string serverName, string diskAddress, out AdvancedDisk advancedDisk, out Pack diskPack)
|
||||||
|
{
|
||||||
|
Func<Disk, bool> compareFunc = disk => disk.DiskAddress == diskAddress;
|
||||||
|
FindVdsDisk(serverName, compareFunc, out advancedDisk, out diskPack);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void FindVdsDisk(string serverName, Func<Disk, bool> compareFunc, out AdvancedDisk advancedDisk, out Pack diskPack)
|
||||||
|
{
|
||||||
|
advancedDisk = null;
|
||||||
|
diskPack = null;
|
||||||
|
|
||||||
|
ServiceLoader serviceLoader = new ServiceLoader();
|
||||||
|
Service vds = serviceLoader.LoadService(serverName);
|
||||||
|
vds.WaitForServiceReady();
|
||||||
|
|
||||||
|
foreach (Disk disk in vds.UnallocatedDisks)
|
||||||
|
{
|
||||||
|
if (compareFunc(disk))
|
||||||
|
{
|
||||||
|
advancedDisk = (AdvancedDisk) disk;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (advancedDisk == null)
|
||||||
|
{
|
||||||
|
vds.HardwareProvider = false;
|
||||||
|
vds.SoftwareProvider = true;
|
||||||
|
|
||||||
|
foreach (SoftwareProvider provider in vds.Providers)
|
||||||
|
foreach (Pack pack in provider.Packs)
|
||||||
|
foreach (Disk disk in pack.Disks)
|
||||||
|
if (compareFunc(disk))
|
||||||
|
{
|
||||||
|
diskPack = pack;
|
||||||
|
advancedDisk = (AdvancedDisk) disk;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// obsolete and currently is not used
|
||||||
|
private static string RunDiskPart(string serverName, string script)
|
||||||
|
{
|
||||||
|
// create temp script file name
|
||||||
|
string localPath = Path.Combine(GetTempRemoteFolder(serverName), Guid.NewGuid().ToString("N"));
|
||||||
|
|
||||||
|
// save script to remote temp file
|
||||||
|
string remotePath = ConvertToUNC(serverName, localPath);
|
||||||
|
File.AppendAllText(remotePath, script);
|
||||||
|
|
||||||
|
// run diskpart
|
||||||
|
ExecuteRemoteProcess(serverName, "DiskPart /s " + localPath);
|
||||||
|
|
||||||
|
// delete temp script
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Delete(remotePath);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ConvertToUNC(string serverName, string path)
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(serverName)
|
||||||
|
|| path.StartsWith(@"\\"))
|
||||||
|
return path;
|
||||||
|
|
||||||
|
return String.Format(@"\\{0}\{1}", serverName, path.Replace(":", "$"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetTempRemoteFolder(string serverName)
|
||||||
|
{
|
||||||
|
Wmi cimv2 = new Wmi(serverName, "root\\cimv2");
|
||||||
|
ManagementObject objOS = cimv2.GetWmiObject("win32_OperatingSystem");
|
||||||
|
string sysPath = (string)objOS["SystemDirectory"];
|
||||||
|
|
||||||
|
// remove trailing slash
|
||||||
|
if (sysPath.EndsWith("\\"))
|
||||||
|
sysPath = sysPath.Substring(0, sysPath.Length - 1);
|
||||||
|
|
||||||
|
sysPath = sysPath.Substring(0, sysPath.LastIndexOf("\\") + 1) + "Temp";
|
||||||
|
|
||||||
|
return sysPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ExecuteRemoteProcess(string serverName, string command)
|
||||||
|
{
|
||||||
|
Wmi cimv2 = new Wmi(serverName, "root\\cimv2");
|
||||||
|
ManagementClass objProcess = cimv2.GetWmiClass("Win32_Process");
|
||||||
|
|
||||||
|
// run process
|
||||||
|
object[] methodArgs = { command, null, null, 0 };
|
||||||
|
objProcess.InvokeMethod("Create", methodArgs);
|
||||||
|
|
||||||
|
// process ID
|
||||||
|
int processId = Convert.ToInt32(methodArgs[3]);
|
||||||
|
|
||||||
|
// wait until finished
|
||||||
|
// Create event query to be notified within 1 second of
|
||||||
|
// a change in a service
|
||||||
|
WqlEventQuery query =
|
||||||
|
new WqlEventQuery("__InstanceDeletionEvent",
|
||||||
|
new TimeSpan(0, 0, 1),
|
||||||
|
"TargetInstance isa \"Win32_Process\"");
|
||||||
|
|
||||||
|
// Initialize an event watcher and subscribe to events
|
||||||
|
// that match this query
|
||||||
|
ManagementEventWatcher watcher = new ManagementEventWatcher(cimv2.GetScope(), query);
|
||||||
|
// times out watcher.WaitForNextEvent in 20 seconds
|
||||||
|
watcher.Options.Timeout = new TimeSpan(0, 0, 20);
|
||||||
|
|
||||||
|
// Block until the next event occurs
|
||||||
|
// Note: this can be done in a loop if waiting for
|
||||||
|
// more than one occurrence
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
ManagementBaseObject e = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// wait untill next process finish
|
||||||
|
e = watcher.WaitForNextEvent();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// nothing has been finished in timeout period
|
||||||
|
return; // exit
|
||||||
|
}
|
||||||
|
|
||||||
|
// check process id
|
||||||
|
int pid = Convert.ToInt32(((ManagementBaseObject)e["TargetInstance"])["ProcessID"]);
|
||||||
|
if (pid == processId)
|
||||||
|
{
|
||||||
|
//Cancel the subscription
|
||||||
|
watcher.Stop();
|
||||||
|
|
||||||
|
// exit
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -52,6 +52,7 @@ using WebsitePanel.Server.Utils;
|
||||||
using Vds = Microsoft.Storage.Vds;
|
using Vds = Microsoft.Storage.Vds;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using WebsitePanel.Providers.Virtualization.Extensions;
|
||||||
|
|
||||||
namespace WebsitePanel.Providers.Virtualization
|
namespace WebsitePanel.Providers.Virtualization
|
||||||
{
|
{
|
||||||
|
@ -855,7 +856,7 @@ namespace WebsitePanel.Providers.Virtualization
|
||||||
Command cmd = new Command("Remove-VMSwitch");
|
Command cmd = new Command("Remove-VMSwitch");
|
||||||
cmd.Parameters.Add("Name", switchId);
|
cmd.Parameters.Add("Name", switchId);
|
||||||
cmd.Parameters.Add("Force");
|
cmd.Parameters.Add("Force");
|
||||||
PowerShell.Execute(cmd, true);
|
PowerShell.Execute(cmd, true, false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -874,7 +875,7 @@ namespace WebsitePanel.Providers.Virtualization
|
||||||
path = Path.Combine(FileUtils.EvaluateSystemVariables(path), Constants.LIBRARY_INDEX_FILE_NAME);
|
path = Path.Combine(FileUtils.EvaluateSystemVariables(path), Constants.LIBRARY_INDEX_FILE_NAME);
|
||||||
|
|
||||||
// convert to UNC if it is a remote computer
|
// convert to UNC if it is a remote computer
|
||||||
path = ConvertToUNC(path);
|
path = VdsHelper.ConvertToUNC(ServerNameSettings, path);
|
||||||
|
|
||||||
if (!File.Exists(path))
|
if (!File.Exists(path))
|
||||||
{
|
{
|
||||||
|
@ -1176,184 +1177,27 @@ namespace WebsitePanel.Providers.Virtualization
|
||||||
|
|
||||||
public MountedDiskInfo MountVirtualHardDisk(string vhdPath)
|
public MountedDiskInfo MountVirtualHardDisk(string vhdPath)
|
||||||
{
|
{
|
||||||
//MountedDiskInfo diskInfo = new MountedDiskInfo();
|
vhdPath = FileUtils.EvaluateSystemVariables(vhdPath);
|
||||||
//vhdPath = FileUtils.EvaluateSystemVariables(vhdPath);
|
|
||||||
|
|
||||||
//// Mount disk
|
// Mount disk
|
||||||
//Command cmd = new Command("Mount-VHD");
|
Command cmd = new Command("Mount-VHD");
|
||||||
|
|
||||||
//cmd.Parameters.Add("Path", vhdPath);
|
cmd.Parameters.Add("Path", vhdPath);
|
||||||
//cmd.Parameters.Add("PassThru");
|
cmd.Parameters.Add("PassThru");
|
||||||
|
|
||||||
//// Get disk address
|
// Get mounted disk
|
||||||
//var result = PowerShell.Execute(cmd, true);
|
var result = PowerShell.Execute(cmd, true, true);
|
||||||
|
|
||||||
//try
|
|
||||||
//{
|
|
||||||
// if (result == null || result.Count == 0)
|
|
||||||
// throw new Exception("Failed to mount disk");
|
|
||||||
|
|
||||||
// diskInfo.DiskAddress = result[0].GetString("DiskNumber");
|
|
||||||
|
|
||||||
// // Get disk volumes
|
|
||||||
|
|
||||||
//}
|
|
||||||
//catch (Exception ex)
|
|
||||||
//{
|
|
||||||
// // unmount disk
|
|
||||||
// UnmountVirtualHardDisk(vhdPath);
|
|
||||||
|
|
||||||
// // throw error
|
|
||||||
// throw ex;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//return diskInfo;
|
|
||||||
|
|
||||||
ManagementObject objImgSvc = GetImageManagementService();
|
|
||||||
|
|
||||||
// get method params
|
|
||||||
ManagementBaseObject inParams = objImgSvc.GetMethodParameters("Mount");
|
|
||||||
inParams["Path"] = FileUtils.EvaluateSystemVariables(vhdPath);
|
|
||||||
|
|
||||||
ManagementBaseObject outParams = (ManagementBaseObject)objImgSvc.InvokeMethod("Mount", inParams, null);
|
|
||||||
JobResult result = CreateJobResultFromWmiMethodResults(outParams);
|
|
||||||
|
|
||||||
// load storage job
|
|
||||||
if (result.ReturnValue != ReturnCode.JobStarted)
|
|
||||||
throw new Exception("Failed to start Mount job with the following error: " + result.ReturnValue); ;
|
|
||||||
|
|
||||||
ManagementObject objJob = wmi.GetWmiObject("msvm_StorageJob", "InstanceID = '{0}'", result.Job.Id);
|
|
||||||
|
|
||||||
if (!JobCompleted(result.Job))
|
|
||||||
throw new Exception("Failed to complete Mount job with the following error: " + result.Job.ErrorDescription);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<string> volumes = new List<string>();
|
if (result == null || result.Count == 0)
|
||||||
|
throw new Exception("Failed to mount disk");
|
||||||
|
|
||||||
// load output data
|
var diskNumber = result[0].GetInt("DiskNumber");
|
||||||
ManagementObject objImage = wmi.GetRelatedWmiObject(objJob, "Msvm_MountedStorageImage");
|
|
||||||
|
|
||||||
int pathId = Convert.ToInt32(objImage["PathId"]);
|
var diskInfo = VdsHelper.GetMountedDiskInfo(ServerNameSettings, diskNumber);
|
||||||
int portNumber = Convert.ToInt32(objImage["PortNumber"]);
|
|
||||||
int targetId = Convert.ToInt32(objImage["TargetId"]);
|
|
||||||
int lun = Convert.ToInt32(objImage["Lun"]);
|
|
||||||
|
|
||||||
string diskAddress = String.Format("Port{0}Path{1}Target{2}Lun{3}", portNumber, pathId, targetId, lun);
|
return diskInfo;
|
||||||
|
|
||||||
HostedSolutionLog.LogInfo("Disk address: " + diskAddress);
|
|
||||||
|
|
||||||
// find mounted disk using VDS
|
|
||||||
Vds.Advanced.AdvancedDisk advancedDisk = null;
|
|
||||||
Vds.Pack diskPack = null;
|
|
||||||
|
|
||||||
// first attempt
|
|
||||||
System.Threading.Thread.Sleep(3000);
|
|
||||||
HostedSolutionLog.LogInfo("Trying to find mounted disk - first attempt");
|
|
||||||
FindVdsDisk(diskAddress, out advancedDisk, out diskPack);
|
|
||||||
|
|
||||||
// second attempt
|
|
||||||
if (advancedDisk == null)
|
|
||||||
{
|
|
||||||
System.Threading.Thread.Sleep(20000);
|
|
||||||
HostedSolutionLog.LogInfo("Trying to find mounted disk - second attempt");
|
|
||||||
FindVdsDisk(diskAddress, out advancedDisk, out diskPack);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (advancedDisk == null)
|
|
||||||
throw new Exception("Could not find mounted disk");
|
|
||||||
|
|
||||||
// check if DiskPart must be used to bring disk online and clear read-only flag
|
|
||||||
bool useDiskPartToClearReadOnly = false;
|
|
||||||
if (ConfigurationManager.AppSettings[Constants.CONFIG_USE_DISKPART_TO_CLEAR_READONLY_FLAG] != null)
|
|
||||||
useDiskPartToClearReadOnly = Boolean.Parse(ConfigurationManager.AppSettings[Constants.CONFIG_USE_DISKPART_TO_CLEAR_READONLY_FLAG]);
|
|
||||||
|
|
||||||
// determine disk index for DiskPart
|
|
||||||
Wmi cimv2 = new Wmi(ServerNameSettings, Constants.WMI_CIMV2_NAMESPACE);
|
|
||||||
ManagementObject objDisk = cimv2.GetWmiObject("win32_diskdrive",
|
|
||||||
"Model='Msft Virtual Disk SCSI Disk Device' and ScsiTargetID={0} and ScsiLogicalUnit={1} and scsiPort={2}",
|
|
||||||
targetId, lun, portNumber);
|
|
||||||
|
|
||||||
if (useDiskPartToClearReadOnly)
|
|
||||||
{
|
|
||||||
// *** Clear Read-Only and bring disk online with DiskPart ***
|
|
||||||
HostedSolutionLog.LogInfo("Clearing disk Read-only flag and bringing disk online");
|
|
||||||
|
|
||||||
if (objDisk != null)
|
|
||||||
{
|
|
||||||
// disk found
|
|
||||||
// run DiskPart
|
|
||||||
string diskPartResult = RunDiskPart(String.Format(@"select disk {0}
|
|
||||||
attributes disk clear readonly
|
|
||||||
online disk
|
|
||||||
exit", Convert.ToInt32(objDisk["Index"])));
|
|
||||||
|
|
||||||
HostedSolutionLog.LogInfo("DiskPart Result: " + diskPartResult);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// *** Clear Read-Only and bring disk online with VDS ***
|
|
||||||
// clear Read-Only
|
|
||||||
if ((advancedDisk.Flags & Vds.DiskFlags.ReadOnly) == Vds.DiskFlags.ReadOnly)
|
|
||||||
{
|
|
||||||
HostedSolutionLog.LogInfo("Clearing disk Read-only flag");
|
|
||||||
advancedDisk.ClearFlags(Vds.DiskFlags.ReadOnly);
|
|
||||||
while ((advancedDisk.Flags & Vds.DiskFlags.ReadOnly) == Vds.DiskFlags.ReadOnly)
|
|
||||||
{
|
|
||||||
System.Threading.Thread.Sleep(100);
|
|
||||||
advancedDisk.Refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// bring disk ONLINE
|
|
||||||
if (advancedDisk.Status == Vds.DiskStatus.Offline)
|
|
||||||
{
|
|
||||||
HostedSolutionLog.LogInfo("Bringing disk online");
|
|
||||||
advancedDisk.Online();
|
|
||||||
while (advancedDisk.Status == Vds.DiskStatus.Offline)
|
|
||||||
{
|
|
||||||
System.Threading.Thread.Sleep(100);
|
|
||||||
advancedDisk.Refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// small pause after getting disk online
|
|
||||||
System.Threading.Thread.Sleep(3000);
|
|
||||||
|
|
||||||
// get disk again
|
|
||||||
FindVdsDisk(diskAddress, out advancedDisk, out diskPack);
|
|
||||||
|
|
||||||
// find volumes using VDS
|
|
||||||
HostedSolutionLog.LogInfo("Querying disk volumes with VDS");
|
|
||||||
foreach (Vds.Volume volume in diskPack.Volumes)
|
|
||||||
{
|
|
||||||
string letter = volume.DriveLetter.ToString();
|
|
||||||
if (letter != "")
|
|
||||||
volumes.Add(letter);
|
|
||||||
}
|
|
||||||
|
|
||||||
// find volumes using WMI
|
|
||||||
if (volumes.Count == 0 && objDisk != null)
|
|
||||||
{
|
|
||||||
HostedSolutionLog.LogInfo("Querying disk volumes with WMI");
|
|
||||||
foreach (ManagementObject objPartition in objDisk.GetRelated("Win32_DiskPartition"))
|
|
||||||
{
|
|
||||||
foreach (ManagementObject objVolume in objPartition.GetRelated("Win32_LogicalDisk"))
|
|
||||||
{
|
|
||||||
volumes.Add(objVolume["Name"].ToString().TrimEnd(':'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HostedSolutionLog.LogInfo("Volumes found: " + volumes.Count);
|
|
||||||
|
|
||||||
// info object
|
|
||||||
MountedDiskInfo info = new MountedDiskInfo();
|
|
||||||
info.DiskAddress = diskAddress;
|
|
||||||
info.DiskVolumes = volumes.ToArray();
|
|
||||||
return info;
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -1365,41 +1209,6 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FindVdsDisk(string diskAddress, out Vds.Advanced.AdvancedDisk advancedDisk, out Vds.Pack diskPack)
|
|
||||||
{
|
|
||||||
advancedDisk = null;
|
|
||||||
diskPack = null;
|
|
||||||
|
|
||||||
Vds.ServiceLoader serviceLoader = new Vds.ServiceLoader();
|
|
||||||
Vds.Service vds = serviceLoader.LoadService(ServerNameSettings);
|
|
||||||
vds.WaitForServiceReady();
|
|
||||||
|
|
||||||
foreach (Vds.Disk disk in vds.UnallocatedDisks)
|
|
||||||
{
|
|
||||||
if (disk.DiskAddress == diskAddress)
|
|
||||||
{
|
|
||||||
advancedDisk = (Vds.Advanced.AdvancedDisk)disk;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (advancedDisk == null)
|
|
||||||
{
|
|
||||||
vds.HardwareProvider = false;
|
|
||||||
vds.SoftwareProvider = true;
|
|
||||||
|
|
||||||
foreach (Vds.SoftwareProvider provider in vds.Providers)
|
|
||||||
foreach (Vds.Pack pack in provider.Packs)
|
|
||||||
foreach (Vds.Disk disk in pack.Disks)
|
|
||||||
if (disk.DiskAddress == diskAddress)
|
|
||||||
{
|
|
||||||
diskPack = pack;
|
|
||||||
advancedDisk = (Vds.Advanced.AdvancedDisk)disk;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReturnCode UnmountVirtualHardDisk(string vhdPath)
|
public ReturnCode UnmountVirtualHardDisk(string vhdPath)
|
||||||
{
|
{
|
||||||
Command cmd = new Command("Dismount-VHD");
|
Command cmd = new Command("Dismount-VHD");
|
||||||
|
@ -1417,7 +1226,7 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
cmd.Parameters.Add("Path", FileUtils.EvaluateSystemVariables(vhdPath));
|
cmd.Parameters.Add("Path", FileUtils.EvaluateSystemVariables(vhdPath));
|
||||||
cmd.Parameters.Add("SizeBytes", sizeGB * Constants.Size1G);
|
cmd.Parameters.Add("SizeBytes", sizeGB * Constants.Size1G);
|
||||||
|
|
||||||
PowerShell.Execute(cmd, true);
|
PowerShell.Execute(cmd, true, true);
|
||||||
return JobHelper.CreateSuccessResult(ReturnCode.JobStarted);
|
return JobHelper.CreateSuccessResult(ReturnCode.JobStarted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1443,7 +1252,7 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
cmd.Parameters.Add("DestinationPath", destinationPath);
|
cmd.Parameters.Add("DestinationPath", destinationPath);
|
||||||
cmd.Parameters.Add("VHDType", diskType.ToString());
|
cmd.Parameters.Add("VHDType", diskType.ToString());
|
||||||
|
|
||||||
PowerShell.Execute(cmd, true);
|
PowerShell.Execute(cmd, true, true);
|
||||||
return JobHelper.CreateSuccessResult(ReturnCode.JobStarted);
|
return JobHelper.CreateSuccessResult(ReturnCode.JobStarted);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -1467,7 +1276,7 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
Vds.Advanced.AdvancedDisk advancedDisk = null;
|
Vds.Advanced.AdvancedDisk advancedDisk = null;
|
||||||
Vds.Pack diskPack = null;
|
Vds.Pack diskPack = null;
|
||||||
|
|
||||||
FindVdsDisk(diskAddress, out advancedDisk, out diskPack);
|
VdsHelper.FindVdsDisk(ServerNameSettings, diskAddress, out advancedDisk, out diskPack);
|
||||||
|
|
||||||
if (advancedDisk == null)
|
if (advancedDisk == null)
|
||||||
throw new Exception("Could not find mounted disk");
|
throw new Exception("Could not find mounted disk");
|
||||||
|
@ -1522,36 +1331,11 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
diskVolume.EndExtend(extendEvent);
|
diskVolume.EndExtend(extendEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// obsolete and currently is not used
|
|
||||||
private string RunDiskPart(string script)
|
|
||||||
{
|
|
||||||
// create temp script file name
|
|
||||||
string localPath = Path.Combine(GetTempRemoteFolder(), Guid.NewGuid().ToString("N"));
|
|
||||||
|
|
||||||
// save script to remote temp file
|
|
||||||
string remotePath = ConvertToUNC(localPath);
|
|
||||||
File.AppendAllText(remotePath, script);
|
|
||||||
|
|
||||||
// run diskpart
|
|
||||||
ExecuteRemoteProcess("DiskPart /s " + localPath);
|
|
||||||
|
|
||||||
// delete temp script
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File.Delete(remotePath);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
public string ReadRemoteFile(string path)
|
public string ReadRemoteFile(string path)
|
||||||
{
|
{
|
||||||
// temp file name on "system" drive available through hidden share
|
// temp file name on "system" drive available through hidden share
|
||||||
string tempPath = Path.Combine(GetTempRemoteFolder(), Guid.NewGuid().ToString("N"));
|
string tempPath = Path.Combine(VdsHelper.GetTempRemoteFolder(ServerNameSettings), Guid.NewGuid().ToString("N"));
|
||||||
|
|
||||||
HostedSolutionLog.LogInfo("Read remote file: " + path);
|
HostedSolutionLog.LogInfo("Read remote file: " + path);
|
||||||
HostedSolutionLog.LogInfo("Local file temp path: " + tempPath);
|
HostedSolutionLog.LogInfo("Local file temp path: " + tempPath);
|
||||||
|
@ -1561,7 +1345,7 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
// read content of temp file
|
// read content of temp file
|
||||||
string remoteTempPath = ConvertToUNC(tempPath);
|
string remoteTempPath = VdsHelper.ConvertToUNC(ServerNameSettings, tempPath);
|
||||||
HostedSolutionLog.LogInfo("Remote file temp path: " + remoteTempPath);
|
HostedSolutionLog.LogInfo("Remote file temp path: " + remoteTempPath);
|
||||||
|
|
||||||
string content = File.ReadAllText(remoteTempPath);
|
string content = File.ReadAllText(remoteTempPath);
|
||||||
|
@ -1575,10 +1359,10 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
public void WriteRemoteFile(string path, string content)
|
public void WriteRemoteFile(string path, string content)
|
||||||
{
|
{
|
||||||
// temp file name on "system" drive available through hidden share
|
// temp file name on "system" drive available through hidden share
|
||||||
string tempPath = Path.Combine(GetTempRemoteFolder(), Guid.NewGuid().ToString("N"));
|
string tempPath = Path.Combine(VdsHelper.GetTempRemoteFolder(ServerNameSettings), Guid.NewGuid().ToString("N"));
|
||||||
|
|
||||||
// write to temp file
|
// write to temp file
|
||||||
string remoteTempPath = ConvertToUNC(tempPath);
|
string remoteTempPath = VdsHelper.ConvertToUNC(ServerNameSettings, tempPath);
|
||||||
File.WriteAllText(remoteTempPath, content);
|
File.WriteAllText(remoteTempPath, content);
|
||||||
|
|
||||||
// delete file (WMI)
|
// delete file (WMI)
|
||||||
|
@ -1925,14 +1709,6 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
wmi.GetWmiObject("Msvm_VirtualSystemSettingData", "InstanceID = '{0}'", "Microsoft:" + snapshotId);
|
wmi.GetWmiObject("Msvm_VirtualSystemSettingData", "InstanceID = '{0}'", "Microsoft:" + snapshotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string ConvertToUNC(string path)
|
|
||||||
{
|
|
||||||
if (String.IsNullOrEmpty(ServerNameSettings)
|
|
||||||
|| path.StartsWith(@"\\"))
|
|
||||||
return path;
|
|
||||||
|
|
||||||
return String.Format(@"\\{0}\{1}", ServerNameSettings, path.Replace(":", "$"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private ConcreteJob CreateJobFromWmiObject(ManagementBaseObject objJob)
|
private ConcreteJob CreateJobFromWmiObject(ManagementBaseObject objJob)
|
||||||
{
|
{
|
||||||
|
@ -2136,80 +1912,10 @@ exit", Convert.ToInt32(objDisk["Index"])));
|
||||||
|
|
||||||
public void CreateFolder(string path)
|
public void CreateFolder(string path)
|
||||||
{
|
{
|
||||||
ExecuteRemoteProcess(String.Format("cmd.exe /c md \"{0}\"", path));
|
VdsHelper.ExecuteRemoteProcess(ServerNameSettings, String.Format("cmd.exe /c md \"{0}\"", path));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExecuteRemoteProcess(string command)
|
|
||||||
{
|
|
||||||
Wmi cimv2 = new Wmi(ServerNameSettings, "root\\cimv2");
|
|
||||||
ManagementClass objProcess = cimv2.GetWmiClass("Win32_Process");
|
|
||||||
|
|
||||||
// run process
|
|
||||||
object[] methodArgs = { command, null, null, 0 };
|
|
||||||
objProcess.InvokeMethod("Create", methodArgs);
|
|
||||||
|
|
||||||
// process ID
|
|
||||||
int processId = Convert.ToInt32(methodArgs[3]);
|
|
||||||
|
|
||||||
// wait until finished
|
|
||||||
// Create event query to be notified within 1 second of
|
|
||||||
// a change in a service
|
|
||||||
WqlEventQuery query =
|
|
||||||
new WqlEventQuery("__InstanceDeletionEvent",
|
|
||||||
new TimeSpan(0, 0, 1),
|
|
||||||
"TargetInstance isa \"Win32_Process\"");
|
|
||||||
|
|
||||||
// Initialize an event watcher and subscribe to events
|
|
||||||
// that match this query
|
|
||||||
ManagementEventWatcher watcher = new ManagementEventWatcher(cimv2.GetScope(), query);
|
|
||||||
// times out watcher.WaitForNextEvent in 20 seconds
|
|
||||||
watcher.Options.Timeout = new TimeSpan(0, 0, 20);
|
|
||||||
|
|
||||||
// Block until the next event occurs
|
|
||||||
// Note: this can be done in a loop if waiting for
|
|
||||||
// more than one occurrence
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
ManagementBaseObject e = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// wait untill next process finish
|
|
||||||
e = watcher.WaitForNextEvent();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// nothing has been finished in timeout period
|
|
||||||
return; // exit
|
|
||||||
}
|
|
||||||
|
|
||||||
// check process id
|
|
||||||
int pid = Convert.ToInt32(((ManagementBaseObject)e["TargetInstance"])["ProcessID"]);
|
|
||||||
if (pid == processId)
|
|
||||||
{
|
|
||||||
//Cancel the subscription
|
|
||||||
watcher.Stop();
|
|
||||||
|
|
||||||
// exit
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetTempRemoteFolder()
|
|
||||||
{
|
|
||||||
Wmi cimv2 = new Wmi(ServerNameSettings, "root\\cimv2");
|
|
||||||
ManagementObject objOS = cimv2.GetWmiObject("win32_OperatingSystem");
|
|
||||||
string sysPath = (string)objOS["SystemDirectory"];
|
|
||||||
|
|
||||||
// remove trailing slash
|
|
||||||
if (sysPath.EndsWith("\\"))
|
|
||||||
sysPath = sysPath.Substring(0, sysPath.Length - 1);
|
|
||||||
|
|
||||||
sysPath = sysPath.Substring(0, sysPath.LastIndexOf("\\") + 1) + "Temp";
|
|
||||||
|
|
||||||
return sysPath;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Hyper-V Cloud
|
#region Hyper-V Cloud
|
||||||
|
|
|
@ -55,7 +55,9 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Constants.cs" />
|
<Compile Include="Constants.cs" />
|
||||||
<Compile Include="Extensions\PSObjectExtension.cs" />
|
<Compile Include="Extensions\PSObjectExtension.cs" />
|
||||||
|
<Compile Include="Extensions\StringExtensions.cs" />
|
||||||
<Compile Include="Helpers\BiosHelper.cs" />
|
<Compile Include="Helpers\BiosHelper.cs" />
|
||||||
|
<Compile Include="Helpers\VdsHelper.cs" />
|
||||||
<Compile Include="Helpers\HardDriveHelper.cs" />
|
<Compile Include="Helpers\HardDriveHelper.cs" />
|
||||||
<Compile Include="Helpers\NetworkAdapterHelper.cs" />
|
<Compile Include="Helpers\NetworkAdapterHelper.cs" />
|
||||||
<Compile Include="Helpers\DvdDriveHelper.cs" />
|
<Compile Include="Helpers\DvdDriveHelper.cs" />
|
||||||
|
|
|
@ -0,0 +1,404 @@
|
||||||
|
<?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>
|
||||||
|
<data name="chkVpsFolderIncludesUsername.Text" xml:space="preserve">
|
||||||
|
<value>User name</value>
|
||||||
|
</data>
|
||||||
|
<data name="ComparePasswordsValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Both reseller account passwords should match</value>
|
||||||
|
</data>
|
||||||
|
<data name="DefaultGatewayValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter default gateway IP</value>
|
||||||
|
</data>
|
||||||
|
<data name="DvdLibraryPathValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter DVD library folder</value>
|
||||||
|
</data>
|
||||||
|
<data name="ExportedVpsPathValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter path for storing exported VPS</value>
|
||||||
|
</data>
|
||||||
|
<data name="HostnamePatternValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter host name pattern</value>
|
||||||
|
</data>
|
||||||
|
<data name="locAlternateNameServer.Text" xml:space="preserve">
|
||||||
|
<value>Alternate Name Server:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locDefaultGateway.Text" xml:space="preserve">
|
||||||
|
<value>Default Gateway:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locDiskType.Text" xml:space="preserve">
|
||||||
|
<value>Disk Type:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locWspResellerAccount.Text" xml:space="preserve">
|
||||||
|
<value>WebsitePanel Reseller Account</value>
|
||||||
|
</data>
|
||||||
|
<data name="locDvdIsoPath.Text" xml:space="preserve">
|
||||||
|
<value>DVD Library path:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locExistingPassword.Text" xml:space="preserve">
|
||||||
|
<value>Existing password:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locExportedVpsPath.Text" xml:space="preserve">
|
||||||
|
<value>Exported VPS path:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locExternalNetwork.Text" xml:space="preserve">
|
||||||
|
<value>External Network</value>
|
||||||
|
</data>
|
||||||
|
<data name="locExternalNetworkName.Text" xml:space="preserve">
|
||||||
|
<value>Connect to Network:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locGeneralSettings.Text" xml:space="preserve">
|
||||||
|
<value>General Settings</value>
|
||||||
|
</data>
|
||||||
|
<data name="locHostname.Text" xml:space="preserve">
|
||||||
|
<value>VPS Host name</value>
|
||||||
|
</data>
|
||||||
|
<data name="locHostnamePattern.Text" xml:space="preserve">
|
||||||
|
<value>Host name pattern:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locIPFormat.Text" xml:space="preserve">
|
||||||
|
<value>IP Addresses Format:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locMediaLibrary.Text" xml:space="preserve">
|
||||||
|
<value>DVD Media Library</value>
|
||||||
|
</data>
|
||||||
|
<data name="locNetworkAdapter.Text" xml:space="preserve">
|
||||||
|
<value>Network Adapter</value>
|
||||||
|
</data>
|
||||||
|
<data name="locOSTemplatesPath.Text" xml:space="preserve">
|
||||||
|
<value>OS Templates path:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locPatternText.Text" xml:space="preserve">
|
||||||
|
<value>When user is not allowed to specify their custom host name the system will generate the host name for new VPS based on this pattern.<br/><br/>
|
||||||
|
The following substitution variables can be used in the pattern:<br/>
|
||||||
|
[USERNAME], [USER_ID], [SPACE_ID]</value>
|
||||||
|
</data>
|
||||||
|
<data name="locPreferredNameServer.Text" xml:space="preserve">
|
||||||
|
<value>Preferred Name Server:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locPrivateNetwork.Text" xml:space="preserve">
|
||||||
|
<value>Private Network</value>
|
||||||
|
</data>
|
||||||
|
<data name="locResellerAccountText.Text" xml:space="preserve">
|
||||||
|
<value>For automatic provisioning of WebsitePanel control panel inside VPS please enter WebsitePanel reseller account details below:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locResellerConfirmPassword.Text" xml:space="preserve">
|
||||||
|
<value>Confirm password:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locResellerPassword.Text" xml:space="preserve">
|
||||||
|
<value>Password:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locResellerUsername.Text" xml:space="preserve">
|
||||||
|
<value>Username:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locSeconds.Text" xml:space="preserve">
|
||||||
|
<value>seconds</value>
|
||||||
|
</data>
|
||||||
|
<data name="locStartAction.Text" xml:space="preserve">
|
||||||
|
<value>Automatic Start Action</value>
|
||||||
|
</data>
|
||||||
|
<data name="locStartOptionsText.Text" xml:space="preserve">
|
||||||
|
<value>What do you want VPS to do when the physical computer starts?</value>
|
||||||
|
</data>
|
||||||
|
<data name="locStartupDelay.Text" xml:space="preserve">
|
||||||
|
<value>Startup delay:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locStartupDelayText.Text" xml:space="preserve">
|
||||||
|
<value>Specify a startup delay to reduce resource contention between virtual machines.</value>
|
||||||
|
</data>
|
||||||
|
<data name="locStopAction.Text" xml:space="preserve">
|
||||||
|
<value>Automatic Stop Action</value>
|
||||||
|
</data>
|
||||||
|
<data name="locStopActionText.Text" xml:space="preserve">
|
||||||
|
<value>What do you want VPS to do when the physical shuts down?</value>
|
||||||
|
</data>
|
||||||
|
<data name="locSubnetMask.Text" xml:space="preserve">
|
||||||
|
<value>Subnet Mask:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locVhd.Text" xml:space="preserve">
|
||||||
|
<value>Virtual Hard Drive</value>
|
||||||
|
</data>
|
||||||
|
<data name="locVpsFolderIncludes.Text" xml:space="preserve">
|
||||||
|
<value>VPS folder includes:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locVpsRootFolder.Text" xml:space="preserve">
|
||||||
|
<value>VPS root folder:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlPrivateNetworkFormat10.Text" xml:space="preserve">
|
||||||
|
<value>10.0.0.1/8</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlPrivateNetworkFormat172.Text" xml:space="preserve">
|
||||||
|
<value>172.16.0.1/12</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlPrivateNetworkFormat192.Text" xml:space="preserve">
|
||||||
|
<value>192.168.0.1/16</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioStartActionAlwaysStart.Text" xml:space="preserve">
|
||||||
|
<value>Always start VPS automatically</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioStartActionNothing.Text" xml:space="preserve">
|
||||||
|
<value>Nothing</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioStartActionStart.Text" xml:space="preserve">
|
||||||
|
<value>Automatically start if it was running when the service stopped</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioStopActionSave.Text" xml:space="preserve">
|
||||||
|
<value>Save VPS state</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioStopActionShutDown.Text" xml:space="preserve">
|
||||||
|
<value>Shut down VPS operating system</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioStopActionTurnOff.Text" xml:space="preserve">
|
||||||
|
<value>Turn off VPS</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioVirtualDiskTypeDynamic.Text" xml:space="preserve">
|
||||||
|
<value>Dynamically expanding</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioVirtualDiskTypeFixed.Text" xml:space="preserve">
|
||||||
|
<value>Fixed size</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioVpsFolderIncludesID.Text" xml:space="preserve">
|
||||||
|
<value>VPS identifier, for example "843FA-A0B2-34404"</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioVpsFolderIncludesName.Text" xml:space="preserve">
|
||||||
|
<value>VPS host name, for example "vps1.domain.com"</value>
|
||||||
|
</data>
|
||||||
|
<data name="RootFolderValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter VPS root folder</value>
|
||||||
|
</data>
|
||||||
|
<data name="StartupDelayValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Startup delay could not be blank</value>
|
||||||
|
</data>
|
||||||
|
<data name="SubnetMaskValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter subnet mask</value>
|
||||||
|
</data>
|
||||||
|
<data name="TemplatesPathValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter OS templates folder</value>
|
||||||
|
</data>
|
||||||
|
<data name="CpuLimitValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter processor limit per VPS</value>
|
||||||
|
</data>
|
||||||
|
<data name="CpuReserveValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter processor reserve per VPS</value>
|
||||||
|
</data>
|
||||||
|
<data name="CpuWeightValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter relative processor weight per VPS</value>
|
||||||
|
</data>
|
||||||
|
<data name="locCpuLimit.Text" xml:space="preserve">
|
||||||
|
<value>Virtual machine limit:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locCpuReserve.Text" xml:space="preserve">
|
||||||
|
<value>Virtual machine reserve:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locCpuWeight.Text" xml:space="preserve">
|
||||||
|
<value>Relative weight:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locFolderVariables.Text" xml:space="preserve">
|
||||||
|
<value>The following variables are supported: [VPS_HOSTNAME], [USERNAME], [USER_ID], [SPACE_ID]</value>
|
||||||
|
</data>
|
||||||
|
<data name="locProcessorSettings.Text" xml:space="preserve">
|
||||||
|
<value>Processor Resource Settings</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnConnect.Text" xml:space="preserve">
|
||||||
|
<value>Connect</value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorReadingNetworksList.Text" xml:space="preserve">
|
||||||
|
<value><Cannot read networks list></value>
|
||||||
|
</data>
|
||||||
|
<data name="locErrorReadingNetworksList.Text" xml:space="preserve">
|
||||||
|
<value><br/><b>Unable to connect to Hyper-V server</b><br/><br/>Possible reasons:<ol><li>You are going to manage remote Hyper-V server (either Server Core or Hyper-V Server 2008 machine) where WebsitePanel Server is not installed. Type the correct server name at the top of this form and then click "Connect" button.</li><li>WebsitePanel Server has insufficient permissions to connect remote Hyper-V server. Please refer administrator guide for client and server setup instructions.</li><li>Lost connectivity with WebsitePanel Server installed on Hyper-V virtualization server. Check connectivity and open service properties page once again.</li></ol></value>
|
||||||
|
</data>
|
||||||
|
<data name="locHyperVServer.Text" xml:space="preserve">
|
||||||
|
<value>Hyper-V Server</value>
|
||||||
|
</data>
|
||||||
|
<data name="locServerName.Text" xml:space="preserve">
|
||||||
|
<value>Server name:</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioServerLocal.Text" xml:space="preserve">
|
||||||
|
<value><b>Local</b> - Hyper-V role is installed on this server</value>
|
||||||
|
</data>
|
||||||
|
<data name="radioServerRemote.Text" xml:space="preserve">
|
||||||
|
<value><b>Remote</b> - Remote Windows 2008 Server Core or Hyper-V Server 2008</value>
|
||||||
|
</data>
|
||||||
|
<data name="ServerNameValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter server name</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlManagementNetworks.Text" xml:space="preserve">
|
||||||
|
<value><Do not connect VPS to Management Network></value>
|
||||||
|
</data>
|
||||||
|
<data name="locManagementNetwork.Text" xml:space="preserve">
|
||||||
|
<value>Management Network</value>
|
||||||
|
</data>
|
||||||
|
<data name="locManagementNetworkName.Text" xml:space="preserve">
|
||||||
|
<value>Connect to Network:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlManageNicConfigDhcp.Text" xml:space="preserve">
|
||||||
|
<value>DHCP</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlManageNicConfigPool.Text" xml:space="preserve">
|
||||||
|
<value>IP Addresses Pool</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlPrivateNetworkFormatCustom.Text" xml:space="preserve">
|
||||||
|
<value>Custom</value>
|
||||||
|
</data>
|
||||||
|
<data name="locManageNicConfig.Text" xml:space="preserve">
|
||||||
|
<value>Network Card Configuration:</value>
|
||||||
|
</data>
|
||||||
|
<data name="locPrivCustomFormat.Text" xml:space="preserve">
|
||||||
|
<value>IP Address / CIDR:</value>
|
||||||
|
</data>
|
||||||
|
<data name="privateSubnetMaskValidator.ErrorMessage" xml:space="preserve">
|
||||||
|
<value>Enter subnet mask in CIDR format</value>
|
||||||
|
</data>
|
||||||
|
<data name="chkAssignIPAutomatically.Text" xml:space="preserve">
|
||||||
|
<value>Automatically assign IP addresses to the space on creation</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblCoreSvcEndpoint.Text" xml:space="preserve">
|
||||||
|
<value>Core Svc Endpoint</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCCMEndPoint.Text" xml:space="preserve">
|
||||||
|
<value>SCCM Endpoint</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCCMServer.Text" xml:space="preserve">
|
||||||
|
<value>SCCM Server</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCDPMEndPoint.Text" xml:space="preserve">
|
||||||
|
<value>SCDPM Endpoint</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCDPMServer.Text" xml:space="preserve">
|
||||||
|
<value>SCDPM Server</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCOMEndPoint.Text" xml:space="preserve">
|
||||||
|
<value>SCOM Endpoint</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCOMServer.Text" xml:space="preserve">
|
||||||
|
<value>SCOM Server</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCVMMEndPoint.Text" xml:space="preserve">
|
||||||
|
<value>SCVMM Endpoint</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSCVMMServer.Text" xml:space="preserve">
|
||||||
|
<value>SCVMM Server</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblStorageEndPoint.Text" xml:space="preserve">
|
||||||
|
<value>Storage Endpoint</value>
|
||||||
|
</data>
|
||||||
|
<data name="locHyperVCloud.Text" xml:space="preserve">
|
||||||
|
<value>Hyper-V Cloud</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,408 @@
|
||||||
|
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="HyperV2012R2_Settings.ascx.cs" Inherits="WebsitePanel.Portal.ProviderControls.HyperV2012R2_Settings" %>
|
||||||
|
<%@ Register Src="../UserControls/EditIPAddressControl.ascx" TagName="EditIPAddressControl" TagPrefix="wsp" %>
|
||||||
|
|
||||||
|
<asp:ValidationSummary ID="ValidationSummary" runat="server" ShowMessageBox="true" ShowSummary="false" />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locHyperVServer" runat="server" meta:resourcekey="locHyperVServer" Text="Hyper-V Server"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<asp:RadioButtonList ID="radioServer" runat="server" AutoPostBack="true"
|
||||||
|
onselectedindexchanged="radioServer_SelectedIndexChanged">
|
||||||
|
<asp:ListItem Value="local" meta:resourcekey="radioServerLocal" Selected="True">Local</asp:ListItem>
|
||||||
|
<asp:ListItem Value="remote" meta:resourcekey="radioServerRemote">Remote</asp:ListItem>
|
||||||
|
</asp:RadioButtonList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="ServerNameRow" runat="server">
|
||||||
|
<td class="SubHead" style="padding-left:30px;" colspan="2">
|
||||||
|
<asp:Localize ID="locServerName" runat="server" meta:resourcekey="locServerName" Text="Server name:"></asp:Localize>
|
||||||
|
<asp:TextBox Width="200px" CssClass="NormalTextBox" Runat="server" ID="txtServerName"></asp:TextBox>
|
||||||
|
<asp:Button ID="btnConnect" runat="server" meta:resourcekey="btnConnect"
|
||||||
|
CssClass="Button1" Text="Connect" CausesValidation="false"
|
||||||
|
onclick="btnConnect_Click" />
|
||||||
|
|
||||||
|
<asp:RequiredFieldValidator ID="ServerNameValidator" runat="server" ControlToValidate="txtServerName"
|
||||||
|
Text="*" meta:resourcekey="ServerNameValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="ServerErrorRow" runat="server">
|
||||||
|
<td colspan="2">
|
||||||
|
<asp:Label ID="locErrorReadingNetworksList" runat="server"
|
||||||
|
meta:resourcekey="locErrorReadingNetworksList" ForeColor="Red"></asp:Label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locGeneralSettings" runat="server" meta:resourcekey="locGeneralSettings" Text="General Settings"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locVpsRootFolder" runat="server" meta:resourcekey="locVpsRootFolder" Text="VPS root folder:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="400px" CssClass="NormalTextBox" Runat="server" ID="txtVpsRootFolder"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="RootFolderValidator" runat="server" ControlToValidate="txtVpsRootFolder"
|
||||||
|
Text="*" meta:resourcekey="RootFolderValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locFolderVariables" runat="server" meta:resourcekey="locFolderVariables" Text="The following variables..."></asp:Localize>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locOSTemplatesPath" runat="server" meta:resourcekey="locOSTemplatesPath" Text="OS Templates path:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="300px" CssClass="NormalTextBox" Runat="server" ID="txtOSTemplatesPath"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="TemplatesPathValidator" runat="server" ControlToValidate="txtOSTemplatesPath"
|
||||||
|
Text="*" meta:resourcekey="TemplatesPathValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locExportedVpsPath" runat="server" meta:resourcekey="locExportedVpsPath" Text="Exported VPS path:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="300px" CssClass="NormalTextBox" Runat="server" ID="txtExportedVpsPath"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="ExportedVpsPathValidator" runat="server" ControlToValidate="txtExportedVpsPath"
|
||||||
|
Text="*" meta:resourcekey="ExportedVpsPathValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locProcessorSettings" runat="server" meta:resourcekey="locProcessorSettings" Text="Processor Resource Settings"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locCpuReserve" runat="server" meta:resourcekey="locCpuReserve" Text="Virtual machine reserve:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="50px" CssClass="NormalTextBox" Runat="server" ID="txtCpuReserve"></asp:TextBox>
|
||||||
|
%
|
||||||
|
<asp:RequiredFieldValidator ID="CpuReserveValidator" runat="server" ControlToValidate="txtCpuReserve"
|
||||||
|
Text="*" meta:resourcekey="CpuReserveValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locCpuLimit" runat="server" meta:resourcekey="locCpuLimit" Text="Virtual machine limit:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="50px" CssClass="NormalTextBox" Runat="server" ID="txtCpuLimit"></asp:TextBox>
|
||||||
|
%
|
||||||
|
<asp:RequiredFieldValidator ID="CpuLimitValidator" runat="server" ControlToValidate="txtCpuLimit"
|
||||||
|
Text="*" meta:resourcekey="CpuLimitValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locCpuWeight" runat="server" meta:resourcekey="locCpuWeight" Text="Relative weight:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="50px" CssClass="NormalTextBox" Runat="server" ID="txtCpuWeight"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="CpuWeightValidator" runat="server" ControlToValidate="txtCpuWeight"
|
||||||
|
Text="*" meta:resourcekey="CpuWeightValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locMediaLibrary" runat="server" meta:resourcekey="locMediaLibrary" Text="DVD Media Library"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locDvdIsoPath" runat="server" meta:resourcekey="locDvdIsoPath" Text="Path to DVD ISO files:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="300px" CssClass="NormalTextBox" Runat="server" ID="txtDvdLibraryPath"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="DvdLibraryPathValidator" runat="server" ControlToValidate="txtDvdLibraryPath"
|
||||||
|
Text="*" meta:resourcekey="DvdLibraryPathValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locVhd" runat="server" meta:resourcekey="locVhd" Text="Virtual Hard Drive"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;" valign="top">
|
||||||
|
<asp:Localize ID="locDiskType" runat="server" meta:resourcekey="locDiskType" Text="Disk Type:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:RadioButtonList ID="radioVirtualDiskType" runat="server">
|
||||||
|
<asp:ListItem Value="dynamic" meta:resourcekey="radioVirtualDiskTypeDynamic" Selected="True">Dynamic</asp:ListItem>
|
||||||
|
<asp:ListItem Value="fixed" meta:resourcekey="radioVirtualDiskTypeFixed">Fixed</asp:ListItem>
|
||||||
|
</asp:RadioButtonList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locExternalNetwork" runat="server" meta:resourcekey="locExternalNetwork" Text="External Network"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locExternalNetworkName" runat="server" meta:resourcekey="locExternalNetworkName" Text="Connect to Network:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:DropDownList ID="ddlExternalNetworks" runat="server" CssClass="NormalTextBox" Width="450"
|
||||||
|
DataValueField="SwitchId" DataTextField="Name"></asp:DropDownList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locPreferredNameServer" runat="server" meta:resourcekey="locPreferredNameServer" Text="Preferred Name Server:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="externalPreferredNameServer" runat="server" Required="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locAlternateNameServer" runat="server" meta:resourcekey="locAlternateNameServer" Text="Alternate Name Server:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="externalAlternateNameServer" runat="server" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<asp:CheckBox ID="chkAssignIPAutomatically" runat="server" meta:resourcekey="chkAssignIPAutomatically" Text="Assign IP addresses to the space on creation" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<asp:UpdatePanel ID="ManageUpdatePanel" runat="server" ChildrenAsTriggers="true">
|
||||||
|
<ContentTemplate>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locManagementNetwork" runat="server" meta:resourcekey="locManagementNetwork" Text="Management Network"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td style="width:200px;">
|
||||||
|
<asp:Localize ID="locManagementNetworkName" runat="server" meta:resourcekey="locManagementNetworkName" Text="Connect to Network:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:DropDownList ID="ddlManagementNetworks" runat="server"
|
||||||
|
CssClass="NormalTextBox" Width="450"
|
||||||
|
DataValueField="SwitchId" DataTextField="Name" AutoPostBack="true"
|
||||||
|
onselectedindexchanged="ddlManagementNetworks_SelectedIndexChanged"></asp:DropDownList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="ManageNicConfigRow" runat="server">
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locManageNicConfig" runat="server" meta:resourcekey="locManageNicConfig" Text="Network Adapter Configuration:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:DropDownList ID="ddlManageNicConfig" runat="server" AutoPostBack="true"
|
||||||
|
onselectedindexchanged="ddlManageNicConfig_SelectedIndexChanged">
|
||||||
|
<asp:ListItem Value="Pool" meta:resourcekey="ddlManageNicConfigPool" Selected="True">POOL</asp:ListItem>
|
||||||
|
<asp:ListItem Value="DHCP" meta:resourcekey="ddlManageNicConfigDhcp">DHCP</asp:ListItem>
|
||||||
|
</asp:DropDownList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="ManagePreferredNameServerRow" runat="server">
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locManagePreferredNameServer" runat="server" meta:resourcekey="locPreferredNameServer" Text="Preferred Name Server:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="managePreferredNameServer" runat="server" Required="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="ManageAlternateNameServerRow" runat="server">
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locManageAlternateNameServer" runat="server" meta:resourcekey="locAlternateNameServer" Text="Alternate Name Server:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="manageAlternateNameServer" runat="server" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
</ContentTemplate>
|
||||||
|
</asp:UpdatePanel>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<asp:UpdatePanel ID="PrivUpdatePanel" runat="server" ChildrenAsTriggers="true">
|
||||||
|
<ContentTemplate>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locPrivateNetwork" runat="server" meta:resourcekey="locPrivateNetwork" Text="Private Network"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locIPFormat" runat="server" meta:resourcekey="locIPFormat" Text="IP addresses format:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:DropDownList ID="ddlPrivateNetworkFormat" runat="server"
|
||||||
|
AutoPostBack="true" onselectedindexchanged="ddlPrivateNetworkFormat_SelectedIndexChanged">
|
||||||
|
<asp:ListItem Value="" meta:resourcekey="ddlPrivateNetworkFormatCustom">Custom</asp:ListItem>
|
||||||
|
<asp:ListItem Value="192.168.0.1/16" meta:resourcekey="ddlPrivateNetworkFormat192" Selected="True">192.168.0.1</asp:ListItem>
|
||||||
|
<asp:ListItem Value="172.16.0.1/12" meta:resourcekey="ddlPrivateNetworkFormat172">172.16.0.1</asp:ListItem>
|
||||||
|
<asp:ListItem Value="10.0.0.1/8" meta:resourcekey="ddlPrivateNetworkFormat10">10.0.0.1</asp:ListItem>
|
||||||
|
</asp:DropDownList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="PrivCustomFormatRow" runat="server">
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locPrivCustomFormat" runat="server" meta:resourcekey="locPrivCustomFormat" Text="Start IP Address:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="privateIPAddress" runat="server" Required="true" />
|
||||||
|
/
|
||||||
|
<asp:TextBox ID="privateSubnetMask" runat="server" MaxLength="3" Width="40px" CssClass="NormalTextBox"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="privateSubnetMaskValidator" runat="server" ControlToValidate="privateSubnetMask"
|
||||||
|
Text="*" meta:resourcekey="privateSubnetMaskValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locPrivDefaultGateway" runat="server" meta:resourcekey="locDefaultGateway" Text="Default Gateway:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="privateDefaultGateway" runat="server" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locPrivPreferredNameServer" runat="server" meta:resourcekey="locPreferredNameServer" Text="Preferred Name Server:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="privatePreferredNameServer" runat="server" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead">
|
||||||
|
<asp:Localize ID="locPrivAlternateNameServer" runat="server" meta:resourcekey="locAlternateNameServer" Text="Alternate Name Server:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<wsp:EditIPAddressControl id="privateAlternateNameServer" runat="server" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
</ContentTemplate>
|
||||||
|
</asp:UpdatePanel>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locHostname" runat="server" meta:resourcekey="locHostname" Text="Host name"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;">
|
||||||
|
<asp:Localize ID="locHostnamePattern" runat="server" meta:resourcekey="locHostnamePattern" Text="VPS host name pattern:"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<asp:TextBox Width="200px" CssClass="NormalTextBox" Runat="server" ID="txtHostnamePattern"></asp:TextBox>
|
||||||
|
<asp:RequiredFieldValidator ID="HostnamePatternValidator" runat="server" ControlToValidate="txtHostnamePattern"
|
||||||
|
Text="*" meta:resourcekey="HostnamePatternValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p style="margin: 10px;">
|
||||||
|
<asp:Localize ID="locPatternText" runat="server" meta:resourcekey="locPatternText" Text="Help text goes here..."></asp:Localize>
|
||||||
|
</p>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locStartAction" runat="server" meta:resourcekey="locStartAction" Text="Automatic Start Action"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locStartOptionsText" runat="server" meta:resourcekey="locStartOptionsText" Text="What do you want VPS to do when the physical computer starts?"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<asp:RadioButtonList ID="radioStartAction" runat="server">
|
||||||
|
<asp:ListItem Value="0" meta:resourcekey="radioStartActionNothing">Nothing</asp:ListItem>
|
||||||
|
<asp:ListItem Value="1" meta:resourcekey="radioStartActionStart" Selected="True">Start</asp:ListItem>
|
||||||
|
<asp:ListItem Value="2" meta:resourcekey="radioStartActionAlwaysStart">AlwaysStart</asp:ListItem>
|
||||||
|
</asp:RadioButtonList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locStartupDelayText" runat="server" meta:resourcekey="locStartupDelayText" Text="Specify a startup delay to reduce resource contention between virtual machines."></asp:Localize>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locStartupDelay" runat="server" meta:resourcekey="locStartupDelay" Text="Startup delay:"></asp:Localize>
|
||||||
|
<asp:TextBox ID="txtStartupDelay" runat="server" Width="30px"></asp:TextBox>
|
||||||
|
<asp:Localize ID="locSeconds" runat="server" meta:resourcekey="locSeconds" Text="seconds"></asp:Localize>
|
||||||
|
<asp:RequiredFieldValidator ID="StartupDelayValidator" runat="server" ControlToValidate="txtStartupDelay"
|
||||||
|
Text="*" meta:resourcekey="StartupDelayValidator" Display="Dynamic" SetFocusOnError="true" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<asp:Localize ID="locStopAction" runat="server" meta:resourcekey="locStopAction" Text="Automatic Stop Action"></asp:Localize>
|
||||||
|
</legend>
|
||||||
|
|
||||||
|
<table cellpadding="2" cellspacing="0" width="100%" style="margin: 10px;">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<asp:Localize ID="locStopActionText" runat="server" meta:resourcekey="locStopActionText" Text="What do you want VPS to do when the physical shuts down?"></asp:Localize>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<asp:RadioButtonList ID="radioStopAction" runat="server">
|
||||||
|
<asp:ListItem Value="1" meta:resourcekey="radioStopActionSave">Save</asp:ListItem>
|
||||||
|
<asp:ListItem Value="0" meta:resourcekey="radioStopActionTurnOff">TurnOff</asp:ListItem>
|
||||||
|
<asp:ListItem Value="2" meta:resourcekey="radioStopActionShutDown" Selected="True">ShutDown</asp:ListItem>
|
||||||
|
</asp:RadioButtonList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
|
@ -0,0 +1,227 @@
|
||||||
|
// Copyright (c) 2015, Outercurve Foundation.
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from this
|
||||||
|
// software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// 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;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.Data;
|
||||||
|
using System.Web;
|
||||||
|
using System.Web.Security;
|
||||||
|
using System.Web.UI;
|
||||||
|
using System.Web.UI.HtmlControls;
|
||||||
|
using System.Web.UI.WebControls;
|
||||||
|
using System.Web.UI.WebControls.WebParts;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
using WebsitePanel.Providers.Virtualization;
|
||||||
|
using WebsitePanel.EnterpriseServer;
|
||||||
|
using System.Web.UI.MobileControls;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace WebsitePanel.Portal.ProviderControls
|
||||||
|
{
|
||||||
|
public partial class HyperV2012R2_Settings : WebsitePanelControlBase, IHostingServiceProviderSettings
|
||||||
|
{
|
||||||
|
protected void Page_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHostingServiceProviderSettings.BindSettings(StringDictionary settings)
|
||||||
|
{
|
||||||
|
txtServerName.Text = settings["ServerName"];
|
||||||
|
radioServer.SelectedIndex = (txtServerName.Text == "") ? 0 : 1;
|
||||||
|
|
||||||
|
// bind networks
|
||||||
|
BindNetworksList();
|
||||||
|
|
||||||
|
// general settings
|
||||||
|
txtVpsRootFolder.Text = settings["RootFolder"];
|
||||||
|
txtOSTemplatesPath.Text = settings["OsTemplatesPath"];
|
||||||
|
txtExportedVpsPath.Text = settings["ExportedVpsPath"];
|
||||||
|
|
||||||
|
// CPU
|
||||||
|
txtCpuLimit.Text = settings["CpuLimit"];
|
||||||
|
txtCpuReserve.Text = settings["CpuReserve"];
|
||||||
|
txtCpuWeight.Text = settings["CpuWeight"];
|
||||||
|
|
||||||
|
// DVD library
|
||||||
|
txtDvdLibraryPath.Text = settings["DvdLibraryPath"];
|
||||||
|
|
||||||
|
// VHD type
|
||||||
|
radioVirtualDiskType.SelectedValue = settings["VirtualDiskType"];
|
||||||
|
|
||||||
|
// External network
|
||||||
|
ddlExternalNetworks.SelectedValue = settings["ExternalNetworkId"];
|
||||||
|
externalPreferredNameServer.Text = settings["ExternalPreferredNameServer"];
|
||||||
|
externalAlternateNameServer.Text = settings["ExternalAlternateNameServer"];
|
||||||
|
chkAssignIPAutomatically.Checked = Utils.ParseBool(settings["AutoAssignExternalIP"], true);
|
||||||
|
|
||||||
|
// Private network
|
||||||
|
ddlPrivateNetworkFormat.SelectedValue = settings["PrivateNetworkFormat"];
|
||||||
|
privateIPAddress.Text = settings["PrivateIPAddress"];
|
||||||
|
privateSubnetMask.Text = settings["PrivateSubnetMask"];
|
||||||
|
privateDefaultGateway.Text = settings["PrivateDefaultGateway"];
|
||||||
|
privatePreferredNameServer.Text = settings["PrivatePreferredNameServer"];
|
||||||
|
privateAlternateNameServer.Text = settings["PrivateAlternateNameServer"];
|
||||||
|
|
||||||
|
// Management network
|
||||||
|
ddlManagementNetworks.SelectedValue = settings["ManagementNetworkId"];
|
||||||
|
ddlManageNicConfig.SelectedValue = settings["ManagementNicConfig"];
|
||||||
|
managePreferredNameServer.Text = settings["ManagementPreferredNameServer"];
|
||||||
|
manageAlternateNameServer.Text = settings["ManagementAlternateNameServer"];
|
||||||
|
|
||||||
|
// host name
|
||||||
|
txtHostnamePattern.Text = settings["HostnamePattern"];
|
||||||
|
|
||||||
|
// start action
|
||||||
|
radioStartAction.SelectedValue = settings["StartAction"];
|
||||||
|
txtStartupDelay.Text = settings["StartupDelay"];
|
||||||
|
|
||||||
|
// stop
|
||||||
|
radioStopAction.SelectedValue = settings["StopAction"];
|
||||||
|
|
||||||
|
ToggleControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHostingServiceProviderSettings.SaveSettings(StringDictionary settings)
|
||||||
|
{
|
||||||
|
settings["ServerName"] = txtServerName.Text.Trim();
|
||||||
|
|
||||||
|
// general settings
|
||||||
|
settings["RootFolder"] = txtVpsRootFolder.Text.Trim();
|
||||||
|
settings["OsTemplatesPath"] = txtOSTemplatesPath.Text.Trim();
|
||||||
|
settings["ExportedVpsPath"] = txtExportedVpsPath.Text.Trim();
|
||||||
|
|
||||||
|
// CPU
|
||||||
|
settings["CpuLimit"] = txtCpuLimit.Text.Trim();
|
||||||
|
settings["CpuReserve"] = txtCpuReserve.Text.Trim();
|
||||||
|
settings["CpuWeight"] = txtCpuWeight.Text.Trim();
|
||||||
|
|
||||||
|
// DVD library
|
||||||
|
settings["DvdLibraryPath"] = txtDvdLibraryPath.Text.Trim();
|
||||||
|
|
||||||
|
// VHD type
|
||||||
|
settings["VirtualDiskType"] = radioVirtualDiskType.SelectedValue;
|
||||||
|
|
||||||
|
// External network
|
||||||
|
settings["ExternalNetworkId"] = ddlExternalNetworks.SelectedValue;
|
||||||
|
settings["ExternalPreferredNameServer"] = externalPreferredNameServer.Text;
|
||||||
|
settings["ExternalAlternateNameServer"] = externalAlternateNameServer.Text;
|
||||||
|
settings["AutoAssignExternalIP"] = chkAssignIPAutomatically.Checked.ToString();
|
||||||
|
|
||||||
|
// Private network
|
||||||
|
settings["PrivateNetworkFormat"] = ddlPrivateNetworkFormat.SelectedValue;
|
||||||
|
settings["PrivateIPAddress"] = ddlPrivateNetworkFormat.SelectedIndex == 0 ? privateIPAddress.Text : "";
|
||||||
|
settings["PrivateSubnetMask"] = ddlPrivateNetworkFormat.SelectedIndex == 0 ? privateSubnetMask.Text : "";
|
||||||
|
settings["PrivateDefaultGateway"] = privateDefaultGateway.Text;
|
||||||
|
settings["PrivatePreferredNameServer"] = privatePreferredNameServer.Text;
|
||||||
|
settings["PrivateAlternateNameServer"] = privateAlternateNameServer.Text;
|
||||||
|
|
||||||
|
// Management network
|
||||||
|
settings["ManagementNetworkId"] = ddlManagementNetworks.SelectedValue;
|
||||||
|
settings["ManagementNicConfig"] = ddlManageNicConfig.SelectedValue;
|
||||||
|
settings["ManagementPreferredNameServer"] = ddlManageNicConfig.SelectedIndex == 0 ? managePreferredNameServer.Text : "";
|
||||||
|
settings["ManagementAlternateNameServer"] = ddlManageNicConfig.SelectedIndex == 0 ? manageAlternateNameServer.Text : "";
|
||||||
|
|
||||||
|
// host name
|
||||||
|
settings["HostnamePattern"] = txtHostnamePattern.Text.Trim();
|
||||||
|
|
||||||
|
// start action
|
||||||
|
settings["StartAction"] = radioStartAction.SelectedValue;
|
||||||
|
settings["StartupDelay"] = Utils.ParseInt(txtStartupDelay.Text.Trim(), 0).ToString();
|
||||||
|
|
||||||
|
// stop
|
||||||
|
settings["StopAction"] = radioStopAction.SelectedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BindNetworksList()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
VirtualSwitch[] switches = ES.Services.VPS.GetExternalSwitches(PanelRequest.ServiceId, txtServerName.Text.Trim());
|
||||||
|
|
||||||
|
ddlExternalNetworks.DataSource = switches;
|
||||||
|
ddlExternalNetworks.DataBind();
|
||||||
|
|
||||||
|
ddlManagementNetworks.DataSource = switches;
|
||||||
|
ddlManagementNetworks.DataBind();
|
||||||
|
ddlManagementNetworks.Items.Insert(0, new ListItem(GetLocalizedString("ddlManagementNetworks.Text"), ""));
|
||||||
|
|
||||||
|
locErrorReadingNetworksList.Visible = false;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
ddlExternalNetworks.Items.Add(new ListItem(GetLocalizedString("ErrorReadingNetworksList.Text"), ""));
|
||||||
|
ddlManagementNetworks.Items.Add(new ListItem(GetLocalizedString("ErrorReadingNetworksList.Text"), ""));
|
||||||
|
locErrorReadingNetworksList.Visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ToggleControls()
|
||||||
|
{
|
||||||
|
ServerNameRow.Visible = (radioServer.SelectedIndex == 1);
|
||||||
|
|
||||||
|
if (radioServer.SelectedIndex == 0)
|
||||||
|
{
|
||||||
|
txtServerName.Text = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// private network
|
||||||
|
PrivCustomFormatRow.Visible = (ddlPrivateNetworkFormat.SelectedIndex == 0);
|
||||||
|
|
||||||
|
// management network
|
||||||
|
ManageNicConfigRow.Visible = (ddlManagementNetworks.SelectedIndex > 0);
|
||||||
|
ManageAlternateNameServerRow.Visible = ManageNicConfigRow.Visible && (ddlManageNicConfig.SelectedIndex == 0);
|
||||||
|
ManagePreferredNameServerRow.Visible = ManageNicConfigRow.Visible && (ddlManageNicConfig.SelectedIndex == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void radioServer_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ToggleControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void btnConnect_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
BindNetworksList();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ddlPrivateNetworkFormat_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ToggleControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ddlManageNicConfig_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ToggleControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ddlManagementNetworks_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ToggleControls();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,825 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace WebsitePanel.Portal.ProviderControls {
|
||||||
|
|
||||||
|
|
||||||
|
public partial class HyperV2012R2_Settings {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ValidationSummary control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locHyperVServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locHyperVServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// radioServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RadioButtonList radioServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ServerNameRow control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.HtmlControls.HtmlTableRow ServerNameRow;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locServerName control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locServerName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtServerName control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtServerName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// btnConnect control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Button btnConnect;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ServerNameValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator ServerNameValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ServerErrorRow control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.HtmlControls.HtmlTableRow ServerErrorRow;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locErrorReadingNetworksList control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label locErrorReadingNetworksList;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locGeneralSettings control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locGeneralSettings;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locVpsRootFolder control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locVpsRootFolder;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtVpsRootFolder control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtVpsRootFolder;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RootFolderValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator RootFolderValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locFolderVariables control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locFolderVariables;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locOSTemplatesPath control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locOSTemplatesPath;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtOSTemplatesPath control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtOSTemplatesPath;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// TemplatesPathValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator TemplatesPathValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locExportedVpsPath control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locExportedVpsPath;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtExportedVpsPath control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtExportedVpsPath;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ExportedVpsPathValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator ExportedVpsPathValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locProcessorSettings control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locProcessorSettings;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locCpuReserve control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locCpuReserve;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtCpuReserve control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtCpuReserve;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CpuReserveValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator CpuReserveValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locCpuLimit control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locCpuLimit;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtCpuLimit control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtCpuLimit;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CpuLimitValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator CpuLimitValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locCpuWeight control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locCpuWeight;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtCpuWeight control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtCpuWeight;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CpuWeightValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator CpuWeightValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locMediaLibrary control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locMediaLibrary;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locDvdIsoPath control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locDvdIsoPath;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtDvdLibraryPath control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtDvdLibraryPath;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DvdLibraryPathValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator DvdLibraryPathValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locVhd control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locVhd;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locDiskType control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locDiskType;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// radioVirtualDiskType control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RadioButtonList radioVirtualDiskType;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locExternalNetwork control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locExternalNetwork;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locExternalNetworkName control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locExternalNetworkName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ddlExternalNetworks control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.DropDownList ddlExternalNetworks;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPreferredNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPreferredNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// externalPreferredNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl externalPreferredNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locAlternateNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locAlternateNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// externalAlternateNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl externalAlternateNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// chkAssignIPAutomatically control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.CheckBox chkAssignIPAutomatically;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ManageUpdatePanel control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.UpdatePanel ManageUpdatePanel;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locManagementNetwork control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locManagementNetwork;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locManagementNetworkName control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locManagementNetworkName;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ddlManagementNetworks control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.DropDownList ddlManagementNetworks;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ManageNicConfigRow control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.HtmlControls.HtmlTableRow ManageNicConfigRow;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locManageNicConfig control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locManageNicConfig;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ddlManageNicConfig control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.DropDownList ddlManageNicConfig;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ManagePreferredNameServerRow control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.HtmlControls.HtmlTableRow ManagePreferredNameServerRow;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locManagePreferredNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locManagePreferredNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// managePreferredNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl managePreferredNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ManageAlternateNameServerRow control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.HtmlControls.HtmlTableRow ManageAlternateNameServerRow;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locManageAlternateNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locManageAlternateNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// manageAlternateNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl manageAlternateNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PrivUpdatePanel control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.UpdatePanel PrivUpdatePanel;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPrivateNetwork control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPrivateNetwork;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locIPFormat control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locIPFormat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ddlPrivateNetworkFormat control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.DropDownList ddlPrivateNetworkFormat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// PrivCustomFormatRow control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.HtmlControls.HtmlTableRow PrivCustomFormatRow;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPrivCustomFormat control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPrivCustomFormat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// privateIPAddress control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl privateIPAddress;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// privateSubnetMask control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox privateSubnetMask;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// privateSubnetMaskValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator privateSubnetMaskValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPrivDefaultGateway control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPrivDefaultGateway;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// privateDefaultGateway control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl privateDefaultGateway;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPrivPreferredNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPrivPreferredNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// privatePreferredNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl privatePreferredNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPrivAlternateNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPrivAlternateNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// privateAlternateNameServer control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EditIPAddressControl privateAlternateNameServer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locHostname control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locHostname;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locHostnamePattern control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locHostnamePattern;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtHostnamePattern control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtHostnamePattern;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// HostnamePatternValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator HostnamePatternValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locPatternText control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locPatternText;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locStartAction control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locStartAction;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locStartOptionsText control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locStartOptionsText;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// radioStartAction control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RadioButtonList radioStartAction;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locStartupDelayText control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locStartupDelayText;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locStartupDelay control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locStartupDelay;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtStartupDelay control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtStartupDelay;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locSeconds control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locSeconds;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// StartupDelayValidator control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RequiredFieldValidator StartupDelayValidator;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locStopAction control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locStopAction;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// locStopActionText control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize locStopActionText;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// radioStopAction control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.RadioButtonList radioStopAction;
|
||||||
|
}
|
||||||
|
}
|
|
@ -258,6 +258,13 @@
|
||||||
<Compile Include="ExchangeServer\UserControls\EnterpriseStorageOwaUsersList.ascx.designer.cs">
|
<Compile Include="ExchangeServer\UserControls\EnterpriseStorageOwaUsersList.ascx.designer.cs">
|
||||||
<DependentUpon>EnterpriseStorageOwaUsersList.ascx</DependentUpon>
|
<DependentUpon>EnterpriseStorageOwaUsersList.ascx</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="ProviderControls\HyperV2012R2_Settings.ascx.cs">
|
||||||
|
<DependentUpon>HyperV2012R2_Settings.ascx</DependentUpon>
|
||||||
|
<SubType>ASPXCodeBehind</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ProviderControls\HyperV2012R2_Settings.ascx.designer.cs">
|
||||||
|
<DependentUpon>HyperV2012R2_Settings.ascx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="VPS\ProviderControls\HyperV2012R2_Create.ascx.cs">
|
<Compile Include="VPS\ProviderControls\HyperV2012R2_Create.ascx.cs">
|
||||||
<DependentUpon>HyperV2012R2_Create.ascx</DependentUpon>
|
<DependentUpon>HyperV2012R2_Create.ascx</DependentUpon>
|
||||||
<SubType>ASPXCodeBehind</SubType>
|
<SubType>ASPXCodeBehind</SubType>
|
||||||
|
@ -4517,6 +4524,7 @@
|
||||||
<Content Include="ExchangeServer\ExchangeCheckDomainName.ascx" />
|
<Content Include="ExchangeServer\ExchangeCheckDomainName.ascx" />
|
||||||
<Content Include="ExchangeServer\UserControls\EnterpriseStorageEditFolderTabs.ascx" />
|
<Content Include="ExchangeServer\UserControls\EnterpriseStorageEditFolderTabs.ascx" />
|
||||||
<Content Include="ExchangeServer\UserControls\EnterpriseStorageOwaUsersList.ascx" />
|
<Content Include="ExchangeServer\UserControls\EnterpriseStorageOwaUsersList.ascx" />
|
||||||
|
<Content Include="ProviderControls\HyperV2012R2_Settings.ascx" />
|
||||||
<Content Include="VPS\ProviderControls\HyperV2012R2_Create.ascx" />
|
<Content Include="VPS\ProviderControls\HyperV2012R2_Create.ascx" />
|
||||||
<Content Include="ProviderControls\SmarterMail100_EditAccount.ascx" />
|
<Content Include="ProviderControls\SmarterMail100_EditAccount.ascx" />
|
||||||
<Content Include="ProviderControls\SmarterMail100_EditDomain.ascx" />
|
<Content Include="ProviderControls\SmarterMail100_EditDomain.ascx" />
|
||||||
|
@ -4570,6 +4578,9 @@
|
||||||
<Content Include="VPS\ProviderControls\App_LocalResources\HyperV2012R2_Create.ascx.resx">
|
<Content Include="VPS\ProviderControls\App_LocalResources\HyperV2012R2_Create.ascx.resx">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="ProviderControls\App_LocalResources\HyperV2012R2_Settings.ascx.resx">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Content>
|
||||||
<EmbeddedResource Include="RDS\App_LocalResources\RDSEditCollectionSettings.ascx.resx" />
|
<EmbeddedResource Include="RDS\App_LocalResources\RDSEditCollectionSettings.ascx.resx" />
|
||||||
<Content Include="RDSServersEditServer.ascx" />
|
<Content Include="RDSServersEditServer.ascx" />
|
||||||
<Content Include="RDS\AssignedRDSServers.ascx" />
|
<Content Include="RDS\AssignedRDSServers.ascx" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue