Make sure GetPodStatus can get statuses of all containers in a pod.
This commit is contained in:
		@@ -35,8 +35,9 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/kubelet/dockershim"
 | 
						"k8s.io/kubernetes/pkg/kubelet/dockershim"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/events"
 | 
						"k8s.io/kubernetes/pkg/kubelet/events"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/qos"
 | 
						"k8s.io/kubernetes/pkg/kubelet/qos"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/kubelet/types"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/kubelet/util/format"
 | 
						"k8s.io/kubernetes/pkg/kubelet/util/format"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/types"
 | 
						kubetypes "k8s.io/kubernetes/pkg/types"
 | 
				
			||||||
	utilruntime "k8s.io/kubernetes/pkg/util/runtime"
 | 
						utilruntime "k8s.io/kubernetes/pkg/util/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
						"k8s.io/kubernetes/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/term"
 | 
						"k8s.io/kubernetes/pkg/util/term"
 | 
				
			||||||
@@ -115,7 +116,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// getContainerLogsPath gets log path for container.
 | 
					// getContainerLogsPath gets log path for container.
 | 
				
			||||||
func getContainerLogsPath(containerName string, podUID types.UID) string {
 | 
					func getContainerLogsPath(containerName string, podUID kubetypes.UID) string {
 | 
				
			||||||
	return path.Join(podLogsRootDirectory, string(podUID), fmt.Sprintf("%s.log", containerName))
 | 
						return path.Join(podLogsRootDirectory, string(podUID), fmt.Sprintf("%s.log", containerName))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -345,10 +346,11 @@ func getTerminationMessage(status *runtimeApi.ContainerStatus, kubeStatus *kubec
 | 
				
			|||||||
	return message
 | 
						return message
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// getKubeletContainerStatuses gets all containers' status for the pod sandbox.
 | 
					// getPodContainerStatuses gets all containers' statuses for the pod.
 | 
				
			||||||
func (m *kubeGenericRuntimeManager) getKubeletContainerStatuses(podSandboxID string) ([]*kubecontainer.ContainerStatus, error) {
 | 
					func (m *kubeGenericRuntimeManager) getPodContainerStatuses(uid kubetypes.UID, name, namespace string) ([]*kubecontainer.ContainerStatus, error) {
 | 
				
			||||||
 | 
						// Select all containers of the given pod.
 | 
				
			||||||
	containers, err := m.runtimeService.ListContainers(&runtimeApi.ContainerFilter{
 | 
						containers, err := m.runtimeService.ListContainers(&runtimeApi.ContainerFilter{
 | 
				
			||||||
		PodSandboxId: &podSandboxID,
 | 
							LabelSelector: map[string]string{types.KubernetesPodUIDLabel: string(uid)},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		glog.Errorf("ListContainers error: %v", err)
 | 
							glog.Errorf("ListContainers error: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -876,15 +876,14 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp
 | 
				
			|||||||
			UID:       uid,
 | 
								UID:       uid,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	glog.V(4).Infof("getSandboxIDByPodUID got sandbox IDs %q for pod %q(UID:%q)", podSandboxIDs, podFullName, string(uid))
 | 
						glog.V(4).Infof("getSandboxIDByPodUID got sandbox IDs %q for pod %q", podSandboxIDs, podFullName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sandboxStatuses := make([]*runtimeApi.PodSandboxStatus, len(podSandboxIDs))
 | 
						sandboxStatuses := make([]*runtimeApi.PodSandboxStatus, len(podSandboxIDs))
 | 
				
			||||||
	containerStatuses := []*kubecontainer.ContainerStatus{}
 | 
					 | 
				
			||||||
	podIP := ""
 | 
						podIP := ""
 | 
				
			||||||
	for idx, podSandboxID := range podSandboxIDs {
 | 
						for idx, podSandboxID := range podSandboxIDs {
 | 
				
			||||||
		podSandboxStatus, err := m.runtimeService.PodSandboxStatus(podSandboxID)
 | 
							podSandboxStatus, err := m.runtimeService.PodSandboxStatus(podSandboxID)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			glog.Errorf("PodSandboxStatus for pod (uid:%v, name:%s, namespace:%s) error: %v", uid, name, namespace, err)
 | 
								glog.Errorf("PodSandboxStatus of sandbox %q for pod %q error: %v", podSandboxID, podFullName, err)
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sandboxStatuses[idx] = podSandboxStatus
 | 
							sandboxStatuses[idx] = podSandboxStatus
 | 
				
			||||||
@@ -893,13 +892,13 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp
 | 
				
			|||||||
		if idx == 0 && podSandboxStatus.GetState() == runtimeApi.PodSandBoxState_READY {
 | 
							if idx == 0 && podSandboxStatus.GetState() == runtimeApi.PodSandBoxState_READY {
 | 
				
			||||||
			podIP = m.determinePodSandboxIP(namespace, name, podSandboxStatus)
 | 
								podIP = m.determinePodSandboxIP(namespace, name, podSandboxStatus)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		statuses, err := m.getKubeletContainerStatuses(podSandboxID)
 | 
						// Get statuses of all containers visible in the pod.
 | 
				
			||||||
		if err != nil {
 | 
						containerStatuses, err := m.getPodContainerStatuses(uid, name, namespace)
 | 
				
			||||||
			glog.Errorf("getKubeletContainerStatuses for sandbox %s failed: %v", podSandboxID, err)
 | 
						if err != nil {
 | 
				
			||||||
			return nil, err
 | 
							glog.Errorf("getPodContainerStatuses for pod %q failed: %v", podFullName, err)
 | 
				
			||||||
		}
 | 
							return nil, err
 | 
				
			||||||
		containerStatuses = append(containerStatuses, statuses...)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &kubecontainer.PodStatus{
 | 
						return &kubecontainer.PodStatus{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user