// toPodStatus converts a podInfo type into an api.PodStatus type. func (p *podInfo) toPodStatus(pod *kubecontainer.Pod) api.PodStatus { var status api.PodStatus status.PodIP = p.ip // For now just make every container's state the same as the pod. for _, container := range pod.Containers { status.ContainerStatuses = append(status.ContainerStatuses, p.getContainerStatus(container)) } return status }
// makePodStatus constructs the pod status from the pod info and rkt info. func makePodStatus(pod *kubecontainer.Pod, podInfo *podInfo, rktInfo *rktInfo) api.PodStatus { var status api.PodStatus status.PodIP = podInfo.ip // For now just make every container's state the same as the pod. for _, container := range pod.Containers { containerStatus := makeContainerStatus(container, podInfo) containerStatus.RestartCount = rktInfo.restartCount status.ContainerStatuses = append(status.ContainerStatuses, containerStatus) } return status }
// convertStatusToAPIStatus creates an api PodStatus for the given pod from // the given internal pod status. It is purely transformative and does not // alter the kubelet state at all. func (kl *Kubelet) convertStatusToAPIStatus(pod *api.Pod, podStatus *kubecontainer.PodStatus) *api.PodStatus { var apiPodStatus api.PodStatus apiPodStatus.PodIP = podStatus.IP apiPodStatus.ContainerStatuses = kl.convertToAPIContainerStatuses( pod, podStatus, pod.Status.ContainerStatuses, pod.Spec.Containers, len(pod.Spec.InitContainers) > 0, false, ) apiPodStatus.InitContainerStatuses = kl.convertToAPIContainerStatuses( pod, podStatus, pod.Status.InitContainerStatuses, pod.Spec.InitContainers, len(pod.Spec.InitContainers) > 0, true, ) return &apiPodStatus }
// 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 }