private static UpdateInventoryCommand VmsToInventory(ISeq <TypedPsObject <MinimizedVirtualMachineInfo> > vms) { var inventory = vms.Map(vm => { var info = new MachineInfo { MachineId = vm.Value.Id, Status = InventoryConverter.MapVmInfoStatusToVmStatus(vm.Value.State), Name = vm.Value.Name, NetworkAdapters = vm.Value.NetworkAdapters?.Map(a => new VirtualMachineNetworkAdapterInfo { AdapterName = a.Name, VirtualSwitchName = a.SwitchName }).ToArray(), Networks = GetNetworksByAdapters(vm.Value.Id, vm.Value.NetworkAdapters) }; //info.IpV4Addresses = GetAddressesByFamily(vm, AddressFamily.InterNetwork); //info.IpV6Addresses = GetAddressesByFamily(vm, AddressFamily.InterNetworkV6); return(info); }).ToList(); return(new UpdateInventoryCommand { AgentName = Environment.MachineName, Inventory = inventory }); }
public static Task <Either <TL, Seq <TR> > > MapToEitherAsync <TL, TR, TEntry>(this ISeq <TEntry> sequence, Func <TEntry, Task <Either <TL, TR> > > mapperFunc) { return(sequence.Map(mapperFunc).ToImmutableArray() .Traverse(l => l) .Bind(e => { var enumerable = e as Either <TL, TR>[] ?? e.ToArray(); return enumerable.Lefts().HeadOrNone() .MatchAsync( Some: s => LeftAsync <TL, Seq <TR> >(s).ToEither(), None: () => RightAsync <TL, Seq <TR> >(enumerable.Rights().ToSeq()).ToEither()); })); }