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}");
}
}
}