// GetPodStatus retrieves the status of the pod, including the information of // all containers in the pod. Clients of this interface assume the containers // statuses in a pod always have a deterministic ordering (eg: sorted by name). func (r *runtime) GetPodStatus(pod *api.Pod) (*api.PodStatus, error) { podInfos, err := r.hyperClient.ListPods() if err != nil { glog.Errorf("Hyper: ListPods failed, error: %s", err) return nil, err } var status api.PodStatus podFullName := r.buildHyperPodFullName(string(pod.UID), string(pod.Name), string(pod.Namespace)) for _, podInfo := range podInfos { if podInfo.PodName != podFullName { continue } if len(podInfo.PodInfo.Status.PodIP) > 0 { status.PodIP = podInfo.PodInfo.Status.PodIP[0] } status.HostIP = podInfo.PodInfo.Status.HostIP status.Phase = api.PodPhase(podInfo.PodInfo.Status.Phase) status.Message = podInfo.PodInfo.Status.Message status.Reason = podInfo.PodInfo.Status.Reason for _, containerInfo := range podInfo.PodInfo.Status.Status { for _, container := range podInfo.PodInfo.Spec.Containers { if container.ContainerID == containerInfo.ContainerID { status.ContainerStatuses = append( status.ContainerStatuses, r.getContainerStatus(containerInfo, container.Image, container.ImageID)) } } } } glog.V(5).Infof("Hyper: get pod %s status %s", podFullName, status) return &status, nil }