public void SyncInventory(object state) { TraceFactory.Logger.Debug($"Synchronizing VM inventory with {_vCenterUri.ToString()}."); List <VSphereVirtualMachine> serverVMs = new List <VSphereVirtualMachine>(); using (var vSphereController = new VSphereVMController(_vCenterUri, _credential)) { serverVMs.AddRange(vSphereController.GetVirtualMachines()); } TraceFactory.Logger.Debug($"Synchronizing {serverVMs.Count} virtual machines."); int updated = 0; using (AssetInventoryContext context = new AssetInventoryContext(_connectionString)) { List <FrameworkClient> inventoryVMs = context.FrameworkClients.ToList(); foreach (FrameworkClient inventoryVM in inventoryVMs) { VSphereVirtualMachine serverVM = serverVMs.FirstOrDefault(n => n.HostName == inventoryVM.FrameworkClientHostName); if (serverVM != null) { VMUsageState currentState = EnumUtil.GetByDescription <VMUsageState>(inventoryVM.UsageState); if (currentState != VMUsageState.Unavailable && currentState != VMUsageState.DoNotSchedule && string.IsNullOrEmpty(inventoryVM.SessionId)) { inventoryVM.PowerState = EnumUtil.GetDescription(GetPowerState(serverVM)); inventoryVM.UsageState = EnumUtil.GetDescription(GetUsageState(serverVM)); inventoryVM.LastUpdated = DateTime.Now; updated++; } } } context.SaveChanges(); } TraceFactory.Logger.Debug($"Synchronization complete. Updated {updated} virtual machines."); }
private static VSphereVirtualMachine GetVirtualMachine(VSphereVMController vSphereController, string hostName) { return(vSphereController.GetVirtualMachines().First(n => n.HostName.Equals(hostName, StringComparison.OrdinalIgnoreCase))); }