From 732adfd8cf1ff07fc1c9c62cb68cd99747101b91 Mon Sep 17 00:00:00 2001 From: Christopher York Date: Mon, 30 Mar 2015 11:42:42 -0600 Subject: [PATCH 1/7] Resolved issues with deleting VM on a remote computer --- .../HyperV2012R2.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs index cb14f1d2..7065e666 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs @@ -504,7 +504,7 @@ namespace WebsitePanel.Providers.Virtualization if (vm.State != VirtualMachineState.Saved && vm.State != VirtualMachineState.Off) throw new Exception("The virtual computer system must be in the powered off or saved state prior to calling Destroy method."); - // Delete network adapters and network switchesw + // Delete network adapters and network switches foreach (var networkAdapter in vm.Adapters) { NetworkAdapterHelper.Delete(PowerShell, vm.Name, networkAdapter); @@ -516,7 +516,7 @@ namespace WebsitePanel.Providers.Virtualization Command cmdSet = new Command("Remove-VM"); cmdSet.Parameters.Add("Name", vm.Name); cmdSet.Parameters.Add("Force"); - PowerShell.Execute(cmdSet, false, true); + PowerShell.Execute(cmdSet, true, true); return JobHelper.CreateSuccessResult(ReturnCode.JobStarted); } @@ -782,10 +782,11 @@ namespace WebsitePanel.Providers.Virtualization Command cmd = new Command("Get-VMSwitch"); - if (!string.IsNullOrEmpty(computerName)) cmd.Parameters.Add("ComputerName", computerName); + // Not needed as the PowerShellManager adds the computer name + //if (!string.IsNullOrEmpty(computerName)) cmd.Parameters.Add("ComputerName", computerName); if (!string.IsNullOrEmpty(type)) cmd.Parameters.Add("SwitchType", type); - Collection result = PowerShell.Execute(cmd, false, true); + Collection result = PowerShell.Execute(cmd, true, true); foreach (PSObject current in result) { From 14b28939bba67cc0027017bbbae07a97d7dd7ede Mon Sep 17 00:00:00 2001 From: Christopher York Date: Mon, 30 Mar 2015 11:54:06 -0600 Subject: [PATCH 2/7] Fixed issue where deleting a virtual machine also deletes the assigned switch This can cause issues if more than 1 VM are assigned to the same virtual switch --- .../HyperV2012R2.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs index 7065e666..cbefbb16 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs @@ -509,8 +509,10 @@ namespace WebsitePanel.Providers.Virtualization { NetworkAdapterHelper.Delete(PowerShell, vm.Name, networkAdapter); - if (!string.IsNullOrEmpty(networkAdapter.SwitchName)) - DeleteSwitch(networkAdapter.SwitchName); + // If more than 1 VM are assigned to the same switch, deleting the virtual machine also deletes the switch which takes other VM instances off line + // There may be a reason for this that I am not aware of? + //if (!string.IsNullOrEmpty(networkAdapter.SwitchName)) + //DeleteSwitch(networkAdapter.SwitchName); } Command cmdSet = new Command("Remove-VM"); From 11a3187ccdb634d7024069c3eec6e4ab211fe464 Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 30 Mar 2015 14:22:21 -0400 Subject: [PATCH 3/7] Added tag build-2.1.0.628 for changeset 4e1ff9709044 From 9a9ee5eccaf8ac0414928bf0fb93f0bf51183d3f Mon Sep 17 00:00:00 2001 From: Christopher York Date: Mon, 30 Mar 2015 14:30:44 -0600 Subject: [PATCH 4/7] Updated the GetVirtualMachineInternal to return the correct HDD and RAM usage using the WSP VMconfig service --- .../Constants.cs | 3 ++ .../HyperV2012R2.cs | 37 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Constants.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Constants.cs index b487d4cf..acdcf69c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Constants.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Constants.cs @@ -20,5 +20,8 @@ namespace WebsitePanel.Providers.Virtualization public const Int64 Size1G = 0x40000000; public const Int64 Size1M = 0x100000; + + public const string KVP_RAM_SUMMARY_KEY = "VM-RAM-Summary"; + public const string KVP_HDD_SUMMARY_KEY = "VM-HDD-Summary"; } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs index cbefbb16..311d99a5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/HyperV2012R2.cs @@ -152,7 +152,10 @@ namespace WebsitePanel.Providers.Virtualization vm.Name = result[0].GetProperty("Name").ToString(); vm.State = result[0].GetEnum("State"); vm.CpuUsage = ConvertNullableToInt32(result[0].GetProperty("CpuUsage")); - vm.RamUsage = Convert.ToInt32(ConvertNullableToInt64(result[0].GetProperty("MemoryAssigned")) / Constants.Size1M); + // This does not truly give the RAM usage, only the memory assigned to the VPS + // Lets handle detection of total memory and usage else where + //vm.RamUsage = Convert.ToInt32(ConvertNullableToInt64(result[0].GetProperty("MemoryAssigned")) / Constants.Size1M); + vm.RamSize = Convert.ToInt32(ConvertNullableToInt64(result[0].GetProperty("MemoryStartup")) / Constants.Size1M); vm.Uptime = Convert.ToInt64(result[0].GetProperty("UpTime").TotalMilliseconds); vm.Status = result[0].GetProperty("Status").ToString(); vm.ReplicationState = result[0].GetProperty("ReplicationState").ToString(); @@ -192,6 +195,38 @@ namespace WebsitePanel.Providers.Virtualization // network adapters vm.Adapters = NetworkAdapterHelper.Get(PowerShell, vm.Name); } + else + { + // Use the WebsitePanel VMConfig Windows service to get the RAM usage as well as the HDD usage / sizes + List vmKvps = GetKVPItems(vmId); + foreach (KvpExchangeDataItem vmKvp in vmKvps) + { + // RAM + if (vmKvp.Name == Constants.KVP_RAM_SUMMARY_KEY) + { + string[] ram = vmKvp.Data.Split(':'); + int freeRam = Int32.Parse(ram[0]); + int availRam = Int32.Parse(ram[1]); + + vm.RamUsage = availRam - freeRam; + } + + // HDD + if (vmKvp.Name == Constants.KVP_HDD_SUMMARY_KEY) + { + string[] disksArray = vmKvp.Data.Split(';'); + vm.HddLogicalDisks = new LogicalDisk[disksArray.Length]; + for (int i = 0; i < disksArray.Length; i++) + { + string[] disk = disksArray[i].Split(':'); + vm.HddLogicalDisks[i] = new LogicalDisk(); + vm.HddLogicalDisks[i].DriveLetter = disk[0]; + vm.HddLogicalDisks[i].FreeSpace = Int32.Parse(disk[1]); + vm.HddLogicalDisks[i].Size = Int32.Parse(disk[2]); + } + } + } + } } } catch (Exception ex) From 679fe04c2c2b0c9bc45f19db9a68f5c81c130701 Mon Sep 17 00:00:00 2001 From: Christopher York Date: Mon, 30 Mar 2015 15:13:41 -0600 Subject: [PATCH 5/7] Processor weights etc. are being calculated / set wrong which results in errors --- .../Helpers/VirtualMachineHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Helpers/VirtualMachineHelper.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Helpers/VirtualMachineHelper.cs index 30aad925..44cbeafe 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Helpers/VirtualMachineHelper.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Helpers/VirtualMachineHelper.cs @@ -77,8 +77,8 @@ namespace WebsitePanel.Providers.Virtualization cmd.Parameters.Add("VMName", vm.Name); cmd.Parameters.Add("Count", cpuCores); - cmd.Parameters.Add("Maximum", Convert.ToInt64(cpuLimitSettings * 1000)); - cmd.Parameters.Add("Reserve", Convert.ToInt64(cpuReserveSettings * 1000)); + cmd.Parameters.Add("Maximum", cpuLimitSettings); + cmd.Parameters.Add("Reserve", cpuReserveSettings); cmd.Parameters.Add("RelativeWeight", cpuWeightSettings); powerShell.Execute(cmd, true); From 94e226ccb8e6ea4f847a15c225b7f26691a164de Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 30 Mar 2015 17:27:32 -0400 Subject: [PATCH 6/7] Added tag build-2.1.0.629 for changeset 31eadd63efd5 From 678797ea3a4693b04b4831446f4f75fbd62b787a Mon Sep 17 00:00:00 2001 From: Virtuworks Date: Mon, 30 Mar 2015 18:20:35 -0400 Subject: [PATCH 7/7] Added tag build-2.1.0.630 for changeset d6c7e144125d