websitepanel/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV-2012R2/Helpers/NetworkAdapterHelper.cs

104 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Text;
using System.Threading.Tasks;
namespace WebsitePanel.Providers.Virtualization
{
public static class NetworkAdapterHelper
{
#region Constants
private const string EXTERNAL_NETWORK_ADAPTER_NAME = "External Network Adapter";
private const string PRIVATE_NETWORK_ADAPTER_NAME = "Private Network Adapter";
private const string MANAGEMENT_NETWORK_ADAPTER_NAME = "Management Network Adapter";
#endregion
public static VirtualMachineNetworkAdapter[] Get(PowerShellManager powerShell, string vmName)
{
List<VirtualMachineNetworkAdapter> adapters = new List<VirtualMachineNetworkAdapter>();
Command cmd = new Command("Get-VMNetworkAdapter");
if (!string.IsNullOrEmpty(vmName)) cmd.Parameters.Add("VMName", vmName);
Collection<PSObject> result = powerShell.Execute(cmd, false);
if (result != null && result.Count > 0)
{
foreach (PSObject psAdapter in result)
{
VirtualMachineNetworkAdapter adapter = new VirtualMachineNetworkAdapter();
adapter.Name = psAdapter.GetString("Name");
adapter.MacAddress = psAdapter.GetString("MacAddress");
adapter.SwitchName = psAdapter.GetString("SwitchName");
adapters.Add(adapter);
}
}
return adapters.ToArray();
}
public static VirtualMachineNetworkAdapter Get(PowerShellManager powerShell, string vmName, string macAddress)
{
var adapters = Get(powerShell, vmName);
return adapters.FirstOrDefault(a => a.MacAddress == macAddress);
}
public static void Update(PowerShellManager powerShell, VirtualMachine vm, string switchId, string portName, string macAddress, string adapterName, bool legacyAdapter)
{
// External NIC
if (!vm.ExternalNetworkEnabled && !String.IsNullOrEmpty(vm.ExternalNicMacAddress))
{
// delete adapter
Delete(powerShell, vm.Name, vm.ExternalNicMacAddress);
vm.ExternalNicMacAddress = null; // reset MAC
}
else if (vm.ExternalNetworkEnabled && !String.IsNullOrEmpty(vm.ExternalNicMacAddress))
{
// add external adapter
Add(powerShell, vm.Name, vm.ExternalSwitchId, vm.ExternalNicMacAddress, EXTERNAL_NETWORK_ADAPTER_NAME, vm.LegacyNetworkAdapter);
}
// Private NIC
if (!vm.PrivateNetworkEnabled && !String.IsNullOrEmpty(vm.PrivateNicMacAddress))
{
Delete(powerShell, vm.Name, vm.PrivateNicMacAddress);
vm.PrivateNicMacAddress = null; // reset MAC
}
else if (vm.PrivateNetworkEnabled && !String.IsNullOrEmpty(vm.PrivateNicMacAddress))
{
Add(powerShell, vm.Name, vm.ExternalSwitchId, vm.ExternalNicMacAddress, PRIVATE_NETWORK_ADAPTER_NAME, vm.LegacyNetworkAdapter);
}
}
public static void Add(PowerShellManager powerShell, string vmName, string switchId, string macAddress, string adapterName, bool legacyAdapter)
{
//var dvd = Get(powerShell, vmName);
//Command cmd = new Command("Add-VMDvdDrive");
//cmd.Parameters.Add("VMName", vmName);
//cmd.Parameters.Add("ControllerNumber", dvd.ControllerNumber);
//cmd.Parameters.Add("ControllerLocation", dvd.ControllerLocation);
//powerShell.Execute(cmd, false);
}
public static void Delete(PowerShellManager powerShell, string vmName, string macAddress)
{
//var dvd = Get(powerShell, vmName);
//Command cmd = new Command("Add-VMDvdDrive");
//cmd.Parameters.Add("VMName", vmName);
//cmd.Parameters.Add("ControllerNumber", dvd.ControllerNumber);
//cmd.Parameters.Add("ControllerLocation", dvd.ControllerLocation);
//powerShell.Execute(cmd, false);
}
}
}