diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index d95f4be1e3..bed79673f4 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -997,16 +997,31 @@ func (r *Runtime) GetPods(all bool) ([]*kubecontainer.Pod, error) { return nil, fmt.Errorf("couldn't list pods: %v", err) } - var pods []*kubecontainer.Pod + pods := make(map[types.UID]*kubecontainer.Pod) for _, pod := range listResp.Pods { pod, err := r.convertRktPod(pod) if err != nil { glog.Warningf("rkt: Cannot construct pod from unit file: %v.", err) continue } - pods = append(pods, pod) + + // Group pods together. + oldPod, found := pods[pod.ID] + if !found { + pods[pod.ID] = pod + continue + } + + oldPod.Containers = append(oldPod.Containers, pod.Containers...) } - return pods, nil + + // Convert map to list. + var result []*kubecontainer.Pod + for _, p := range pods { + result = append(result, p) + } + + return result, nil } // KillPod invokes 'systemctl kill' to kill the unit that runs the pod. diff --git a/pkg/kubelet/rkt/rkt_test.go b/pkg/kubelet/rkt/rkt_test.go index 7c4b3b5c73..901f2ec0de 100644 --- a/pkg/kubelet/rkt/rkt_test.go +++ b/pkg/kubelet/rkt/rkt_test.go @@ -409,7 +409,17 @@ func TestGetPods(t *testing.T) { []string{"img-id-11", "img-id-22"}, []string{"img-name-11", "img-name-22"}, []string{"10011", "10022"}, - []rktapi.AppState{rktapi.AppState_APP_STATE_RUNNING, rktapi.AppState_APP_STATE_EXITED}, + []rktapi.AppState{rktapi.AppState_APP_STATE_EXITED, rktapi.AppState_APP_STATE_EXITED}, + []int32{0, 0}, + ), + makeRktPod(rktapi.PodState_POD_STATE_EXITED, + "uuid-4004", "43", "guestbook", "default", + "10.10.10.44", "100000", "8", + []string{"app-11", "app-22"}, + []string{"img-id-11", "img-id-22"}, + []string{"img-name-11", "img-name-22"}, + []string{"10011", "10022"}, + []rktapi.AppState{rktapi.AppState_APP_STATE_RUNNING, rktapi.AppState_APP_STATE_RUNNING}, []int32{0, 0}, ), }, @@ -448,7 +458,7 @@ func TestGetPods(t *testing.T) { Image: "img-name-11", Hash: 10011, Created: 90000, - State: "running", + State: "exited", }, { ID: kubecontainer.BuildContainerID("rkt", "uuid-4003:app-22"), @@ -458,6 +468,22 @@ func TestGetPods(t *testing.T) { Created: 90000, State: "exited", }, + { + ID: kubecontainer.BuildContainerID("rkt", "uuid-4004:app-11"), + Name: "app-11", + Image: "img-name-11", + Hash: 10011, + Created: 100000, + State: "running", + }, + { + ID: kubecontainer.BuildContainerID("rkt", "uuid-4004:app-22"), + Name: "app-22", + Image: "img-name-22", + Hash: 10022, + Created: 100000, + State: "running", + }, }, }, },