/// <summary> /// Gets the mapping output object for specified input without Override input value /// </summary> /// <param name="res">The mapping output object with input specifications</param> /// <returns> Returns the mapping output object for specified input without Override input value</returns> public static VMResult GetVMResultforMapwithoutOverride(VMResult res) { VMSpecs specsWithoutOverride = new VMSpecs() { InputOriginalValues = null, InstanceName = string.Empty, OperatingSystem = res.Specs.OperatingSystem, CPUCores = res.Specs.CPUCores, MemoryInMB = res.Specs.MemoryInMB, SSDStorageInGB = res.Specs.SSDStorageInGB, SSDNumOfDisks = res.Specs.SSDNumOfDisks, HDDStorageInGB = res.Specs.HDDStorageInGB, HDDNumOfDisks = res.Specs.HDDNumOfDisks, PricePerMonth = 0, AzureVMOverride = string.Empty, Comments = string.Empty, IsValid = true, ValidationMessage = string.Empty }; VMResult vmResWithoutInputOverride = new VMResult(specsWithoutOverride); vmResWithoutInputOverride.ProjAzureVM.PremiumDisks = res.ProjAzureVM.PremiumDisks; vmResWithoutInputOverride.ProjAzureVM.StandardDisks = res.ProjAzureVM.StandardDisks; return(vmResWithoutInputOverride); }
/// <summary> /// Validate Memory value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> /// <param name="isInputMemoryInGB">Value indicating if input memory is in GB or not</param> private static void ValidateMemory(VMSpecs inputVMSpecs, bool isInputMemoryInGB) { // Memory validation if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.Memory)) { double result = 0; if (double.TryParse(inputVMSpecs.InputOriginalValues.Memory, out result) && (result > 0)) { if (isInputMemoryInGB) { inputVMSpecs.MemoryInMB = 1024 * result; } else { inputVMSpecs.MemoryInMB = result; } } else { inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecNotAPositiveNumber, VMSpecLiterals.Memory); } } else { // Memory is blank inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.MissingSpec, VMSpecLiterals.Memory); } }
/// <summary> /// Generates the strings array for the output of VM Specs Sample file /// </summary> /// <param name="specs">Object containing the sample data for VM Specs</param> /// <param name="isOutputMemoryInGB">A value indicating if Memory is in GB or not</param> /// <returns> Returns the strings array for the output of VM Specs Sample file</returns> public static String[] UnloadVMSpecsSampleOutput(VMSpecs specs, bool isOutputMemoryInGB) { string[] outputVMSpecsStr = new string[NumberOfTotalColumnsVMResult]; try { // Write Input VM Specs including validation results columns int column = 0; outputVMSpecsStr[column++] = specs.InstanceName; outputVMSpecsStr[column++] = specs.OperatingSystem; outputVMSpecsStr[column++] = specs.CPUCores.ToString(); outputVMSpecsStr[column++] = isOutputMemoryInGB ? Math.Round(specs.MemoryInMB / 1024, 2).ToString() : Math.Round(specs.MemoryInMB, 2).ToString(); outputVMSpecsStr[column++] = Math.Round(specs.SSDStorageInGB, 2).ToString(); outputVMSpecsStr[column++] = specs.SSDNumOfDisks.ToString(); outputVMSpecsStr[column++] = Math.Round(specs.HDDStorageInGB, 2).ToString(); outputVMSpecsStr[column++] = specs.HDDNumOfDisks.ToString(); outputVMSpecsStr[column++] = Math.Round(specs.PricePerMonth, 2).ToString(); outputVMSpecsStr[column++] = specs.AzureVMOverride; outputVMSpecsStr[column++] = specs.Comments; } catch (Exception) { throw; } return(outputVMSpecsStr); }
/// <summary> /// Validate Azure VM SKU Override value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> private static void ValidateAzureVMOverride(VMSpecs inputVMSpecs) { if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.AzureVMOverride)) { inputVMSpecs.AzureVMOverride = inputVMSpecs.InputOriginalValues.AzureVMOverride.Length > Constants.MaxLengthAzureVMOverride ? inputVMSpecs.InputOriginalValues.AzureVMOverride.Substring(0, Constants.MaxLengthAzureVMOverride) : inputVMSpecs.InputOriginalValues.AzureVMOverride; } else { inputVMSpecs.AzureVMOverride = string.Empty; } }
/// <summary> /// Validate Instance name value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> private static void ValidateInstanceName(VMSpecs inputVMSpecs) { // Instance Name Validation if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.InstanceName)) { inputVMSpecs.InstanceName = inputVMSpecs.InputOriginalValues.InstanceName; } else { // Instance Name is blank inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.MissingSpec, VMSpecLiterals.InstanceName); } }
/// <summary> /// Get the Azure VM SKU cost /// </summary> /// <param name="vmListItem">The Azure VM SKU</param> /// <param name="specs">The input specifications</param> /// <returns> Returns the Azure VM SKU cost</returns> private static double GetAzureVMCost(AzureVMSizeListItem vmListItem, VMSpecs specs) { double rate = 0; try { AzureResourceInfo resourceInfo = AzureVMMeterHelper.GetAzureResourceInfoForAzureVM(vmListItem.Name, specs.OperatingSystem, location); rate = rateCalc.GetResourceRate(resourceInfo); } catch (Exception) { throw; } return(rate); }
/// <summary> /// Validate Comments value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> private static void ValidateComments(VMSpecs inputVMSpecs) { if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.Comments)) { if (inputVMSpecs.InputOriginalValues.Comments.Length <= Constants.MaxLengthComments) { inputVMSpecs.Comments = inputVMSpecs.InputOriginalValues.Comments; } else { inputVMSpecs.Comments = inputVMSpecs.InputOriginalValues.Comments.Substring(0, Constants.MaxLengthComments); inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecExceedsStringLimit, VMSpecLiterals.Comments, Constants.MaxLengthComments); } } else { inputVMSpecs.Comments = string.Empty; } }
/// <summary> /// Validate Price per month value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> private static void ValidatePricePerMonth(VMSpecs inputVMSpecs) { if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.PricePerMonth)) { double result = 0; if (double.TryParse(inputVMSpecs.InputOriginalValues.PricePerMonth, out result) && (result >= 0)) { inputVMSpecs.PricePerMonth = result; } else { inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecNotANumber, VMSpecLiterals.PricePerMonth); } } else { inputVMSpecs.PricePerMonth = 0; } }
/// <summary> /// Validate HDD Number of Disks value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> private static void ValidateHDDNumOfDisks(VMSpecs inputVMSpecs) { // Number of Data Disks Validation if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.HDDNumOfDisks)) { int result = 0; if (int.TryParse(inputVMSpecs.InputOriginalValues.HDDNumOfDisks, out result) && result >= 0) { inputVMSpecs.HDDNumOfDisks = result; } else { inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecNotANumber, VMSpecLiterals.HDDNumOfDisks); } } else { inputVMSpecs.HDDNumOfDisks = 0; } }
/// <summary> /// Get the validated virtual machine specifications for the data provided /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> /// <param name="isInputMemoryInGB">A value indicating if the Input memory values are in GB</param> /// <param name="os_WindowsList">The list of Windows OS keywords</param> /// <param name="os_LinuxList">The list of Linux OS keywords</param> /// <returns> Returns the validated virtual machine specifications</returns> public static VMSpecs ValidateVMSpecs(VMSpecs inputVMSpecs, bool isInputMemoryInGB, List <string> os_WindowsList, List <string> os_LinuxList) { VMSpecs validatedVMSpecs = null; try { inputVMSpecs.IsValid = true; ValidateInstanceName(inputVMSpecs); ValidateOperatingSystem(inputVMSpecs, os_WindowsList, os_LinuxList); ValidateCPUCores(inputVMSpecs); ValidateMemory(inputVMSpecs, isInputMemoryInGB); ValidateSSDStorageInGB(inputVMSpecs); ValidateSSDNumOfDisks(inputVMSpecs); ValidateHDDStorageInGB(inputVMSpecs); ValidateHDDNumOfDisks(inputVMSpecs); ValidatePricePerMonth(inputVMSpecs); ValidateAzureVMOverride(inputVMSpecs); ValidateComments(inputVMSpecs); if (!inputVMSpecs.IsValid) { inputVMSpecs.ValidationMessage = ValidationLiterals.SpecValidationFailed + inputVMSpecs.ValidationMessage; } // Check if last two chars is "; " and remove them if (inputVMSpecs.ValidationMessage.Length > 2 && inputVMSpecs.ValidationMessage.Substring(inputVMSpecs.ValidationMessage.Length - 2).Equals("; ")) { inputVMSpecs.ValidationMessage = inputVMSpecs.ValidationMessage.Remove(inputVMSpecs.ValidationMessage.Length - 2); } validatedVMSpecs = inputVMSpecs; } catch (Exception) { throw; } return(validatedVMSpecs); }
/// <summary> /// Validate Operating System value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> /// <param name="os_WindowsList">The list of Windows OS keywords</param> /// <param name="os_LinuxList">The list of Linux OS keywords</param> private static void ValidateOperatingSystem(VMSpecs inputVMSpecs, List <string> os_WindowsList, List <string> os_LinuxList) { // Operating System Validation if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.OperatingSystem)) { // Check if String is any of the "Windows" list - Case insensitive if (os_WindowsList.Any(x => inputVMSpecs.InputOriginalValues.OperatingSystem.Equals(x, StringComparison.OrdinalIgnoreCase))) { inputVMSpecs.OperatingSystem = Constants.OSWindows; } else if (os_LinuxList.Any(x => inputVMSpecs.InputOriginalValues.OperatingSystem.Equals(x, StringComparison.OrdinalIgnoreCase))) { // String is any of the "Linux" list - Case insensitive inputVMSpecs.OperatingSystem = Constants.OSLinux; } else if (os_WindowsList.Any(x => inputVMSpecs.InputOriginalValues.OperatingSystem.ToUpper().Contains(x.ToUpper()))) { // String CONTAINS any of the "Windows" list - Case insensitive inputVMSpecs.OperatingSystem = Constants.OSWindows; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecValueAssumed, VMSpecLiterals.OperatingSystem, inputVMSpecs.InputOriginalValues.OperatingSystem, Constants.OSWindows); } else if (os_LinuxList.Any(x => inputVMSpecs.InputOriginalValues.OperatingSystem.ToUpper().Contains(x.ToUpper()))) { // String CONTAINS any of the "Linux" list - Case insensitive inputVMSpecs.OperatingSystem = Constants.OSLinux; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecValueAssumed, VMSpecLiterals.OperatingSystem, inputVMSpecs.InputOriginalValues.OperatingSystem, Constants.OSLinux); } else { inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.InvalidSpec, VMSpecLiterals.OperatingSystem); } } else { // Operating System is blank inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.MissingSpec, VMSpecLiterals.OperatingSystem); } }
/// <summary> /// Maps the storage to managed disks /// </summary> /// <param name="specs">the object containing the input specifications</param> /// <param name="vmRes">the mapping output object</param> /// <param name="osDiskSSDSelection">The size of the OS Disk to be mapped if SSD</param> /// <param name="osDiskHDDSelection">The size of the OS Disk to be mapped if HDD</param> public static void MapStorage(VMSpecs specs, VMResult vmRes, string osDiskSSDSelection, string osDiskHDDSelection) { try { bool isOSDiskPremium = specs.SSDStorageInGB > 0 ? true : false; if (specs.SSDStorageInGB > 0) { vmRes.ProjAzureVM.PremiumDisks = MapStorageToManagedDisks(premiumManagedDiskList, specs.SSDStorageInGB, specs.SSDNumOfDisks, isOSDiskPremium); } if (specs.HDDStorageInGB > 0) { vmRes.ProjAzureVM.StandardDisks = MapStorageToManagedDisks(standardManagedDiskList, specs.HDDStorageInGB, specs.HDDNumOfDisks, !isOSDiskPremium); } if (isOSDiskPremium) { vmRes.ProjAzureVM.PremiumDisks = AddOSDisk(premiumManagedDiskList, vmRes.ProjAzureVM.PremiumDisks, osDiskSSDSelection); } else { vmRes.ProjAzureVM.StandardDisks = AddOSDisk(standardManagedDiskList, vmRes.ProjAzureVM.StandardDisks, osDiskHDDSelection); } if (vmRes.ProjAzureVM.PremiumDisks != null && vmRes.ProjAzureVM.PremiumDisks.Count > 0) { vmRes.ProjAzureVM.PremiumDisksStr = GetDiskListStr(vmRes.ProjAzureVM.PremiumDisks); } if (vmRes.ProjAzureVM.StandardDisks != null && vmRes.ProjAzureVM.StandardDisks.Count > 0) { vmRes.ProjAzureVM.StandardDisksStr = GetDiskListStr(vmRes.ProjAzureVM.StandardDisks); } } catch (Exception) { throw; } }
/// <summary> /// Validate CPU Cores value in Input specifications /// </summary> /// <param name="inputVMSpecs">The Input specifications</param> private static void ValidateCPUCores(VMSpecs inputVMSpecs) { // CPU Cores Validation if (!string.IsNullOrWhiteSpace(inputVMSpecs.InputOriginalValues.CPUCores)) { int result = 0; if (int.TryParse(inputVMSpecs.InputOriginalValues.CPUCores, out result) && (result > 0)) { inputVMSpecs.CPUCores = result; } if (result <= 0) { inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.SpecNotAPositiveInteger, VMSpecLiterals.CPUCores); } } else { // CPU Cores is blank inputVMSpecs.IsValid = false; inputVMSpecs.ValidationMessage += string.Format(ValidationLiterals.MissingSpec, VMSpecLiterals.CPUCores); } }
/// <summary> /// Converts the specified Input Specifications data that is in form of strings array to Input specifications object /// </summary> /// <param name="inputVMSpecsStr">String array containing the Input specifications</param> /// <param name="sequenceOfInputVMSpecs">Sequence of Input specifications in the input string array provided</param> /// <returns> Returns the Input specifications object with data loaded from the strings array</returns> public static VMSpecs LoadVMSpecs(string[] inputVMSpecsStr, VMSpecsSequenceId[] sequenceOfInputVMSpecs) { VMSpecs inputVMSpecs = null; try { VMSpecs vmSpecsObj = new VMSpecs(); for (int i = 0; i < sequenceOfInputVMSpecs.Count(); i++) { switch (sequenceOfInputVMSpecs[i]) { case VMSpecsSequenceId.InstanceName: vmSpecsObj.InputOriginalValues.InstanceName = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.OperatingSystem: vmSpecsObj.InputOriginalValues.OperatingSystem = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.CPUCores: vmSpecsObj.InputOriginalValues.CPUCores = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.MemoryInMB: vmSpecsObj.InputOriginalValues.Memory = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.SSDStorageInGB: vmSpecsObj.InputOriginalValues.SSDStorageInGB = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.SSDNumOfDisks: vmSpecsObj.InputOriginalValues.SSDNumOfDisks = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.HDDStorageInGB: vmSpecsObj.InputOriginalValues.HDDStorageInGB = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.HDDNumOfDisks: vmSpecsObj.InputOriginalValues.HDDNumOfDisks = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.PricePerMonth: vmSpecsObj.InputOriginalValues.PricePerMonth = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.AzureVMOverride: vmSpecsObj.InputOriginalValues.AzureVMOverride = inputVMSpecsStr[i]; break; case VMSpecsSequenceId.Comments: vmSpecsObj.InputOriginalValues.Comments = inputVMSpecsStr[i]; break; default: break; } } inputVMSpecs = vmSpecsObj; } catch (Exception) { throw; } return(inputVMSpecs); }