Esempio n. 1
0
        static async Task <List <Pod> > GetPods(IKubernetes client, string clusterName, int timeoutSeconds)
        {
            V1PodList pods;
            var       newList = new List <Pod>();

            try
            {
                var task = client.ListPodForAllNamespacesAsync();
                if (await Task.WhenAny(task, Task.Delay(timeoutSeconds * 1000)) == task)
                {
                    pods = await task;
                }
                else
                {
                    Console.WriteLine($"Ignoring cluster: '{clusterName}': Timeout.");
                    return(newList);
                }
            }
            catch (Exception ex) when(ex is TaskCanceledException || ex is HttpOperationException || ex is HttpRequestException)
            {
                Console.WriteLine($"Ignoring cluster: '{clusterName}': {ex.Message}");
                return(newList);
            }

            foreach (var pod in pods.Items)
            {
                var newPod = new Pod();
                newPod.Name        = pod.Metadata.Name;
                newPod.Namespace   = pod.Metadata.NamespaceProperty;
                newPod.Cluster     = clusterName;
                newPod.Annotations = pod.Annotations()?.ToDictionary(t => t.Key, t => t.Value) ?? new Dictionary <string, string>();
                newPod.Labels      = pod.Labels()?.ToDictionary(t => t.Key, t => t.Value) ?? new Dictionary <string, string>();
                newPod.Status      = new Status
                {
                    Message           = pod.Status.Message,
                    Reason            = pod.Status.Reason,
                    StartTime         = pod.Status.StartTime ?? new DateTime(),
                    ContainerStatuses = pod.Status.ContainerStatuses?.Select(cs => new ContainerStatus
                    {
                        ContainerID  = cs.ContainerID,
                        Image        = cs.Image,
                        ImageID      = cs.ImageID,
                        Name         = cs.Name,
                        Ready        = cs.Ready,
                        RestartCount = cs.RestartCount,
                        Started      = cs.Started ?? false,
                        State        = new State
                        {
                            StateRunning = new StateRunning
                            {
                                StartedAt = cs.State.Running?.StartedAt ?? new DateTime()
                            },
                            StateTerminated = new StateTerminated
                            {
                                ContainerID = cs.State.Terminated?.ContainerID ?? string.Empty,
                                ExitCode    = cs.State.Terminated?.ExitCode ?? 0,
                                FinishedAt  = cs.State.Terminated?.FinishedAt ?? new DateTime(),
                                Message     = cs.State.Terminated?.Message ?? string.Empty,
                                Reason      = cs.State.Terminated?.Reason ?? string.Empty,
                                StartedAt   = cs.State.Terminated?.StartedAt ?? new DateTime()
                            },
                            StateWaiting = new StateWaiting
                            {
                                Message = cs.State.Waiting?.Message ?? string.Empty,
                                Reason  = cs.State.Waiting?.Reason ?? string.Empty
                            }
                        }
                    })?.ToArray() ?? new ContainerStatus[] { }
                };
                newPod.Containers = pod.Spec.Containers.Select(c => new Container
                {
                    Args       = c.Args?.Select(a => a)?.ToArray() ?? new string[] { },
                    Command    = c.Command?.Select(c => c)?.ToArray() ?? new string[] { },
                    Image      = c.Image,
                    Name       = c.Name,
                    WorkingDir = c.WorkingDir
                }).ToArray();

                newList.Add(newPod);
            }

            return(newList);
        }
Esempio n. 2
0
 private static Pod ExcludeContainers(Pod pod, string[] excludeContainers)
 {
     pod.Containers = pod.Containers.Where(c => !excludeContainers.Any(ec => c.Name.Contains(ec, StringComparison.OrdinalIgnoreCase))).ToArray();
     return(pod);
 }