private async Task UpdatePodListAsync()

in WhackAMole.UWPClient/Models/WhackSpace.cs [197:246]


        private async Task UpdatePodListAsync()
        {
            await RefreshMoleState();
            var newList = await _adminService.GetPodsAsync();

            // This is to account for the fact that the management API is deployed as part
            // of the moleservice in Kubernetes.  As pods are killed, the management API may
            // become unavailable and we do not get a pod list.
            // Best fix is to break out the management API into its own container and 
            // Kubernetes service.  Add it to the todo list.... sigh.
            if (newList == null || newList.Count == 0) return;

            var currentList = from m in Moles select new KubePod { Name = m.MoleName };


            Debug.WriteLine("New Pods");
            var newPods = newList.Except(currentList, new KubePodComparer());
            foreach (var p in newPods)
            {
                if (!_removedList.Contains(p.Name) && p.Phase != "Pending")
                {
                    await CreateMoleAsync(p);
                    Debug.WriteLine($"\t{p.Name}");
                }
            }

            Debug.WriteLine("Deleted Pods");
            var deletedPods = currentList.Except(newList, new KubePodComparer());
            foreach (var p in deletedPods)
            {
                await RemoveMoleAsync(p.Name);
                Debug.WriteLine($"\t{p.Name}");
            }

            if (deletedPods.Count() == 0 && newPods.Count() == 0)
                _removedList.Clear();

            Debug.WriteLine("Updating Pod List: ");
            foreach (var p in newList)
            {
                var mole = (from m in Moles where m.MoleName == p.Name select m).SingleOrDefault();
                if (mole != null)
                {
                    mole.Phase = p.Phase;
                    Debug.WriteLine($"\t{mole.MoleName} - {mole.Phase}");
                }
            }


        }