private static string UseOrGenerateMacAddress(VirtualMachineNetworkAdapterConfig adapterConfig, TypedPsObject <VirtualMachineInfo> vmInfo) { var result = adapterConfig.MacAddress; if (string.IsNullOrWhiteSpace(result)) { result = GenerateMacAddress(vmInfo.Value.Id, adapterConfig.Name); } return(result); }
public static async Task <Either <PowershellFailure, TypedPsObject <VirtualMachineInfo> > > NetworkAdapter( VirtualMachineNetworkAdapterConfig networkAdapterConfig, IPowershellEngine engine, TypedPsObject <VirtualMachineInfo> vmInfo, MachineConfig machineConfig, Func <string, Task> reportProgress) { var optionalAdapter = await GetOrCreateInfoAsync(vmInfo, i => i.NetworkAdapters, adapter => networkAdapterConfig.Name.Equals(adapter.Name, StringComparison.OrdinalIgnoreCase), async() => { await reportProgress($"Add Network Adapter: {networkAdapterConfig.Name}").ConfigureAwait(false); return(await engine.GetObjectsAsync <VMNetworkAdapter>(PsCommandBuilder.Create() .AddCommand("Add-VmNetworkAdapter") .AddParameter("Passthru") .AddParameter("VM", vmInfo.PsObject) .AddParameter("Name", networkAdapterConfig.Name) .AddParameter("StaticMacAddress", UseOrGenerateMacAddress(networkAdapterConfig, vmInfo)) .AddParameter("SwitchName", networkAdapterConfig.SwitchName)).ConfigureAwait(false)); }).ConfigureAwait(false); return(optionalAdapter.Map(_ => vmInfo.Recreate())); //optionalAdapter.Map(async (adapter) => //{ // if (!adapter.Value.Connected || adapter.Value.SwitchName != networkConfig.SwitchName) // { // await reportProgress($"Connect Network Adapter {adapter.Value.Name} to switch {networkConfig.SwitchName}").ConfigureAwait(false); // await engine.RunAsync( // PsCommandBuilder.Create().AddCommand("Connect-VmNetworkAdapter") // .AddParameter("VMNetworkAdapter", adapter.PsObject) // .AddParameter("SwitchName", networkConfig.SwitchName)).ConfigureAwait(false); // } //}); return(vmInfo.Recreate()); }